* [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts @ 2022-01-24 9:26 Loic Poulain 2022-01-26 18:22 ` Rafael J. Wysocki 0 siblings, 1 reply; 7+ messages in thread From: Loic Poulain @ 2022-01-24 9:26 UTC (permalink / raw) To: rafael, len.brown, pavel; +Cc: linux-pm, gregkh, Loic Poulain Most of the time, system wakeup is caused by a wakeup-enabled interrupt, but the accounting is not done for the related wakeup source, causing 'wrong' values reported by device's wakeup attributes and debugfs stats (debug/wakeup_sources). This change reports a wakeup event for any wakeup-sources the irq is attached with. Note: This only works for drivers explicitly attaching the irq to a given device (e.g. with dev_pm_set_wake_irq). Note2: Some drivers call pm_wakeup_event() in their irq handler, but not all, moreover, an interrupt can be disabled while being flagged as wakeup source, and so accounting must be performed. This solution ensures that accounting will always be done for the interrupt waking up the host. Signed-off-by: Loic Poulain <loic.poulain@linaro.org> --- drivers/base/power/wakeup.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index 99bda0da..2d75e057 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -952,8 +952,19 @@ void pm_wakeup_clear(bool reset) void pm_system_irq_wakeup(unsigned int irq_number) { if (pm_wakeup_irq == 0) { + struct wakeup_source *ws; + int srcuidx; + pm_wakeup_irq = irq_number; pm_system_wakeup(); + + /* wakeup accounting */ + srcuidx = srcu_read_lock(&wakeup_srcu); + list_for_each_entry_rcu(ws, &wakeup_sources, entry) { + if (ws->wakeirq && ws->wakeirq->irq == irq_number) + pm_wakeup_ws_event(ws, 0, false); + } + srcu_read_unlock(&wakeup_srcu, srcuidx); } } -- 2.7.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts 2022-01-24 9:26 [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts Loic Poulain @ 2022-01-26 18:22 ` Rafael J. Wysocki 2022-01-27 9:02 ` Loic Poulain 0 siblings, 1 reply; 7+ messages in thread From: Rafael J. Wysocki @ 2022-01-26 18:22 UTC (permalink / raw) To: Loic Poulain Cc: Rafael J. Wysocki, Len Brown, Pavel Machek, Linux PM, Greg Kroah-Hartman On Mon, Jan 24, 2022 at 10:14 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > Most of the time, system wakeup is caused by a wakeup-enabled > interrupt, but the accounting is not done for the related wakeup > source, causing 'wrong' values reported by device's wakeup attributes > and debugfs stats (debug/wakeup_sources). > > This change reports a wakeup event for any wakeup-sources the irq is > attached with. > > Note: This only works for drivers explicitly attaching the irq to > a given device (e.g. with dev_pm_set_wake_irq). > > Note2: Some drivers call pm_wakeup_event() in their irq handler, but > not all, moreover, an interrupt can be disabled while being flagged > as wakeup source, and so accounting must be performed. This solution > ensures that accounting will always be done for the interrupt waking > up the host. > > Signed-off-by: Loic Poulain <loic.poulain@linaro.org> > --- > drivers/base/power/wakeup.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > index 99bda0da..2d75e057 100644 > --- a/drivers/base/power/wakeup.c > +++ b/drivers/base/power/wakeup.c > @@ -952,8 +952,19 @@ void pm_wakeup_clear(bool reset) > void pm_system_irq_wakeup(unsigned int irq_number) > { > if (pm_wakeup_irq == 0) { > + struct wakeup_source *ws; > + int srcuidx; > + > pm_wakeup_irq = irq_number; > pm_system_wakeup(); > + > + /* wakeup accounting */ > + srcuidx = srcu_read_lock(&wakeup_srcu); This is called from interrupt context, so srcu_read_lock() cannot be used here. > + list_for_each_entry_rcu(ws, &wakeup_sources, entry) { > + if (ws->wakeirq && ws->wakeirq->irq == irq_number) > + pm_wakeup_ws_event(ws, 0, false); > + } > + srcu_read_unlock(&wakeup_srcu, srcuidx); > } > } > > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts 2022-01-26 18:22 ` Rafael J. Wysocki @ 2022-01-27 9:02 ` Loic Poulain 2022-01-27 19:04 ` Rafael J. Wysocki 0 siblings, 1 reply; 7+ messages in thread From: Loic Poulain @ 2022-01-27 9:02 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Len Brown, Pavel Machek, Linux PM, Greg Kroah-Hartman Hi Rafael, On Wed, 26 Jan 2022 at 19:23, Rafael J. Wysocki <rafael@kernel.org> wrote: > > On Mon, Jan 24, 2022 at 10:14 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > Most of the time, system wakeup is caused by a wakeup-enabled > > interrupt, but the accounting is not done for the related wakeup > > source, causing 'wrong' values reported by device's wakeup attributes > > and debugfs stats (debug/wakeup_sources). > > > > This change reports a wakeup event for any wakeup-sources the irq is > > attached with. > > > > Note: This only works for drivers explicitly attaching the irq to > > a given device (e.g. with dev_pm_set_wake_irq). > > > > Note2: Some drivers call pm_wakeup_event() in their irq handler, but > > not all, moreover, an interrupt can be disabled while being flagged > > as wakeup source, and so accounting must be performed. This solution > > ensures that accounting will always be done for the interrupt waking > > up the host. > > > > Signed-off-by: Loic Poulain <loic.poulain@linaro.org> > > --- > > drivers/base/power/wakeup.c | 11 +++++++++++ > > 1 file changed, 11 insertions(+) > > > > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > > index 99bda0da..2d75e057 100644 > > --- a/drivers/base/power/wakeup.c > > +++ b/drivers/base/power/wakeup.c > > @@ -952,8 +952,19 @@ void pm_wakeup_clear(bool reset) > > void pm_system_irq_wakeup(unsigned int irq_number) > > { > > if (pm_wakeup_irq == 0) { > > + struct wakeup_source *ws; > > + int srcuidx; > > + > > pm_wakeup_irq = irq_number; > > pm_system_wakeup(); > > + > > + /* wakeup accounting */ > > + srcuidx = srcu_read_lock(&wakeup_srcu); > > This is called from interrupt context, so srcu_read_lock() cannot be used here. AFAIU from srcu.h, it is not prohibited, right? and we are not blocking while locked here. Regards, Loic > > > > + list_for_each_entry_rcu(ws, &wakeup_sources, entry) { > > + if (ws->wakeirq && ws->wakeirq->irq == irq_number) > > + pm_wakeup_ws_event(ws, 0, false); > > + } > > + srcu_read_unlock(&wakeup_srcu, srcuidx); > > } > > } > > > > -- > > 2.7.4 > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts 2022-01-27 9:02 ` Loic Poulain @ 2022-01-27 19:04 ` Rafael J. Wysocki 2022-01-28 10:08 ` Loic Poulain 0 siblings, 1 reply; 7+ messages in thread From: Rafael J. Wysocki @ 2022-01-27 19:04 UTC (permalink / raw) To: Loic Poulain Cc: Rafael J. Wysocki, Len Brown, Pavel Machek, Linux PM, Greg Kroah-Hartman On Thu, Jan 27, 2022 at 9:51 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > Hi Rafael, > > On Wed, 26 Jan 2022 at 19:23, Rafael J. Wysocki <rafael@kernel.org> wrote: > > > > On Mon, Jan 24, 2022 at 10:14 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > > > Most of the time, system wakeup is caused by a wakeup-enabled > > > interrupt, but the accounting is not done for the related wakeup > > > source, causing 'wrong' values reported by device's wakeup attributes > > > and debugfs stats (debug/wakeup_sources). > > > > > > This change reports a wakeup event for any wakeup-sources the irq is > > > attached with. > > > > > > Note: This only works for drivers explicitly attaching the irq to > > > a given device (e.g. with dev_pm_set_wake_irq). > > > > > > Note2: Some drivers call pm_wakeup_event() in their irq handler, but > > > not all, moreover, an interrupt can be disabled while being flagged > > > as wakeup source, and so accounting must be performed. This solution > > > ensures that accounting will always be done for the interrupt waking > > > up the host. > > > > > > Signed-off-by: Loic Poulain <loic.poulain@linaro.org> > > > --- > > > drivers/base/power/wakeup.c | 11 +++++++++++ > > > 1 file changed, 11 insertions(+) > > > > > > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > > > index 99bda0da..2d75e057 100644 > > > --- a/drivers/base/power/wakeup.c > > > +++ b/drivers/base/power/wakeup.c > > > @@ -952,8 +952,19 @@ void pm_wakeup_clear(bool reset) > > > void pm_system_irq_wakeup(unsigned int irq_number) > > > { > > > if (pm_wakeup_irq == 0) { > > > + struct wakeup_source *ws; > > > + int srcuidx; > > > + > > > pm_wakeup_irq = irq_number; > > > pm_system_wakeup(); > > > + > > > + /* wakeup accounting */ > > > + srcuidx = srcu_read_lock(&wakeup_srcu); > > > > This is called from interrupt context, so srcu_read_lock() cannot be used here. > > > AFAIU from srcu.h, it is not prohibited, right? and we are not > blocking while locked here. OK, you can do that if you release it from the same context. There are other concerns regarding this change, though. First off, it adds overhead for all systems, but the benefit is there only for the systems where wake IRQs are used. Second, it may lead to reporting the same wakeup event twice in a row if the driver decides to do that too. Is this not a problem? > > > + list_for_each_entry_rcu(ws, &wakeup_sources, entry) { > > > + if (ws->wakeirq && ws->wakeirq->irq == irq_number) > > > + pm_wakeup_ws_event(ws, 0, false); > > > + } > > > + srcu_read_unlock(&wakeup_srcu, srcuidx); > > > } > > > } > > > > > > -- > > > 2.7.4 > > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts 2022-01-27 19:04 ` Rafael J. Wysocki @ 2022-01-28 10:08 ` Loic Poulain 2022-02-16 16:59 ` Rafael J. Wysocki 0 siblings, 1 reply; 7+ messages in thread From: Loic Poulain @ 2022-01-28 10:08 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Len Brown, Pavel Machek, Linux PM, Greg Kroah-Hartman On Thu, 27 Jan 2022 at 20:05, Rafael J. Wysocki <rafael@kernel.org> wrote: > > On Thu, Jan 27, 2022 at 9:51 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > Hi Rafael, > > > > On Wed, 26 Jan 2022 at 19:23, Rafael J. Wysocki <rafael@kernel.org> wrote: > > > > > > On Mon, Jan 24, 2022 at 10:14 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > > > > > Most of the time, system wakeup is caused by a wakeup-enabled > > > > interrupt, but the accounting is not done for the related wakeup > > > > source, causing 'wrong' values reported by device's wakeup attributes > > > > and debugfs stats (debug/wakeup_sources). > > > > > > > > This change reports a wakeup event for any wakeup-sources the irq is > > > > attached with. > > > > > > > > Note: This only works for drivers explicitly attaching the irq to > > > > a given device (e.g. with dev_pm_set_wake_irq). > > > > > > > > Note2: Some drivers call pm_wakeup_event() in their irq handler, but > > > > not all, moreover, an interrupt can be disabled while being flagged > > > > as wakeup source, and so accounting must be performed. This solution > > > > ensures that accounting will always be done for the interrupt waking > > > > up the host. > > > > > > > > Signed-off-by: Loic Poulain <loic.poulain@linaro.org> > > > > --- > > > > drivers/base/power/wakeup.c | 11 +++++++++++ > > > > 1 file changed, 11 insertions(+) > > > > > > > > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > > > > index 99bda0da..2d75e057 100644 > > > > --- a/drivers/base/power/wakeup.c > > > > +++ b/drivers/base/power/wakeup.c > > > > @@ -952,8 +952,19 @@ void pm_wakeup_clear(bool reset) > > > > void pm_system_irq_wakeup(unsigned int irq_number) > > > > { > > > > if (pm_wakeup_irq == 0) { > > > > + struct wakeup_source *ws; > > > > + int srcuidx; > > > > + > > > > pm_wakeup_irq = irq_number; > > > > pm_system_wakeup(); > > > > + > > > > + /* wakeup accounting */ > > > > + srcuidx = srcu_read_lock(&wakeup_srcu); > > > > > > This is called from interrupt context, so srcu_read_lock() cannot be used here. > > > > > > AFAIU from srcu.h, it is not prohibited, right? and we are not > > blocking while locked here. > > OK, you can do that if you release it from the same context. > > There are other concerns regarding this change, though. > > First off, it adds overhead for all systems, but the benefit is there > only for the systems where wake IRQs are used. It adds very little overhead for interrupts with armed wakeup, during system suspend(ing/ed) only, other IRQs are not affected. > > Second, it may lead to reporting the same wakeup event twice in a row > if the driver decides to do that too. Is this not a problem? That's a legitimate point, but I don't see it as a big concern compared to not recording the event at all. If a driver deliberately attaches an interrupt to a wake source, it seems sane to expect that this interrupt will cause a corresponding wakeup event (should probably be documented), whatever the driver's irq handler is doing. > > > > > + list_for_each_entry_rcu(ws, &wakeup_sources, entry) { > > > > + if (ws->wakeirq && ws->wakeirq->irq == irq_number) > > > > + pm_wakeup_ws_event(ws, 0, false); > > > > + } > > > > + srcu_read_unlock(&wakeup_srcu, srcuidx); > > > > } > > > > } > > > > > > > > -- > > > > 2.7.4 > > > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts 2022-01-28 10:08 ` Loic Poulain @ 2022-02-16 16:59 ` Rafael J. Wysocki 2022-02-16 17:48 ` Loic Poulain 0 siblings, 1 reply; 7+ messages in thread From: Rafael J. Wysocki @ 2022-02-16 16:59 UTC (permalink / raw) To: Loic Poulain Cc: Rafael J. Wysocki, Len Brown, Pavel Machek, Linux PM, Greg Kroah-Hartman Sorry for the delay. On Fri, Jan 28, 2022 at 10:55 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > On Thu, 27 Jan 2022 at 20:05, Rafael J. Wysocki <rafael@kernel.org> wrote: > > > > On Thu, Jan 27, 2022 at 9:51 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > > > Hi Rafael, > > > > > > On Wed, 26 Jan 2022 at 19:23, Rafael J. Wysocki <rafael@kernel.org> wrote: > > > > > > > > On Mon, Jan 24, 2022 at 10:14 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > > > > > > > Most of the time, system wakeup is caused by a wakeup-enabled > > > > > interrupt, but the accounting is not done for the related wakeup > > > > > source, causing 'wrong' values reported by device's wakeup attributes > > > > > and debugfs stats (debug/wakeup_sources). > > > > > > > > > > This change reports a wakeup event for any wakeup-sources the irq is > > > > > attached with. > > > > > > > > > > Note: This only works for drivers explicitly attaching the irq to > > > > > a given device (e.g. with dev_pm_set_wake_irq). > > > > > > > > > > Note2: Some drivers call pm_wakeup_event() in their irq handler, but > > > > > not all, moreover, an interrupt can be disabled while being flagged > > > > > as wakeup source, and so accounting must be performed. This solution > > > > > ensures that accounting will always be done for the interrupt waking > > > > > up the host. > > > > > > > > > > Signed-off-by: Loic Poulain <loic.poulain@linaro.org> > > > > > --- > > > > > drivers/base/power/wakeup.c | 11 +++++++++++ > > > > > 1 file changed, 11 insertions(+) > > > > > > > > > > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > > > > > index 99bda0da..2d75e057 100644 > > > > > --- a/drivers/base/power/wakeup.c > > > > > +++ b/drivers/base/power/wakeup.c > > > > > @@ -952,8 +952,19 @@ void pm_wakeup_clear(bool reset) > > > > > void pm_system_irq_wakeup(unsigned int irq_number) > > > > > { > > > > > if (pm_wakeup_irq == 0) { > > > > > + struct wakeup_source *ws; > > > > > + int srcuidx; > > > > > + > > > > > pm_wakeup_irq = irq_number; > > > > > pm_system_wakeup(); > > > > > + > > > > > + /* wakeup accounting */ > > > > > + srcuidx = srcu_read_lock(&wakeup_srcu); > > > > > > > > This is called from interrupt context, so srcu_read_lock() cannot be used here. > > > > > > > > > AFAIU from srcu.h, it is not prohibited, right? and we are not > > > blocking while locked here. > > > > OK, you can do that if you release it from the same context. > > > > There are other concerns regarding this change, though. > > > > First off, it adds overhead for all systems, but the benefit is there > > only for the systems where wake IRQs are used. > > It adds very little overhead for interrupts with armed wakeup, during > system suspend(ing/ed) only, other IRQs are not affected. > > > > > Second, it may lead to reporting the same wakeup event twice in a row > > if the driver decides to do that too. Is this not a problem? > > That's a legitimate point, but I don't see it as a big concern > compared to not recording the event at all. If a driver deliberately > attaches an interrupt to a wake source, it seems sane to expect that > this interrupt will cause a corresponding wakeup event (should > probably be documented), whatever the driver's irq handler is doing. This needs to be rebased on top of 5.17-rc4 after a somewhat related bug fix that went into it. Moreover, I think that you'd want to do the below for all of the wakeup interrupts that trigger, not just for the first one. Also, the problem mentioned in the changelog is not limited to devices having dedicated wakeup IRQs, but the proposed approach to address it is. Why are the other cases not relevant? > > > > > > > + list_for_each_entry_rcu(ws, &wakeup_sources, entry) { > > > > > + if (ws->wakeirq && ws->wakeirq->irq == irq_number) > > > > > + pm_wakeup_ws_event(ws, 0, false); > > > > > + } > > > > > + srcu_read_unlock(&wakeup_srcu, srcuidx); > > > > > } > > > > > } > > > > > > > > > > -- > > > > > 2.7.4 > > > > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts 2022-02-16 16:59 ` Rafael J. Wysocki @ 2022-02-16 17:48 ` Loic Poulain 0 siblings, 0 replies; 7+ messages in thread From: Loic Poulain @ 2022-02-16 17:48 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: Len Brown, Pavel Machek, Linux PM, Greg Kroah-Hartman On Wed, 16 Feb 2022 at 17:59, Rafael J. Wysocki <rafael@kernel.org> wrote: > > Sorry for the delay. > > On Fri, Jan 28, 2022 at 10:55 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > On Thu, 27 Jan 2022 at 20:05, Rafael J. Wysocki <rafael@kernel.org> wrote: > > > > > > On Thu, Jan 27, 2022 at 9:51 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > > > > > Hi Rafael, > > > > > > > > On Wed, 26 Jan 2022 at 19:23, Rafael J. Wysocki <rafael@kernel.org> wrote: > > > > > > > > > > On Mon, Jan 24, 2022 at 10:14 AM Loic Poulain <loic.poulain@linaro.org> wrote: > > > > > > > > > > > > Most of the time, system wakeup is caused by a wakeup-enabled > > > > > > interrupt, but the accounting is not done for the related wakeup > > > > > > source, causing 'wrong' values reported by device's wakeup attributes > > > > > > and debugfs stats (debug/wakeup_sources). > > > > > > > > > > > > This change reports a wakeup event for any wakeup-sources the irq is > > > > > > attached with. > > > > > > > > > > > > Note: This only works for drivers explicitly attaching the irq to > > > > > > a given device (e.g. with dev_pm_set_wake_irq). > > > > > > > > > > > > Note2: Some drivers call pm_wakeup_event() in their irq handler, but > > > > > > not all, moreover, an interrupt can be disabled while being flagged > > > > > > as wakeup source, and so accounting must be performed. This solution > > > > > > ensures that accounting will always be done for the interrupt waking > > > > > > up the host. > > > > > > > > > > > > Signed-off-by: Loic Poulain <loic.poulain@linaro.org> > > > > > > --- > > > > > > drivers/base/power/wakeup.c | 11 +++++++++++ > > > > > > 1 file changed, 11 insertions(+) > > > > > > > > > > > > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > > > > > > index 99bda0da..2d75e057 100644 > > > > > > --- a/drivers/base/power/wakeup.c > > > > > > +++ b/drivers/base/power/wakeup.c > > > > > > @@ -952,8 +952,19 @@ void pm_wakeup_clear(bool reset) > > > > > > void pm_system_irq_wakeup(unsigned int irq_number) > > > > > > { > > > > > > if (pm_wakeup_irq == 0) { > > > > > > + struct wakeup_source *ws; > > > > > > + int srcuidx; > > > > > > + > > > > > > pm_wakeup_irq = irq_number; > > > > > > pm_system_wakeup(); > > > > > > + > > > > > > + /* wakeup accounting */ > > > > > > + srcuidx = srcu_read_lock(&wakeup_srcu); > > > > > > > > > > This is called from interrupt context, so srcu_read_lock() cannot be used here. > > > > > > > > > > > > AFAIU from srcu.h, it is not prohibited, right? and we are not > > > > blocking while locked here. > > > > > > OK, you can do that if you release it from the same context. > > > > > > There are other concerns regarding this change, though. > > > > > > First off, it adds overhead for all systems, but the benefit is there > > > only for the systems where wake IRQs are used. > > > > It adds very little overhead for interrupts with armed wakeup, during > > system suspend(ing/ed) only, other IRQs are not affected. > > > > > > > > Second, it may lead to reporting the same wakeup event twice in a row > > > if the driver decides to do that too. Is this not a problem? > > > > That's a legitimate point, but I don't see it as a big concern > > compared to not recording the event at all. If a driver deliberately > > attaches an interrupt to a wake source, it seems sane to expect that > > this interrupt will cause a corresponding wakeup event (should > > probably be documented), whatever the driver's irq handler is doing. > > This needs to be rebased on top of 5.17-rc4 after a somewhat related > bug fix that went into it. Ok > > > Moreover, I think that you'd want to do the below for all of the > wakeup interrupts that trigger, not just for the first one. Yes you're right, it makes sense. > > > Also, the problem mentioned in the changelog is not limited to devices > having dedicated wakeup IRQs, but the proposed approach to address it > is. Why are the other cases not relevant? Not sure to understand what other cases you are referring to? here we ensure that interrupts bound to a wakeup-source trigger the corresponding wakeup event. So the ones configured via one of the dev_pm_set_(dedicated_)wake_irq functions. But many drivers do not explicitly attach IRQ as device's wake-irq, so there is no attached wakeup-source to manage in that case. > > > > > > > > > > > + list_for_each_entry_rcu(ws, &wakeup_sources, entry) { > > > > > > + if (ws->wakeirq && ws->wakeirq->irq == irq_number) > > > > > > + pm_wakeup_ws_event(ws, 0, false); > > > > > > + } > > > > > > + srcu_read_unlock(&wakeup_srcu, srcuidx); > > > > > > } > > > > > > } > > > > > > > > > > > > -- > > > > > > 2.7.4 > > > > > > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-02-16 17:48 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-01-24 9:26 [RESEND PATCH] PM: wakeup: Wakeup accounting for interrupts Loic Poulain 2022-01-26 18:22 ` Rafael J. Wysocki 2022-01-27 9:02 ` Loic Poulain 2022-01-27 19:04 ` Rafael J. Wysocki 2022-01-28 10:08 ` Loic Poulain 2022-02-16 16:59 ` Rafael J. Wysocki 2022-02-16 17:48 ` Loic Poulain
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).