PERFORCE change 132159 for review
Kip Macy
kmacy at FreeBSD.org
Sun Dec 30 23:22:54 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=132159
Change 132159 by kmacy at pandemonium:kmacy:xen31 on 2007/12/31 07:22:14
make interrupts work by having find_unbound_irq look at the dynirq range
only register pic template on demand for devices
Affected files ...
.. //depot/projects/xen31/sys/i386/include/xen/evtchn.h#4 edit
.. //depot/projects/xen31/sys/xen/evtchn/evtchn.c#4 edit
Differences ...
==== //depot/projects/xen31/sys/i386/include/xen/evtchn.h#4 (text+ko) ====
@@ -56,6 +56,8 @@
void unmask_evtchn(int port);
+
+
static inline void
clear_evtchn(int port)
{
@@ -71,6 +73,13 @@
}
/*
+ * Use these to access the event channel underlying the IRQ handle returned
+ * by bind_*_to_irqhandler().
+ */
+int irq_to_evtchn_port(int irq);
+
+
+/*
* CHARACTER-DEVICE DEFINITIONS
*/
==== //depot/projects/xen31/sys/xen/evtchn/evtchn.c#4 (text+ko) ====
@@ -219,16 +219,18 @@
static int
find_unbound_irq(void)
{
- int irq;
-
- for (irq = 0; irq < NR_IRQS; irq++)
+ int dynirq, irq;
+
+ for (dynirq = 0; dynirq < NR_IRQS; dynirq++) {
+ irq = dynirq_to_irq(dynirq);
if (irq_bindcount[irq] == 0)
break;
-
+ }
+
if (irq == NR_IRQS)
panic("No available IRQ to bind to: increase NR_IRQS!\n");
- return irq;
+ return (irq);
}
static int
@@ -509,6 +511,7 @@
int retval;
irq = bind_ipi_to_irq(ipi, cpu);
+ intr_register_source(&xp->xp_pins[irq].xp_intsrc);
retval = intr_add_handler(devname, irq, NULL, handler, NULL, irqflags, NULL);
if (retval != 0) {
unbind_from_irq(irq);
@@ -718,8 +721,8 @@
TODO;
}
-
-void notify_remote_via_irq(int irq)
+void
+notify_remote_via_irq(int irq)
{
int evtchn = evtchn_from_irq(irq);
@@ -877,6 +880,12 @@
mtx_unlock_spin(&irq_mapping_update_lock);
}
+int
+irq_to_evtchn_port(int irq)
+{
+ return evtchn_from_irq(irq);
+}
+
void
mask_evtchn(int port)
{
@@ -1041,7 +1050,6 @@
tpin->xp_intsrc.is_pic = xp->xp_dynirq_pic;
tpin->xp_vector = dynirq_to_irq(i);
- intr_register_source(&tpin->xp_intsrc);
}
/*
* Now, we go ahead and claim every PIRQ there is.
@@ -1061,7 +1069,6 @@
tpin->xp_intsrc.is_pic = xp->xp_pirq_pic;
tpin->xp_vector = pirq_to_irq(i);
- intr_register_source(&tpin->xp_intsrc);
}
}
More information about the p4-projects
mailing list