1. 12 3月, 2008 1 次提交
    • T
      x86: remove quicklists · 985a34bd
      Thomas Gleixner 提交于
      quicklists cause a serious memory leak on 32-bit x86,
      as documented at:
      
        http://bugzilla.kernel.org/show_bug.cgi?id=9991
      
      the reason is that the quicklist pool is a special-purpose
      cache that grows out of proportion. It is not accounted for
      anywhere and users have no way to even realize that it's
      the quicklists that are causing RAM usage spikes. It was
      supposed to be a relatively small pool, but as demonstrated
      by KOSAKI Motohiro, they can grow as large as:
      
        Quicklists:    1194304 kB
      
      given how much trouble this code has caused historically,
      and given that Andrew objected to its introduction on x86
      (years ago), the best option at this point is to remove them.
      
      [ any performance benefits of caching constructed pgds should
        be implemented in a more generic way (possibly within the page
        allocator), while still allowing constructed pages to be
        allocated by other workloads. ]
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      985a34bd
  2. 07 3月, 2008 1 次提交
  3. 05 3月, 2008 1 次提交
  4. 04 3月, 2008 1 次提交
  5. 03 3月, 2008 1 次提交
  6. 01 3月, 2008 2 次提交
    • D
      x86 ptrace: fix ptrace_bts_config structure declaration · 53c58588
      Dave Anderson 提交于
      The 2.6.25 ptrace_bts_config structure in asm-x86/ptrace-abi.h
      is defined with u32 types:
      
         #include <asm/types.h>
      
         /* configuration/status structure used in PTRACE_BTS_CONFIG and
            PTRACE_BTS_STATUS commands.
         */
         struct ptrace_bts_config {
                 /* requested or actual size of BTS buffer in bytes */
                 u32 size;
                 /* bitmask of below flags */
                 u32 flags;
                 /* buffer overflow signal */
                 u32 signal;
                 /* actual size of bts_struct in bytes */
                 u32 bts_size;
         };
         #endif
      
      But u32 is only accessible in asm-x86/types.h if __KERNEL__,
      leading to compile errors when ptrace.h is included from
      user-space. The double-underscore versions that are exported
      to user-space in asm-x86/types.h should be used instead.
      Signed-off-by: NDave Anderson <anderson@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      53c58588
    • H
      x86: fix pmd_bad and pud_bad to support huge pages · cded932b
      Hans Rosenfeld 提交于
      I recently stumbled upon a problem in the support for huge pages. If a
      program using huge pages does not explicitly unmap them, they remain
      mapped (and therefore, are lost) after the program exits.
      
      I observed that the free huge page count in /proc/meminfo decreased when
      running my program, and it did not increase after the program exited.
      After running the program a few times, no more huge pages could be
      allocated.
      
      The reason for this seems to be that the x86 pmd_bad and pud_bad
      consider pmd/pud entries having the PSE bit set invalid. I think there
      is nothing wrong with this bit being set, it just indicates that the
      lowest level of translation has been reached. This bit has to be (and
      is) checked after the basic validity of the entry has been checked, like
      in this fragment from follow_page() in mm/memory.c:
      
        if (pmd_none(*pmd) || unlikely(pmd_bad(*pmd)))
                goto no_page_table;
      
        if (pmd_huge(*pmd)) {
                BUG_ON(flags & FOLL_GET);
                page = follow_huge_pmd(mm, address, pmd, flags & FOLL_WRITE);
                goto out;
        }
      
      Note that this code currently doesn't work as intended if the pmd refers
      to a huge page, the pmd_huge() check can not be reached if the page is
      huge.
      
      Extending pmd_bad() (and, for future 1GB page support, pud_bad()) to
      allow for the PSE bit being set fixes this. For similar reasons,
      allowing the NX bit being set is necessary, too. I have seen huge pages
      having the NX bit set in their pmd entry, which would cause the same
      problem.
      Signed-Off-By: NHans Rosenfeld <hans.rosenfeld@amd.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      cded932b
  7. 26 2月, 2008 6 次提交
  8. 21 2月, 2008 1 次提交
  9. 19 2月, 2008 5 次提交
  10. 15 2月, 2008 2 次提交
  11. 13 2月, 2008 1 次提交
    • I
      x86: fix sigcontext.h user export · 1cdde191
      Ingo Molnar 提交于
      Jakub Jelinek reported that some user-space code that relies on
      kernel headers has built dependency on the sigcontext->eip/rip
      register names - which have been unified in commit:
      
        commit 742fa54a
        Author: H. Peter Anvin <hpa@zytor.com>
        Date:   Wed Jan 30 13:30:56 2008 +0100
      
            x86: use generic register names in struct sigcontext
      
      so give the old layout to user-space. This is not particularly
      pretty, but it's an ABI so there's no danger of the two definitions
      getting out of sync.
      Reported-by: NJakub Jelinek <jakub@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      1cdde191
  12. 10 2月, 2008 7 次提交
  13. 09 2月, 2008 5 次提交
    • I
      x86: fix pgtable_t build breakage · 3bf8f5a9
      Ingo Molnar 提交于
      Commit 2f569afd ("CONFIG_HIGHPTE vs.
      sub-page page tables") caused some build breakage due to pgtable_t only
      getting declared in the CONFIG_X86_PAE case.
      
      Move the declaration outside the PAE section.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3bf8f5a9
    • M
      CONFIG_HIGHPTE vs. sub-page page tables. · 2f569afd
      Martin Schwidefsky 提交于
      Background: I've implemented 1K/2K page tables for s390.  These sub-page
      page tables are required to properly support the s390 virtualization
      instruction with KVM.  The SIE instruction requires that the page tables
      have 256 page table entries (pte) followed by 256 page status table entries
      (pgste).  The pgstes are only required if the process is using the SIE
      instruction.  The pgstes are updated by the hardware and by the hypervisor
      for a number of reasons, one of them is dirty and reference bit tracking.
      To avoid wasting memory the standard pte table allocation should return
      1K/2K (31/64 bit) and 2K/4K if the process is using SIE.
      
      Problem: Page size on s390 is 4K, page table size is 1K or 2K.  That means
      the s390 version for pte_alloc_one cannot return a pointer to a struct
      page.  Trouble is that with the CONFIG_HIGHPTE feature on x86 pte_alloc_one
      cannot return a pointer to a pte either, since that would require more than
      32 bit for the return value of pte_alloc_one (and the pte * would not be
      accessible since its not kmapped).
      
      Solution: The only solution I found to this dilemma is a new typedef: a
      pgtable_t.  For s390 pgtable_t will be a (pte *) - to be introduced with a
      later patch.  For everybody else it will be a (struct page *).  The
      additional problem with the initialization of the ptl lock and the
      NR_PAGETABLE accounting is solved with a constructor pgtable_page_ctor and
      a destructor pgtable_page_dtor.  The page table allocation and free
      functions need to call these two whenever a page table page is allocated or
      freed.  pmd_populate will get a pgtable_t instead of a struct page pointer.
       To get the pgtable_t back from a pmd entry that has been installed with
      pmd_populate a new function pmd_pgtable is added.  It replaces the pmd_page
      call in free_pte_range and apply_to_pte_range.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2f569afd
    • M
      asm-*/posix_types.h: scrub __GLIBC__ · 531d7d42
      Mike Frysinger 提交于
      Some arches (like alpha and ia64) already have a clean posix_types.h header.
      This brings all the others in line by removing all references to __GLIBC__
      (and some undocumented __USE_ALL).
      Signed-off-by: NMike Frysinger <vapier@gentoo.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Cc: Ulrich Drepper <drepper@redhat.com>
      Cc: Roland McGrath <roland@redhat.com>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      531d7d42
    • D
      aout: suppress A.OUT library support if !CONFIG_ARCH_SUPPORTS_AOUT · 7fa30315
      David Howells 提交于
      Suppress A.OUT library support if CONFIG_ARCH_SUPPORTS_AOUT is not set.
      
      Not all architectures support the A.OUT binfmt, so the ELF binfmt should not
      be permitted to go looking for A.OUT libraries to load in such a case.  Not
      only that, but under such conditions A.OUT core dumps are not produced either.
      
      To make this work, this patch also does the following:
      
       (1) Makes the existence of the contents of linux/a.out.h contingent on
           CONFIG_ARCH_SUPPORTS_AOUT.
      
       (2) Renames dump_thread() to aout_dump_thread() as it's only called by A.OUT
           core dumping code.
      
       (3) Moves aout_dump_thread() into asm/a.out-core.h and makes it inline.  This
           is then included only where needed.  This means that this bit of arch
           code will be stored in the appropriate A.OUT binfmt module rather than
           the core kernel.
      
       (4) Drops A.OUT support for Blackfin (according to Mike Frysinger it's not
           needed) and FRV.
      
      This patch depends on the previous patch to move STACK_TOP[_MAX] out of
      asm/a.out.h and into asm/processor.h as they're required whether or not A.OUT
      format is available.
      
      [jdike@addtoit.com: uml: re-remove accidentally restored code]
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7fa30315
    • D
      aout: move STACK_TOP[_MAX] to asm/processor.h · 922a70d3
      David Howells 提交于
      Move STACK_TOP[_MAX] out of asm/a.out.h and into asm/processor.h as they're
      required whether or not A.OUT format is available.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      922a70d3
  14. 08 2月, 2008 6 次提交