irqchip/gic: Update supports_deactivate static key to modern api
No changes in semantics -- key init is true; replace static_key_slow_dec with static_branch_disable static_key_true with static_branch_likely The first is because we never actually do any couterpart incs, thus there is really no reference counting semantics going on. Use the more proper static_branch_disable() construct. Also added a '_key' suffix to supports_deactivate, for better self documentation. Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Jason Cooper <jason@lakedaemon.net> Signed-off-by: Davidlohr Bueso <dbueso@suse.de> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:
parent
6eb486b66a
commit
d01d327406
2 changed files with 21 additions and 21 deletions
|
@ -61,7 +61,7 @@ struct gic_chip_data {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct gic_chip_data gic_data __read_mostly;
|
static struct gic_chip_data gic_data __read_mostly;
|
||||||
static struct static_key supports_deactivate = STATIC_KEY_INIT_TRUE;
|
static DEFINE_STATIC_KEY_TRUE(supports_deactivate_key);
|
||||||
|
|
||||||
static struct gic_kvm_info gic_v3_kvm_info;
|
static struct gic_kvm_info gic_v3_kvm_info;
|
||||||
static DEFINE_PER_CPU(bool, has_rss);
|
static DEFINE_PER_CPU(bool, has_rss);
|
||||||
|
@ -354,7 +354,7 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
|
||||||
if (likely(irqnr > 15 && irqnr < 1020) || irqnr >= 8192) {
|
if (likely(irqnr > 15 && irqnr < 1020) || irqnr >= 8192) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
gic_write_eoir(irqnr);
|
gic_write_eoir(irqnr);
|
||||||
else
|
else
|
||||||
isb();
|
isb();
|
||||||
|
@ -362,7 +362,7 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
|
||||||
err = handle_domain_irq(gic_data.domain, irqnr, regs);
|
err = handle_domain_irq(gic_data.domain, irqnr, regs);
|
||||||
if (err) {
|
if (err) {
|
||||||
WARN_ONCE(true, "Unexpected interrupt received!\n");
|
WARN_ONCE(true, "Unexpected interrupt received!\n");
|
||||||
if (static_key_true(&supports_deactivate)) {
|
if (static_branch_likely(&supports_deactivate_key)) {
|
||||||
if (irqnr < 8192)
|
if (irqnr < 8192)
|
||||||
gic_write_dir(irqnr);
|
gic_write_dir(irqnr);
|
||||||
} else {
|
} else {
|
||||||
|
@ -373,7 +373,7 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
|
||||||
}
|
}
|
||||||
if (irqnr < 16) {
|
if (irqnr < 16) {
|
||||||
gic_write_eoir(irqnr);
|
gic_write_eoir(irqnr);
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
gic_write_dir(irqnr);
|
gic_write_dir(irqnr);
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/*
|
/*
|
||||||
|
@ -576,7 +576,7 @@ static void gic_cpu_sys_reg_init(void)
|
||||||
*/
|
*/
|
||||||
gic_write_bpr1(0);
|
gic_write_bpr1(0);
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate)) {
|
if (static_branch_likely(&supports_deactivate_key)) {
|
||||||
/* EOI drops priority only (mode 1) */
|
/* EOI drops priority only (mode 1) */
|
||||||
gic_write_ctlr(ICC_CTLR_EL1_EOImode_drop);
|
gic_write_ctlr(ICC_CTLR_EL1_EOImode_drop);
|
||||||
} else {
|
} else {
|
||||||
|
@ -884,7 +884,7 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq,
|
||||||
{
|
{
|
||||||
struct irq_chip *chip = &gic_chip;
|
struct irq_chip *chip = &gic_chip;
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
chip = &gic_eoimode1_chip;
|
chip = &gic_eoimode1_chip;
|
||||||
|
|
||||||
/* SGIs are private to the core kernel */
|
/* SGIs are private to the core kernel */
|
||||||
|
@ -1075,9 +1075,9 @@ static int __init gic_init_bases(void __iomem *dist_base,
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!is_hyp_mode_available())
|
if (!is_hyp_mode_available())
|
||||||
static_key_slow_dec(&supports_deactivate);
|
static_branch_disable(&supports_deactivate_key);
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
pr_info("GIC: Using split EOI/Deactivate mode\n");
|
pr_info("GIC: Using split EOI/Deactivate mode\n");
|
||||||
|
|
||||||
gic_data.fwnode = handle;
|
gic_data.fwnode = handle;
|
||||||
|
@ -1312,7 +1312,7 @@ static int __init gic_of_init(struct device_node *node, struct device_node *pare
|
||||||
|
|
||||||
gic_populate_ppi_partitions(node);
|
gic_populate_ppi_partitions(node);
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
gic_of_setup_kvm_info(node);
|
gic_of_setup_kvm_info(node);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1614,7 +1614,7 @@ gic_acpi_init(struct acpi_subtable_header *header, const unsigned long end)
|
||||||
|
|
||||||
acpi_set_irq_model(ACPI_IRQ_MODEL_GIC, domain_handle);
|
acpi_set_irq_model(ACPI_IRQ_MODEL_GIC, domain_handle);
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
gic_acpi_setup_kvm_info();
|
gic_acpi_setup_kvm_info();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -121,7 +121,7 @@ static DEFINE_RAW_SPINLOCK(cpu_map_lock);
|
||||||
#define NR_GIC_CPU_IF 8
|
#define NR_GIC_CPU_IF 8
|
||||||
static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly;
|
static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly;
|
||||||
|
|
||||||
static struct static_key supports_deactivate = STATIC_KEY_INIT_TRUE;
|
static DEFINE_STATIC_KEY_TRUE(supports_deactivate_key);
|
||||||
|
|
||||||
static struct gic_chip_data gic_data[CONFIG_ARM_GIC_MAX_NR] __read_mostly;
|
static struct gic_chip_data gic_data[CONFIG_ARM_GIC_MAX_NR] __read_mostly;
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
|
||||||
irqnr = irqstat & GICC_IAR_INT_ID_MASK;
|
irqnr = irqstat & GICC_IAR_INT_ID_MASK;
|
||||||
|
|
||||||
if (likely(irqnr > 15 && irqnr < 1020)) {
|
if (likely(irqnr > 15 && irqnr < 1020)) {
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
|
writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
|
||||||
isb();
|
isb();
|
||||||
handle_domain_irq(gic->domain, irqnr, regs);
|
handle_domain_irq(gic->domain, irqnr, regs);
|
||||||
|
@ -369,7 +369,7 @@ static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
|
||||||
}
|
}
|
||||||
if (irqnr < 16) {
|
if (irqnr < 16) {
|
||||||
writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
|
writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
writel_relaxed(irqstat, cpu_base + GIC_CPU_DEACTIVATE);
|
writel_relaxed(irqstat, cpu_base + GIC_CPU_DEACTIVATE);
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/*
|
/*
|
||||||
|
@ -466,7 +466,7 @@ static void gic_cpu_if_up(struct gic_chip_data *gic)
|
||||||
u32 mode = 0;
|
u32 mode = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (gic == &gic_data[0] && static_key_true(&supports_deactivate))
|
if (gic == &gic_data[0] && static_branch_likely(&supports_deactivate_key))
|
||||||
mode = GIC_CPU_CTRL_EOImodeNS;
|
mode = GIC_CPU_CTRL_EOImodeNS;
|
||||||
|
|
||||||
if (gic_check_gicv2(cpu_base))
|
if (gic_check_gicv2(cpu_base))
|
||||||
|
@ -1219,11 +1219,11 @@ static int __init __gic_init_bases(struct gic_chip_data *gic,
|
||||||
"irqchip/arm/gic:starting",
|
"irqchip/arm/gic:starting",
|
||||||
gic_starting_cpu, NULL);
|
gic_starting_cpu, NULL);
|
||||||
set_handle_irq(gic_handle_irq);
|
set_handle_irq(gic_handle_irq);
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
pr_info("GIC: Using split EOI/Deactivate mode\n");
|
pr_info("GIC: Using split EOI/Deactivate mode\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate) && gic == &gic_data[0]) {
|
if (static_branch_likely(&supports_deactivate_key) && gic == &gic_data[0]) {
|
||||||
name = kasprintf(GFP_KERNEL, "GICv2");
|
name = kasprintf(GFP_KERNEL, "GICv2");
|
||||||
gic_init_chip(gic, NULL, name, true);
|
gic_init_chip(gic, NULL, name, true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1250,7 +1250,7 @@ void __init gic_init(unsigned int gic_nr, int irq_start,
|
||||||
* Non-DT/ACPI systems won't run a hypervisor, so let's not
|
* Non-DT/ACPI systems won't run a hypervisor, so let's not
|
||||||
* bother with these...
|
* bother with these...
|
||||||
*/
|
*/
|
||||||
static_key_slow_dec(&supports_deactivate);
|
static_branch_disable(&supports_deactivate_key);
|
||||||
|
|
||||||
gic = &gic_data[gic_nr];
|
gic = &gic_data[gic_nr];
|
||||||
gic->raw_dist_base = dist_base;
|
gic->raw_dist_base = dist_base;
|
||||||
|
@ -1430,7 +1430,7 @@ static void __init gic_of_setup_kvm_info(struct device_node *node)
|
||||||
if (ret)
|
if (ret)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
gic_set_kvm_info(&gic_v2_kvm_info);
|
gic_set_kvm_info(&gic_v2_kvm_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1457,7 +1457,7 @@ gic_of_init(struct device_node *node, struct device_node *parent)
|
||||||
* or the CPU interface is too small.
|
* or the CPU interface is too small.
|
||||||
*/
|
*/
|
||||||
if (gic_cnt == 0 && !gic_check_eoimode(node, &gic->raw_cpu_base))
|
if (gic_cnt == 0 && !gic_check_eoimode(node, &gic->raw_cpu_base))
|
||||||
static_key_slow_dec(&supports_deactivate);
|
static_branch_disable(&supports_deactivate_key);
|
||||||
|
|
||||||
ret = __gic_init_bases(gic, -1, &node->fwnode);
|
ret = __gic_init_bases(gic, -1, &node->fwnode);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -1638,7 +1638,7 @@ static int __init gic_v2_acpi_init(struct acpi_subtable_header *header,
|
||||||
* interface will always be the right size.
|
* interface will always be the right size.
|
||||||
*/
|
*/
|
||||||
if (!is_hyp_mode_available())
|
if (!is_hyp_mode_available())
|
||||||
static_key_slow_dec(&supports_deactivate);
|
static_branch_disable(&supports_deactivate_key);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize GIC instance zero (no multi-GIC support).
|
* Initialize GIC instance zero (no multi-GIC support).
|
||||||
|
@ -1663,7 +1663,7 @@ static int __init gic_v2_acpi_init(struct acpi_subtable_header *header,
|
||||||
if (IS_ENABLED(CONFIG_ARM_GIC_V2M))
|
if (IS_ENABLED(CONFIG_ARM_GIC_V2M))
|
||||||
gicv2m_init(NULL, gic_data[0].domain);
|
gicv2m_init(NULL, gic_data[0].domain);
|
||||||
|
|
||||||
if (static_key_true(&supports_deactivate))
|
if (static_branch_likely(&supports_deactivate_key))
|
||||||
gic_acpi_setup_kvm_info();
|
gic_acpi_setup_kvm_info();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue