aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_private.c
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2010-10-22 15:14:51 +0100
committerIan Campbell <ian.campbell@citrix.com>2010-10-22 15:14:51 +0100
commit4fd0fc305b2dfad938accb766ac24a083eae135b (patch)
tree680f2337529c6931b0520aa8c30470388cffbd47 /tools/libxc/xc_private.c
parentf36c8d0c957ba7f971d992f104b9984547e8429b (diff)
downloadxen-4fd0fc305b2dfad938accb766ac24a083eae135b.tar.gz
xen-4fd0fc305b2dfad938accb766ac24a083eae135b.tar.bz2
xen-4fd0fc305b2dfad938accb766ac24a083eae135b.zip
libxc: finalise transition to hypercall buffers.
Rename xc_set_xen_guest_handle to set_xen_guest_handle[0] and remove now unused functions: - xc_memalign - lock_pages - unlock_pages - hcall_buf_prep - hcall_buf_release [0] sed -i -e 's/xc_set_xen_guest_handle/set_xen_guest_handle/g' \ tools/libxc/*.[ch] \ tools/python/xen/lowlevel/xc/xc.c \ tools/python/xen/lowlevel/acm/acm.c \ tools/libxc/ia64/xc_ia64_stubs.c \ tools/security/secpol_tool.c \ tools/misc/xenpm.c Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Ian Jackson <ian.jackson.citrix.com>
Diffstat (limited to 'tools/libxc/xc_private.c')
-rw-r--r--tools/libxc/xc_private.c153
1 files changed, 3 insertions, 150 deletions
diff --git a/tools/libxc/xc_private.c b/tools/libxc/xc_private.c
index 266a7c078f..9e0d3ce2db 100644
--- a/tools/libxc/xc_private.c
+++ b/tools/libxc/xc_private.c
@@ -69,8 +69,6 @@ xc_interface *xc_interface_open(xentoollog_logger *logger,
return 0;
}
-static void xc_clean_hcall_buf(xc_interface *xch);
-
int xc_interface_close(xc_interface *xch)
{
int rc = 0;
@@ -83,8 +81,6 @@ int xc_interface_close(xc_interface *xch)
if (rc) PERROR("Could not close hypervisor interface");
}
- xc_clean_hcall_buf(xch);
-
free(xch);
return rc;
}
@@ -189,133 +185,6 @@ void xc_report_progress_step(xc_interface *xch,
done, total);
}
-#ifdef __sun__
-
-int lock_pages(xc_interface *xch, void *addr, size_t len) { return 0; }
-void unlock_pages(xc_interface *xch, void *addr, size_t len) { }
-
-int hcall_buf_prep(xc_interface *xch, void **addr, size_t len) { return 0; }
-void hcall_buf_release(xc_interface *xch, void **addr, size_t len) { }
-
-static void xc_clean_hcall_buf(xc_interface *xch) { }
-
-#else /* !__sun__ */
-
-int lock_pages(xc_interface *xch, void *addr, size_t len)
-{
- int e;
- void *laddr = (void *)((unsigned long)addr & PAGE_MASK);
- size_t llen = (len + ((unsigned long)addr - (unsigned long)laddr) +
- PAGE_SIZE - 1) & PAGE_MASK;
- e = mlock(laddr, llen);
- return e;
-}
-
-void unlock_pages(xc_interface *xch, void *addr, size_t len)
-{
- void *laddr = (void *)((unsigned long)addr & PAGE_MASK);
- size_t llen = (len + ((unsigned long)addr - (unsigned long)laddr) +
- PAGE_SIZE - 1) & PAGE_MASK;
- int saved_errno = errno;
- (void)munlock(laddr, llen);
- errno = saved_errno;
-}
-
-static pthread_key_t hcall_buf_pkey;
-static pthread_once_t hcall_buf_pkey_once = PTHREAD_ONCE_INIT;
-struct hcall_buf {
- xc_interface *xch;
- void *buf;
- void *oldbuf;
-};
-
-static void _xc_clean_hcall_buf(void *m)
-{
- struct hcall_buf *hcall_buf = m;
-
- if ( hcall_buf )
- {
- if ( hcall_buf->buf )
- {
- unlock_pages(hcall_buf->xch, hcall_buf->buf, PAGE_SIZE);
- free(hcall_buf->buf);
- }
-
- free(hcall_buf);
- }
-
- pthread_setspecific(hcall_buf_pkey, NULL);
-}
-
-static void _xc_init_hcall_buf(void)
-{
- pthread_key_create(&hcall_buf_pkey, _xc_clean_hcall_buf);
-}
-
-static void xc_clean_hcall_buf(xc_interface *xch)
-{
- pthread_once(&hcall_buf_pkey_once, _xc_init_hcall_buf);
-
- _xc_clean_hcall_buf(pthread_getspecific(hcall_buf_pkey));
-}
-
-int hcall_buf_prep(xc_interface *xch, void **addr, size_t len)
-{
- struct hcall_buf *hcall_buf;
-
- pthread_once(&hcall_buf_pkey_once, _xc_init_hcall_buf);
-
- hcall_buf = pthread_getspecific(hcall_buf_pkey);
- if ( !hcall_buf )
- {
- hcall_buf = calloc(1, sizeof(*hcall_buf));
- if ( !hcall_buf )
- goto out;
- hcall_buf->xch = xch;
- pthread_setspecific(hcall_buf_pkey, hcall_buf);
- }
-
- if ( !hcall_buf->buf )
- {
- hcall_buf->buf = xc_memalign(PAGE_SIZE, PAGE_SIZE);
- if ( !hcall_buf->buf || lock_pages(xch, hcall_buf->buf, PAGE_SIZE) )
- {
- free(hcall_buf->buf);
- hcall_buf->buf = NULL;
- goto out;
- }
- }
-
- if ( (len < PAGE_SIZE) && !hcall_buf->oldbuf )
- {
- memcpy(hcall_buf->buf, *addr, len);
- hcall_buf->oldbuf = *addr;
- *addr = hcall_buf->buf;
- return 0;
- }
-
- out:
- return lock_pages(xch, *addr, len);
-}
-
-void hcall_buf_release(xc_interface *xch, void **addr, size_t len)
-{
- struct hcall_buf *hcall_buf = pthread_getspecific(hcall_buf_pkey);
-
- if ( hcall_buf && (hcall_buf->buf == *addr) )
- {
- memcpy(hcall_buf->oldbuf, *addr, len);
- *addr = hcall_buf->oldbuf;
- hcall_buf->oldbuf = NULL;
- }
- else
- {
- unlock_pages(xch, *addr, len);
- }
-}
-
-#endif
-
/* NB: arr must be locked */
int xc_get_pfn_type_batch(xc_interface *xch, uint32_t dom,
unsigned int num, xen_pfn_t *arr)
@@ -328,7 +197,7 @@ int xc_get_pfn_type_batch(xc_interface *xch, uint32_t dom,
domctl.cmd = XEN_DOMCTL_getpageframeinfo3;
domctl.domain = (domid_t)dom;
domctl.u.getpageframeinfo3.num = num;
- xc_set_xen_guest_handle(domctl.u.getpageframeinfo3.array, arr);
+ set_xen_guest_handle(domctl.u.getpageframeinfo3.array, arr);
rc = do_domctl(xch, &domctl);
xc_hypercall_bounce_post(xch, arr);
return rc;
@@ -486,7 +355,7 @@ int xc_machphys_mfn_list(xc_interface *xch,
return -1;
}
- xc_set_xen_guest_handle(xmml.extent_start, extent_start);
+ set_xen_guest_handle(xmml.extent_start, extent_start);
rc = do_memory_op(xch, XENMEM_machphys_mfn_list, &xmml, sizeof(xmml));
if (rc || xmml.nr_extents != max_extents)
rc = -1;
@@ -520,7 +389,7 @@ int xc_get_pfn_list(xc_interface *xch,
domctl.cmd = XEN_DOMCTL_getmemlist;
domctl.domain = (domid_t)domid;
domctl.u.getmemlist.max_pfns = max_pfns;
- xc_set_xen_guest_handle(domctl.u.getmemlist.buffer, pfn_buf);
+ set_xen_guest_handle(domctl.u.getmemlist.buffer, pfn_buf);
ret = do_domctl(xch, &domctl);
@@ -780,22 +649,6 @@ int xc_ffs64(uint64_t x)
return l ? xc_ffs32(l) : h ? xc_ffs32(h) + 32 : 0;
}
-void *xc_memalign(size_t alignment, size_t size)
-{
-#if defined(_POSIX_C_SOURCE) && !defined(__sun__)
- int ret;
- void *ptr;
- ret = posix_memalign(&ptr, alignment, size);
- if (ret != 0)
- return NULL;
- return ptr;
-#elif defined(__NetBSD__) || defined(__OpenBSD__)
- return valloc(size);
-#else
- return memalign(alignment, size);
-#endif
-}
-
/*
* Local variables:
* mode: C