• B
    ide: don't execute the next queued command from the hard-IRQ context (v2) · 295f0004
    Bartlomiej Zolnierkiewicz 提交于
    * Tell the block layer that we are not done handling requests by using
      blk_plug_device() in ide_do_request() (request handling function)
      and ide_timer_expiry() (timeout handler) if the queue is not empty.
    
    * Remove optimization which directly calls ide_do_request() for the next
      queued command from the ide_intr() (IRQ handler) and ide_timer_expiry().
    
    * Remove no longer needed IRQ masking from ide_do_request() - in case of
      IDE ports needing serialization disable_irq_nosync()/enable_irq() was
      used for the (possibly shared) IRQ of the other IDE port.
    
    * Put the misplaced comment in the right place in ide_do_request().
    
    * Drop no longer needed 'int masked_irq' argument from ide_do_request().
    
    * Merge ide_do_request() into do_ide_request().
    
    * Remove no longer needed IDE_NO_IRQ define.
    
    While at it:
    
    * Don't use HWGROUP() macro in do_ide_request().
    
    * Use __func__ in ide_intr().
    
    This patch reduces IRQ hadling latency for IDE and improves the system-wide
    handling of shared IRQs (which should result in more timeout resistant and
    stable IDE systems).  It also makes it possible to do some further changes
    later (i.e. replace some busy-waiting delays with sleeping equivalents).
    
    v2:
    Changes per review from Elias Oltmanns:
    - fix wrong goto statement in 'if (startstop == ide_stopped)' block
    - use spin_unlock_irq()
    - don't use obsolete HWIF() macro
    
    Cc: Elias Oltmanns <eo@nebensachen.de>
    Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    295f0004
ide-io.c 37.3 KB