public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Franck Bui-Huu <franck.bui-huu@innova-card.com>
To: linux-kernel@vger.kernel.org
Subject: [PATCH] bootmem.c clean up bad pfn convertions
Date: Fri, 08 Apr 2005 15:32:11 +0200	[thread overview]
Message-ID: <425687DB.4000205@innova-card.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 1108 bytes --]

Hi,

As I described in my previous email, bootmem.c does improper
pfn convertions into phys addr. This simple patch fixes that.

Regards,

       Franck.



-------------------------------------------------------------------------------
This message contains confidential information and is intended only for the
individual named. If you are not the named addressee you should not
disseminate, distribute or copy this e-mail. Please notify the sender
immediately by e-mail if you have received this e-mail by mistake and delete
this e-mail from your system. E-mail transmission cannot be guaranteed to be
secure or error-free as information could be intercepted, corrupted, lost,
destroyed, arrive late or incomplete, or contain viruses. The sender therefore
does not accept liability for any errors or omissions in the contents of this
message, which arise as a result of e-mail transmission. If verification is
required please request a hard-copy version.
INNOVA CARD will not therefore be liable for the message if modified.
-------------------------------------------------------------------------------

[-- Attachment #2: bootmem.c.patch --]
[-- Type: text/x-patch, Size: 2530 bytes --]

--- bootmem.c	7 Apr 2005 16:39:24 -0000	1.2
+++ bootmem.c	8 Apr 2005 13:20:02 -0000
@@ -58,8 +58,8 @@ static unsigned long __init init_bootmem
 	pgdat_list = pgdat;
 
 	mapsize = (mapsize + (sizeof(long) - 1UL)) & ~(sizeof(long) - 1UL);
-	bdata->node_bootmem_map = phys_to_virt(mapstart << PAGE_SHIFT);
-	bdata->node_boot_start = (start << PAGE_SHIFT);
+	bdata->node_bootmem_map = phys_to_virt(pfn_to_phys(mapstart));
+	bdata->node_boot_start = pfn_to_phys(start);
 	bdata->node_low_pfn = end;
 
 	/*
@@ -86,11 +86,11 @@ static void __init reserve_bootmem_core(
 	unsigned long sidx = (addr - bdata->node_boot_start)/PAGE_SIZE;
 	unsigned long eidx = (addr + size - bdata->node_boot_start + 
 							PAGE_SIZE-1)/PAGE_SIZE;
-	unsigned long end = (addr + size + PAGE_SIZE-1)/PAGE_SIZE;
+	unsigned long end = phys_to_pfn(PAGE_ALIGN(addr + size));
 
 	BUG_ON(!size);
 	BUG_ON(sidx >= eidx);
-	BUG_ON((addr >> PAGE_SHIFT) >= bdata->node_low_pfn);
+	BUG_ON(phys_to_pfn(addr) >= bdata->node_low_pfn);
 	BUG_ON(end > bdata->node_low_pfn);
 
 	for (i = sidx; i < eidx; i++)
@@ -111,7 +111,7 @@ static void __init free_bootmem_core(boo
 	 */
 	unsigned long sidx;
 	unsigned long eidx = (addr + size - bdata->node_boot_start)/PAGE_SIZE;
-	unsigned long end = (addr + size)/PAGE_SIZE;
+	unsigned long end = phys_to_pfn(addr + size);
 
 	BUG_ON(!size);
 	BUG_ON(end > bdata->node_low_pfn);
@@ -260,6 +260,7 @@ static unsigned long __init free_all_boo
 	unsigned long i, count, total = 0;
 	unsigned long idx;
 	unsigned long *map; 
+	unsigned long mapsize;
 	int gofast = 0;
 
 	BUG_ON(!bdata->node_bootmem_map);
@@ -267,7 +268,7 @@ static unsigned long __init free_all_boo
 	count = 0;
 	/* first extant page of the node */
 	page = virt_to_page(phys_to_virt(bdata->node_boot_start));
-	idx = bdata->node_low_pfn - (bdata->node_boot_start >> PAGE_SHIFT);
+	idx = bdata->node_low_pfn - phys_to_pfn(bdata->node_boot_start);
 	map = bdata->node_bootmem_map;
 	/* Check physaddr is O(LOG2(BITS_PER_LONG)) page aligned */
 	if (bdata->node_boot_start == 0 ||
@@ -313,7 +314,9 @@ static unsigned long __init free_all_boo
 	 */
 	page = virt_to_page(bdata->node_bootmem_map);
 	count = 0;
-	for (i = 0; i < ((bdata->node_low_pfn-(bdata->node_boot_start >> PAGE_SHIFT))/8 + PAGE_SIZE-1)/PAGE_SIZE; i++,page++) {
+	mapsize = (bdata->node_low_pfn - phys_to_pfn(bdata->node_boot_start)+7)/8;
+	mapsize = (mapsize + PAGE_SIZE-1)/PAGE_SIZE;
+	for (i = 0; i < mapsize; i++, page++) {
 		count++;
 		__ClearPageReserved(page);
 		set_page_count(page, 1);

             reply	other threads:[~2005-04-08 13:36 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-08 13:32 Franck Bui-Huu [this message]
2005-04-08 23:52 ` [PATCH] bootmem.c clean up bad pfn convertions Dave Hansen
2005-04-11  8:22   ` Franck Bui-Huu

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=425687DB.4000205@innova-card.com \
    --to=franck.bui-huu@innova-card.com \
    --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