linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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;


  reply	other threads:[~2013-11-13 22:41 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-13 20:41 /proc/vmcore mmap() failure issue Vivek Goyal
2013-11-13 21:04 ` Vivek Goyal
2013-11-13 21:14   ` H. Peter Anvin
2013-11-13 22:41     ` Vivek Goyal [this message]
2013-11-13 22:44       ` H. Peter Anvin
2013-11-13 23:00         ` Vivek Goyal
2013-11-13 23:08           ` H. Peter Anvin
2013-11-14 10:31 ` HATAYAMA Daisuke
2013-11-14 15:13   ` Vivek Goyal
2013-11-15  9:41     ` HATAYAMA Daisuke
2013-11-15 14:26       ` Vivek Goyal
2013-11-18  0:51         ` Atsushi Kumagai
2013-11-18 13:55           ` Vivek Goyal
2013-11-20  5:29             ` Atsushi Kumagai
2013-11-20 14:59               ` Vivek Goyal
2013-11-21  5:00                 ` Atsushi Kumagai
2013-11-21  8:31                   ` HATAYAMA Daisuke
2013-11-21 16:52                     ` Vivek Goyal
2013-11-25  8:10                       ` Atsushi Kumagai
2013-11-25  9:01                         ` HATAYAMA Daisuke
2013-11-25 14:41                           ` Vivek Goyal
2013-11-26  1:51                             ` Atsushi Kumagai
2013-11-26  5:16                             ` HATAYAMA Daisuke
2013-11-19  9:55           ` HATAYAMA Daisuke
2013-11-20  5:27             ` Atsushi Kumagai
2013-11-20  6:43               ` HATAYAMA Daisuke
2013-11-26  1:52                 ` Atsushi Kumagai
2013-11-21  7:14               ` chaowang
2013-11-25  8:09                 ` Atsushi Kumagai
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).