lkml.org 
[lkml]   [2020]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 02/15] scsi: aacraid: use generic power management
    Date
    With legacy PM hooks, it was the responsibility of a driver to manage PCI
    states and also the device's power state. The generic approach is to let
    the PCI core handle the work.

    PCI core passes "struct device*" as an argument to the .suspend() and
    .resume() callbacks.

    Driver was using PCI helper functions like pci_save/restore_state(),
    pci_disable/enable_device(), pci_set_power_state() and pci_enable_wake().
    They should not be invoked by the driver.

    Compile-tested only.

    Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
    ---
    drivers/scsi/aacraid/linit.c | 34 ++++++++--------------------------
    1 file changed, 8 insertions(+), 26 deletions(-)

    diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
    index a308e86a97f1..1e44868ee953 100644
    --- a/drivers/scsi/aacraid/linit.c
    +++ b/drivers/scsi/aacraid/linit.c
    @@ -1910,11 +1910,9 @@ static int aac_acquire_resources(struct aac_dev *dev)

    }

    -#if (defined(CONFIG_PM))
    -static int aac_suspend(struct pci_dev *pdev, pm_message_t state)
    +static int __maybe_unused aac_suspend(struct device *dev)
    {
    -
    - struct Scsi_Host *shost = pci_get_drvdata(pdev);
    + struct Scsi_Host *shost = dev_get_drvdata(dev);
    struct aac_dev *aac = (struct aac_dev *)shost->hostdata;

    scsi_host_block(shost);
    @@ -1923,29 +1921,16 @@ static int aac_suspend(struct pci_dev *pdev, pm_message_t state)

    aac_release_resources(aac);

    - pci_set_drvdata(pdev, shost);
    - pci_save_state(pdev);
    - pci_disable_device(pdev);
    - pci_set_power_state(pdev, pci_choose_state(pdev, state));
    -
    return 0;
    }

    -static int aac_resume(struct pci_dev *pdev)
    +static int __maybe_unused aac_resume(struct device *dev)
    {
    - struct Scsi_Host *shost = pci_get_drvdata(pdev);
    + struct Scsi_Host *shost = dev_get_drvdata(dev);
    struct aac_dev *aac = (struct aac_dev *)shost->hostdata;
    - int r;

    - pci_set_power_state(pdev, PCI_D0);
    - pci_enable_wake(pdev, PCI_D0, 0);
    - pci_restore_state(pdev);
    - r = pci_enable_device(pdev);
    + device_wakeup_disable(dev);

    - if (r)
    - goto fail_device;
    -
    - pci_set_master(pdev);
    if (aac_acquire_resources(aac))
    goto fail_device;
    /*
    @@ -1960,10 +1945,8 @@ static int aac_resume(struct pci_dev *pdev)
    fail_device:
    printk(KERN_INFO "%s%d: resume failed.\n", aac->name, aac->id);
    scsi_host_put(shost);
    - pci_disable_device(pdev);
    return -ENODEV;
    }
    -#endif

    static void aac_shutdown(struct pci_dev *dev)
    {
    @@ -2108,15 +2091,14 @@ static struct pci_error_handlers aac_pci_err_handler = {
    .resume = aac_pci_resume,
    };

    +static SIMPLE_DEV_PM_OPS(aac_pm_ops, aac_suspend, aac_resume);
    +
    static struct pci_driver aac_pci_driver = {
    .name = AAC_DRIVERNAME,
    .id_table = aac_pci_tbl,
    .probe = aac_probe_one,
    .remove = aac_remove_one,
    -#if (defined(CONFIG_PM))
    - .suspend = aac_suspend,
    - .resume = aac_resume,
    -#endif
    + .driver.pm = &aac_pm_ops,
    .shutdown = aac_shutdown,
    .err_handler = &aac_pci_err_handler,
    };
    --
    2.27.0
    \
     
     \ /
      Last update: 2020-07-20 15:37    [W:4.284 / U:0.368 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site