Re: [PATCH v3 0/2] scsi: libsas: Support spinup notification for SAS devices
yangxingui <[email protected]> Tue, 4 Aug 2026 17:30:15 +0800
| Newsgroups | gmane.linux.kernel,gmane.linux.scsi |
|---|---|
| Message-ID | <[email protected]> |
Hi John On 2026/8/4 15:35, John Garry wrote: > On 03/08/2026 03:05, Xingui Yang wrote: >> When a SAS device is in the Active_Wait or Idle_Wait power state, it >> returns NOT_READY with ASC/ASCQ = 0x04/0x11 (notify (enable spinup) >> required), indicating that a NOTIFY(ENABLE SPINUP) primitive is needed to >> trigger media spinup. >> >> Without handling this condition, the SCSI mid-layer will indefinitely >> retry >> the command with ACTION_DELAYED_RETRY, resulting in the disk never >> spinning >> up and becoming unusable. A typical manifestation is: >> >> sd 4:0:9:0: [sde] Spinning up disk... >> ...not responding... >> sd 4:0:9:0: [sde] Sense Key : Not Ready >> sd 4:0:9:0: [sde] Add. Sense: Logical unit not ready, notify >> (enable spinup) required >> >> To resolve this, the SAS controller needs to send a NOTIFY(ENABLE SPINUP) >> primitive to the target phy, which transitions the device out of the >> waiting state and allows normal spinup to proceed. >> > > How would other SAS HBAs which use libsas handle this scenario? Since > they have FW, would the FW automatically issue this NOTIFY(ENABLE SPINUP)? > > I just wonder why hisi_sas seems to be only driver which would need this. Thanks for the question. This affects only SAS HDDs. I checked pm8001, isci, and aic94xx — all handle NOTIFY(ENABLE SPINUP) at the driver level: - pm8001: sends once at phy-up, then mdelay(200) — comment: "delay a moment to wait disk to spinup" — before notifying libsas. - isci: enables hardware periodic insertion during link idle (ENABLE bit in notify_enable_spinup_control), cleared at phy stop. - aic94xx: enables microcode periodic insertion during link idle (NOTIFY_TIMER_TIMEOUT = 500ms interval), stops at phy down. hisi_sas also calls sl_notify_ssp() at phy-up, but the NOTIFY_EN bit is held for only 1ms — msleep(1) between setting and clearing — before immediately notifying libsas. The root cause appears to be that 1ms is insufficient compared to pm8001's 200ms. An alternative to hisi_sas would be to simply increase the hold time in sl_notify_ssp() to match pm8001's approach, keeping the fix within hisi_sas. Would you prefer this simpler approach, or do you still see value in the libsas-level sense detection and callback from hisi_sas? ^-^ Thanks, Xingui Yang