• Matthew Wilcox's avatar
    [PATCH] softscsi patch · aa44f80a
    Matthew Wilcox authored
    Doug Gilbert and James Bottomley hassled me all through KernelSummit &
    OLS to explain about softirqs, tasklets and bottom halves.  In the end,
    it was easier to write the code myself.  Thanks to James for pointing
    out that the pointer handling in my original code was completely broken
    and helping me debug.
    
    I've booted this patch on a 4-way system at OSDL with two Adaptec SCSI
    cards.  I haven't tried stressing it (not quite sure which discs I can
    use ;-), and I don't understand the locking in the scsi subsystem at all.
    
    The main effect of applying this patch is that scsi_softirq() [was
    scsi_tasklet_func, and before that scsi_bottom_half_handler()] can now be
    run on multiple CPUs at the same time.  We _seem_ to do enough locking
    elsewhere in the SCSI stack that this is safe.  But someone who really
    understands the SCSI stack should audit this.
    
    This work shows up a hole in the current softirq API -- there's no support
    for unregistering a softirq (close_softirq or similar).  We should do
    this in scsi_exit -- make sure no softirqs are running while we unload.
    This probably isn't a problem in practice, but it'd be nice to fix it.
    aa44f80a
scsi.c 76.1 KB