1. 05 Jul, 2003 6 commits
    • Andrew Morton's avatar
      [PATCH] Create `kblockd' workqueue · 33c66485
      Andrew Morton authored
      keventd is inappropriate for running block request queues because keventd
      itself can get blocked on disk I/O.  Via call_usermodehelper()'s vfork and,
      presumably, GFP_KERNEL allocations.
      
      So create a new gang of kernel threads whose mandate is for running low-level
      disk operations.  It must ever block on disk IO, so any memory allocations
      should be GFP_NOIO.
      
      We mainly use it for running unplug operations from interrupt context.
      33c66485
    • Andrew Morton's avatar
      [PATCH] bring back the batch_requests function · 3abbd8ff
      Andrew Morton authored
      From: Nick Piggin <piggin@cyberone.com.au>
      
      The batch_requests function got lost during the merge of the dynamic request
      allocation patch.
      
      We need it for the anticipatory scheduler - when the number of threads
      exceeds the number of requests, the anticipated-upon task will undesirably
      sleep in get_request_wait().
      
      And apparently some block devices which use small requests need it so they
      string a decent number together.
      
      Jens has acked this patch.
      3abbd8ff
    • Andrew Morton's avatar
      [PATCH] ipc semaphore optimization · 3faa61fe
      Andrew Morton authored
      From: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
      
      This patch proposes a performance fix for the current IPC semaphore
      implementation.
      
      There are two shortcoming in the current implementation:
      try_atomic_semop() was called two times to wake up a blocked process,
      once from the update_queue() (executed from the process that wakes up
      the sleeping process) and once in the retry part of the blocked process
      (executed from the block process that gets woken up).
      
      A second issue is that when several sleeping processes that are eligible
      for wake up, they woke up in daisy chain formation and each one in turn
      to wake up next process in line.  However, every time when a process
      wakes up, it start scans the wait queue from the beginning, not from
      where it was last scanned.  This causes large number of unnecessary
      scanning of the wait queue under a situation of deep wait queue.
      Blocked processes come and go, but chances are there are still quite a
      few blocked processes sit at the beginning of that queue.
      
      What we are proposing here is to merge the portion of the code in the
      bottom part of sys_semtimedop() (code that gets executed when a sleeping
      process gets woken up) into update_queue() function.  The benefit is two
      folds: (1) is to reduce redundant calls to try_atomic_semop() and (2) to
      increase efficiency of finding eligible processes to wake up and higher
      concurrency for multiple wake-ups.
      
      We have measured that this patch improves throughput for a large
      application significantly on a industry standard benchmark.
      
      This patch is relative to 2.5.72.  Any feedback is very much
      appreciated.
      
      Some kernel profile data attached:
      
        Kernel profile before optimization:
        -----------------------------------------------
                      0.05    0.14   40805/529060      sys_semop [133]
                      0.55    1.73  488255/529060      ia64_ret_from_syscall
      [2]
      [52]     2.5    0.59    1.88  529060         sys_semtimedop [52]
                      0.05    0.83  477766/817966      schedule_timeout [62]
                      0.34    0.46  529064/989340      update_queue [61]
                      0.14    0.00 1006740/6473086     try_atomic_semop [75]
                      0.06    0.00  529060/989336      ipcperms [149]
        -----------------------------------------------
      
                      0.30    0.40  460276/989340      semctl_main [68]
                      0.34    0.46  529064/989340      sys_semtimedop [52]
      [61]     1.5    0.64    0.87  989340         update_queue [61]
                      0.75    0.00 5466346/6473086     try_atomic_semop [75]
                      0.01    0.11  477676/576698      wake_up_process [146]
        -----------------------------------------------
                      0.14    0.00 1006740/6473086     sys_semtimedop [52]
                      0.75    0.00 5466346/6473086     update_queue [61]
      [75]     0.9    0.89    0.00 6473086         try_atomic_semop [75]
        -----------------------------------------------
      
        Kernel profile with optimization:
      
        -----------------------------------------------
                      0.03    0.05   26139/503178      sys_semop [155]
                      0.46    0.92  477039/503178      ia64_ret_from_syscall
      [2]
      [61]     1.2    0.48    0.97  503178         sys_semtimedop [61]
                      0.04    0.79  470724/784394      schedule_timeout [62]
                      0.05    0.00  503178/3301773     try_atomic_semop [109]
                      0.05    0.00  503178/930934      ipcperms [149]
                      0.00    0.03   32454/460210      update_queue [99]
        -----------------------------------------------
                      0.00    0.03   32454/460210      sys_semtimedop [61]
                      0.06    0.36  427756/460210      semctl_main [75]
      [99]     0.4    0.06    0.39  460210         update_queue [99]
                      0.30    0.00 2798595/3301773     try_atomic_semop [109]
                      0.00    0.09  470630/614097      wake_up_process [146]
        -----------------------------------------------
                      0.05    0.00  503178/3301773     sys_semtimedop [61]
                      0.30    0.00 2798595/3301773     update_queue [99]
      [109]    0.3    0.35    0.00 3301773         try_atomic_semop [109]
        -----------------------------------------------=20
      
      Both number of function calls to try_atomic_semop() and update_queue()
      are reduced by 50% as a result of the merge.  Execution time of
      sys_semtimedop is reduced because of the reduction in the low level
      functions.
      3faa61fe
    • Andrew Morton's avatar
      [PATCH] PCI domain scanning fix · d8d90b60
      Andrew Morton authored
      From: Matthew Wilcox <willy@debian.org>
      
      ppc64 oopses on boot because pci_scan_bus_parented() is unexpectedly
      returning NULL.  Change pci_scan_bus_parented() to correctly handle
      overlapping PCI bus numbers on different domains.
      d8d90b60
    • Linus Torvalds's avatar
      Merge bk://ppc.bkbits.net/for-linus-ppc · b40585d0
      Linus Torvalds authored
      into home.osdl.org:/home/torvalds/v2.5/linux
      b40585d0
    • Paul Mackerras's avatar
      Merge samba.org:/home/paulus/kernel/linux-2.5 · b727fa42
      Paul Mackerras authored
      into samba.org:/home/paulus/kernel/for-linus-ppc
      b727fa42
  2. 04 Jul, 2003 15 commits
    • Ulrich Drepper's avatar
      [PATCH] wrong pid in siginfo_t · c7aa953c
      Ulrich Drepper authored
      If a signal is sent via kill() or tkill() the kernel fills in the wrong
      PID value in the siginfo_t structure (obviously only if the handler has
      SA_SIGINFO set).
      
      POSIX specifies the the si_pid field is filled with the process ID, and
      in Linux parlance that's the "thread group" ID, not the thread ID.
      c7aa953c
    • Linus Torvalds's avatar
      When forcing through a signal for some thread-synchronous · 9e008c3c
      Linus Torvalds authored
      event (ie SIGSEGV, SIGFPE etc that happens as a result of a
      trap as opposed to an external event), if the signal is
      blocked we will not invoce a signal handler, we will just
      kill the thread with the signal.
      
      This is equivalent to what we do in the SIG_IGN case: you
      cannot ignore or block synchronous signals, and if you try,
      we'll just have to kill you.
      
      We don't want to handle endless recursive faults, which the
      old behaviour easily led to if the stack was bad, for example.
      9e008c3c
    • Linus Torvalds's avatar
      Go back to defaulting to 6-byte commands for MODE SENSE, · b79c8524
      Linus Torvalds authored
      since some drivers seem to be unhappy about the 10-byte
      version. 
      
      The subsystem configuration can override this (eg USB or
      ide-scsi).
      b79c8524
    • Marc Zyngier's avatar
      [PATCH] EISA: avoid unnecessary probing · c4404d65
      Marc Zyngier authored
      - By default, do not try to probe the bus if the mainboard does not
        seems to support EISA (allow this behaviour to be changed through a
        command-line option).
      c4404d65
    • Marc Zyngier's avatar
      [PATCH] EISA: PCI-EISA dma_mask · e34121f7
      Marc Zyngier authored
      - Use parent bridge device dma_mask as default for each discovered
        device.
      e34121f7
    • Marc Zyngier's avatar
      [PATCH] EISA: PA-RISC changes · e0e5907e
      Marc Zyngier authored
      - Probe the right number of EISA slots on PA-RISC. No more, no less.
      e0e5907e
    • Marc Zyngier's avatar
      [PATCH] EISA: More EISA ids · 5fe1dbf4
      Marc Zyngier authored
      5fe1dbf4
    • Marc Zyngier's avatar
      [PATCH] EISA: Documentation update · d8d9c9e8
      Marc Zyngier authored
      d8d9c9e8
    • Marc Zyngier's avatar
      [PATCH] EISA: core changes · ddb6ee51
      Marc Zyngier authored
      - Now reserves I/O ranges according to EISA specs (four 256 bytes
        regions instead of a single 4KB region).
      
      - By default, do not try to probe the bus if the mainboard does not
        seems to support EISA (allow this behaviour to be changed through a
        command-line option).
      
      - Use parent bridge device dma_mask as default for each discovered
        device.
      
      - Allow devices to be enabled or disabled from the kernel command line
        (useful for non-x86 platforms where the firmware simply disable
        devices it doesn't know about...).
      ddb6ee51
    • Linus Torvalds's avatar
      Merge bk://kernel.bkbits.net/jgarzik/irda-2.5 · ee389f0a
      Linus Torvalds authored
      into home.osdl.org:/home/torvalds/v2.5/linux
      ee389f0a
    • Linus Torvalds's avatar
      Carl-Daniel Hailfinger suggest adding a paranoid incoming · 87d890b8
      Linus Torvalds authored
      trigger as per the "bk help triggers" suggestion, so that
      we'll see any new triggers showing up in the tree.
      
      Make it so.
      87d890b8
    • Trond Myklebust's avatar
      [PATCH] Use the intents in 'nameidata' to improve NFS close-to-open consistency · 52d1430d
      Trond Myklebust authored
        - Make use of the open intents to improve close-to-open
          cache consistency. Only force data cache revalidation when
          we're doing an open().
      
        - Add true exclusive create to NFSv3.
      
        - Optimize away the redundant ->lookup() to check for an
          existing file when we know that we're doing NFSv3 exclusive
          create.
      
        - Optimize away all ->permission() checks other than those for
          path traversal, open(), and sys_access().
      52d1430d
    • Trond Myklebust's avatar
      [PATCH] Pass 'nameidata' to ->permission() · a574f324
      Trond Myklebust authored
         - Make the VFS pass the struct nameidata as an optional parameter
           to the permission() inode operation.
      
         - Patch may_create()/may_open() so it passes the struct nameidata from
           vfs_create()/open_namei() as an argument to permission().
      
         - Add an intent flag for the sys_access() function.
      a574f324
    • Trond Myklebust's avatar
      [PATCH] Pass 'nameidata' to ->create() · 675b5da0
      Trond Myklebust authored
        - Make the VFS pass the struct nameidata as an optional argument
          to the create inode operation.
        - Patch vfs_create() to take a struct nameidata as an optional
          argument.
      675b5da0
    • Trond Myklebust's avatar
      [PATCH] Add open intent information to the 'struct nameidata' · fc8b427e
      Trond Myklebust authored
       - Add open intent information to the 'struct nameidata'.
       - Pass the struct nameidata as an optional parameter to the
         lookup() inode operation.
       - Pass the struct nameidata as an optional parameter to the
         d_revalidate() dentry operation.
       - Make link_path_walk() set the LOOKUP_CONTINUE flag in nd->flags instead
         of passing it as an extra parameter to d_revalidate().
       - Make open_namei(), and sys_uselib() set the open()/create() intent
         data.
      fc8b427e
  3. 03 Jul, 2003 19 commits