1. 14 Nov, 2005 1 commit
  2. 29 Oct, 2005 5 commits
    • Hugh Dickins's avatar
      [PATCH] mm: update comments to pte lock · b8072f09
      Hugh Dickins authored
      Updated several references to page_table_lock in common code comments.
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    • Hugh Dickins's avatar
      [PATCH] mm: ptd_alloc inline and out · 1bb3630e
      Hugh Dickins authored
      It seems odd to me that, whereas pud_alloc and pmd_alloc test inline, only
      calling out-of-line __pud_alloc __pmd_alloc if allocation needed,
      pte_alloc_map and pte_alloc_kernel are entirely out-of-line.  Though it does
      add a little to kernel size, change them to macros testing inline, calling
      __pte_alloc or __pte_alloc_kernel to allocate out-of-line.  Mark none of them
      as fastcalls, leave that to CONFIG_REGPARM or not.
      It also seems more natural for the out-of-line functions to leave the offset
      calculation and map to the inline, which has to do it anyway for the common
      case.  At least mremap move wants __pte_alloc without _map.
      Macros rather than inline functions, certainly to avoid the header file issues
      which arise from CONFIG_HIGHPTE needing kmap_types.h, but also in case any
      architectures I haven't built would have other such problems.
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    • Hugh Dickins's avatar
      [PATCH] mm: tlb_finish_mmu forget rss · fc2acab3
      Hugh Dickins authored
      zap_pte_range has been counting the pages it frees in tlb->freed, then
      tlb_finish_mmu has used that to update the mm's rss.  That got stranger when I
      added anon_rss, yet updated it by a different route; and stranger when rss and
      anon_rss became mm_counters with special access macros.  And it would no
      longer be viable if we're relying on page_table_lock to stabilize the
      mm_counter, but calling tlb_finish_mmu outside that lock.
      Remove the mmu_gather's freed field, let tlb_finish_mmu stick to its own
      business, just decrement the rss mm_counter in zap_pte_range (yes, there was
      some point to batching the update, and a subsequent patch restores that).  And
      forget the anal paranoia of first reading the counter to avoid going negative
      - if rss does go negative, just fix that bug.
      Remove the mmu_gather's flushes and avoided_flushes from arm and arm26: no use
      was being made of them.  But arm26 alone was actually using the freed, in the
      way some others use need_flush: give it a need_flush.  arm26 seems to prefer
      spaces to tabs here: respect that.
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    • Hugh Dickins's avatar
      [PATCH] mm: tlb_is_full_mm was obscure · 4d6ddfa9
      Hugh Dickins authored
      tlb_is_full_mm?  What does that mean?  The TLB is full?  No, it means that the
      mm's last user has gone and the whole mm is being torn down.  And it's an
      inline function because sparc64 uses a different (slightly better)
      "tlb_frozen" name for the flag others call "fullmm".
      And now the ptep_get_and_clear_full macro used in zap_pte_range refers
      directly to tlb->fullmm, which would be wrong for sparc64.  Rather than
      correct that, I'd prefer to scrap tlb_is_full_mm altogether, and change
      sparc64 to just use the same poor name as everyone else - is that okay?
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    • Hugh Dickins's avatar
      [PATCH] mm: tlb_gather_mmu get_cpu_var · 15a23ffa
      Hugh Dickins authored
      tlb_gather_mmu dates from before kernel preemption was allowed, and uses
      smp_processor_id or __get_cpu_var to find its per-cpu mmu_gather.  That works
      because it's currently only called after getting page_table_lock, which is not
      dropped until after the matching tlb_finish_mmu.  But don't rely on that, it
      will soon change: now disable preemption internally by proper get_cpu_var in
      tlb_gather_mmu, put_cpu_var in tlb_finish_mmu.
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  3. 28 Oct, 2005 1 commit
  4. 08 Oct, 2005 1 commit
  5. 28 Sep, 2005 1 commit
    • Nick Piggin's avatar
      [PATCH] mm: move_pte to remap ZERO_PAGE · 8b1f3124
      Nick Piggin authored
      Move the ZERO_PAGE remapping complexity to the move_pte macro in
      asm-generic, have it conditionally depend on
      __HAVE_ARCH_MULTIPLE_ZERO_PAGE, which gets defined for MIPS.
      For architectures without __HAVE_ARCH_MULTIPLE_ZERO_PAGE, move_pte becomes
      a noop.
      From: Hugh Dickins <hugh@veritas.com>
      Fix nasty little bug we've missed in Nick's mremap move ZERO_PAGE patch.
      The "pte" at that point may be a swap entry or a pte_file entry: we must
      check pte_present before perhaps corrupting such an entry.
      Patch below against 2.6.14-rc2-mm1, but the same bug is in 2.6.14-rc2's
      mm/mremap.c, and more dangerous there since it's affecting all arches: I
      think the safest course is to send Nick's patch and Yoichi's build fix and
      this fix (build tested) on to Linus - so only MIPS can be affected.
      Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  6. 12 Sep, 2005 1 commit
    • Andi Kleen's avatar
      [PATCH] x86-64: Increase TLB flush array size · 2b4a0815
      Andi Kleen authored
      The generic TLB flush functions kept upto 506 pages per
      CPU to avoid too frequent IPIs.
      This value was done for the L1 cache of older x86 CPUs,
      but with modern CPUs it does not make much sense anymore.
      TLB flushing is slow enough that using the L2 cache is fine.
      This patch increases the flush array on x86-64 to cache
      5350 pages. That is roughly 20MB with 4K pages. It speeds
      up large munmaps in multithreaded processes on SMP considerably.
      The cost is roughly 42k of memory per CPU, which is reasonable.
      I only increased it on x86-64 for now, but it would probably
      make sense to increase it everywhere. Embedded architectures
      with SMP may keep it smaller to save some memory per CPU.
      Signed-off-by: default avatarAndi Kleen <ak@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  7. 10 Sep, 2005 1 commit
    • Paolo 'Blaisorblade' Giarrusso's avatar
      [PATCH] i386 / uml: add dwarf sections to static link script · a7d0c210
      Paolo 'Blaisorblade' Giarrusso authored
      Inside the linker script, insert the code for DWARF debug info sections. This
      may help GDB'ing a Uml binary. Actually, it seems that ld is able to guess
      what I added correctly, but normal linker scripts include this section so it
      should be correct anyway adding it.
      On request by Sam Ravnborg <sam@ravnborg.org>, I've added it to
      asm-generic/vmlinux.lds.s. I've also moved there the stabs debug section,
      used the new macro in i386 linker script and added DWARF debug section to
      In the truth, I've not been able to verify the difference in GDB behaviour
      after this change (I've seen large improvements with another patch). This
      may depend on my binutils version, older one may have worse defaults.
      However, this section is present in normal linker script, so add it at
      least for the sake of cleanness.
      Signed-off-by: default avatarPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
      Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  8. 08 Sep, 2005 1 commit
    • David S. Miller's avatar
      [PATCH] Make sparc64 use setup-res.c · 085ae41f
      David S. Miller authored
      There were three changes necessary in order to allow
      sparc64 to use setup-res.c:
      1) Sparc64 roots the PCI I/O and MEM address space using
         parent resources contained in the PCI controller structure.
         I'm actually surprised no other platforms do this, especially
         ones like Alpha and PPC{,64}.  These resources get linked into the
         iomem/ioport tree when PCI controllers are probed.
         So the hierarchy looks like this:
         iomem --|
      	   PCI controller 1 MEM space --|
      				        device 1
      					device 2
      	   PCI controller 2 MEM space --|
         ioport --|
                  PCI controller 1 IO space --|
                  PCI controller 2 IO space --|
         You get the idea.  The drivers/pci/setup-res.c code allocates
         using plain iomem_space and ioport_space as the root, so that
         wouldn't work with the above setup.
         So I added a pcibios_select_root() that is used to handle this.
         It uses the PCI controller struct's io_space and mem_space on
         sparc64, and io{port,mem}_resource on every other platform to
         keep current behavior.
      2) quirk_io_region() is buggy.  It takes in raw BUS view addresses
         and tries to use them as a PCI resource.
         pci_claim_resource() expects the resource to be fully formed when
         it gets called.  The sparc64 implementation would do the translation
         but that's absolutely wrong, because if the same resource gets
         released then re-claimed we'll adjust things twice.
         So I fixed up quirk_io_region() to do the proper pcibios_bus_to_resource()
         conversion before passing it on to pci_claim_resource().
      3) I was mistakedly __init'ing the function methods the PCI controller
         drivers provide on sparc64 to implement some parts of these
         routines.  This was, of course, easy to fix.
      So we end up with the following, and that nasty SPARC64 makefile
      ifdef in drivers/pci/Makefile is finally zapped.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
  9. 07 Sep, 2005 8 commits
  10. 05 Sep, 2005 2 commits
    • Zachary Amsden's avatar
      [PATCH] x86: ptep_clear optimization · a600388d
      Zachary Amsden authored
      Add a new accessor for PTEs, which passes the full hint from the mmu_gather
      struct; this allows architectures with hardware pagetables to optimize away
      atomic PTE operations when destroying an address space.  Removing the
      locked operation should allow better pipelining of memory access in this
      loop.  I measured an average savings of 30-35 cycles per zap_pte_range on
      the first 500 destructions on Pentium-M, but I believe the optimization
      would win more on older processors which still assert the bus lock on xchg
      for an exclusive cacheline.
      Update: I made some new measurements, and this saves exactly 26 cycles over
      ptep_get_and_clear on Pentium M.  On P4, with a PAE kernel, this saves 180
      cycles per ptep_get_and_clear, for a whopping 92160 cycles savings for a
      full address space destruction.
      pte_clear_full is not yet used, but is provided for future optimizations
      (in particular, when running inside of a hypervisor that queues page table
      updates, the full hint allows us to avoid queueing unnecessary page table
      update for an address space in the process of being destroyed.
      This is not a huge win, but it does help a bit, and sets the stage for
      further hypervisor optimization of the mm layer on all architectures.
      Signed-off-by: default avatarZachary Amsden <zach@vmware.com>
      Cc: Christoph Lameter <christoph@lameter.com>
      Cc: <linux-mm@kvack.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    • Stephen Rothwell's avatar
      [PATCH] mm: consolidate get_order · fd4fd5aa
      Stephen Rothwell authored
      Someone mentioned that almost all the architectures used basically the same
      implementation of get_order.  This patch consolidates them into
      asm-generic/page.h and includes that in the appropriate places.  The
      exceptions are ia64 and ppc which have their own (presumably optimised)
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  11. 04 Aug, 2005 1 commit
  12. 28 Jul, 2005 1 commit
  13. 26 Jul, 2005 1 commit
    • Eric W. Biederman's avatar
      [PATCH] Add emergency_restart() · 7c903473
      Eric W. Biederman authored
      When the kernel is working well and we want to restart cleanly
      kernel_restart is the function to use.   But in many instances
      the kernel wants to reboot when thing are expected to be working
      very badly such as from panic or a software watchdog handler.
      This patch adds the function emergency_restart() so that
      callers can be clear what semantics they expect when calling
      restart.  emergency_restart() is expected to be callable
      from interrupt context and possibly reliable in even more
      trying circumstances.
      This is an initial generic implementation for all architectures.
      Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  14. 14 Jul, 2005 1 commit
    • Sam Ravnborg's avatar
      kbuild: Avoid inconsistent kallsyms data · 6d30e3a8
      Sam Ravnborg authored
      Several reports on inconsistent kallsyms data has been caused by the aliased symbols
      __sched_text_start and __down to shift places in the output of nm.
      The root cause was that on second pass ld aligned __sched_text_start to a 4 byte boundary
      which is the function alignment on i386.
      sched.text and spinlock.text is now aligned to an 8 byte boundary to make sure they
      are aligned to a function alignemnt on most (all?) archs.
      Tested by: Paulo Marques <pmarques@grupopie.com>
      Tested by: Alexander Stohr <Alexander.Stohr@gmx.de>
      Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
  15. 25 Jun, 2005 1 commit
  16. 23 Jun, 2005 2 commits
  17. 21 Jun, 2005 1 commit
    • Abhijit Karmarkar's avatar
      [PATCH] msync: check pte dirty earlier · b4955ce3
      Abhijit Karmarkar authored
      It's common practice to msync a large address range regularly, in which
      often only a few ptes have actually been dirtied since the previous pass.
      sync_pte_range then goes much faster if it tests whether pte is dirty
      before locating and accessing each struct page cacheline; and it is hardly
      slowed by ptep_clear_flush_dirty repeating that test in the opposite case,
      when every pte actually is dirty.
      But beware, s390's pte_dirty always says false, since its dirty bit is kept
      in the storage key, located via the struct page address.  So skip this
      optimization in its case: use a pte_maybe_dirty macro which just says true
      if page_test_and_clear_dirty is implemented.
      Signed-off-by: default avatarAbhijit Karmarkar <abhijitk@veritas.com>
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  18. 05 May, 2005 1 commit
  19. 04 May, 2005 1 commit
    • Al Viro's avatar
      [PATCH] asm/signal.h unification · b1ecb4c3
      Al Viro authored
      New file - asm-generic/signal.h.  Contains declarations of
      __sighandler_t, __sigrestore_t, SIG_DFL, SIG_IGN, SIG_ERR and default
      definitions of SIG_BLOCK, SIG_UNBLOCK and SIG_SETMASK.
      asm-*/signal.h switched to including it.  The only exception is
      asm-parisc/signal.h that wants its own declaration of __sighandler_t;
      that one is left as-is.
      asm-ppc64/signal.h required one more thing - unlike everybody else it
      used __sigrestorer_t instead of usual __sigrestore_t.  PPC64 switched to
      common spelling.
      Signed-off-by: default avatarAl Viro <viro@parcelfarce.linux.theplanet.co.uk>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  20. 01 May, 2005 5 commits
  21. 24 Apr, 2005 1 commit
  22. 19 Apr, 2005 1 commit
  23. 16 Apr, 2005 1 commit