xen/events: change to using fasteoi
Change event delivery to: - mask+clear event in the upcall function - use handle_fasteoi_irq as the handler - unmask in the eoi function (and handle migration) Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
This commit is contained in:
parent
1e17fc7eff
commit
3588fe2e3f
1 changed files with 7 additions and 4 deletions
|
@ -378,7 +378,7 @@ int bind_evtchn_to_irq(unsigned int evtchn)
|
||||||
irq = find_unbound_irq();
|
irq = find_unbound_irq();
|
||||||
|
|
||||||
set_irq_chip_and_handler_name(irq, &xen_dynamic_chip,
|
set_irq_chip_and_handler_name(irq, &xen_dynamic_chip,
|
||||||
handle_edge_irq, "event");
|
handle_fasteoi_irq, "event");
|
||||||
|
|
||||||
evtchn_to_irq[evtchn] = irq;
|
evtchn_to_irq[evtchn] = irq;
|
||||||
irq_info[irq] = mk_evtchn_info(evtchn);
|
irq_info[irq] = mk_evtchn_info(evtchn);
|
||||||
|
@ -664,6 +664,9 @@ static void __xen_evtchn_do_upcall(void)
|
||||||
int irq = evtchn_to_irq[port];
|
int irq = evtchn_to_irq[port];
|
||||||
struct irq_desc *desc;
|
struct irq_desc *desc;
|
||||||
|
|
||||||
|
mask_evtchn(port);
|
||||||
|
clear_evtchn(port);
|
||||||
|
|
||||||
if (irq != -1) {
|
if (irq != -1) {
|
||||||
desc = irq_to_desc(irq);
|
desc = irq_to_desc(irq);
|
||||||
if (desc)
|
if (desc)
|
||||||
|
@ -801,10 +804,10 @@ static void ack_dynirq(unsigned int irq)
|
||||||
{
|
{
|
||||||
int evtchn = evtchn_from_irq(irq);
|
int evtchn = evtchn_from_irq(irq);
|
||||||
|
|
||||||
move_native_irq(irq);
|
move_masked_irq(irq);
|
||||||
|
|
||||||
if (VALID_EVTCHN(evtchn))
|
if (VALID_EVTCHN(evtchn))
|
||||||
clear_evtchn(evtchn);
|
unmask_evtchn(evtchn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int retrigger_dynirq(unsigned int irq)
|
static int retrigger_dynirq(unsigned int irq)
|
||||||
|
@ -960,7 +963,7 @@ static struct irq_chip xen_dynamic_chip __read_mostly = {
|
||||||
.mask = disable_dynirq,
|
.mask = disable_dynirq,
|
||||||
.unmask = enable_dynirq,
|
.unmask = enable_dynirq,
|
||||||
|
|
||||||
.ack = ack_dynirq,
|
.eoi = ack_dynirq,
|
||||||
.set_affinity = set_affinity_irq,
|
.set_affinity = set_affinity_irq,
|
||||||
.retrigger = retrigger_dynirq,
|
.retrigger = retrigger_dynirq,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue