From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Barry Song <song.bao.hua@hisilicon.com>
Cc: tglx@linutronix.de, maz@kernel.org, gregkh@linuxfoundation.org,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
linuxarm@openeuler.org
Subject: Re: [PATCH] genirq: add IRQF_NO_AUTOEN for request_irq
Date: Mon, 4 Jan 2021 15:01:19 -0800 [thread overview]
Message-ID: <X/OePw97VgXtRBxj@google.com> (raw)
In-Reply-To: <20210104222612.2708-1-song.bao.hua@hisilicon.com>
On Tue, Jan 05, 2021 at 11:26:12AM +1300, Barry Song wrote:
> This patch originated from the discussion with Dmitry in the below thread:
> https://lore.kernel.org/linux-input/20210102042902.41664-1-song.bao.hua@hisilicon.com/
> there are many drivers which don't want interrupts enabled automatically
> due to request_irq().
> So they are handling this issue by either way of the below two:
> (1)
> irq_set_status_flags(irq, IRQ_NOAUTOEN);
> request_irq(dev, irq...);
> (2)
> request_irq(dev, irq...);
> disable_irq(irq);
>
> The code in the second way is silly and unsafe. In the small time gap
> between request_irq and disable_irq, interrupts can still come.
> The code in the first way is safe though we might be able to do it in
> the generic irq code.
>
> I guess Dmitry also prefers genirq handles this as he said
> "What I would like to see is to allow passing something like IRQF_DISABLED
> to request_irq() so that we would not need neither irq_set_status_flags()
> nor disable_irq()" in the original email thread.
One of the reasons I dislike irq_set_status_flags() is that we have to
call it before we actually granted our IRQ request...
>
> If this one is accepted, hundreds of drivers with this problem will be
> handled afterwards.
>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Signed-off-by: Barry Song <song.bao.hua@hisilicon.com>
> ---
> include/linux/interrupt.h | 3 +++
> kernel/irq/manage.c | 3 +++
> kernel/irq/settings.h | 10 ++++++++++
> 3 files changed, 16 insertions(+)
>
> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> index bb8ff9083e7d..0f22d277078c 100644
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -61,6 +61,8 @@
> * interrupt handler after suspending interrupts. For system
> * wakeup devices users need to implement wakeup detection in
> * their interrupt handlers.
> + * IRQF_NO_AUTOEN - Don't enable IRQ automatically when users request it. Users
> + * will enable it explicitly by enable_irq() later.
> */
> #define IRQF_SHARED 0x00000080
> #define IRQF_PROBE_SHARED 0x00000100
> @@ -74,6 +76,7 @@
> #define IRQF_NO_THREAD 0x00010000
> #define IRQF_EARLY_RESUME 0x00020000
> #define IRQF_COND_SUSPEND 0x00040000
> +#define IRQF_NO_AUTOEN 0x00080000
>
> #define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD)
>
> diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
> index ab8567f32501..364e8b47d9ba 100644
> --- a/kernel/irq/manage.c
> +++ b/kernel/irq/manage.c
> @@ -1693,6 +1693,9 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
> irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
> }
>
> + if (new->flags & IRQF_NO_AUTOEN)
> + irq_settings_set_noautoen(desc);
Can we make sure we refuse this request if the caller also specified
IRQF_SHARED?
Thanks.
--
Dmitry
next prev parent reply other threads:[~2021-01-04 23:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-04 22:26 [PATCH] genirq: add IRQF_NO_AUTOEN for request_irq Barry Song
2021-01-04 23:01 ` Dmitry Torokhov [this message]
2021-01-05 1:33 ` Song Bao Hua (Barry Song)
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=X/OePw97VgXtRBxj@google.com \
--to=dmitry.torokhov@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxarm@openeuler.org \
--cc=maz@kernel.org \
--cc=song.bao.hua@hisilicon.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox