]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'linux-2.6' into powerpc-next
authorPaul Mackerras <paulus@samba.org>
Fri, 16 May 2008 13:13:42 +0000 (23:13 +1000)
committerPaul Mackerras <paulus@samba.org>
Fri, 16 May 2008 13:13:42 +0000 (23:13 +1000)
1  2 
arch/powerpc/mm/hash_utils_64.c
arch/powerpc/mm/init_64.c
drivers/net/Kconfig
include/asm-powerpc/mmu-hash64.h

index 05f955f8df358e33ee8cb8bfb1bff44754a5f5e2,0f2d239d94c440608dadf79671b4b95f6cf4e0e9..bf5b6d7ed30f02de3507f62e1f586d8a4cf8bd93
@@@ -94,6 -94,9 +94,9 @@@ unsigned long htab_hash_mask
  int mmu_linear_psize = MMU_PAGE_4K;
  int mmu_virtual_psize = MMU_PAGE_4K;
  int mmu_vmalloc_psize = MMU_PAGE_4K;
+ #ifdef CONFIG_SPARSEMEM_VMEMMAP
+ int mmu_vmemmap_psize = MMU_PAGE_4K;
+ #endif
  int mmu_io_psize = MMU_PAGE_4K;
  int mmu_kernel_ssize = MMU_SEGSIZE_256M;
  int mmu_highuser_ssize = MMU_SEGSIZE_256M;
