libata: implement ATA_PFLAG_RESETTING
Implement ATA_PFLAG_RESETTING. This flag is set while reset is in progress. It's set before prereset is called and cleared after reset fails or postreset is finished. This flag itself doesn't have any function. It will be used by LLDs to tell whether reset is in progress if it needs to behave differently during reset. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
2b789108fc
commit
afaa5c373d
2 changed files with 12 additions and 0 deletions
|
@ -2063,6 +2063,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
|
|||
ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
|
||||
ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
|
||||
{
|
||||
struct ata_port *ap = link->ap;
|
||||
struct ata_eh_context *ehc = &link->eh_context;
|
||||
unsigned int *classes = ehc->classes;
|
||||
int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
|
||||
|
@ -2071,9 +2072,14 @@ int ata_eh_reset(struct ata_link *link, int classify,
|
|||
unsigned long deadline;
|
||||
unsigned int action;
|
||||
ata_reset_fn_t reset;
|
||||
unsigned long flags;
|
||||
int rc;
|
||||
|
||||
/* about to reset */
|
||||
spin_lock_irqsave(ap->lock, flags);
|
||||
ap->pflags |= ATA_PFLAG_RESETTING;
|
||||
spin_unlock_irqrestore(ap->lock, flags);
|
||||
|
||||
ata_eh_about_to_do(link, NULL, ehc->i.action & ATA_EH_RESET_MASK);
|
||||
|
||||
/* Determine which reset to use and record in ehc->i.action.
|
||||
|
@ -2231,6 +2237,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
|
|||
out:
|
||||
/* clear hotplug flag */
|
||||
ehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
|
||||
|
||||
spin_lock_irqsave(ap->lock, flags);
|
||||
ap->pflags &= ~ATA_PFLAG_RESETTING;
|
||||
spin_unlock_irqrestore(ap->lock, flags);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -210,6 +210,7 @@ enum {
|
|||
ATA_PFLAG_UNLOADING = (1 << 5), /* module is unloading */
|
||||
ATA_PFLAG_SCSI_HOTPLUG = (1 << 6), /* SCSI hotplug scheduled */
|
||||
ATA_PFLAG_INITIALIZING = (1 << 7), /* being initialized, don't touch */
|
||||
ATA_PFLAG_RESETTING = (1 << 8), /* reset in progress */
|
||||
|
||||
ATA_PFLAG_SUSPENDED = (1 << 17), /* port is suspended (power) */
|
||||
ATA_PFLAG_PM_PENDING = (1 << 18), /* PM operation pending */
|
||||
|
|
Loading…
Reference in a new issue