From: Marc Zyngier <maz@kernel.org>
To: LAK <linux-arm-kernel@lists.infradead.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
Android Kernel Team <kernel-team@android.com>,
Russell King <linux@arm.linux.org.uk>,
Peter Zijlstra <peterz@infradead.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Will Deacon <will@kernel.org>,
Valentin Schneider <Valentin.Schneider@arm.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
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
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:16 UTC|newest]
Thread overview: 41+ 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
2020-11-24 14:14 ` Marc Zyngier [this message]
2020-11-24 14:14 ` [PATCH v2 1/6] genirq: Add __irq_modify_status() helper to clear/set special flags Marc Zyngier
2020-11-24 14:14 ` [PATCH v2 2/6] genirq: Allow an interrupt to be marked as 'raw' Marc Zyngier
2020-11-24 14:14 ` Marc Zyngier
2020-11-24 16:26 ` Peter Zijlstra
2020-11-24 16:26 ` Peter Zijlstra
2020-11-24 16:56 ` Marc Zyngier
2020-11-24 16:56 ` Marc Zyngier
2020-11-26 18:18 ` Valentin Schneider
2020-11-26 18:18 ` Valentin Schneider
2020-12-03 13:03 ` Peter Zijlstra
2020-12-03 13:03 ` Peter Zijlstra
2020-12-03 15:52 ` Valentin Schneider
2020-12-03 15:52 ` Valentin Schneider
2020-12-05 19:24 ` Valentin Schneider
2020-12-05 19:24 ` Valentin Schneider
2020-12-10 15:07 ` Will Deacon
2020-12-10 15:07 ` Will Deacon
2021-06-23 17:28 ` Todd Kjos
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-11-24 14:14 ` Marc Zyngier
2020-12-10 15:15 ` Will Deacon
2020-12-10 15:15 ` Will Deacon
2020-11-24 14:14 ` [PATCH v2 4/6] arm: " Marc Zyngier
2020-11-24 14:14 ` 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 ` Marc Zyngier
2020-11-24 14:14 ` [PATCH v2 6/6] genirq: Rename IRQ_HIDDEN to IRQ_IPI Marc Zyngier
2020-11-24 14:14 ` Marc Zyngier
2020-11-26 18:18 ` Valentin Schneider
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 0:39 ` ito-yuichi
2021-03-01 9:22 ` Marc Zyngier
2021-03-01 9:22 ` Marc Zyngier
2021-03-09 6:20 ` Yuichi Ito
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 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.