|
@@ -92,6 +92,8 @@ static unsigned short saved_irq_cnt;
|
|
static int xen_slab_ready;
|
|
static int xen_slab_ready;
|
|
|
|
|
|
#ifdef CONFIG_SMP
|
|
#ifdef CONFIG_SMP
|
|
|
|
+#include <linux/sched.h>
|
|
|
|
+
|
|
/* Dummy stub. Though we may check XEN_RESCHEDULE_VECTOR before __do_IRQ,
|
|
/* Dummy stub. Though we may check XEN_RESCHEDULE_VECTOR before __do_IRQ,
|
|
* it ends up to issue several memory accesses upon percpu data and
|
|
* it ends up to issue several memory accesses upon percpu data and
|
|
* thus adds unnecessary traffic to other paths.
|
|
* thus adds unnecessary traffic to other paths.
|
|
@@ -99,7 +101,13 @@ static int xen_slab_ready;
|
|
static irqreturn_t
|
|
static irqreturn_t
|
|
xen_dummy_handler(int irq, void *dev_id)
|
|
xen_dummy_handler(int irq, void *dev_id)
|
|
{
|
|
{
|
|
|
|
+ return IRQ_HANDLED;
|
|
|
|
+}
|
|
|
|
|
|
|
|
+static irqreturn_t
|
|
|
|
+xen_resched_handler(int irq, void *dev_id)
|
|
|
|
+{
|
|
|
|
+ scheduler_ipi();
|
|
return IRQ_HANDLED;
|
|
return IRQ_HANDLED;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -110,7 +118,7 @@ static struct irqaction xen_ipi_irqaction = {
|
|
};
|
|
};
|
|
|
|
|
|
static struct irqaction xen_resched_irqaction = {
|
|
static struct irqaction xen_resched_irqaction = {
|
|
- .handler = xen_dummy_handler,
|
|
|
|
|
|
+ .handler = xen_resched_handler,
|
|
.flags = IRQF_DISABLED,
|
|
.flags = IRQF_DISABLED,
|
|
.name = "resched"
|
|
.name = "resched"
|
|
};
|
|
};
|