From: Baoquan He <bhe@redhat.com>
To: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Cc: kumagai-atsushi@mxc.nes.nec.co.jp, kexec@lists.infradead.org
Subject: Re: Add "--mem-usage" support for s390x
Date: Fri, 26 Sep 2014 16:55:46 +0800 [thread overview]
Message-ID: <20140926085546.GA30346@dhcp-16-116.nay.redhat.com> (raw)
In-Reply-To: <20140926101057.14549a12@holzheu>
On 09/26/14 at 10:10am, Michael Holzheu wrote:
> On Thu, 25 Sep 2014 17:44:12 +0800
> Baoquan He <bhe@redhat.com> wrote:
>
> > On 09/24/14 at 05:19pm, Michael Holzheu wrote:
> > > On Tue, 23 Sep 2014 10:40:58 +0800
> > > Baoquan He <bhe@redhat.com> wrote:
>
> [snip]
>
> > > For s390x this is not so easy because vmalloc_start is dependent
> > > on the memory size of the system (see setup_memory_end()
> > > in arch/s390/kernel/setup.c). Unfortunately "info->max_mapnr"
> > > is not set at that time.
> >
> > I am not aware of s390 arch and memory layout. But I can explain what
> > those versiondep_info are used for, hope they can help. In fact in
> > x86_64, page_offset is got for set_kcore_vmcoreinfo(), there the
> > vmcoreinfo_addr need be converted to kvaddr. Since vmcoreinfo_addr is a
> > physical addr, we can't use it directly. And
> > VMALLOC_START/VMEMMAP_START/MODULES_VADDR are all used to filter this
> > virtual addr space region since our vmcore only care about the physical
> > ram addr region.
> >
> > If you need get these before they are used for s390 arch. If necessary
> > you can build a different code flow if you can achive the goal. All
> > these are all used to get dumpable load segments from kcore.
>
> Isn't this a chicken-and-egg problem? In order to determine vmalloc start
> I have to be able to read memory. But in order to read memory I have
> to call get_kcore_dump_loads() first.
>
> What about using /proc/iomem to find out if an address is a real address?
Well, that's good it works for s390. Anyway in get_kcore_dump_loads() it
just gets the physical ram region, and filter out the unwanted region,
so your method is good. In x86_64, the is_vmalloc_addr_x86_64 is not
only filtering the vmalloc, but vmmemmap and modules_vaadr region. For
simplicity it's only named as is_vmalloc_addr. So I think you can wrap
this implementation into arch/s390x.c and name it as is_vmalloc_addr_s390x
just for being consistent with the x86_64 implementation.
Besides I doubt only below changes will work for you. I didn't find where
you adapt the set_kcore_vmcoreinfo() to set the vmcoreinfo. Without
vmcoreinfo, makedumpfile doesn't work.
>
> The following patch seems to work for me:
> ---
> elf_info.c | 4 ++--
> makedumpfile.c | 26 ++++++++++++++++++++++++++
> makedumpfile.h | 1 +
> 3 files changed, 29 insertions(+), 2 deletions(-)
>
> --- a/elf_info.c
> +++ b/elf_info.c
> @@ -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++;
> }
> @@ -874,7 +874,7 @@ int get_kcore_dump_loads(void)
>
> for (i = 0, j = 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;
> if (j >= loads)
> return FALSE;
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -9227,6 +9227,32 @@ int is_crashkernel_mem_reserved(void)
> return !!crash_reserved_mem_nr;
> }
>
> +struct addr_check {
> + unsigned long addr;
> + int found;
> +};
> +
> +static int real_addr_callback(void *data, int nr, char *str,
> + unsigned long base, unsigned long length)
> +{
> + struct addr_check *addr_check = data;
> + unsigned long addr = addr_check->addr;
> +
> + if (addr >= base && addr < base + length) {
> + addr_check->found = 1;
> + return -1;
> + }
> + return 0;
> +}
> +
> +int is_real_addr(unsigned long addr)
> +{
> + struct addr_check addr_check = {addr, 0};
> +
> + iomem_for_each_line("System RAM\n", real_addr_callback, &addr_check);
> + return addr_check.found;
> +}
> +
> static int get_page_offset(void)
> {
> struct utsname utsname;
> --- a/makedumpfile.h
> +++ b/makedumpfile.h
> @@ -1567,6 +1567,7 @@ int read_disk_dump_header(struct disk_du
> int read_kdump_sub_header(struct kdump_sub_header *kh, char *filename);
> void close_vmcoreinfo(void);
> int close_files_for_creating_dumpfile(void);
> +int is_real_addr(unsigned long addr);
>
>
> /*
>
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2014-09-26 8:56 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-01 3:15 [PATCH v6 0/8] add a new interface to show the memory usage of 1st kernel Baoquan He
2014-09-01 3:15 ` [PATCH v6 1/8] initialize pfn_memhole in get_num_dumpable_cyclic Baoquan He
2014-09-01 3:15 ` [PATCH v6 2/8] functions to get crashkernel memory range Baoquan He
2014-09-01 3:15 ` [PATCH v6 3/8] preparation functions for parsing vmcoreinfo Baoquan He
2014-09-01 3:15 ` [PATCH v6 4/8] set vmcoreinfo for kcore Baoquan He
2014-09-01 3:15 ` [PATCH v6 5/8] prepare the dump loads for kcore analysis Baoquan He
2014-09-01 3:15 ` [PATCH v6 6/8] introduce a function exclude_zero_pages_cyclic() Baoquan He
2014-09-01 3:15 ` [PATCH v6 7/8] implement a function to print the memory usage Baoquan He
2014-09-01 3:15 ` [PATCH v6 8/8] add a new interface to show the memory usage of 1st kernel Baoquan He
2014-09-02 11:52 ` Vivek Goyal
2014-09-02 13:15 ` Baoquan He
2014-09-02 13:24 ` Baoquan He
2014-09-03 8:18 ` Atsushi Kumagai
2014-09-03 8:21 ` bhe
2014-09-02 6:20 ` [PATCH v6 0/8] " Atsushi Kumagai
2014-09-02 6:38 ` bhe
2014-09-22 15:02 ` Add "--mem-usage" support for s390x Michael Holzheu
2014-09-23 2:40 ` Baoquan He
2014-09-23 2:48 ` Baoquan He
2014-09-23 2:58 ` Baoquan He
2014-09-24 15:19 ` Michael Holzheu
2014-09-25 9:44 ` Baoquan He
2014-09-26 8:10 ` Michael Holzheu
2014-09-26 8:55 ` Baoquan He [this message]
2014-09-26 9:14 ` Baoquan He
2014-09-26 11:34 ` Michael Holzheu
2014-09-29 9:04 ` Baoquan He
2014-09-29 13:12 ` Michael Holzheu
2014-09-29 13:14 ` [PATCH] makedumpfile: Enable --mem-usage " Michael Holzheu
2014-09-30 9:02 ` Baoquan He
2014-10-01 16:59 ` Michael Holzheu
2014-10-09 6:41 ` Atsushi Kumagai
2014-10-10 12:23 ` Michael Holzheu
2014-10-14 7:19 ` Atsushi Kumagai
2014-10-14 7:28 ` bhe
2014-10-14 7:42 ` bhe
2014-10-16 12:37 ` Michael Holzheu
2014-10-23 6:56 ` Atsushi Kumagai
2014-10-23 10:30 ` Michael Holzheu
2014-10-30 1:29 ` Atsushi Kumagai
2014-10-30 9:14 ` Michael Holzheu
2014-10-31 5:25 ` Atsushi Kumagai
2014-10-27 7:57 ` bhe
2014-10-27 9:04 ` bhe
2014-10-28 4:34 ` Atsushi Kumagai
2014-10-28 4:34 ` Atsushi Kumagai
2014-10-28 4:46 ` bhe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140926085546.GA30346@dhcp-16-116.nay.redhat.com \
--to=bhe@redhat.com \
--cc=holzheu@linux.vnet.ibm.com \
--cc=kexec@lists.infradead.org \
--cc=kumagai-atsushi@mxc.nes.nec.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox