diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2008-06-13 13:39:00 +1000 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2008-06-13 13:39:00 +1000 |
commit | f2603c77e8cd7777742da9eb8feea06fbd85c267 (patch) | |
tree | a2ecf7df8e2aed5db5fd58987390bb7ca65715d5 /drivers/xen/xenbus/xenbus_comms.c | |
parent | 9546e899e803ea8e738911b36bfcfe020031eefe (diff) | |
parent | 0536899878853e1963e516c322d4578dc5b4fcd0 (diff) |
Merge commit 'x86/auto-x86-next'
Conflicts:
arch/x86/kernel/io_apic_32.c
arch/x86/kernel/nmi_32.c
arch/x86/kernel/process_32.c
arch/x86/kernel/process_64.c
Diffstat (limited to 'drivers/xen/xenbus/xenbus_comms.c')
-rw-r--r-- | drivers/xen/xenbus/xenbus_comms.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c index 6efbe3f29ca5..090c61ee8fd0 100644 --- a/drivers/xen/xenbus/xenbus_comms.c +++ b/drivers/xen/xenbus/xenbus_comms.c @@ -203,7 +203,6 @@ int xb_read(void *data, unsigned len) int xb_init_comms(void) { struct xenstore_domain_interface *intf = xen_store_interface; - int err; if (intf->req_prod != intf->req_cons) printk(KERN_ERR "XENBUS request ring is not quiescent " @@ -216,18 +215,20 @@ int xb_init_comms(void) intf->rsp_cons = intf->rsp_prod; } - if (xenbus_irq) - unbind_from_irqhandler(xenbus_irq, &xb_waitq); + if (xenbus_irq) { + /* Already have an irq; assume we're resuming */ + rebind_evtchn_irq(xen_store_evtchn, xenbus_irq); + } else { + int err; + err = bind_evtchn_to_irqhandler(xen_store_evtchn, wake_waiting, + 0, "xenbus", &xb_waitq); + if (err <= 0) { + printk(KERN_ERR "XENBUS request irq failed %i\n", err); + return err; + } - err = bind_evtchn_to_irqhandler( - xen_store_evtchn, wake_waiting, - 0, "xenbus", &xb_waitq); - if (err <= 0) { - printk(KERN_ERR "XENBUS request irq failed %i\n", err); - return err; + xenbus_irq = err; } - xenbus_irq = err; - return 0; } |