|
@@ -277,7 +277,7 @@ static void bind_evtchn_to_cpu(unsigned int chn, unsigned int cpu)
|
|
|
|
|
|
BUG_ON(irq == -1);
|
|
|
#ifdef CONFIG_SMP
|
|
|
- cpumask_copy(irq_to_desc(irq)->affinity, cpumask_of(cpu));
|
|
|
+ cpumask_copy(irq_to_desc(irq)->irq_data.affinity, cpumask_of(cpu));
|
|
|
#endif
|
|
|
|
|
|
clear_bit(chn, cpu_evtchn_mask(cpu_from_irq(irq)));
|
|
@@ -294,7 +294,7 @@ static void init_evtchn_cpu_bindings(void)
|
|
|
|
|
|
/* By default all event channels notify CPU#0. */
|
|
|
for_each_irq_desc(i, desc) {
|
|
|
- cpumask_copy(desc->affinity, cpumask_of(0));
|
|
|
+ cpumask_copy(desc->irq_data.affinity, cpumask_of(0));
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -474,7 +474,7 @@ static bool probing_irq(int irq)
|
|
|
return desc && desc->action == NULL;
|
|
|
}
|
|
|
|
|
|
-static unsigned int startup_pirq(unsigned int irq)
|
|
|
+static unsigned int __startup_pirq(unsigned int irq)
|
|
|
{
|
|
|
struct evtchn_bind_pirq bind_pirq;
|
|
|
struct irq_info *info = info_for_irq(irq);
|
|
@@ -512,9 +512,15 @@ out:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void shutdown_pirq(unsigned int irq)
|
|
|
+static unsigned int startup_pirq(struct irq_data *data)
|
|
|
+{
|
|
|
+ return __startup_pirq(data->irq);
|
|
|
+}
|
|
|
+
|
|
|
+static void shutdown_pirq(struct irq_data *data)
|
|
|
{
|
|
|
struct evtchn_close close;
|
|
|
+ unsigned int irq = data->irq;
|
|
|
struct irq_info *info = info_for_irq(irq);
|
|
|
int evtchn = evtchn_from_irq(irq);
|
|
|
|
|
@@ -534,20 +540,20 @@ static void shutdown_pirq(unsigned int irq)
|
|
|
info->evtchn = 0;
|
|
|
}
|
|
|
|
|
|
-static void enable_pirq(unsigned int irq)
|
|
|
+static void enable_pirq(struct irq_data *data)
|
|
|
{
|
|
|
- startup_pirq(irq);
|
|
|
+ startup_pirq(data);
|
|
|
}
|
|
|
|
|
|
-static void disable_pirq(unsigned int irq)
|
|
|
+static void disable_pirq(struct irq_data *data)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
-static void ack_pirq(unsigned int irq)
|
|
|
+static void ack_pirq(struct irq_data *data)
|
|
|
{
|
|
|
- int evtchn = evtchn_from_irq(irq);
|
|
|
+ int evtchn = evtchn_from_irq(data->irq);
|
|
|
|
|
|
- move_native_irq(irq);
|
|
|
+ irq_move_irq(data);
|
|
|
|
|
|
if (VALID_EVTCHN(evtchn)) {
|
|
|
mask_evtchn(evtchn);
|
|
@@ -1215,11 +1221,12 @@ static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int set_affinity_irq(unsigned irq, const struct cpumask *dest)
|
|
|
+static int set_affinity_irq(struct irq_data *data, const struct cpumask *dest,
|
|
|
+ bool force)
|
|
|
{
|
|
|
unsigned tcpu = cpumask_first(dest);
|
|
|
|
|
|
- return rebind_irq_to_cpu(irq, tcpu);
|
|
|
+ return rebind_irq_to_cpu(data->irq, tcpu);
|
|
|
}
|
|
|
|
|
|
int resend_irq_on_evtchn(unsigned int irq)
|
|
@@ -1238,35 +1245,35 @@ int resend_irq_on_evtchn(unsigned int irq)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-static void enable_dynirq(unsigned int irq)
|
|
|
+static void enable_dynirq(struct irq_data *data)
|
|
|
{
|
|
|
- int evtchn = evtchn_from_irq(irq);
|
|
|
+ int evtchn = evtchn_from_irq(data->irq);
|
|
|
|
|
|
if (VALID_EVTCHN(evtchn))
|
|
|
unmask_evtchn(evtchn);
|
|
|
}
|
|
|
|
|
|
-static void disable_dynirq(unsigned int irq)
|
|
|
+static void disable_dynirq(struct irq_data *data)
|
|
|
{
|
|
|
- int evtchn = evtchn_from_irq(irq);
|
|
|
+ int evtchn = evtchn_from_irq(data->irq);
|
|
|
|
|
|
if (VALID_EVTCHN(evtchn))
|
|
|
mask_evtchn(evtchn);
|
|
|
}
|
|
|
|
|
|
-static void ack_dynirq(unsigned int irq)
|
|
|
+static void ack_dynirq(struct irq_data *data)
|
|
|
{
|
|
|
- int evtchn = evtchn_from_irq(irq);
|
|
|
+ int evtchn = evtchn_from_irq(data->irq);
|
|
|
|
|
|
- move_masked_irq(irq);
|
|
|
+ move_masked_irq(data->irq);
|
|
|
|
|
|
if (VALID_EVTCHN(evtchn))
|
|
|
unmask_evtchn(evtchn);
|
|
|
}
|
|
|
|
|
|
-static int retrigger_dynirq(unsigned int irq)
|
|
|
+static int retrigger_dynirq(struct irq_data *data)
|
|
|
{
|
|
|
- int evtchn = evtchn_from_irq(irq);
|
|
|
+ int evtchn = evtchn_from_irq(data->irq);
|
|
|
struct shared_info *sh = HYPERVISOR_shared_info;
|
|
|
int ret = 0;
|
|
|
|
|
@@ -1315,7 +1322,7 @@ static void restore_cpu_pirqs(void)
|
|
|
|
|
|
printk(KERN_DEBUG "xen: --> irq=%d, pirq=%d\n", irq, map_irq.pirq);
|
|
|
|
|
|
- startup_pirq(irq);
|
|
|
+ __startup_pirq(irq);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1467,44 +1474,44 @@ void xen_irq_resume(void)
|
|
|
}
|
|
|
|
|
|
static struct irq_chip xen_dynamic_chip __read_mostly = {
|
|
|
- .name = "xen-dyn",
|
|
|
+ .name = "xen-dyn",
|
|
|
|
|
|
- .disable = disable_dynirq,
|
|
|
- .mask = disable_dynirq,
|
|
|
- .unmask = enable_dynirq,
|
|
|
+ .irq_disable = disable_dynirq,
|
|
|
+ .irq_mask = disable_dynirq,
|
|
|
+ .irq_unmask = enable_dynirq,
|
|
|
|
|
|
- .eoi = ack_dynirq,
|
|
|
- .set_affinity = set_affinity_irq,
|
|
|
- .retrigger = retrigger_dynirq,
|
|
|
+ .irq_eoi = ack_dynirq,
|
|
|
+ .irq_set_affinity = set_affinity_irq,
|
|
|
+ .irq_retrigger = retrigger_dynirq,
|
|
|
};
|
|
|
|
|
|
static struct irq_chip xen_pirq_chip __read_mostly = {
|
|
|
- .name = "xen-pirq",
|
|
|
+ .name = "xen-pirq",
|
|
|
|
|
|
- .startup = startup_pirq,
|
|
|
- .shutdown = shutdown_pirq,
|
|
|
+ .irq_startup = startup_pirq,
|
|
|
+ .irq_shutdown = shutdown_pirq,
|
|
|
|
|
|
- .enable = enable_pirq,
|
|
|
- .unmask = enable_pirq,
|
|
|
+ .irq_enable = enable_pirq,
|
|
|
+ .irq_unmask = enable_pirq,
|
|
|
|
|
|
- .disable = disable_pirq,
|
|
|
- .mask = disable_pirq,
|
|
|
+ .irq_disable = disable_pirq,
|
|
|
+ .irq_mask = disable_pirq,
|
|
|
|
|
|
- .ack = ack_pirq,
|
|
|
+ .irq_ack = ack_pirq,
|
|
|
|
|
|
- .set_affinity = set_affinity_irq,
|
|
|
+ .irq_set_affinity = set_affinity_irq,
|
|
|
|
|
|
- .retrigger = retrigger_dynirq,
|
|
|
+ .irq_retrigger = retrigger_dynirq,
|
|
|
};
|
|
|
|
|
|
static struct irq_chip xen_percpu_chip __read_mostly = {
|
|
|
- .name = "xen-percpu",
|
|
|
+ .name = "xen-percpu",
|
|
|
|
|
|
- .disable = disable_dynirq,
|
|
|
- .mask = disable_dynirq,
|
|
|
- .unmask = enable_dynirq,
|
|
|
+ .irq_disable = disable_dynirq,
|
|
|
+ .irq_mask = disable_dynirq,
|
|
|
+ .irq_unmask = enable_dynirq,
|
|
|
|
|
|
- .ack = ack_dynirq,
|
|
|
+ .irq_ack = ack_dynirq,
|
|
|
};
|
|
|
|
|
|
int xen_set_callback_via(uint64_t via)
|