All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chad Reese <creese@caviumnetworks.com>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Subject: Re: Patch for sparsemem support
Date: Wed, 24 May 2006 09:09:11 -0700	[thread overview]
Message-ID: <44748527.3090103@caviumnetworks.com> (raw)
In-Reply-To: <20060524014131.GB3205@linux-mips.org>

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

Resend of previous patch

I've attached the patch compressed with gzip and as clear text. 
Hopefully one of them will survive whatever corruption occurred last time.

Chad

---

The patch below allows sparsemem to work for Mips64. This is my first 
foray into the boot memory handling code, so hopefully I haven't made 
any serious blunders. Unfortunately the Octeon processor I made the 
changes for isn't currently in the linux-mips.org tree. This means there 
isn't an example of sparsemem usage yet. I plan to work at fixing this soon.

Other than various ifdef changes, the most important change was moving 
memory_present() in arch/mips/kernel/setup.c. When you're using 
sparsemem extreme, this function does an allocate for bootmem. This 
would always fail since init_bootmem hasn't been called yet. I moved 
memory_present after free_bootmem. This only marks actual memory ranges 
as present instead of the entire address space.

This patch was made against 2.6.16.16

Signed-off-by: Chad Reese  <creese@caviumnetworks.com>

  arch/mips/kernel/setup.c     |    3 +--
  arch/mips/mm/init.c          |    2 +-
  include/asm-mips/page.h      |    2 ++
  include/asm-mips/sparsemem.h |   14 ++++++++++++++
  include/linux/mm.h           |    2 +-
  include/linux/mmzone.h       |    1 +
  6 files changed, 20 insertions(+), 4 deletions(-)

Ralf Baechle wrote:
> On Sun, May 21, 2006 at 01:18:06PM -0700, Chad Reese wrote:
> 
> Looks ok - but the patch is corrupt, can you resend?
> 
>   Ralf
> 

[-- Attachment #2: sparsemem_support_mips_fixed.patch --]
[-- Type: text/x-patch, Size: 3008 bytes --]

diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index d9293c5..406afce 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -358,8 +358,6 @@ static inline void bootmem_init(void)
 	}
 #endif

-	memory_present(0, first_usable_pfn, max_low_pfn);
-
 	/* Initialize the boot-time allocator with low memory only.  */
 	bootmap_size = init_bootmem(first_usable_pfn, max_low_pfn);

@@ -413,6 +411,7 @@ static inline void bootmem_init(void)

 		/* Register lowmem ranges */
 		free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
+		memory_present(0, curr_pfn, curr_pfn + size - 1);
 	}

 	/* Reserve the bootmap memory.  */
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 0ff9a34..f151373 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -228,7 +228,7 @@ void __init mem_init(void)
 	for (tmp = 0; tmp < max_low_pfn; tmp++)
 		if (page_is_ram(tmp)) {
 			ram++;
-			if (PageReserved(mem_map+tmp))
+			if (PageReserved(pfn_to_page(tmp)))
 				reservedpages++;
 		}

diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h
index 399d731..103290a 100644
--- a/include/asm-mips/page.h
+++ b/include/asm-mips/page.h
@@ -145,11 +145,13 @@ typedef struct { unsigned long pgprot; }

 #define pfn_to_kaddr(pfn)	__va((pfn) << PAGE_SHIFT)

+#ifndef CONFIG_SPARSEMEM
 #ifndef CONFIG_NEED_MULTIPLE_NODES
 #define pfn_to_page(pfn)	(mem_map + (pfn))
 #define page_to_pfn(page)	((unsigned long)((page) - mem_map))
 #define pfn_valid(pfn)		((pfn) < max_mapnr)
 #endif
+#endif

 #define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
 #define virt_addr_valid(kaddr)	pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
diff --git a/include/asm-mips/sparsemem.h b/include/asm-mips/sparsemem.h
new file mode 100644
index 0000000..795ac6c
--- /dev/null
+++ b/include/asm-mips/sparsemem.h
@@ -0,0 +1,14 @@
+#ifndef _MIPS_SPARSEMEM_H
+#define _MIPS_SPARSEMEM_H
+#ifdef CONFIG_SPARSEMEM
+
+/*
+ * SECTION_SIZE_BITS		2^N: how big each section will be
+ * MAX_PHYSMEM_BITS		2^N: how much memory we can have in that space
+ */
+#define SECTION_SIZE_BITS       28
+#define MAX_PHYSMEM_BITS        35
+
+#endif /* CONFIG_SPARSEMEM */
+#endif /* _MIPS_SPARSEMEM_H */
+
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 279446e..a1c4788 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -506,7 +506,7 @@ static inline void set_page_links(struct
 	set_page_section(page, pfn_to_section_nr(pfn));
 }

-#ifndef CONFIG_DISCONTIGMEM
+#if !defined(CONFIG_DISCONTIGMEM) && !defined(CONFIG_SPARSEMEM)
 /* The array of struct pages - for discontigmem use pgdat->lmem_map */
 extern struct page *mem_map;
 #endif
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index ebfc238..807616f 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -14,6 +14,7 @@
 #include <linux/init.h>
 #include <linux/seqlock.h>
 #include <asm/atomic.h>
+#include <asm/page.h>

 /* Free memory management - zoned buddy allocator.  */
 #ifndef CONFIG_FORCE_MAX_ZONEORDER


[-- Attachment #3: sparsemem_support_mips_fixed.patch.gz --]
[-- Type: application/x-tar, Size: 1256 bytes --]

      reply	other threads:[~2006-05-24 16:09 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-21 20:18 Patch for sparsemem support Chad Reese
2006-05-24  1:41 ` Ralf Baechle
2006-05-24 16:09   ` Chad Reese [this message]

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=44748527.3090103@caviumnetworks.com \
    --to=creese@caviumnetworks.com \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.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.