Date: Fri, 28 Nov 2008 16:39:20 +0000 (UTC) From: Doug Rabson <dfr@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r185393 - user/dfr/xenhvm/6/sys/xen/xenbus Message-ID: <200811281639.mASGdKJg024025@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dfr Date: Fri Nov 28 16:39:20 2008 New Revision: 185393 URL: http://svn.freebsd.org/changeset/base/185393 Log: Add Xen HVM support. Modified: user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c Modified: user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.c ============================================================================== --- user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.c Fri Nov 28 16:29:24 2008 (r185392) +++ user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.c Fri Nov 28 16:39:20 2008 (r185393) @@ -58,7 +58,6 @@ extern int xenstored_ready; static DECLARE_WORK(probe_work, xenbus_probe, NULL); #endif int xb_wait; -extern char *xen_store; #define wake_up wakeup #define xb_waitq xb_wait #define pr_debug(a,b,c) @@ -144,7 +143,7 @@ int xb_write(const void *tdata, unsigned intf->req_prod += avail; /* This implies mb() before other side sees interrupt. */ - notify_remote_via_evtchn(xen_start_info->store_evtchn); + notify_remote_via_evtchn(xen_store_evtchn); } return 0; @@ -205,7 +204,7 @@ int xb_read(void *tdata, unsigned len) pr_debug("Finished read of %i bytes (%i to go)\n", avail, len); /* Implies mb(): they will see new header. */ - notify_remote_via_evtchn(xen_start_info->store_evtchn); + notify_remote_via_evtchn(xen_store_evtchn); } return 0; @@ -228,7 +227,7 @@ int xb_init_comms(void) unbind_from_irqhandler(xenbus_irq, &xb_waitq); err = bind_caller_port_to_irqhandler( - xen_start_info->store_evtchn, + xen_store_evtchn, "xenbus", wake_waiting, NULL, INTR_TYPE_NET, NULL); if (err <= 0) { log(LOG_WARNING, "XENBUS request irq failed %i\n", err); Modified: user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c ============================================================================== --- user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c Fri Nov 28 16:29:24 2008 (r185392) +++ user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c Fri Nov 28 16:39:20 2008 (r185393) @@ -57,6 +57,8 @@ __FBSDID("$FreeBSD$"); #include <machine/stdarg.h> #include <xen/xenbus/xenbus_comms.h> +#include <xen/interface/hvm/params.h> + static int xs_process_msg(enum xsd_sockmsg_type *type); #define kmalloc(size, unused) malloc(size, M_DEVBUF, M_WAITOK) @@ -71,6 +73,7 @@ static int xs_process_msg(enum xsd_sockm #define streq(a, b) (strcmp((a), (b)) == 0) int xenwatch_running = 0; int xenbus_running = 0; +int xen_store_evtchn; struct kvec { const void *iov_base; @@ -908,11 +911,43 @@ static void xenbus_thread(void *unused) } } +#ifdef XENHVM + +static unsigned long xen_store_mfn; +char *xen_store; + +static inline unsigned long +hvm_get_parameter(int index) +{ + struct xen_hvm_param xhv; + int error; + + xhv.domid = DOMID_SELF; + xhv.index = index; + error = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); + if (error) { + printf("hvm_get_parameter: failed to get %d, error %d\n", + index, error); + return (0); + } + return (xhv.value); +} + +#endif + int xs_init(void) { int err; struct proc *p; +#ifdef XENHVM + xen_store_evtchn = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN); + xen_store_mfn = hvm_get_parameter(HVM_PARAM_STORE_PFN); + xen_store = pmap_mapdev(xen_store_mfn * PAGE_SIZE, PAGE_SIZE); +#else + xen_store_evtchn = xen_start_info->store_evtchn; +#endif + TAILQ_INIT(&xs_state.reply_list); TAILQ_INIT(&watch_events); sx_init(&xenwatch_mutex, "xenwatch");
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811281639.mASGdKJg024025>