Message ID | 1568244905-66625-1-git-send-email-decui@microsoft.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | scsi: storvsc: Add the support of hibernation | expand |
> From: linux-scsi-owner@vger.kernel.org <linux-scsi-owner@vger.kernel.org> > On Behalf Of kbuild test robot > Sent: Thursday, September 12, 2019 1:54 PM > To: Dexuan Cui <decui@microsoft.com> > Cc: kbuild-all@01.org; KY Srinivasan <kys@microsoft.com>; Haiyang Zhang > <haiyangz@microsoft.com>; Stephen Hemminger > <sthemmin@microsoft.com>; sashal@kernel.org; jejb@linux.ibm.com; > martin.petersen@oracle.com; linux-hyperv@vger.kernel.org; > linux-scsi@vger.kernel.org; linux-kernel@vger.kernel.org; Michael Kelley > <mikelley@microsoft.com>; Dexuan Cui <decui@microsoft.com> > Subject: Re: [PATCH] scsi: storvsc: Add the support of hibernation > > Hi Dexuan, > > Thank you for the patch! Yet something to improve: > > [auto build test ERROR on linus/master] > [cannot apply to v5.3-rc8 next-20190904] > [if your patch is applied to the wrong git tree, please drop us a note to help > improve the system] > > >> drivers//scsi/storvsc_drv.c:1982:3: error: 'struct hv_driver' has no member > named 'suspend' > .suspend = storvsc_suspend, > ^~~~~~~ This build failure is expected: In the patch mail, I mentioned this patch has a build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: Implement suspend/resume for VSC drivers for hibernation"), which is on Sasha Levin's Hyper-V tree's hyperv-next branch: https://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git/log/?h=hyperv-next Thanks, -- Dexuan
Dexuan, > When we're in storvsc_suspend(), we're sure the SCSI layer has > quiesced the scsi device by scsi_bus_suspend() -> ... -> > scsi_device_quiesce(), so the low level SCSI adapter driver only needs > to suspend/resume its own state. Acked-by: Martin K. Petersen <martin.petersen@oracle.com>
On Fri, Sep 13, 2019 at 06:47:38PM -0400, Martin K. Petersen wrote: > >Dexuan, > >> When we're in storvsc_suspend(), we're sure the SCSI layer has >> quiesced the scsi device by scsi_bus_suspend() -> ... -> >> scsi_device_quiesce(), so the low level SCSI adapter driver only needs >> to suspend/resume its own state. > >Acked-by: Martin K. Petersen <martin.petersen@oracle.com> Queued up for hyperv-next, thanks! -- Thanks, Sasha
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c index ed8b9ac..9fbf604 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c @@ -1727,6 +1727,13 @@ enum { MODULE_DEVICE_TABLE(vmbus, id_table); +static const struct { guid_t guid; } fc_guid = { HV_SYNTHFC_GUID }; + +static bool hv_dev_is_fc(struct hv_device *hv_dev) +{ + return guid_equal(&fc_guid.guid, &hv_dev->dev_type); +} + static int storvsc_probe(struct hv_device *device, const struct hv_vmbus_device_id *dev_id) { @@ -1935,11 +1942,45 @@ static int storvsc_remove(struct hv_device *dev) return 0; } +static int storvsc_suspend(struct hv_device *hv_dev) +{ + struct storvsc_device *stor_device = hv_get_drvdata(hv_dev); + struct Scsi_Host *host = stor_device->host; + struct hv_host_device *host_dev = shost_priv(host); + + storvsc_wait_to_drain(stor_device); + + drain_workqueue(host_dev->handle_error_wq); + + vmbus_close(hv_dev->channel); + + memset(stor_device->stor_chns, 0, + num_possible_cpus() * sizeof(void *)); + + kfree(stor_device->stor_chns); + stor_device->stor_chns = NULL; + + cpumask_clear(&stor_device->alloced_cpus); + + return 0; +} + +static int storvsc_resume(struct hv_device *hv_dev) +{ + int ret; + + ret = storvsc_connect_to_vsp(hv_dev, storvsc_ringbuffer_size, + hv_dev_is_fc(hv_dev)); + return ret; +} + static struct hv_driver storvsc_drv = { .name = KBUILD_MODNAME, .id_table = id_table, .probe = storvsc_probe, .remove = storvsc_remove, + .suspend = storvsc_suspend, + .resume = storvsc_resume, .driver = { .probe_type = PROBE_PREFER_ASYNCHRONOUS, },
When we're in storvsc_suspend(), we're sure the SCSI layer has quiesced the scsi device by scsi_bus_suspend() -> ... -> scsi_device_quiesce(), so the low level SCSI adapter driver only needs to suspend/resume its own state. Signed-off-by: Dexuan Cui <decui@microsoft.com> --- This patch is basically a pure Hyper-V specific change and it has a build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: Implement suspend/resume for VSC drivers for hibernation"), which is on Sasha Levin's Hyper-V tree's hyperv-next branch: https://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git/log/?h=hyperv-next I request this patch should go through Sasha's tree rather than the SCSI tree. drivers/scsi/storvsc_drv.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)