1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-12 14:29:28 +00:00

Clean up the GICv3 intrng code:

* In gic_v3_attach free the correct data on failure.
 * Implement gic_v3_teardown_intr.
 * Update the panic string when enabling/disabling an invalid interrupt.

Obtained from:	ABT Systems Ltd
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Andrew Turner 2016-05-17 12:46:50 +00:00
parent e635011374
commit 9a38d21983
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=300048

View File

@ -267,7 +267,7 @@ gic_v3_attach(device_t dev)
}
if (err != 0) {
/* XXX call intr_isrc_deregister() */
free(irqs, M_DEVBUF);
free(sc->gic_irqs, M_DEVBUF);
return (err);
}
}
@ -611,8 +611,14 @@ static int
gic_v3_teardown_intr(device_t dev, struct intr_irqsrc *isrc,
struct resource *res, struct intr_map_data *data)
{
struct gic_v3_irqsrc *gi = (struct gic_v3_irqsrc *)isrc;
panic("gic_v3_teardown_intr");
if (isrc->isrc_handlers == 0) {
gi->gi_pol = INTR_POLARITY_CONFORM;
gi->gi_trig = INTR_TRIGGER_CONFORM;
}
return (0);
}
static void
@ -636,7 +642,7 @@ gic_v3_disable_intr(device_t dev, struct intr_irqsrc *isrc)
gic_d_write(sc, 4, GICD_ICENABLER(irq), GICD_I_MASK(irq));
gic_v3_wait_for_rwp(sc, DIST);
} else
panic("gic_v3_disable_intr");
panic("%s: Unsupported IRQ %u", __func__, irq);
}
static void
@ -660,7 +666,7 @@ gic_v3_enable_intr(device_t dev, struct intr_irqsrc *isrc)
gic_d_write(sc, 4, GICD_ISENABLER(irq), GICD_I_MASK(irq));
gic_v3_wait_for_rwp(sc, DIST);
} else
panic("gic_v3_enable_intr");
panic("%s: Unsupported IRQ %u", __func__, irq);
}
static void