svn commit: r300048 - head/sys/arm64/arm64
Andrew Turner
andrew at FreeBSD.org
Tue May 17 12:46:51 UTC 2016
Author: andrew
Date: Tue May 17 12:46:50 2016
New Revision: 300048
URL: https://svnweb.freebsd.org/changeset/base/300048
Log:
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
Modified:
head/sys/arm64/arm64/gic_v3.c
Modified: head/sys/arm64/arm64/gic_v3.c
==============================================================================
--- head/sys/arm64/arm64/gic_v3.c Tue May 17 12:04:39 2016 (r300047)
+++ head/sys/arm64/arm64/gic_v3.c Tue May 17 12:46:50 2016 (r300048)
@@ -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;
+
+ if (isrc->isrc_handlers == 0) {
+ gi->gi_pol = INTR_POLARITY_CONFORM;
+ gi->gi_trig = INTR_TRIGGER_CONFORM;
+ }
- panic("gic_v3_teardown_intr");
+ return (0);
}
static void
@@ -636,7 +642,7 @@ gic_v3_disable_intr(device_t dev, struct
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
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
More information about the svn-src-all
mailing list