1. 01 7月, 2010 1 次提交
    • T
      [IA64] Fix spinaphore down_spin() · b70f4e85
      Tony Luck 提交于
      Typo in down_spin() meant it only read the low 32 bits of the
      "serve" value, instead of the full 64 bits. This results in the
      system hanging when the values in ticket/serve get larger than
      32-bits. A big enough system running the right test can hit this
      in a just a few hours.
      
      Broken since 883a3acf
          [IA64] Re-implement spinaphores using ticket lock concepts
      
      Reported via IRC by Bjorn Helgaas
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      b70f4e85
  2. 30 3月, 2010 1 次提交
    • T
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo 提交于
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Guess-its-ok-by: NChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  3. 08 1月, 2010 1 次提交
    • T
      [IA64] __per_cpu_idtrs[] is a memory hog · 6c57a332
      Tony Luck 提交于
      __per_cpu_idtrs is statically allocated ... on CONFIG_NR_CPUS=4096
      systems it hogs 16MB of memory. This is way too much for a quite
      probably unused facility (only KVM uses dynamic TR registers).
      
      Change to an array of pointers, and allocate entries as needed on
      a per cpu basis.  Change the name too as the __per_cpu_ prefix is
      confusing (this isn't a classic <linux/percpu.h> type object).
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      6c57a332
  4. 10 10月, 2009 1 次提交
  5. 18 6月, 2009 1 次提交
    • M
      [IA64] Convert ia64 to use int-ll64.h · e088a4ad
      Matthew Wilcox 提交于
      It is generally agreed that it would be beneficial for u64 to be an
      unsigned long long on all architectures.  ia64 (in common with several
      other 64-bit architectures) currently uses unsigned long.  Migrating
      piecemeal is too painful; this giant patch fixes all compilation warnings
      and errors that come as a result of switching to use int-ll64.h.
      
      Note that userspace will still see __u64 defined as unsigned long.  This
      is important as it affects C++ name mangling.
      
      [Updated by Tony Luck to change efi.h:efi_freemem_callback_t to use
       u64 for start/end rather than unsigned long]
      Signed-off-by: NMatthew Wilcox <willy@linux.intel.com>
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      e088a4ad
  6. 16 3月, 2009 1 次提交
  7. 18 10月, 2008 1 次提交
  8. 30 4月, 2008 1 次提交
  9. 05 4月, 2008 2 次提交
  10. 04 4月, 2008 1 次提交
  11. 19 12月, 2007 1 次提交
    • D
      [IA64] Avoid unnecessary TLB flushes when allocating memory · aec103bf
      de Dinechin, Christophe (Integrity VM) 提交于
      Improve performance of memory allocations on ia64 by avoiding a global TLB
      purge to purge a single page from the file cache. This happens whenever we
      evict a page from the buffer cache to make room for some other allocation.
      
      Test case: Run 'find /usr -type f | xargs cat > /dev/null' in the
      background to fill the buffer cache, then run something that uses memory,
      e.g. 'gmake -j50 install'. Instrumentation showed that the number of
      global TLB purges went from a few millions down to about 170 over a 12
      hours run of the above.
      
      The performance impact is particularly noticeable under virtualization,
      because a virtual TLB is generally both larger and slower to purge than
      a physical one.
      Signed-off-by: NChristophe de Dinechin <ddd@hp.com>
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      aec103bf
  12. 08 12月, 2007 1 次提交
  13. 12 7月, 2007 1 次提交
  14. 09 5月, 2007 1 次提交
  15. 01 7月, 2006 1 次提交
  16. 28 3月, 2006 1 次提交
    • C
      [IA64] optimize flush_tlb_range on large numa box · ce9eed5a
      Chen, Kenneth W 提交于
      It was reported from a field customer that global spin lock ptcg_lock
      is giving a lot of grief on munmap performance running on a large numa
      machine.  What appears to be a problem coming from flush_tlb_range(),
      which currently unconditionally calls platform_global_tlb_purge().
      For some of the numa machines in existence today, this function is
      mapped into ia64_global_tlb_purge(), which holds ptcg_lock spin lock
      while executing ptc.ga instruction.
      
      Here is a patch that attempt to avoid global tlb purge whenever
      possible.  It will use local tlb purge as much as possible. Though the
      conditions to use local tlb purge is pretty restrictive.  One of the
      side effect of having flush tlb range instruction on ia64 is that
      kernel don't get a chance to clear out cpu_vm_mask.  On ia64, this mask
      is sticky and it will accumulate if process bounces around.  Thus
      diminishing the possible use of ptc.l.  Thoughts?
      Signed-off-by: NKen Chen <kenneth.w.chen@intel.com>
      Acked-by: NJack Steiner <steiner@sgi.com>
      Acked-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      ce9eed5a
  17. 14 1月, 2006 1 次提交
    • J
      [IA64] Hole in IA64 TLB flushing from system threads · cfbb1426
      Jack Steiner 提交于
      I originally thought this was an bug only in the SN code, but I think I
      also see a hole in the generic IA64 tlb code. (Separate patch was sent
      for the SN problem).
      
      It looks like there is a bug in the TLB flushing code. During context switch,
      kernel threads (kswapd, for example) inherit the mm of the task that was
      previously running on the cpu. Normally, this is ok because the previous context
      is still loaded into the RR registers. However, if the owner of the mm
      migrates to another cpu, changes it's context number, and references a
      page before kswapd issues a tlb_purge for that same page, the purge will be
      done with a stale context number (& RR registers).
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      cfbb1426
  18. 04 11月, 2005 1 次提交
  19. 01 11月, 2005 1 次提交
  20. 30 10月, 2005 1 次提交
    • H
      [PATCH] mm: flush_tlb_range outside ptlock · 663b97f7
      Hugh Dickins 提交于
      There was one small but very significant change in the previous patch:
      mprotect's flush_tlb_range fell outside the page_table_lock: as it is in 2.4,
      but that doesn't prove it safe in 2.6.
      
      On some architectures flush_tlb_range comes to the same as flush_tlb_mm, which
      has always been called from outside page_table_lock in dup_mmap, and is so
      proved safe.  Others required a deeper audit: I could find no reliance on
      page_table_lock in any; but in ia64 and parisc found some code which looks a
      bit as if it might want preemption disabled.  That won't do any actual harm,
      so pending a decision from the maintainers, disable preemption there.
      
      Remove comments on page_table_lock from flush_tlb_mm, flush_tlb_range and
      flush_tlb_page entries in cachetlb.txt: they were rather misleading (what
      generic code does is different from what usually happens), the rules are now
      changing, and it's not yet clear where we'll end up (will the generic
      tlb_flush_mmu happen always under lock?  never under lock?  or sometimes under
      and sometimes not?).
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      663b97f7
  21. 28 10月, 2005 1 次提交
    • D
      [IA64] - Avoid slow TLB purges on SGI Altix systems · c1902aae
      Dean Roe 提交于
      flush_tlb_all() can be a scaling issue on large SGI Altix systems
      since it uses the global call_lock and always executes on all cpus.
      When a process enters flush_tlb_range() to purge TLBs for another
      process, it is possible to avoid flush_tlb_all() and instead allow
      sn2_global_tlb_purge() to purge TLBs only where necessary.
      
      This patch modifies flush_tlb_range() so that this case can be handled
      by platform TLB purge functions and updates ia64_global_tlb_purge()
      accordingly.  sn2_global_tlb_purge() now calculates the region register
      value from the mm argument introduced with this patch.
      Signed-off-by: NDean Roe <roe@sgi.com>
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      c1902aae
  22. 26 10月, 2005 1 次提交
  23. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4