From: Vivek Goyal <vgoyal@redhat.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Baoquan He <bhe@redhat.com>,
Kexec Mailing List <kexec@lists.infradead.org>,
linux kernel mailing list <linux-kernel@vger.kernel.org>,
HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Dave Young <dyoung@redhat.com>, WANG Chao <chaowang@redhat.com>
Subject: Re: /proc/vmcore mmap() failure issue
Date: Wed, 13 Nov 2013 17:41:04 -0500 [thread overview]
Message-ID: <20131113224104.GF7613@redhat.com> (raw)
In-Reply-To: <5283EBCD.6070305@zytor.com>
On Wed, Nov 13, 2013 at 01:14:53PM -0800, H. Peter Anvin wrote:
> On 11/13/2013 01:04 PM, Vivek Goyal wrote:
> > [CC hpa ]
> >
> > And this issue brings me to the question that why do we allow sytem RAM
> > ranges which do not start on page boundary or do not end on page boundary.
> > Can't we truncate the BIOS reported RAM ranges in such a way so that
> > they start and end at PAGE boundary and rest of the kernel will never see
> > unaligned portion of RAM and this will make life so much simpler for
> > other tools.
> >
>
> That is a bit of a headache for doing in the memblock space. We do, in
> fact, truncate partial pages, but later in the game. It is possible we
> should push that sooner in the stack.
Hi Peter,
I noticed we seem to be trimming away partial pages in memblock.
memblock_x86_fill() {
/* throw away partial pages */
memblock_trim_memory(PAGE_SIZE);
}
But not in e820 hence they show up in /proc/iomem.
How about something along the lines as below patch. This fixes my
/proc/vmcore mmap() issue.
Thanks
Vivek
---
arch/x86/kernel/e820.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
Index: linux-2.6/arch/x86/kernel/e820.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820.c 2013-11-13 10:46:24.938057251 -0500
+++ linux-2.6/arch/x86/kernel/e820.c 2013-11-13 17:36:17.042681842 -0500
@@ -169,6 +169,33 @@ void __init e820_print_map(char *who)
}
}
+static int e820_trim_memory(struct e820entry *map, unsigned int nr_entries,
+ unsigned int align)
+{
+ int i;
+ struct e820entry *ei;
+ u64 start, end, orig_start, orig_end;
+
+ for (i = 0; i < nr_entries; i++) {
+ ei = &map[i];
+ if (ei->type != E820_RAM)
+ continue;
+ orig_start = ei->addr;
+ orig_end = ei->addr + ei->size;
+
+ start = round_up(orig_start, align);
+ end = round_down(orig_end, align);
+
+ if (start == orig_start && end == orig_end)
+ continue;
+
+ ei->addr = start;
+ ei->size = end - start;
+ }
+
+ return 0;
+}
+
/*
* Sanitize the BIOS e820 map.
*
@@ -267,6 +294,8 @@ int __init sanitize_e820_map(struct e820
int old_nr, new_nr, chg_nr;
int i;
+ e820_trim_memory(biosmap, *pnr_map, PAGE_SIZE);
+
/* if there's only one memory region, don't bother */
if (*pnr_map < 2)
return -1;
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Vivek Goyal <vgoyal@redhat.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: linux kernel mailing list <linux-kernel@vger.kernel.org>,
HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>,
Kexec Mailing List <kexec@lists.infradead.org>,
Baoquan He <bhe@redhat.com>, WANG Chao <chaowang@redhat.com>,
Dave Young <dyoung@redhat.com>,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: Re: /proc/vmcore mmap() failure issue
Date: Wed, 13 Nov 2013 17:41:04 -0500 [thread overview]
Message-ID: <20131113224104.GF7613@redhat.com> (raw)
In-Reply-To: <5283EBCD.6070305@zytor.com>
On Wed, Nov 13, 2013 at 01:14:53PM -0800, H. Peter Anvin wrote:
> On 11/13/2013 01:04 PM, Vivek Goyal wrote:
> > [CC hpa ]
> >
> > And this issue brings me to the question that why do we allow sytem RAM
> > ranges which do not start on page boundary or do not end on page boundary.
> > Can't we truncate the BIOS reported RAM ranges in such a way so that
> > they start and end at PAGE boundary and rest of the kernel will never see
> > unaligned portion of RAM and this will make life so much simpler for
> > other tools.
> >
>
> That is a bit of a headache for doing in the memblock space. We do, in
> fact, truncate partial pages, but later in the game. It is possible we
> should push that sooner in the stack.
Hi Peter,
I noticed we seem to be trimming away partial pages in memblock.
memblock_x86_fill() {
/* throw away partial pages */
memblock_trim_memory(PAGE_SIZE);
}
But not in e820 hence they show up in /proc/iomem.
How about something along the lines as below patch. This fixes my
/proc/vmcore mmap() issue.
Thanks
Vivek
---
arch/x86/kernel/e820.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
Index: linux-2.6/arch/x86/kernel/e820.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820.c 2013-11-13 10:46:24.938057251 -0500
+++ linux-2.6/arch/x86/kernel/e820.c 2013-11-13 17:36:17.042681842 -0500
@@ -169,6 +169,33 @@ void __init e820_print_map(char *who)
}
}
+static int e820_trim_memory(struct e820entry *map, unsigned int nr_entries,
+ unsigned int align)
+{
+ int i;
+ struct e820entry *ei;
+ u64 start, end, orig_start, orig_end;
+
+ for (i = 0; i < nr_entries; i++) {
+ ei = &map[i];
+ if (ei->type != E820_RAM)
+ continue;
+ orig_start = ei->addr;
+ orig_end = ei->addr + ei->size;
+
+ start = round_up(orig_start, align);
+ end = round_down(orig_end, align);
+
+ if (start == orig_start && end == orig_end)
+ continue;
+
+ ei->addr = start;
+ ei->size = end - start;
+ }
+
+ return 0;
+}
+
/*
* Sanitize the BIOS e820 map.
*
@@ -267,6 +294,8 @@ int __init sanitize_e820_map(struct e820
int old_nr, new_nr, chg_nr;
int i;
+ e820_trim_memory(biosmap, *pnr_map, PAGE_SIZE);
+
/* if there's only one memory region, don't bother */
if (*pnr_map < 2)
return -1;
next prev parent reply other threads:[~2013-11-13 22:41 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-13 20:41 /proc/vmcore mmap() failure issue Vivek Goyal
2013-11-13 20:41 ` Vivek Goyal
2013-11-13 21:04 ` Vivek Goyal
2013-11-13 21:04 ` Vivek Goyal
2013-11-13 21:14 ` H. Peter Anvin
2013-11-13 21:14 ` H. Peter Anvin
2013-11-13 22:41 ` Vivek Goyal [this message]
2013-11-13 22:41 ` Vivek Goyal
2013-11-13 22:44 ` H. Peter Anvin
2013-11-13 22:44 ` H. Peter Anvin
2013-11-13 23:00 ` Vivek Goyal
2013-11-13 23:00 ` Vivek Goyal
2013-11-13 23:08 ` H. Peter Anvin
2013-11-13 23:08 ` H. Peter Anvin
2013-11-14 10:31 ` HATAYAMA Daisuke
2013-11-14 10:31 ` HATAYAMA Daisuke
2013-11-14 15:13 ` Vivek Goyal
2013-11-14 15:13 ` Vivek Goyal
2013-11-15 9:41 ` HATAYAMA Daisuke
2013-11-15 9:41 ` HATAYAMA Daisuke
2013-11-15 14:26 ` Vivek Goyal
2013-11-15 14:26 ` Vivek Goyal
2013-11-18 0:51 ` Atsushi Kumagai
2013-11-18 0:51 ` Atsushi Kumagai
2013-11-18 13:55 ` Vivek Goyal
2013-11-18 13:55 ` Vivek Goyal
2013-11-20 5:29 ` Atsushi Kumagai
2013-11-20 5:29 ` Atsushi Kumagai
2013-11-20 14:59 ` Vivek Goyal
2013-11-20 14:59 ` Vivek Goyal
2013-11-21 5:00 ` Atsushi Kumagai
2013-11-21 5:00 ` Atsushi Kumagai
2013-11-21 8:31 ` HATAYAMA Daisuke
2013-11-21 8:31 ` HATAYAMA Daisuke
2013-11-21 16:52 ` Vivek Goyal
2013-11-21 16:52 ` Vivek Goyal
2013-11-25 8:10 ` Atsushi Kumagai
2013-11-25 8:10 ` Atsushi Kumagai
2013-11-25 9:01 ` HATAYAMA Daisuke
2013-11-25 9:01 ` HATAYAMA Daisuke
2013-11-25 14:41 ` Vivek Goyal
2013-11-25 14:41 ` Vivek Goyal
2013-11-26 1:51 ` Atsushi Kumagai
2013-11-26 1:51 ` Atsushi Kumagai
2013-11-26 5:16 ` HATAYAMA Daisuke
2013-11-26 5:16 ` HATAYAMA Daisuke
2013-11-19 9:55 ` HATAYAMA Daisuke
2013-11-19 9:55 ` HATAYAMA Daisuke
2013-11-20 5:27 ` Atsushi Kumagai
2013-11-20 5:27 ` Atsushi Kumagai
2013-11-20 6:43 ` HATAYAMA Daisuke
2013-11-20 6:43 ` HATAYAMA Daisuke
2013-11-26 1:52 ` Atsushi Kumagai
2013-11-26 1:52 ` Atsushi Kumagai
2013-11-21 7:14 ` chaowang
2013-11-21 7:14 ` chaowang
2013-11-25 8:09 ` Atsushi Kumagai
2013-11-25 8:09 ` Atsushi Kumagai
2013-11-26 3:29 ` chaowang
2013-11-26 3:29 ` chaowang
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=20131113224104.GF7613@redhat.com \
--to=vgoyal@redhat.com \
--cc=bhe@redhat.com \
--cc=chaowang@redhat.com \
--cc=d.hatayama@jp.fujitsu.com \
--cc=dyoung@redhat.com \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.