@@@ -117,7 -120,7 +120,7 @@@ static DEFINE_SPINLOCK(linear_map_hash_
  
  /* Pre-POWER4 CPUs (4k pages only)
   */
 -struct mmu_psize_def mmu_psize_defaults_old[] = {
 +static struct mmu_psize_def mmu_psize_defaults_old[] = {
        [MMU_PAGE_4K] = {
                .shift  = 12,
                .sllp   = 0,
   *
   * Support for 16Mb large pages
   */
 -struct mmu_psize_def mmu_psize_defaults_gp[] = {
 +static struct mmu_psize_def mmu_psize_defaults_gp[] = {
        [MMU_PAGE_4K] = {
                .shift  = 12,
                .sllp   = 0,
@@@ -387,11 -390,32 +390,32 @@@ static void __init htab_init_page_sizes
        }
  #endif /* CONFIG_PPC_64K_PAGES */
  
+ #ifdef CONFIG_SPARSEMEM_VMEMMAP
+       /* We try to use 16M pages for vmemmap if that is supported
+        * and we have at least 1G of RAM at boot
+        */
+       if (mmu_psize_defs[MMU_PAGE_16M].shift &&
+           lmb_phys_mem_size() >= 0x40000000)
+               mmu_vmemmap_psize = MMU_PAGE_16M;
+       else if (mmu_psize_defs[MMU_PAGE_64K].shift)
+               mmu_vmemmap_psize = MMU_PAGE_64K;
+       else
+               mmu_vmemmap_psize = MMU_PAGE_4K;
+ #endif /* CONFIG_SPARSEMEM_VMEMMAP */
        printk(KERN_DEBUG "Page orders: linear mapping = %d, "
-              "virtual = %d, io = %d\n",
+              "virtual = %d, io = %d"
+ #ifdef CONFIG_SPARSEMEM_VMEMMAP
+              ", vmemmap = %d"
+ #endif
+              "\n",
               mmu_psize_defs[mmu_linear_psize].shift,
               mmu_psize_defs[mmu_virtual_psize].shift,
-              mmu_psize_defs[mmu_io_psize].shift);
+              mmu_psize_defs[mmu_io_psize].shift
+ #ifdef CONFIG_SPARSEMEM_VMEMMAP
+              ,mmu_psize_defs[mmu_vmemmap_psize].shift
+ #endif
+              );
  
  #ifdef CONFIG_HUGETLB_PAGE
        /* Init large page size. Currently, we pick 16M or 1M depending
@@@ -509,6 -533,8 +533,6 @@@ void __init htab_initialize(void
        unsigned long base = 0, size = 0, limit;
        int i;
  
 -      extern unsigned long tce_alloc_start, tce_alloc_end;
 -
        DBG(" -> htab_initialize()\n");
  
        /* Initialize segment sizes */
index 1e52e97d74090047697a2a9bee42ff0715dff9c3,6aa65375abf5919ce2b02c0efe309dd8d39c893c..6ef63caca6822bdfaa29b8884c8b06873acd33a7
@@@ -19,6 -19,8 +19,8 @@@
   *
   */
  
+ #undef DEBUG
  #include <linux/signal.h>
  #include <linux/sched.h>
  #include <linux/kernel.h>
@@@ -183,7 -185,7 +185,7 @@@ void pgtable_cache_init(void
   * do this by hand as the proffered address may not be correctly aligned.
   * Subtraction of non-aligned pointers produces undefined results.
   */
 -unsigned long __meminit vmemmap_section_start(unsigned long page)
 +static unsigned long __meminit vmemmap_section_start(unsigned long page)
  {
        unsigned long offset = page - ((unsigned long)(vmemmap));
  
   * which overlaps this vmemmap page is initialised then this page is
   * initialised already.
   */
 -int __meminit vmemmap_populated(unsigned long start, int page_size)
 +static int __meminit vmemmap_populated(unsigned long start, int page_size)
  {
        unsigned long end = start + page_size;
  
  }
  
  int __meminit vmemmap_populate(struct page *start_page,
-                                       unsigned long nr_pages, int node)
+                              unsigned long nr_pages, int node)
  {
        unsigned long mode_rw;
        unsigned long start = (unsigned long)start_page;
        unsigned long end = (unsigned long)(start_page + nr_pages);
-       unsigned long page_size = 1 << mmu_psize_defs[mmu_linear_psize].shift;
+       unsigned long page_size = 1 << mmu_psize_defs[mmu_vmemmap_psize].shift;
  
        mode_rw = _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_COHERENT | PP_RWXX;
  
                        start, p, __pa(p));
  
                mapped = htab_bolt_mapping(start, start + page_size,
-                                       __pa(p), mode_rw, mmu_linear_psize,
+                                       __pa(p), mode_rw, mmu_vmemmap_psize,
                                        mmu_kernel_ssize);
                BUG_ON(mapped < 0);
        }
  
        return 0;
  }
- #endif
+ #endif /* CONFIG_SPARSEMEM_VMEMMAP */
diff --combined drivers/net/Kconfig
index 009e8fdcfe5c8622aa921370c360b53693e328d4,9f6cc8a5607371b346622756bc96610b998204ac..02d5165b147c8f9a299f9c27092d240b257ded5c
@@@ -1884,6 -1884,7 +1884,6 @@@ config NE_H830
          Say Y here if you want to use the NE2000 compatible
          controller on the Renesas H8/300 processor.
  
 -source "drivers/net/fec_8xx/Kconfig"
  source "drivers/net/fs_enet/Kconfig"
  
  endif # NET_ETHERNET
@@@ -2425,7 -2426,7 +2425,7 @@@ config CHELSIO_T
  
  config EHEA
        tristate "eHEA Ethernet support"
-       depends on IBMEBUS && INET && SPARSEMEM
+       depends on IBMEBUS && INET && SPARSEMEM && MEMORY_HOTPLUG
        select INET_LRO
        ---help---
          This driver supports the IBM pSeries eHEA ethernet adapter.
index f35d1e164da8da552cac27e7d5fb59eb2d7f474e,39c5c5f62bf5bd740fd92568aa030c4afaff84f3..d1dc16afb1186c4a40f374a0e2f5ba3d89ffff2f
@@@ -177,11 -177,11 +177,12 @@@ extern struct mmu_psize_def mmu_psize_d
  extern int mmu_linear_psize;
  extern int mmu_virtual_psize;
  extern int mmu_vmalloc_psize;
+ extern int mmu_vmemmap_psize;
  extern int mmu_io_psize;
  extern int mmu_kernel_ssize;
  extern int mmu_highuser_ssize;
  extern u16 mmu_slb_size;
 +extern unsigned long tce_alloc_start, tce_alloc_end;
  
  /*
   * If the processor supports 64k normal pages but not 64k cache