[PATCH] makedumpfile: Enable --mem-usage for s390x

bhe at redhat.com bhe at redhat.com
Tue Oct 14 00:42:57 PDT 2014


On 10/14/14 at 03:28pm, Baoquan He wrote:
> On 10/14/14 at 07:19am, Atsushi Kumagai wrote:
> > >> I think the Michael's first idea below is better since it implements
> > >> is_real_addr() only for --mem-usage as a common function for all
> > >> architectures, it's explicit design.
> > >>
> > >> >@@ -854,7 +854,7 @@ int get_kcore_dump_loads(void)
> > >> >
> > >> > 	for (i = 0; i < num_pt_loads; ++i) {
> > >> > 		struct pt_load_segment *p = &pt_loads[i];
> > >> >-		if (is_vmalloc_addr(p->virt_start))
> > >> >+		if (!is_real_addr(p->virt_start))
> > >> > 			continue;
> > >> > 		loads++;
> > >> > 	}
> > >>
> > >> However, this code will not work since the argument of is_real_addr()
> > >> must be physical address. Even unluckily, /proc/kcore's PT_LOAD looks
> > >> useless for VtoP converting because PhysAddr is always 0:
> > >>
> > >> Program Headers:
> > >>   Type           Offset             VirtAddr           PhysAddr
> > >>                  FileSiz            MemSiz              Flags  Align
> > >>   NOTE           0x00000000000002a8 0x0000000000000000 0x0000000000000000
> > >>                  0x0000000000000a84 0x0000000000000000         0
> > >>   LOAD           0x00007fffff601000 0xffffffffff600000 0x0000000000000000
> > >>                  0x0000000000001000 0x0000000000001000  RWE    1000
> > >>   LOAD           0x00007fff81001000 0xffffffff81000000 0x0000000000000000
> > >>                  0x0000000000a1b000 0x0000000000a1b000  RWE    1000
> > >>   LOAD           0x0000490000001000 0xffffc90000000000 0x0000000000000000
> > >>                  0x00001fffffffffff 0x00001fffffffffff  RWE    1000
> > >>   LOAD           0x00007fffa0001000 0xffffffffa0000000 0x0000000000000000
> > >>                  0x000000005f000000 0x000000005f000000  RWE    1000
> > >>   ...
> > >>
> > >>
> > >> So the way using /proc/iomem seems inappropriate, we have to consider other
> > >> approaches (but I still don't have any good ideas...)
> > >
> > >Hello Atsushi,
> > >
> > >Hmmm ok, sure. For x86 using /proc/iomem does not work because there is no 1:1
> > >mapping for the kernel address space. The kernel/real memory is mapped somewhere
> > >at the end, right?
> > 
> > Exactly.

Well, forget to say. I think x86 and x86_64 can use this way either.
Since they are also linear mapping though it's not 1:1 mapping. phys can
be converted to vrit by adding page_offset directly.


E.g x86_64, the PAGE_OFFSET is 0xffff880000000000, then I can very
easily pick the physical region just as be below the start marked.

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  NOTE           0x0000000000000318 0x0000000000000000
0x0000000000000000
                 0x0000000000000b54 0x0000000000000000         0
  LOAD           0x00007fffff601000 0xffffffffff600000
0x0000000000000000
                 0x0000000000001000 0x0000000000001000  RWE    1000
  LOAD           0x00007fff81001000 0xffffffff81000000
0x0000000000000000
                 0x0000000001633000 0x0000000001633000  RWE    1000
  LOAD           0x0000490000001000 0xffffc90000000000
0x0000000000000000
                 0x00001fffffffffff 0x00001fffffffffff  RWE    1000
  LOAD           0x00007fffa0001000 0xffffffffa0000000
0x0000000000000000
                 0x000000005f000000 0x000000005f000000  RWE    1000

*******
  LOAD           0x0000080000002000 0xffff880000001000
0x0000000000000000
                 0x000000000009c000 0x000000000009c000  RWE    1000
*******

  LOAD           0x00006a0000001000 0xffffea0000000000
0x0000000000000000
                 0x0000000000003000 0x0000000000003000  RWE    1000

*******
  LOAD           0x0000080000101000 0xffff880000100000
0x0000000000000000
                 0x000000007fef0000 0x000000007fef0000  RWE    1000
*******

  LOAD           0x00006a0000005000 0xffffea0000004000
0x0000000000000000
                 0x0000000001ffc000 0x0000000001ffc000  RWE    1000

**********
  LOAD           0x0000080080001000 0xffff880080000000
0x0000000000000000
                 0x000000004fee0000 0x000000004fee0000  RWE    1000
***********


  LOAD           0x00006a0002001000 0xffffea0002000000
0x0000000000000000
                 0x00000000013fc000 0x00000000013fc000  RWE    1000

***********
  LOAD           0x0000080100001000 0xffff880100000000
0x0000000000000000
                 0x0000000130000000 0x0000000130000000  RWE    1000
************


  LOAD           0x00006a0004001000 0xffffea0004000000
0x0000000000000000
                 0x0000000004c00000 0x0000000004c00000  RWE    1000




More information about the kexec mailing list