Page MenuHomeFreeBSD

D32346.1777608854.diff
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

D32346.1777608854.diff

Index: sys/arm/arm/gic_acpi.c
===================================================================
--- sys/arm/arm/gic_acpi.c
+++ sys/arm/arm/gic_acpi.c
@@ -232,7 +232,7 @@
/*
* Controller is root:
*/
- if (intr_pic_claim_root(dev, xref, arm_gic_intr, sc,
+ if (intr_pic_claim_root(dev, xref, (intr_irq_filter_t *)arm_gic_intr, sc,
GIC_LAST_SGI - GIC_FIRST_SGI + 1) != 0) {
device_printf(dev, "could not set PIC as a root\n");
intr_pic_deregister(dev, xref);
Index: sys/arm/arm/gic_fdt.c
===================================================================
--- sys/arm/arm/gic_fdt.c
+++ sys/arm/arm/gic_fdt.c
@@ -157,7 +157,8 @@
*/
pxref = ofw_bus_find_iparent(ofw_bus_get_node(dev));
if (pxref == 0 || xref == pxref) {
- if (intr_pic_claim_root(dev, xref, arm_gic_intr, sc,
+ if (intr_pic_claim_root(dev, xref,
+ (intr_irq_filter_t *)arm_gic_intr, sc,
GIC_LAST_SGI - GIC_FIRST_SGI + 1) != 0) {
device_printf(dev, "could not set PIC as a root\n");
intr_pic_deregister(dev, xref);
Index: sys/arm/broadcom/bcm2835/bcm2835_intr.c
===================================================================
--- sys/arm/broadcom/bcm2835/bcm2835_intr.c
+++ sys/arm/broadcom/bcm2835/bcm2835_intr.c
@@ -407,7 +407,8 @@
sc->intc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
RF_ACTIVE);
if (sc->intc_irq_res == NULL) {
- if (intr_pic_claim_root(dev, xref, bcm2835_intc_intr, sc, 0) != 0) {
+ if (intr_pic_claim_root(dev, xref,
+ (intr_irq_filter_t *)bcm2835_intc_intr, sc, 0) != 0) {
/* XXX clean up */
device_printf(dev, "could not set PIC as a root\n");
return (ENXIO);
Index: sys/kern/subr_intr.c
===================================================================
--- sys/kern/subr_intr.c
+++ sys/kern/subr_intr.c
@@ -314,18 +314,30 @@
void
intr_irq_handler(struct trapframe *tf)
{
+#ifndef DISABLE_TD_INTR_FRAME
struct trapframe * oldframe;
+#endif
+#if defined(HWPMC_HOOKS) || !defined(DISABLE_TD_INTR_FRAME)
struct thread * td;
+#endif
KASSERT(irq_root_filter != NULL, ("%s: no filter", __func__));
VM_CNT_INC(v_intr);
critical_enter();
td = curthread;
+#ifndef DISABLE_TD_INTR_FRAME
oldframe = td->td_intr_frame;
td->td_intr_frame = tf;
+#endif
+#ifdef INTR_SOLO
+ irq_root_filter(irq_root_arg, tf);
+#else
irq_root_filter(irq_root_arg);
+#endif
+#ifndef DISABLE_TD_INTR_FRAME
td->td_intr_frame = oldframe;
+#endif
critical_exit();
#ifdef HWPMC_HOOKS
if (pmc_hook && TRAPF_USERMODE(tf) &&
Index: sys/sys/proc.h
===================================================================
--- sys/sys/proc.h
+++ sys/sys/proc.h
@@ -368,7 +368,9 @@
struct kdtrace_thread *td_dtrace; /* (*) DTrace-specific data. */
struct vnet *td_vnet; /* (k) Effective vnet. */
const char *td_vnet_lpush; /* (k) Debugging vnet push / pop. */
+#ifndef DISABLE_TD_INTR_FRAME
struct trapframe *td_intr_frame;/* (k) Frame of the current irq */
+#endif
struct proc *td_rfppwait_p; /* (k) The vforked child */
struct vm_page **td_ma; /* (k) uio pages held */
int td_ma_cnt; /* (k) size of *td_ma */

File Metadata

Mime Type
text/plain
Expires
Fri, May 1, 4:14 AM (10 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28519923
Default Alt Text
D32346.1777608854.diff (3 KB)

Event Timeline