Skip to content

Commit 2c89965

Browse files
author
Marc Zyngier
committed
powerpc: Bulk conversion to generic_handle_domain_irq()
Wherever possible, replace constructs that match either generic_handle_irq(irq_find_mapping()) or generic_handle_irq(irq_linear_revmap()) to a single call to generic_handle_domain_irq(). Signed-off-by: Marc Zyngier <[email protected]>
1 parent 153517d commit 2c89965

File tree

11 files changed

+43
-74
lines changed

11 files changed

+43
-74
lines changed

arch/powerpc/platforms/4xx/uic.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ static void uic_irq_cascade(struct irq_desc *desc)
198198
struct uic *uic = irq_desc_get_handler_data(desc);
199199
u32 msr;
200200
int src;
201-
int subvirq;
202201

203202
raw_spin_lock(&desc->lock);
204203
if (irqd_is_level_type(idata))
@@ -213,8 +212,7 @@ static void uic_irq_cascade(struct irq_desc *desc)
213212

214213
src = 32 - ffs(msr);
215214

216-
subvirq = irq_linear_revmap(uic->irqhost, src);
217-
generic_handle_irq(subvirq);
215+
generic_handle_domain_irq(uic->irqhost, src);
218216

219217
uic_irq_ret:
220218
raw_spin_lock(&desc->lock);

arch/powerpc/platforms/512x/mpc5121_ads_cpld.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,40 +81,37 @@ static struct irq_chip cpld_pic = {
8181
.irq_unmask = cpld_unmask_irq,
8282
};
8383

84-
static int
84+
static unsigned int
8585
cpld_pic_get_irq(int offset, u8 ignore, u8 __iomem *statusp,
8686
u8 __iomem *maskp)
8787
{
88-
int cpld_irq;
8988
u8 status = in_8(statusp);
9089
u8 mask = in_8(maskp);
9190

9291
/* ignore don't cares and masked irqs */
9392
status |= (ignore | mask);
9493

9594
if (status == 0xff)
96-
return 0;
97-
98-
cpld_irq = ffz(status) + offset;
95+
return ~0;
9996

100-
return irq_linear_revmap(cpld_pic_host, cpld_irq);
97+
return ffz(status) + offset;
10198
}
10299

