diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-08-21 09:51:46 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-08-21 09:51:46 +0100 |
commit | a0685dba649a9eb4eaa525f3a39db912bb4df8bf (patch) | |
tree | 8b819600f3124cb4e3c836ad6adc73e6ea8c6589 /unmodified_drivers | |
parent | f480edacaa82286fc76a3d1edc5b26a939bfe5f8 (diff) | |
download | xen-a0685dba649a9eb4eaa525f3a39db912bb4df8bf.tar.gz xen-a0685dba649a9eb4eaa525f3a39db912bb4df8bf.tar.bz2 xen-a0685dba649a9eb4eaa525f3a39db912bb4df8bf.zip |
PV-on-HVM: unmask_evtchn() must always use hypercall.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'unmodified_drivers')
-rw-r--r-- | unmodified_drivers/linux-2.6/platform-pci/evtchn.c | 41 |
1 files changed, 2 insertions, 39 deletions
diff --git a/unmodified_drivers/linux-2.6/platform-pci/evtchn.c b/unmodified_drivers/linux-2.6/platform-pci/evtchn.c index e6d5c3e83d..8c2822d973 100644 --- a/unmodified_drivers/linux-2.6/platform-pci/evtchn.c +++ b/unmodified_drivers/linux-2.6/platform-pci/evtchn.c @@ -107,39 +107,8 @@ EXPORT_SYMBOL(mask_evtchn); void unmask_evtchn(int port) { - unsigned int cpu; - shared_info_t *s = shared_info_area; - vcpu_info_t *vcpu_info; - - cpu = get_cpu(); - vcpu_info = &s->vcpu_info[cpu]; - - /* Slow path (hypercall) if this is a non-local port. We only - ever bind event channels to vcpu 0 in HVM guests. */ - if (unlikely(cpu != 0)) { - evtchn_unmask_t op = { .port = port }; - VOID(HYPERVISOR_event_channel_op(EVTCHNOP_unmask, - &op)); - put_cpu(); - return; - } - - synch_clear_bit(port, &s->evtchn_mask[0]); - - /* - * The following is basically the equivalent of - * 'hw_resend_irq'. Just like a real IO-APIC we 'lose the - * interrupt edge' if the channel is masked. - */ - if (synch_test_bit(port, &s->evtchn_pending[0]) && - !synch_test_and_set_bit(port / BITS_PER_LONG, - &vcpu_info->evtchn_pending_sel)) { - vcpu_info->evtchn_upcall_pending = 1; - if (!vcpu_info->evtchn_upcall_mask) - force_evtchn_callback(); - } - - put_cpu(); + evtchn_unmask_t op = { .port = port }; + VOID(HYPERVISOR_event_channel_op(EVTCHNOP_unmask, &op)); } EXPORT_SYMBOL(unmask_evtchn); @@ -357,12 +326,6 @@ static irqreturn_t evtchn_interrupt(int irq, void *dev_id return IRQ_HANDLED; } -void force_evtchn_callback(void) -{ - VOID(HYPERVISOR_xen_version(0, NULL)); -} -EXPORT_SYMBOL(force_evtchn_callback); - void irq_resume(void) { int evtchn, irq; |