1. 26 Sep, 2002 26 commits
  2. 25 Sep, 2002 14 commits
    • Jeff Garzik's avatar
      Merge mandrakesoft.com:/home/jgarzik/repo/linus-2.5 · 7878f411
      Jeff Garzik authored
      into mandrakesoft.com:/home/jgarzik/repo/misc-2.5
      7878f411
    • Jeff Garzik's avatar
      Merge mandrakesoft.com:/home/jgarzik/repo/linus-2.5 · 94df6c69
      Jeff Garzik authored
      into mandrakesoft.com:/home/jgarzik/repo/irda-2.5
      94df6c69
    • Jeff Garzik's avatar
      Merge mandrakesoft.com:/home/jgarzik/repo/linus-2.5 · 664a55c9
      Jeff Garzik authored
      into mandrakesoft.com:/home/jgarzik/repo/net-drivers-2.5
      664a55c9
    • Albert Cranford's avatar
      d5f3435a
    • Linus Torvalds's avatar
      Merge bk://ldm.bkbits.net/linux-2.5 · 2ce067b0
      Linus Torvalds authored
      into home.transmeta.com:/home/torvalds/v2.5/linux
      2ce067b0
    • Andrew Morton's avatar
      [PATCH] tighter locking in pdflush · 4ab1a3e6
      Andrew Morton authored
      Had a weird oops from Bill Irwin - the pdflush_list was corrupt.
      
      The only thing I can think of is that something sprayed out a wakeup
      when it shouldn't.  So tighten things up against that, and add some
      printks to catch it if it happens again.
      4ab1a3e6
    • Andrew Morton's avatar
      [PATCH] speed up sys_sync() · 57eb0613
      Andrew Morton authored
      Well it's a one-liner.  sys_sync() only syncs one queue at a time, and
      can be slow if you have a lot of disks.  So poke pdflush, which knows
      how to write all the queues in parallel.
      57eb0613
    • Andrew Morton's avatar
      [PATCH] increase traffic on linux-kernel · 4f3e8109
      Andrew Morton authored
      [This has four scalps already.  Thomas Molina has agreed
       to track things as they are identified ]
      
      Infrastructure to detect sleep-inside-spinlock bugs.  Really only
      useful if compiled with CONFIG_PREEMPT=y.  It prints out a whiny
      message and a stack backtrace if someone calls a function which might
      sleep from within an atomic region.
      
      This patch generates a storm of output at boot, due to
      drivers/ide/ide-probe.c:init_irq() calling lots of things which it
      shouldn't under ide_lock.
      
      It'll find other bugs too.
      4f3e8109
    • Andrew Morton's avatar
      [PATCH] slab reclaim balancing · b65bbded
      Andrew Morton authored
      A patch from Ed Tomlinson which improves the way in which the kernel
      reclaims slab objects.
      
      The theory is: a cached object's usefulness is measured in terms of the
      number of disk seeks which it saves.  Furthermore, we assume that one
      dentry or inode saves as many seeks as one pagecache page.
      
      So we reap slab objects at the same rate as we reclaim pages.  For each
      1% of reclaimed pagecache we reclaim 1% of slab.  (Actually, we _scan_
      1% of slab for each 1% of scanned pages).
      
      Furthermore we assume that one swapout costs twice as many seeks as one
      pagecache page, and twice as many seeks as one slab object.  So we
      double the pressure on slab when anonymous pages are being considered
      for eviction.
      
      The code works nicely, and smoothly.  Possibly it does not shrink slab
      hard enough, but that is now very easy to tune up and down.  It is just:
      
      	ratio *= 3;
      
      in shrink_caches().
      
      Slab caches no longer hold onto completely empty pages.  Instead, pages
      are freed as soon as they have zero objects.  This is possibly a
      performance hit for slabs which have constructors, but it's doubtful.
      Most allocations after a batch of frees are satisfied from inside
      internally-fragmented pages and by the time slab gets back onto using
      the wholly-empty pages they'll be cache-cold.  slab would be better off
      going and requesting a new, cache-warm page and reconstructing the
      objects therein.  (Once we have the per-cpu hot-page allocator in
      place.  It's happening).
      
      As a consequence of the above, kmem_cache_shrink() is now unused.  No
      great loss there - the serialising effect of kmem_cache_shrink and its
      semaphore in front of page reclaim was measurably bad.
      
      Still todo:
      
      - batch up the shrinking so we don't call into prune_dcache and
        friends at high frequency asking for a tiny number of objects.
      
      - Maybe expose the shrink ratio via a tunable.
      
      - clean up slab.c
      
      - highmem page reclaim in prune_icache: highmem pages can pin
        inodes.
      b65bbded
    • Andrew Morton's avatar
      [PATCH] use prepare_to_wait in VM/VFS · dfdacf59
      Andrew Morton authored
      This uses the new wakeup machinery in some hot parts of the VFS and
      block layers.
      
      wait_on_buffer(), wait_on_page(), lock_page(), blk_congestion_wait().
      Also in get_request_wait(), although the benefit for exclusive wakeups
      will be lower.
      dfdacf59
    • Andrew Morton's avatar
      [PATCH] prepare_to_wait/finish_wait sleep/wakeup API · 3da08d6c
      Andrew Morton authored
      This is worth a whopping 2% on spwecweb on an 8-way.  Which is faintly
      surprising because __wake_up and other wait/wakeup functions are not
      apparent in the specweb profiles which I've seen.
      
      
      The main objective of this is to reduce the CPU cost of the wait/wakeup
      operation.  When a task is woken up, its waitqueue is removed from the
      waitqueue_head by the waker (ie: immediately), rather than by the woken
      process.
      
      This means that a subsequent wakeup does not need to revisit the
      just-woken task.  It also means that the just-woken task does not need
      to take the waitqueue_head's lock, which may well reside in another
      CPU's cache.
      
      I have no decent measurements on the effect of this change - possibly a
      20-30% drop in __wake_up cost in Badari's 40-dds-to-40-disks test (it
      was the most expensive function), but it's inconclusive.  And no
      quantitative testing of which I am aware has been performed by
      networking people.
      
      The API is very simple to use (Linus thought it up):
      
      my_func(waitqueue_head_t *wqh)
      {
      	DEFINE_WAIT(wait);
      
      	prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
      	if (!some_test)
      		schedule();
      	finish_wait(wqh, &wait);
      }
      
      or:
      
      	DEFINE_WAIT(wait);
      
      	while (!some_test_1) {
      		prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
      		if (!some_test_2)
      			schedule();
      		...
      	}
      	finish_wait(wqh, &wait);
      
      You need to bear in mind that once prepare_to_wait has been performed,
      your task could be removed from the waitqueue_head and placed into
      TASK_RUNNING at any time.  You don't know whether or not you're still
      on the waitqueue_head.
      
      Running prepare_to_wait() when you're already on the waitqueue_head is
      fine - it will do the right thing.
      
      Running finish_wait() when you're actually not on the waitqueue_head is
      fine.
      
      Running finish_wait() when you've _never_ been on the waitqueue_head is
      fine, as ling as the DEFINE_WAIT() macro was used to initialise the
      waitqueue.
      
      You don't need to fiddle with current->state.  prepare_to_wait() and
      finish_wait() will do that.  finish_wait() will always return in state
      TASK_RUNNING.
      
      There are plenty of usage examples in vm-wakeups.patch and
      tcp-wakeups.patch.
      3da08d6c
    • Andrew Morton's avatar
      [PATCH] mprotect_fixup fix · 02b1783c
      Andrew Morton authored
      From David M-T.
      
      When this function successfully merges the new range into an existing
      VMA, it forgets to extend the new protection mode into the just-merged
      pages.
      02b1783c
    • Andrew Morton's avatar
      [PATCH] hugetlb fix · 5538fdaa
      Andrew Morton authored
      Patch from Rohit Seth
      
      It fixes the problem which Andrea noted in his initial review of the
      hugetlb code:
      
      "In short doing "addr = vma->vm_end" and then checking if vm_end + len
       is below vm_next->vm_start is broken, because there's no guarantee
       that "addr" will be a largepage aligned address.  the LPAGE_ALIGN in
       found_addr should be dropped becaue moving the addr ahead without
       checking that addr+len doesn't then fall into a vma, will generate
       do_munmaps and in turn userspace mem corruption."
      5538fdaa
    • Martin J. Bligh's avatar
      [PATCH] NUMA-Q fixes · bce5aeb5
      Martin J. Bligh authored
       - Remove the const that someone incorrectly stuck in there, it type conflicts.
         Alan has a better plan for fixing this long term, but this fixes the compile
         warning for now.
      
       - Move the printk of the xquad_portio setup *after* we put something in the variable
         so it actually prints something useful, not 0 ;-)
      
       - To derive the size of the xquad_portio area, multiply the number of nodes by the
         size of each nodes, not the size of two nodes (and remove define). Doh!
      bce5aeb5