103100
static void cpld_pic_cascade(struct irq_desc *desc)
104101
{
105-
unsigned int irq;
102+
unsigned int hwirq;
106103

107-
irq = cpld_pic_get_irq(0, PCI_IGNORE, &cpld_regs->pci_status,
104+
hwirq = cpld_pic_get_irq(0, PCI_IGNORE, &cpld_regs->pci_status,
108105
&cpld_regs->pci_mask);
109-
if (irq) {
110-
generic_handle_irq(irq);
106+
if (hwirq != ~0) {
107+
generic_handle_domain_irq(cpld_pic_host, hwirq);
111108
return;
112109
}
113110

114-
irq = cpld_pic_get_irq(8, MISC_IGNORE, &cpld_regs->misc_status,
111+
hwirq = cpld_pic_get_irq(8, MISC_IGNORE, &cpld_regs->misc_status,
115112
&cpld_regs->misc_mask);
116-
if (irq) {
117-
generic_handle_irq(irq);
113+
if (hwirq != ~0) {
114+
generic_handle_domain_irq(cpld_pic_host, hwirq);
118115
return;
119116
}
120117
}

arch/powerpc/platforms/52xx/media5200.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ static struct irq_chip media5200_irq_chip = {
7878
static void media5200_irq_cascade(struct irq_desc *desc)
7979
{
8080
struct irq_chip *chip = irq_desc_get_chip(desc);
81-
int sub_virq, val;
81+
int val;
8282
u32 status, enable;
8383

8484
/* Mask off the cascaded IRQ */
@@ -92,11 +92,10 @@ static void media5200_irq_cascade(struct irq_desc *desc)
9292
enable = in_be32(media5200_irq.regs + MEDIA5200_IRQ_STATUS);
9393
val = ffs((status & enable) >> MEDIA5200_IRQ_SHIFT);
9494
if (val) {
95-
sub_virq = irq_linear_revmap(media5200_irq.irqhost, val - 1);
96-
/* pr_debug("%s: virq=%i s=%.8x e=%.8x hwirq=%i subvirq=%i\n",
97-
* __func__, virq, status, enable, val - 1, sub_virq);
95+
generic_handle_domain_irq(media5200_irq.irqhost, val - 1);
96+
/* pr_debug("%s: virq=%i s=%.8x e=%.8x hwirq=%i\n",
97+
* __func__, virq, status, enable, val - 1);
9898
*/
99-
generic_handle_irq(sub_virq);
10099
}
101100

102101
/* Processing done; can reenable the cascade now */

arch/powerpc/platforms/52xx/mpc52xx_gpt.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,11 @@ static struct irq_chip mpc52xx_gpt_irq_chip = {
190190
static void mpc52xx_gpt_irq_cascade(struct irq_desc *desc)
191191
{
192192
struct mpc52xx_gpt_priv *gpt = irq_desc_get_handler_data(desc);
193-
int sub_virq;
194193
u32 status;
195194

196195
status = in_be32(&gpt->regs->status) & MPC52xx_GPT_STATUS_IRQMASK;
197-
if (status) {
198-
sub_virq = irq_linear_revmap(gpt->irqhost, 0);
199-
generic_handle_irq(sub_virq);
200-
}
196+
if (status)
197+
generic_handle_domain_irq(gpt->irqhost, 0);
201198
}
202199

203200
static int mpc52xx_gpt_irq_map(struct irq_domain *h, unsigned int virq,

arch/powerpc/platforms/82xx/pq2ads-pci-pic.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,8 @@ static void pq2ads_pci_irq_demux(struct irq_desc *desc)
9191
break;
9292

9393
for (bit = 0; pend != 0; ++bit, pend <<= 1) {
94-
if (pend & 0x80000000) {
95-
int virq = irq_linear_revmap(priv->host, bit);
96-
generic_handle_irq(virq);
97-
}
94+
if (pend & 0x80000000)
95+
generic_handle_domain_irq(priv->host, bit);
9896
}
9997
}
10098
}

arch/powerpc/platforms/cell/interrupt.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,9 @@ static void iic_ioexc_cascade(struct irq_desc *desc)
106106
out_be64(&node_iic->iic_is, ack);
107107
/* handle them */
108108
for (cascade = 63; cascade >= 0; cascade--)
109-
if (bits & (0x8000000000000000UL >> cascade)) {
110-
unsigned int cirq =
111-
irq_linear_revmap(iic_host,
109+
if (bits & (0x8000000000000000UL >> cascade))
110+
generic_handle_domain_irq(iic_host,
112111
base | cascade);
113-
if (cirq)
114-
generic_handle_irq(cirq);
115-
}
116112
/* post-ack level interrupts */
117113
ack = bits & ~IIC_ISR_EDGE_MASK;
118114
if (ack)

arch/powerpc/platforms/cell/spider-pic.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,16 +190,11 @@ static void spider_irq_cascade(struct irq_desc *desc)
190190
{
191191
struct irq_chip *chip = irq_desc_get_chip(desc);
192192
struct spider_pic *pic = irq_desc_get_handler_data(desc);
193-
unsigned int cs, virq;
193+
unsigned int cs;
194194

195195
cs = in_be32(pic->regs + TIR_CS) >> 24;
196-
if (cs == SPIDER_IRQ_INVALID)
197-
virq = 0;
198-
else
199-
virq = irq_linear_revmap(pic->host, cs);
200-
201-
if (virq)
202-
generic_handle_irq(virq);
196+
if (cs != SPIDER_IRQ_INVALID)
197+
generic_handle_domain_irq(pic->host, cs);
203198

204199
chip->irq_eoi(&desc->irq_data);
205200
}

arch/powerpc/platforms/embedded6xx/hlwd-pic.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,31 +108,29 @@ static const struct irq_domain_ops hlwd_irq_domain_ops = {
108108
static unsigned int __hlwd_pic_get_irq(struct irq_domain *h)
109109
{
110110
void __iomem *io_base = h->host_data;
111-
int irq;
112111
u32 irq_status;
113112

114113
irq_status = in_be32(io_base + HW_BROADWAY_ICR) &
115114
in_be32(io_base + HW_BROADWAY_IMR);
116115
if (irq_status == 0)
117116
return 0; /* no more IRQs pending */
118117

119-
irq = __ffs(irq_status);
120-
return irq_linear_revmap(h, irq);
118+
return __ffs(irq_status);
121119
}
122120

123121
static void hlwd_pic_irq_cascade(struct irq_desc *desc)
124122
{
125123
struct irq_chip *chip = irq_desc_get_chip(desc);
126124
struct irq_domain *irq_domain = irq_desc_get_handler_data(desc);
127-
unsigned int virq;
125+
unsigned int hwirq;
128126

129127
raw_spin_lock(&desc->lock);
130128
chip->irq_mask(&desc->irq_data); /* IRQ_LEVEL */
131129
raw_spin_unlock(&desc->lock);
132130

133-
virq = __hlwd_pic_get_irq(irq_domain);
134-
if (virq)
135-
generic_handle_irq(virq);
131+
hwirq = __hlwd_pic_get_irq(irq_domain);
132+
if (hwirq)
133+
generic_handle_domain_irq(irq_domain, hwirq);
136134
else
137135
pr_err("spurious interrupt!\n");
138136

@@ -190,7 +188,8 @@ static struct irq_domain *hlwd_pic_init(struct device_node *np)
190188

191189
unsigned int hlwd_pic_get_irq(void)
192190
{
193-
return __hlwd_pic_get_irq(hlwd_irq_host);
191+
unsigned int hwirq = __hlwd_pic_get_irq(hlwd_irq_host);
192+
return hwirq ? irq_linear_revmap(hlwd_irq_host, hwirq) : 0;
194193
}
195194

196195
/*

arch/powerpc/platforms/powernv/opal-irqchip.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,15 @@ void opal_handle_events(void)
4646
e = READ_ONCE(last_outstanding_events) & opal_event_irqchip.mask;
4747
again:
4848
while (e) {
49-
int virq, hwirq;
49+
int hwirq;
5050

5151
hwirq = fls64(e) - 1;
5252
e &= ~BIT_ULL(hwirq);
5353

5454
local_irq_disable();
55-
virq = irq_find_mapping(opal_event_irqchip.domain, hwirq);
56-
if (virq) {
57-
irq_enter();
58-
generic_handle_irq(virq);
59-
irq_exit();
60-
}
55+
irq_enter();
56+
generic_handle_domain_irq(opal_event_irqchip.domain, hwirq);
57+
irq_exit();
6158
local_irq_enable();
6259

6360
cond_resched();

arch/powerpc/sysdev/fsl_mpic_err.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ static irqreturn_t fsl_error_int_handler(int irq, void *data)
9999
struct mpic *mpic = (struct mpic *) data;
100100
u32 eisr, eimr;
101101
int errint;
102-
unsigned int cascade_irq;
103102

104103
eisr = mpic_fsl_err_read(mpic->err_regs, MPIC_ERR_INT_EISR);
105104
eimr = mpic_fsl_err_read(mpic->err_regs, MPIC_ERR_INT_EIMR);
@@ -108,13 +107,11 @@ static irqreturn_t fsl_error_int_handler(int irq, void *data)
108107
return IRQ_NONE;
109108

110109
while (eisr) {
110+
int ret;
111111
errint = __builtin_clz(eisr);
112-
cascade_irq = irq_linear_revmap(mpic->irqhost,
113-
mpic->err_int_vecs[errint]);
114-
WARN_ON(!cascade_irq);
115-
if (cascade_irq) {
116-
generic_handle_irq(cascade_irq);
117-
} else {
112+
ret = generic_handle_domain_irq(mpic->irqhost,
113+
mpic->err_int_vecs[errint]);
114+
if (WARN_ON(ret)) {
118115
eimr |= 1 << (31 - errint);
119116
mpic_fsl_err_write(mpic->err_regs, eimr);
120117
}

0 commit comments

Comments
 (0)