• Benjamin Herrenschmidt's avatar
    block/swim3: Locking fixes · b3025457
    Benjamin Herrenschmidt authored
    The old PowerMac swim3 driver has some "interesting" locking issues,
    using a private lock and failing to lock the queue before completing
    requests, which triggered WARN_ONs among others.
    
    This rips out the private lock, makes everything operate under the
    block queue lock, and generally makes things simpler.
    
    We used to also share a queue between the two possible instances which
    was problematic since we might pick the wrong controller in some cases,
    so make the queue and the current request per-instance and use
    queuedata to point to our private data which is a lot cleaner.
    
    We still share the queue lock but then, it's nearly impossible to actually
    use 2 swim3's simultaneously: one would need to have a Wallstreet
    PowerBook, the only machine afaik with two of these on the motherboard,
    and populate both hotswap bays with a floppy drive (the machine ships
    only with one), so nobody cares...
    
    While at it, add a little fix to clear up stale interrupts when loading
    the driver or plugging a floppy drive in a bay.
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    b3025457
swim3.c 31.5 KB