linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: John Garry <john.garry@huawei.com>
To: chenxiang <chenxiang66@hisilicon.com>, <jejb@linux.ibm.com>,
	<martin.petersen@oracle.com>
Cc: <linux-scsi@vger.kernel.org>, <linuxarm@huawei.com>
Subject: Re: [PATCH 00/15] Add runtime PM support for libsas
Date: Tue, 14 Dec 2021 11:52:11 +0000	[thread overview]
Message-ID: <71fd6690-8fc3-896a-ddab-9a46fb79e929@huawei.com> (raw)
In-Reply-To: <1637117108-230103-1-git-send-email-chenxiang66@hisilicon.com>

On 17/11/2021 02:44, chenxiang wrote:
> From: Xiang Chen<chenxiang66@hisilicon.com>
> 

Please consider this rewrite:

Currently the HiSilicon SAS controller v3 hw driver supports runtime PM. 
However a number of corner-case bugs have been reported for this 
feature. These include:
a. If a directly-attached disk is removed when the host is suspended a 
system hang may occur during resume. libsas drains events after resuming 
the host. Draining the events causes a deadlock as we need to ensure 
that the host is resumed for some libsas events processing, however the 
resume process will not complete until all events are processed.
b. If a disk is attached to an expander when the host is suspended then 
this new disk will not be detected when active again.
c. The host controller may not resume from suspension when sending SMP IOs.
d. If a phy comes up when resuming the host controller then we may get a 
deadlock from processing of events DISCE_DISCOVER_DOMAIN and 
PORTE_BYTES_DMAED.
e. Similar to d., the work of PORTE_BROADCAST_RCVD and PORTE_BYTES_DMAED 
may deadlock.

This series addresses those issues, briefly described as follows:
a. As far as we can see, this drain is unneeded, so conditionally remove.
b. Just insert broadcast events to revalidate the topology.
c. and e. When processing any events from the LLD, make libsas keep the 
host active until finished processing all work related to that original 
event.
d. Defer phyup event processing in case described.


> Right now hisi_sas driver has already supported runtime PM, and it works
> well on base functions. But for some exception situations, there are some
> issues related to libsas layer:
> - Remove a directly attached disk when sas host is suspended, a hang will
> occur in the resume process, patch 1~2 solve the issue;
> - Insert a new disk (for expander) during suspended, and the disk is not
> revalidated when resuming sas host, patch 4~7 solve the issue;
> - SMP IOs from libsas may be sending when sas host is suspended, so resume
> sas host when sending SMP IOs in patch 9;
> - New phyup may occur during the process of resuming controller, then work
> of DISCE_DISCOVER_DOMAIN of a new phy and work PORTE_BYTES_DMAED of suspended
> phy are blocked by each other, so defer works of new phys during suspend
> in patch 10~12;
> - Work PORTE_BROADCAST_RCVD and PORTE_BYTES_DMAED are in the same
> workqueue, but it is possible that they are blocked by each other,
> so keep sas host active until finished some work in patch 14.
> 
> And patch 3 which is related to scsi/block PM is from Alan Stern
> (https://lore.kernel.org/linux-scsi/20210714161027.GC380727@rowland.harvard.edu/)


  parent reply	other threads:[~2021-12-14 11:52 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-17  2:44 [PATCH 00/15] Add runtime PM support for libsas chenxiang
2021-11-17  2:44 ` [PATCH 01/15] libsas: Don't always drain event workqueue for HA resume chenxiang
2021-11-17  4:14   ` Bart Van Assche
2021-11-17  5:06     ` Bart Van Assche
2021-11-17  2:44 ` [PATCH 02/15] Revert "scsi: hisi_sas: Filter out new PHY up events during suspend" chenxiang
2021-12-13 10:31   ` John Garry
2021-12-15  7:20     ` chenxiang (M)
2021-11-17  2:44 ` [PATCH 03/15] scsi/block PM: Always set request queue runtime active in blk_post_runtime_resume() chenxiang
2021-11-17  4:58   ` Bart Van Assche
2021-11-17  2:44 ` [PATCH 04/15] scsi: libsas: Add spin_lock/unlock() to protect asd_sas_port->phy_list chenxiang
2021-11-17  2:44 ` [PATCH 05/15] scsi: hisi_sas: Fix some issues related to asd_sas_port->phy_list chenxiang
2021-11-17  2:44 ` [PATCH 06/15] scsi: mvsas: Add spin_lock/unlock() to protect asd_sas_port->phy_list chenxiang
2021-11-17  2:45 ` [PATCH 07/15] scsi: libsas: Send event PORTE_BROADCAST_RCVD for valid ports chenxiang
2021-12-13 11:02   ` John Garry
2021-12-15  7:25     ` chenxiang (M)
2021-11-17  2:45 ` [PATCH 08/15] scsi: hisi_sas: Add more prink for runtime suspend/resume chenxiang
2021-12-13 10:34   ` John Garry
2021-12-15  7:26     ` chenxiang (M)
2021-12-13 10:35   ` John Garry
2021-12-15  7:26     ` chenxiang (M)
2021-11-17  2:45 ` [PATCH 09/15] scsi: libsas: Resume sas host before sending SMP IOs chenxiang
2021-12-13 11:12   ` John Garry
2021-12-15  8:00     ` chenxiang (M)
2021-11-17  2:45 ` [PATCH 10/15] scsi: libsas: Add a flag SAS_HA_RESUMING of sas_ha chenxiang
2021-12-13 11:17   ` John Garry
2021-12-15  7:34     ` chenxiang (M)
2021-11-17  2:45 ` [PATCH 11/15] scsi: libsas: Refactor out sas_queue_deferred_work() chenxiang
2021-12-13 11:20   ` John Garry
2021-12-15  7:59     ` chenxiang (M)
2021-11-17  2:45 ` [PATCH 12/15] scsi: libsas: Defer works of new phys during suspend chenxiang
2021-11-17  2:45 ` [PATCH 13/15] scsi: hisi_sas: Keep controller active between ISR of phyup and the event being processed chenxiang
2021-12-13 10:44   ` John Garry
2021-12-15  7:57     ` chenxiang (M)
2021-11-17  2:45 ` [PATCH 14/15] scsi: libsas: Keep sas host active until finished some work chenxiang
2021-12-14 12:34   ` John Garry
2021-12-15  7:46     ` chenxiang (M)
2021-11-17  2:45 ` [PATCH 15/15] scsi: hisi_sas: Use autosuspend for SAS controller chenxiang
2021-12-13 10:50   ` John Garry
2021-12-15  7:52     ` chenxiang (M)
2021-11-19  4:04 ` [PATCH 00/15] Add runtime PM support for libsas Martin K. Petersen
2021-11-23  6:01   ` chenxiang (M)
2021-12-14 11:52 ` John Garry [this message]
2021-12-15  7:56   ` chenxiang (M)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=71fd6690-8fc3-896a-ddab-9a46fb79e929@huawei.com \
    --to=john.garry@huawei.com \
    --cc=chenxiang66@hisilicon.com \
    --cc=jejb@linux.ibm.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=martin.petersen@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).