From: zzz <luuiiruo@163.com>
To: "Thomas Gleixner" <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Subject: Re:Re: [PATCH] genirq: Fix gpio irq will fail to be resend under certain conditions
Date: Tue, 11 Jun 2024 23:41:53 +0800 (CST) [thread overview]
Message-ID: <320df2de.cd42.19007f68062.Coremail.luuiiruo@163.com> (raw)
In-Reply-To: <874ja0wqfb.ffs@tglx>
tglx,
I'm sorry for my vague description. First, let me answer your questions.
>This has nothing to do with GPIO interrupts. It's a general problem
>vs. resend, no?
Yes, i think it's a general interrupts problem, but i found it while testing gpio interrupts.
>So what you are saying is:
>An interrupt is disabled, but the wakeup function of the interrupt is
>enabled, right?
Yes.
>Now the system enters suspend and the interrupt is raised, which
>triggers the wakeup function, right?
Yes.
>Now the system enters suspend nevertheless. How can that happen?
Although the device is woken up by gpio irq, it may re-enter suspend after some time.
>Due to that the IRQS_REPLAY flag will be set. How so? IRQS_REPLAY is
>only set from the resend function.
When entering suspend , the path is as follows:
suspend_device_irqs()
suspend_device_irq()
__enable_irq()
irq_startup()
check_irq_resend() --IRQS_REPLAY flag is set in this function.
>Due to that IRQS_REPLAY will not be cleared because the irq_may_run()
>condition is not cleared. Sure, but how does any of this happen in the
>first place?
I will show you a complete process.
>Before you send me a decipherable description of the problem, let me ask
>you a few obvious questions:
> 1) Why is the interrupt disabled _and_ marked as wakeup interrupt?
I have a pin named DATA.
When there is no connection, DATA needs to be a recognition function, the
interrupt enabled and wakeup are used here.
When there is connection, DATA is used communication function, the interrupt
disabled and wakeup are used here.
> 2) If it should still wakeup the system even if disabled, then the
> interrupt chip should have the IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND
> flag set. That's not the case, right?
No, IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND flag will be set.
Second, I wil show you complete process by timeline:
1.device is suspend, irq disable, wakeup enable, every state is normal now;
2.device is suspend, irq disable, wakeup enable, irq raised and trigger wakeup,
IRQS_PENDING flag will be set;
3.device is active, irq disable, wakeup enable, devices enter suspend afte some
time, this step will executes check_irq_resend(), IRQS_REPLAY flag will be set.
Please refer to the paths listed above.
And check_irq_resend() will call handle_fasteoi_irq(), but irq_may_run() return false,
so IRQS_REPLAY flag not be clear.
4.device is suspend, irq disable, wakeup enable, device wakeup again, we set irq
enable, and let device enter suspend;
5.device is suspend, irq enable, wakeup enable, irq raised and trigger wakeup, will
executes check_irq_resend(), but IRQS_REPLAY flag is set, so irq thread_fn() will not
be executes.
Thanks!
zzz
prev parent reply other threads:[~2024-06-11 15:42 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-08 16:36 [PATCH] genirq: Fix gpio irq will fail to be resend under certain conditions Zhenze Zhuang
2024-06-10 19:25 ` Thomas Gleixner
2024-06-11 15:41 ` zzz [this message]
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=320df2de.cd42.19007f68062.Coremail.luuiiruo@163.com \
--to=luuiiruo@163.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.