summaryrefslogtreecommitdiffstats
path: root/sys/xen/xenstore/xenstore.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/xen/xenstore/xenstore.c')
-rw-r--r--sys/xen/xenstore/xenstore.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/sys/xen/xenstore/xenstore.c b/sys/xen/xenstore/xenstore.c
index a07a262..d404862 100644
--- a/sys/xen/xenstore/xenstore.c
+++ b/sys/xen/xenstore/xenstore.c
@@ -49,10 +49,9 @@ __FBSDID("$FreeBSD$");
#include <sys/uio.h>
#include <sys/unistd.h>
-#include <machine/xen/xen-os.h>
#include <machine/stdarg.h>
-#include <xen/evtchn.h>
+#include <xen/xen-os.h>
#include <xen/gnttab.h>
#include <xen/hypervisor.h>
#include <xen/xen_intr.h>
@@ -244,8 +243,8 @@ struct xs_softc {
*/
int evtchn;
- /** Interrupt number for our event channel. */
- u_int irq;
+ /** Handle for XenStore interrupts. */
+ xen_intr_handle_t xen_intr_handle;
/**
* Interrupt driven config hook allowing us to defer
@@ -505,11 +504,10 @@ xs_write_store(const void *tdata, unsigned len)
xen_store->req_prod += avail;
/*
- * notify_remote_via_evtchn implies mb(). The other side
- * will see the change to req_prod at the time of the
- * interrupt.
+ * xen_intr_signal() implies mb(). The other side will see
+ * the change to req_prod at the time of the interrupt.
*/
- notify_remote_via_evtchn(xs.evtchn);
+ xen_intr_signal(xs.xen_intr_handle);
}
return (0);
@@ -597,11 +595,10 @@ xs_read_store(void *tdata, unsigned len)
xen_store->rsp_cons += avail;
/*
- * notify_remote_via_evtchn implies mb(). The producer
- * will see the updated consumer index when the event
- * is delivered.
+ * xen_intr_signal() implies mb(). The producer will see
+ * the updated consumer index when the event is delivered.
*/
- notify_remote_via_evtchn(xs.evtchn);
+ xen_intr_signal(xs.xen_intr_handle);
}
return (0);
@@ -1068,11 +1065,11 @@ xs_init_comms(void)
xen_store->rsp_cons = xen_store->rsp_prod;
}
- if (xs.irq)
- unbind_from_irqhandler(xs.irq);
+ xen_intr_unbind(&xs.xen_intr_handle);
- error = bind_caller_port_to_irqhandler(xs.evtchn, "xenstore",
- xs_intr, NULL, INTR_TYPE_NET, &xs.irq);
+ error = xen_intr_bind_local_port(xs.xs_dev, xs.evtchn,
+ /*filter*/NULL, xs_intr, /*arg*/NULL, INTR_TYPE_NET|INTR_MPSAFE,
+ &xs.xen_intr_handle);
if (error) {
log(LOG_WARNING, "XENSTORE request irq failed %i\n", error);
return (error);
@@ -1168,7 +1165,6 @@ xs_attach(device_t dev)
sx_init(&xs.suspend_mutex, "xenstore suspend");
mtx_init(&xs.registered_watches_lock, "watches", NULL, MTX_DEF);
mtx_init(&xs.watch_events_lock, "watch events", NULL, MTX_DEF);
- xs.irq = 0;
/* Initialize the shared memory rings to talk to xenstored */
error = xs_init_comms();
OpenPOWER on IntegriCloud