Merge branch 'upstream/core' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen

* 'upstream/core' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen:
xen: handle events as edge-triggered
xen: use percpu interrupts for IPIs and VIRQs

+16 -5
+16 -5
drivers/xen/events.c
··· 112 #define VALID_EVTCHN(chn) ((chn) != 0) 113 114 static struct irq_chip xen_dynamic_chip; 115 116 /* Constructor for packed IRQ information. */ 117 static struct irq_info mk_unbound_info(void) ··· 378 irq = find_unbound_irq(); 379 380 set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, 381 - handle_level_irq, "event"); 382 383 evtchn_to_irq[evtchn] = irq; 384 irq_info[irq] = mk_evtchn_info(evtchn); ··· 404 if (irq < 0) 405 goto out; 406 407 - set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, 408 - handle_level_irq, "ipi"); 409 410 bind_ipi.vcpu = cpu; 411 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi, ··· 445 446 irq = find_unbound_irq(); 447 448 - set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, 449 - handle_level_irq, "virq"); 450 451 evtchn_to_irq[evtchn] = irq; 452 irq_info[irq] = mk_virq_info(evtchn, virq); ··· 963 .ack = ack_dynirq, 964 .set_affinity = set_affinity_irq, 965 .retrigger = retrigger_dynirq, 966 }; 967 968 int xen_set_callback_via(uint64_t via)
··· 112 #define VALID_EVTCHN(chn) ((chn) != 0) 113 114 static struct irq_chip xen_dynamic_chip; 115 + static struct irq_chip xen_percpu_chip; 116 117 /* Constructor for packed IRQ information. */ 118 static struct irq_info mk_unbound_info(void) ··· 377 irq = find_unbound_irq(); 378 379 set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, 380 + handle_edge_irq, "event"); 381 382 evtchn_to_irq[evtchn] = irq; 383 irq_info[irq] = mk_evtchn_info(evtchn); ··· 403 if (irq < 0) 404 goto out; 405 406 + set_irq_chip_and_handler_name(irq, &xen_percpu_chip, 407 + handle_percpu_irq, "ipi"); 408 409 bind_ipi.vcpu = cpu; 410 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi, ··· 444 445 irq = find_unbound_irq(); 446 447 + set_irq_chip_and_handler_name(irq, &xen_percpu_chip, 448 + handle_percpu_irq, "virq"); 449 450 evtchn_to_irq[evtchn] = irq; 451 irq_info[irq] = mk_virq_info(evtchn, virq); ··· 962 .ack = ack_dynirq, 963 .set_affinity = set_affinity_irq, 964 .retrigger = retrigger_dynirq, 965 + }; 966 + 967 + static struct irq_chip xen_percpu_chip __read_mostly = { 968 + .name = "xen-percpu", 969 + 970 + .disable = disable_dynirq, 971 + .mask = disable_dynirq, 972 + .unmask = enable_dynirq, 973 + 974 + .ack = ack_dynirq, 975 }; 976 977 int xen_set_callback_via(uint64_t via)