From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: [PATCH QEMUT v2 2/5] qemu-xen-traditional: Use libxenevtchn Date: Wed, 15 Jul 2015 16:47:50 +0100 Message-ID: <1436975273-13107-2-git-send-email-ian.campbell@citrix.com> References: <1436975173.32371.121.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1436975173.32371.121.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, xen-devel@lists.xen.org Cc: roger.pau@citrix.com, Ian Campbell , stefano.stabellini@eu.citrix.com List-Id: xen-devel@lists.xenproject.org /dev/xen/evtchn related wrappers have been moved out of libxenctrl into their own library. Note that i386-dm/helper2.c's xc_interface * was always really an xc_evtchn *, it's just they used to be typedefs to the same thing... Signed-off-by: Ian Campbell --- hw/xen_backend.c | 26 +++++++++++++------------- hw/xen_backend.h | 2 +- hw/xen_common.h | 1 + i386-dm/helper2.c | 19 ++++++++++--------- xen-hooks.mak | 2 ++ 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/hw/xen_backend.c b/hw/xen_backend.c index 92b3506..40f6887 100644 --- a/hw/xen_backend.c +++ b/hw/xen_backend.c @@ -208,19 +208,19 @@ static struct XenDevice *xen_be_get_xendev(const char *type, int dom, int dev, xendev->debug = debug; xendev->local_port = -1; - xendev->evtchndev = xc_evtchn_open(NULL, 0); + xendev->evtchndev = xenevtchn_open(NULL, 0); if (xendev->evtchndev == NULL) { xen_be_printf(NULL, 0, "can't open evtchn device\n"); qemu_free(xendev); return NULL; } - fcntl(xc_evtchn_fd(xendev->evtchndev), F_SETFD, FD_CLOEXEC); + fcntl(xenevtchn_fd(xendev->evtchndev), F_SETFD, FD_CLOEXEC); if (ops->flags & DEVOPS_FLAG_NEED_GNTDEV) { xendev->gnttabdev = xc_gnttab_open(NULL, 0); if (xendev->gnttabdev == NULL) { xen_be_printf(NULL, 0, "can't open gnttab device\n"); - xc_evtchn_close(xendev->evtchndev); + xenevtchn_close(xendev->evtchndev); qemu_free(xendev); return NULL; } @@ -268,7 +268,7 @@ static struct XenDevice *xen_be_del_xendev(int dom, int dev) } if (xendev->evtchndev != NULL) - xc_evtchn_close(xendev->evtchndev); + xenevtchn_close(xendev->evtchndev); if (xendev->gnttabdev != NULL) xc_gnttab_close(xendev->gnttabdev); @@ -630,13 +630,13 @@ static void xen_be_evtchn_event(void *opaque) struct XenDevice *xendev = opaque; evtchn_port_t port; - port = xc_evtchn_pending(xendev->evtchndev); + port = xenevtchn_pending(xendev->evtchndev); if (port != xendev->local_port) { - xen_be_printf(xendev, 0, "xc_evtchn_pending returned %d (expected %d)\n", + xen_be_printf(xendev, 0, "xenevtchn_pending returned %d (expected %d)\n", port, xendev->local_port); return; } - xc_evtchn_unmask(xendev->evtchndev, port); + xenevtchn_unmask(xendev->evtchndev, port); if (xendev->ops->event) xendev->ops->event(xendev); @@ -683,14 +683,14 @@ int xen_be_bind_evtchn(struct XenDevice *xendev) { if (xendev->local_port != -1) return 0; - xendev->local_port = xc_evtchn_bind_interdomain + xendev->local_port = xenevtchn_bind_interdomain (xendev->evtchndev, xendev->dom, xendev->remote_port); if (xendev->local_port == -1) { - xen_be_printf(xendev, 0, "xc_evtchn_bind_interdomain failed\n"); + xen_be_printf(xendev, 0, "xenevtchn_bind_interdomain failed\n"); return -1; } xen_be_printf(xendev, 2, "bind evtchn port %d\n", xendev->local_port); - qemu_set_fd_handler(xc_evtchn_fd(xendev->evtchndev), + qemu_set_fd_handler(xenevtchn_fd(xendev->evtchndev), xen_be_evtchn_event, NULL, xendev); return 0; } @@ -699,15 +699,15 @@ void xen_be_unbind_evtchn(struct XenDevice *xendev) { if (xendev->local_port == -1) return; - qemu_set_fd_handler(xc_evtchn_fd(xendev->evtchndev), NULL, NULL, NULL); - xc_evtchn_unbind(xendev->evtchndev, xendev->local_port); + qemu_set_fd_handler(xenevtchn_fd(xendev->evtchndev), NULL, NULL, NULL); + xenevtchn_unbind(xendev->evtchndev, xendev->local_port); xen_be_printf(xendev, 2, "unbind evtchn port %d\n", xendev->local_port); xendev->local_port = -1; } int xen_be_send_notify(struct XenDevice *xendev) { - return xc_evtchn_notify(xendev->evtchndev, xendev->local_port); + return xenevtchn_notify(xendev->evtchndev, xendev->local_port); } /* diff --git a/hw/xen_backend.h b/hw/xen_backend.h index e421391..60f18f8 100644 --- a/hw/xen_backend.h +++ b/hw/xen_backend.h @@ -44,7 +44,7 @@ struct XenDevice { int remote_port; int local_port; - xc_evtchn *evtchndev; + xenevtchn_handle *evtchndev; xc_gnttab *gnttabdev; struct XenDevOps *ops; diff --git a/hw/xen_common.h b/hw/xen_common.h index a615052..cee908f 100644 --- a/hw/xen_common.h +++ b/hw/xen_common.h @@ -4,6 +4,7 @@ #include #include +#include #include #include #include diff --git a/i386-dm/helper2.c b/i386-dm/helper2.c index 63a938b..e4df0d7 100644 --- a/i386-dm/helper2.c +++ b/i386-dm/helper2.c @@ -48,6 +48,7 @@ #include #include +#include #include #include #include @@ -104,7 +105,7 @@ buffered_iopage_t *buffered_io_page = NULL; QEMUTimer *buffered_io_timer; /* the evtchn fd for polling */ -xc_interface *xce_handle = NULL; +xenevtchn_handle *xce_handle = NULL; /* which vcpu we are serving */ int send_vcpu = 0; @@ -141,7 +142,7 @@ CPUX86State *cpu_x86_init(const char *cpu_model) cpu_single_env = env; - xce_handle = xc_evtchn_open(NULL, 0); + xce_handle = xenevtchn_open(NULL, 0); if (xce_handle == NULL) { perror("open"); return NULL; @@ -149,7 +150,7 @@ CPUX86State *cpu_x86_init(const char *cpu_model) /* FIXME: how about if we overflow the page here? */ for (i = 0; i < vcpus; i++) { - rc = xc_evtchn_bind_interdomain( + rc = xenevtchn_bind_interdomain( xce_handle, domid, shared_page->vcpu_ioreq[i].vp_eport); if (rc == -1) { fprintf(logfile, "bind interdomain ioctl error %d\n", errno); @@ -164,7 +165,7 @@ CPUX86State *cpu_x86_init(const char *cpu_model) errno); return NULL; } - rc = xc_evtchn_bind_interdomain(xce_handle, domid, (uint32_t)bufioreq_evtchn); + rc = xenevtchn_bind_interdomain(xce_handle, domid, (uint32_t)bufioreq_evtchn); if (rc == -1) { fprintf(logfile, "bind interdomain ioctl error %d\n", errno); return NULL; @@ -278,7 +279,7 @@ static ioreq_t *cpu_get_ioreq(void) int i; evtchn_port_t port; - port = xc_evtchn_pending(xce_handle); + port = xenevtchn_pending(xce_handle); if (port == bufioreq_local_port) { qemu_mod_timer(buffered_io_timer, BUFFER_IO_MAX_DELAY + qemu_get_clock(rt_clock)); @@ -296,7 +297,7 @@ static ioreq_t *cpu_get_ioreq(void) } // unmask the wanted port again - xc_evtchn_unmask(xce_handle, port); + xenevtchn_unmask(xce_handle, port); //get the io packet from shared memory send_vcpu = i; @@ -531,7 +532,7 @@ static void handle_buffered_io(void *opaque) BUFFER_IO_MAX_DELAY + qemu_get_clock(rt_clock)); } else { qemu_del_timer(buffered_io_timer); - xc_evtchn_unmask(xce_handle, bufioreq_local_port); + xenevtchn_unmask(xce_handle, bufioreq_local_port); } } @@ -575,7 +576,7 @@ static void cpu_handle_ioreq(void *opaque) } req->state = STATE_IORESP_READY; - xc_evtchn_notify(xce_handle, ioreq_local_port[send_vcpu]); + xenevtchn_notify(xce_handle, ioreq_local_port[send_vcpu]); } } @@ -584,7 +585,7 @@ int xen_pause_requested; int main_loop(void) { CPUState *env = cpu_single_env; - int evtchn_fd = xce_handle == NULL ? -1 : xc_evtchn_fd(xce_handle); + int evtchn_fd = xce_handle == NULL ? -1 : xenevtchn_fd(xce_handle); char *qemu_file; fd_set fds; diff --git a/xen-hooks.mak b/xen-hooks.mak index 2e53c04..ec5fbab 100644 --- a/xen-hooks.mak +++ b/xen-hooks.mak @@ -1,4 +1,5 @@ CPPFLAGS+= -I$(XEN_ROOT)/tools/libxentoollog/include +CPPFLAGS+= -I$(XEN_ROOT)/tools/libxenevtchn/include CPPFLAGS+= -I$(XEN_ROOT)/tools/libxc/include CPPFLAGS+= -I$(XEN_ROOT)/tools/xenstore/include CPPFLAGS+= -I$(XEN_ROOT)/tools/include @@ -18,6 +19,7 @@ endif CFLAGS += $(CMDLINE_CFLAGS) +LIBS += -L$(XEN_ROOT)/tools/libxenevtchn -lxenevtchn LIBS += -L$(XEN_ROOT)/tools/libxc -lxenctrl -lxenguest LIBS += -L$(XEN_ROOT)/tools/xenstore -lxenstore LIBS += -Wl,-rpath-link=$(XEN_ROOT)/tools/libxentoollog -- 2.1.4