• T
    [PATCH] libata-eh-fw: implement freeze/thaw · e3180499
    Tejun Heo 提交于
    Freezing is performed atomic w.r.t. host_set->lock and once frozen
    LLDD is not allowed to access the port or any qc on it.  Also, libata
    makes sure that no new qc gets issued to a frozen port.
    
    A frozen port is thawed after a reset operation completes
    successfully, so reset methods must do its job while the port is
    frozen.  During initialization all ports get frozen before requesting
    IRQ, so reset methods are always invoked on a frozen port.
    
    Optional ->freeze and ->thaw operations notify LLDD that the port is
    being frozen and thawed, respectively.  LLDD can disable/enable
    hardware interrupt in these callbacks if the controller's IRQ mask can
    be changed dynamically.  If the controller doesn't allow such
    operation, LLDD can check for frozen state in the interrupt handler
    and ack/clear interrupts unconditionally while frozen.
    Signed-off-by: NTejun Heo <htejun@gmail.com>
    e3180499
libata.h 29.4 KB