Re: [RFC PATCH v11 4/5] PCI / PM: Add support for the PCIe WAKE# signal for OF

Tony Lindgren
2018-01-03T20:08:41Z

Hi,

* Rafael J. Wysocki <rjw@rjwysocki.net> [171228 17:33]:
> So we are fine except for the race and we need the wakeirq field in wakeup
> sources to automatically arm the wakeup IRQs during suspend.
>
> If I'm not mistaken, we only need something like the patch below (untested).

Yeah for your patch below works just fine for my
test cases so:

Tested-by: Tony Lindgren <tony@atomide.com>

> ---
> drivers/base/power/wakeirq.c | 9 ++++-----
> drivers/base/power/wakeup.c | 2 +-
> 2 files changed, 5 insertions(+), 6 deletions(-)
>
> Index: linux-pm/drivers/base/power/wakeirq.c
> ===================================================================
> --- linux-pm.orig/drivers/base/power/wakeirq.c
> +++ linux-pm/drivers/base/power/wakeirq.c
> @@ -33,7 +33,6 @@ static int dev_pm_attach_wake_irq(struct
> struct wake_irq *wirq)
> {
> unsigned long flags;
> - int err;
>
> if (!dev || !wirq)
> return -EINVAL;
> @@ -45,12 +44,12 @@ static int dev_pm_attach_wake_irq(struct
> return -EEXIST;
> }
>
> - err = device_wakeup_attach_irq(dev, wirq);
> - if (!err)
> - dev->power.wakeirq = wirq;
> + dev->power.wakeirq = wirq;
> + if (dev->power.wakeup)
> + device_wakeup_attach_irq(dev, wirq);
>
> spin_unlock_irqrestore(&dev->power.lock, flags);
> - return err;
> + return 0;
> }
>
> /**
> Index: linux-pm/drivers/base/power/wakeup.c
> ===================================================================
> --- linux-pm.orig/drivers/base/power/wakeup.c
> +++ linux-pm/drivers/base/power/wakeup.c
> @@ -303,7 +303,7 @@ int device_wakeup_attach_irq(struct devi
> }
>
> if (ws->wakeirq)
> - return -EEXIST;
> + dev_err(dev, "Leftover wakeup IRQ found, overriding\n");
>
> ws->wakeirq = wakeirq;
> return 0;
>