From: Marc Zyngier <maz@kernel.org>
To: LAK <linux-arm-kernel@lists.infradead.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Cc: Will Deacon <will@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Valentin Schneider <Valentin.Schneider@arm.com>,
Peter Zijlstra <peterz@infradead.org>,
Mark Rutland <mark.rutland@arm.com>,
Russell King <linux@arm.linux.org.uk>,
Android Kernel Team <kernel-team@android.com>
Subject: [PATCH v2 1/6] genirq: Add __irq_modify_status() helper to clear/set special flags
Date: Tue, 24 Nov 2020 14:14:44 +0000 [thread overview]
Message-ID: <20201124141449.572446-2-maz@kernel.org> (raw)
In-Reply-To: <20201124141449.572446-1-maz@kernel.org>
Some arch-specific flags need to be set/cleared, but not exposed to
random device drivers. Introduce a new helper (__irq_modify_status())
that takes an arbitrary mask, and rewrite irq_modify_status() to use
this new helper.
No functionnal change.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
include/linux/irq.h | 3 +++
kernel/irq/chip.c | 12 ++++++++++--
kernel/irq/settings.h | 10 ++++++++--
3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/include/linux/irq.h b/include/linux/irq.h
index c54365309e97..c55f218d5b61 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -751,6 +751,9 @@ void
irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handle,
void *data);
+void __irq_modify_status(unsigned int irq, unsigned long clr,
+ unsigned long set, unsigned long mask);
+
void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set);
static inline void irq_set_status_flags(unsigned int irq, unsigned long set)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index b9b9618e1aca..85176712a484 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -1107,7 +1107,8 @@ irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
}
EXPORT_SYMBOL_GPL(irq_set_chip_and_handler_name);
-void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set)
+void __irq_modify_status(unsigned int irq, unsigned long clr,
+ unsigned long set, unsigned long mask)
{
unsigned long flags, trigger, tmp;
struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
@@ -1121,7 +1122,9 @@ void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set)
*/
WARN_ON_ONCE(!desc->depth && (set & _IRQ_NOAUTOEN));
- irq_settings_clr_and_set(desc, clr, set);
+ /* Warn when trying to clear or set a bit disallowed by the mask */
+ WARN_ON((clr | set) & ~mask);
+ __irq_settings_clr_and_set(desc, clr, set, mask);
trigger = irqd_get_trigger_type(&desc->irq_data);
@@ -1144,6 +1147,11 @@ void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set)
irq_put_desc_unlock(desc, flags);
}
+
+void irq_modify_status(unsigned int irq, unsigned long clr, unsigned long set)
+{
+ __irq_modify_status(irq, clr, set, _IRQF_MODIFY_MASK);
+}
EXPORT_SYMBOL_GPL(irq_modify_status);
/**
diff --git a/kernel/irq/settings.h b/kernel/irq/settings.h
index 403378b9947b..51acdf43eadc 100644
--- a/kernel/irq/settings.h
+++ b/kernel/irq/settings.h
@@ -36,11 +36,17 @@ enum {
#undef IRQF_MODIFY_MASK
#define IRQF_MODIFY_MASK GOT_YOU_MORON
+static inline void
+__irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set, u32 mask)
+{
+ desc->status_use_accessors &= ~(clr & mask);
+ desc->status_use_accessors |= (set & mask);
+}
+
static inline void
irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set)
{
- desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK);
- desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK);
+ __irq_settings_clr_and_set(desc, clr, set, _IRQF_MODIFY_MASK);
}
static inline bool irq_settings_is_per_cpu(struct irq_desc *desc)
--
2.28.0
next prev parent reply other threads:[~2020-11-24 14:15 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-24 14:14 [PATCH v2 0/6] arm/arm64: Allow the rescheduling IPI to bypass irq_enter/exit Marc Zyngier
2020-11-24 14:14 ` Marc Zyngier [this message]
2020-11-24 14:14 ` [PATCH v2 2/6] genirq: Allow an interrupt to be marked as 'raw' Marc Zyngier
2020-11-24 16:26 ` Peter Zijlstra
2020-11-24 16:56 ` Marc Zyngier
2020-11-26 18:18 ` Valentin Schneider
2020-12-03 13:03 ` Peter Zijlstra
2020-12-03 15:52 ` Valentin Schneider
2020-12-05 19:24 ` Valentin Schneider
2020-12-10 15:07 ` Will Deacon
2021-06-23 17:28 ` Todd Kjos
2020-11-24 14:14 ` [PATCH v2 3/6] arm64: Mark the recheduling IPI as raw interrupt Marc Zyngier
2020-12-10 15:15 ` Will Deacon
2020-11-24 14:14 ` [PATCH v2 4/6] arm: " Marc Zyngier
2020-11-24 14:14 ` [PATCH v2 5/6] genirq: Drop IRQ_HIDDEN from IRQF_MODIFY_MASK Marc Zyngier
2020-11-24 14:14 ` [PATCH v2 6/6] genirq: Rename IRQ_HIDDEN to IRQ_IPI Marc Zyngier
2020-11-26 18:18 ` Valentin Schneider
2021-03-01 0:39 ` [PATCH v2 0/6] arm/arm64: Allow the rescheduling IPI to bypass irq_enter/exit ito-yuichi
2021-03-01 9:22 ` Marc Zyngier
2021-03-09 6:20 ` Yuichi Ito
2021-06-18 19:30 ` Abhijeet Dharmapurikar
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=20201124141449.572446-2-maz@kernel.org \
--to=maz@kernel.org \
--cc=Valentin.Schneider@arm.com \
--cc=catalin.marinas@arm.com \
--cc=kernel-team@android.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mark.rutland@arm.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=will@kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).