From: Ian Campbell <ian.campbell@citrix.com>
To: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, xen-devel@lists.xen.org
Cc: George Dunlap <george.dunlap@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>
Subject: [PATCH XEN v7 11/29] tools: Remove xc_map_foreign_batch
Date: Wed, 16 Dec 2015 12:31:18 +0000 [thread overview]
Message-ID: <1450269096-27598-12-git-send-email-ian.campbell@citrix.com> (raw)
In-Reply-To: <1450269096-27598-1-git-send-email-ian.campbell@citrix.com>
It can trivially be replaced by xc_map_foreign_pages which is the
interface I want to move to going forward (by standardising on _bulk
but handling err=NULL as _pages does).
The callers of _batch are checking a mixture of a NULL return or
looking to see if the top nibble of the (usually sole) mfn they pass
has been modified to be non-zero to detect errors. _pages never
modifies the mfn it was given (it's const) and returns NULL on
failure, so adjust the error handling where necessary. Some callers
use a copy of the mfn array, for reuse on failure with _batch, which
is no longer necessary as _pages doesn't modify the array, however I
haven't cleaned that up here.
This reduces the twist maze of xc_map_foreign_* by one, which will be
useful when trying to come up with an underlying stable interface.
NetBSD and Solaris implemented xc_map_foreign_bulk in terms of
xc_map_foreign_batch via a compat layer, so xc_map_foreign_batch
becomes an internal osdep for them.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
Cc: George Dunlap <george.dunlap@eu.citrix.com>
---
v7: Don't mention new ports implementing _bulk, which is confusing and
will be obsolete a couple of patches later.
v6: Switch to xc_map_foreign_pages not xc_map_foreign_bulk, since the
former has more similar error handling semantics to the current
usage.
Dropped acks.
---
tools/libxc/include/xenctrl.h | 10 -------
tools/libxc/xc_foreign_memory.c | 4 ++-
tools/libxc/xc_linux_osdep.c | 59 +++--------------------------------------
tools/libxc/xc_minios.c | 22 ---------------
tools/libxc/xc_netbsd.c | 10 +++----
tools/libxc/xc_solaris.c | 6 ++---
tools/libxc/xc_vm_event.c | 18 ++++++++++---
tools/xenmon/xenbaked.c | 12 ++++++++-
tools/xenpaging/xenpaging.c | 14 +++++-----
tools/xentrace/xentrace.c | 3 ++-
10 files changed, 48 insertions(+), 110 deletions(-)
diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index 78400d3..cb41c07 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -1387,16 +1387,6 @@ void *xc_map_foreign_pages(xc_interface *xch, uint32_t dom, int prot,
const xen_pfn_t *arr, int num );
/**
- * DEPRECATED - use xc_map_foreign_bulk() instead.
- *
- * Like xc_map_foreign_pages(), except it can succeeed partially.
- * When a page cannot be mapped, its PFN in @arr is or'ed with
- * 0xF0000000 to indicate the error.
- */
-void *xc_map_foreign_batch(xc_interface *xch, uint32_t dom, int prot,
- xen_pfn_t *arr, int num );
-
-/**
* Like xc_map_foreign_pages(), except it can succeed partially.
* When a page cannot be mapped, its respective field in @err is
* set to the corresponding errno value.
diff --git a/tools/libxc/xc_foreign_memory.c b/tools/libxc/xc_foreign_memory.c
index b205bca..2413e75 100644
--- a/tools/libxc/xc_foreign_memory.c
+++ b/tools/libxc/xc_foreign_memory.c
@@ -55,6 +55,8 @@ void *xc_map_foreign_pages(xc_interface *xch, uint32_t dom, int prot,
* just implement xc_map_foreign_bulk.
*/
#if defined(__NetBSD__) || defined(__sun__)
+void *osdep_map_foreign_batch(xc_interface *xch, uint32_t dom, int prot,
+ xen_pfn_t *arr, int num );
void *xc_map_foreign_bulk(xc_interface *xch,
uint32_t dom, int prot,
const xen_pfn_t *arr, int *err, unsigned int num)
@@ -75,7 +77,7 @@ void *xc_map_foreign_bulk(xc_interface *xch,
}
memcpy(pfn, arr, num * sizeof(*arr));
- ret = xc_map_foreign_batch(xch, dom, prot, pfn, num);
+ ret = osdep_map_foreign_batch(xch, dom, prot, pfn, num);
if (ret) {
for (i = 0; i < num; ++i)
diff --git a/tools/libxc/xc_linux_osdep.c b/tools/libxc/xc_linux_osdep.c
index e68c495..39c88ce 100644
--- a/tools/libxc/xc_linux_osdep.c
+++ b/tools/libxc/xc_linux_osdep.c
@@ -91,8 +91,8 @@ int osdep_privcmd_close(xc_interface *xch)
return close(fd);
}
-static int xc_map_foreign_batch_single(int fd, uint32_t dom,
- xen_pfn_t *mfn, unsigned long addr)
+static int map_foreign_batch_single(int fd, uint32_t dom,
+ xen_pfn_t *mfn, unsigned long addr)
{
privcmd_mmapbatch_t ioctlx;
int rc;
@@ -113,59 +113,6 @@ static int xc_map_foreign_batch_single(int fd, uint32_t dom,
return rc;
}
-void *xc_map_foreign_batch(xc_interface *xch,
- uint32_t dom, int prot,
- xen_pfn_t *arr, int num)
-{
- int fd = xch->privcmdfd;
- privcmd_mmapbatch_t ioctlx;
- void *addr;
- int rc;
-
- addr = mmap(NULL, num << XC_PAGE_SHIFT, prot, MAP_SHARED, fd, 0);
- if ( addr == MAP_FAILED )
- {
- PERROR("xc_map_foreign_batch: mmap failed");
- return NULL;
- }
-
- ioctlx.num = num;
- ioctlx.dom = dom;
- ioctlx.addr = (unsigned long)addr;
- ioctlx.arr = arr;
-
- rc = ioctl(fd, IOCTL_PRIVCMD_MMAPBATCH, &ioctlx);
- if ( (rc < 0) && (errno == ENOENT) )
- {
- int i;
-
- for ( i = 0; i < num; i++ )
- {
- if ( (arr[i] & PRIVCMD_MMAPBATCH_MFN_ERROR) ==
- PRIVCMD_MMAPBATCH_PAGED_ERROR )
- {
- unsigned long paged_addr = (unsigned long)addr + (i << XC_PAGE_SHIFT);
- rc = xc_map_foreign_batch_single(fd, dom, &arr[i],
- paged_addr);
- if ( rc < 0 )
- goto out;
- }
- }
- }
-
- out:
- if ( rc < 0 )
- {
- int saved_errno = errno;
- PERROR("xc_map_foreign_batch: ioctl failed");
- (void)munmap(addr, num << XC_PAGE_SHIFT);
- errno = saved_errno;
- return NULL;
- }
-
- return addr;
-}
-
/*
* Retry mmap of all paged gfns in batches
* retuns < 0 on fatal error
@@ -305,7 +252,7 @@ void *xc_map_foreign_bulk(xc_interface *xch,
err[i] = rc ?: -EINVAL;
continue;
}
- rc = xc_map_foreign_batch_single(fd, dom, pfn + i,
+ rc = map_foreign_batch_single(fd, dom, pfn + i,
(unsigned long)addr + ((unsigned long)i<<XC_PAGE_SHIFT));
if ( rc < 0 )
{
diff --git a/tools/libxc/xc_minios.c b/tools/libxc/xc_minios.c
index e3c8241..3ea3124 100644
--- a/tools/libxc/xc_minios.c
+++ b/tools/libxc/xc_minios.c
@@ -73,28 +73,6 @@ void *xc_map_foreign_bulk(xc_interface *xch,
return map_frames_ex(arr, num, 1, 0, 1, dom, err, pt_prot);
}
-void *xc_map_foreign_batch(xc_interface *xch,
- uint32_t dom, int prot,
- xen_pfn_t *arr, int num)
-{
- unsigned long pt_prot = 0;
- int err[num];
- int i;
- unsigned long addr;
-
- if (prot & PROT_READ)
- pt_prot = L1_PROT_RO;
- if (prot & PROT_WRITE)
- pt_prot = L1_PROT;
-
- addr = (unsigned long) map_frames_ex(arr, num, 1, 0, 1, dom, err, pt_prot);
- for (i = 0; i < num; i++) {
- if (err[i])
- arr[i] |= 0xF0000000;
- }
- return (void *) addr;
-}
-
void *xc_map_foreign_range(xc_interface *xch,
uint32_t dom,
int size, int prot,
diff --git a/tools/libxc/xc_netbsd.c b/tools/libxc/xc_netbsd.c
index d7f7f31..6a7ff9f 100644
--- a/tools/libxc/xc_netbsd.c
+++ b/tools/libxc/xc_netbsd.c
@@ -67,16 +67,16 @@ int osdep_privcmd_close(xc_interface *xch)
return close(fd);
}
-void *xc_map_foreign_batch(xc_interface *xch,
- uint32_t dom, int prot,
- xen_pfn_t *arr, int num)
+void *osdep_map_foreign_batch(xc_interface *xch,
+ uint32_t dom, int prot,
+ xen_pfn_t *arr, int num)
{
int fd = xch->privcmdfd;
privcmd_mmapbatch_t ioctlx;
void *addr;
addr = mmap(NULL, num*XC_PAGE_SIZE, prot, MAP_ANON | MAP_SHARED, -1, 0);
if ( addr == MAP_FAILED ) {
- PERROR("xc_map_foreign_batch: mmap failed");
+ PERROR("osdep_map_foreign_batch: mmap failed");
return NULL;
}
@@ -87,7 +87,7 @@ void *xc_map_foreign_batch(xc_interface *xch,
if ( ioctl(fd, IOCTL_PRIVCMD_MMAPBATCH, &ioctlx) < 0 )
{
int saved_errno = errno;
- PERROR("xc_map_foreign_batch: ioctl failed");
+ PERROR("osdep_map_foreign_batch: ioctl failed");
(void)munmap(addr, num*XC_PAGE_SIZE);
errno = saved_errno;
return NULL;
diff --git a/tools/libxc/xc_solaris.c b/tools/libxc/xc_solaris.c
index 5e72dee..2df7a06 100644
--- a/tools/libxc/xc_solaris.c
+++ b/tools/libxc/xc_solaris.c
@@ -67,9 +67,9 @@ int osdep_privcmd_close(xc_interface *xch)
return close(fd);
}
-void *xc_map_foreign_batch(xc_interface *xch,
- uint32_t dom, int prot,
- xen_pfn_t *arr, int num)
+void *osdep_map_foreign_batch(xc_interface *xch,
+ uint32_t dom, int prot,
+ xen_pfn_t *arr, int num)
{
int fd = xch->privcmdfd;
privcmd_mmapbatch_t ioctlx;
diff --git a/tools/libxc/xc_vm_event.c b/tools/libxc/xc_vm_event.c
index 2fef96a..d2d99e4 100644
--- a/tools/libxc/xc_vm_event.c
+++ b/tools/libxc/xc_vm_event.c
@@ -72,9 +72,9 @@ void *xc_vm_event_enable(xc_interface *xch, domid_t domain_id, int param,
ring_pfn = pfn;
mmap_pfn = pfn;
- ring_page = xc_map_foreign_batch(xch, domain_id, PROT_READ | PROT_WRITE,
+ ring_page = xc_map_foreign_pages(xch, domain_id, PROT_READ | PROT_WRITE,
&mmap_pfn, 1);
- if ( mmap_pfn & XEN_DOMCTL_PFINFO_XTAB )
+ if ( !ring_page )
{
/* Map failed, populate ring page */
rc1 = xc_domain_populate_physmap_exact(xch, domain_id, 1, 0, 0,
@@ -86,9 +86,9 @@ void *xc_vm_event_enable(xc_interface *xch, domid_t domain_id, int param,
}
mmap_pfn = ring_pfn;
- ring_page = xc_map_foreign_batch(xch, domain_id, PROT_READ | PROT_WRITE,
+ ring_page = xc_map_foreign_pages(xch, domain_id, PROT_READ | PROT_WRITE,
&mmap_pfn, 1);
- if ( mmap_pfn & XEN_DOMCTL_PFINFO_XTAB )
+ if ( !ring_page )
{
PERROR("Could not map the ring page\n");
goto out;
@@ -156,3 +156,13 @@ void *xc_vm_event_enable(xc_interface *xch, domid_t domain_id, int param,
return ring_page;
}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/tools/xenmon/xenbaked.c b/tools/xenmon/xenbaked.c
index e4602ef..da46126 100644
--- a/tools/xenmon/xenbaked.c
+++ b/tools/xenmon/xenbaked.c
@@ -411,7 +411,7 @@ static struct t_struct *map_tbufs(unsigned long tbufs_mfn, unsigned int num,
for ( j=0; j<tbufs.t_info->tbuf_size; j++)
pfn_list[j] = (xen_pfn_t)mfn_list[j];
- tbufs.meta[i] = xc_map_foreign_batch(xc_handle, DOMID_XEN,
+ tbufs.meta[i] = xc_map_foreign_pages(xc_handle, DOMID_XEN,
PROT_READ | PROT_WRITE,
pfn_list,
tbufs.t_info->tbuf_size);
@@ -1175,3 +1175,13 @@ static int process_record(int cpu, struct t_rec *r)
return 4 + (r->cycles_included ? 8 : 0) + (r->extra_u32 * 4);
}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/tools/xenpaging/xenpaging.c b/tools/xenpaging/xenpaging.c
index df99c6a..c4bc713 100644
--- a/tools/xenpaging/xenpaging.c
+++ b/tools/xenpaging/xenpaging.c
@@ -342,9 +342,9 @@ static struct xenpaging *xenpaging_init(int argc, char *argv[])
HVM_PARAM_PAGING_RING_PFN, &ring_pfn);
mmap_pfn = ring_pfn;
paging->vm_event.ring_page =
- xc_map_foreign_batch(xch, paging->vm_event.domain_id,
- PROT_READ | PROT_WRITE, &mmap_pfn, 1);
- if ( mmap_pfn & XEN_DOMCTL_PFINFO_XTAB )
+ xc_map_foreign_pages(xch, paging->vm_event.domain_id,
+ PROT_READ | PROT_WRITE, &mmap_pfn, 1);
+ if ( !paging->vm_event.ring_page )
{
/* Map failed, populate ring page */
rc = xc_domain_populate_physmap_exact(paging->xc_handle,
@@ -356,11 +356,11 @@ static struct xenpaging *xenpaging_init(int argc, char *argv[])
goto err;
}
- mmap_pfn = ring_pfn;
paging->vm_event.ring_page =
- xc_map_foreign_batch(xch, paging->vm_event.domain_id,
- PROT_READ | PROT_WRITE, &mmap_pfn, 1);
- if ( mmap_pfn & XEN_DOMCTL_PFINFO_XTAB )
+ xc_map_foreign_pages(xch, paging->vm_event.domain_id,
+ PROT_READ | PROT_WRITE,
+ &mmap_pfn, 1);
+ if ( !paging->vm_event.ring_page )
{
PERROR("Could not map the ring page\n");
goto err;
diff --git a/tools/xentrace/xentrace.c b/tools/xentrace/xentrace.c
index c970d42..6cbe0ac 100644
--- a/tools/xentrace/xentrace.c
+++ b/tools/xentrace/xentrace.c
@@ -508,7 +508,7 @@ static struct t_struct *map_tbufs(unsigned long tbufs_mfn, unsigned int num,
for ( j=0; j<tbufs.t_info->tbuf_size; j++)
pfn_list[j] = (xen_pfn_t)mfn_list[j];
- tbufs.meta[i] = xc_map_foreign_batch(xc_handle, DOMID_XEN,
+ tbufs.meta[i] = xc_map_foreign_pages(xc_handle, DOMID_XEN,
PROT_READ | PROT_WRITE,
pfn_list,
tbufs.t_info->tbuf_size);
@@ -1221,6 +1221,7 @@ int main(int argc, char **argv)
return ret;
}
+
/*
* Local variables:
* mode: C
--
2.1.4
next prev parent reply other threads:[~2015-12-16 12:31 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1450269007.4053.48.camel@citrix.com>
2015-12-16 12:31 ` [PATCH XEN v7 00/29] Begin to disentangle libxenctrl and provide some stable libraries Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 01/29] stubdom: recurse into tools/include in mk-headers-$(XEN_TARGET_ARCH) rule Ian Campbell
2015-12-16 22:13 ` Samuel Thibault
2016-01-05 14:52 ` Ian Campbell
2015-12-19 3:14 ` Wei Liu
2015-12-16 12:31 ` [PATCH XEN v7 02/29] tools: Refactor "xentoollog" into its own library Ian Campbell
2016-01-05 14:53 ` Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 03/29] tools/libxc: Remove osdep indirection for xc_evtchn Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 04/29] tools: Refactor /dev/xen/evtchn wrappers into libxenevtchn Ian Campbell
2016-01-07 10:39 ` Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 05/29] tools: Arrange to check public headers for ANSI compatiblity Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 06/29] tools/libxc: Remove osdep indirection for xc_gnt{shr, tab} Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 07/29] tools: Refactor /dev/xen/gnt{dev, shr} wrappers into libxengnttab Ian Campbell
2015-12-16 18:40 ` Andrew Cooper
2015-12-17 8:37 ` Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 08/29] tools/libxc: Remove osdep indirection for privcmd Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 09/29] tools: Refactor hypercall calling wrappers into libxencall Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 10/29] tools/libxc: drop xc_map_foreign_bulk_compat wrappers Ian Campbell
2015-12-16 12:31 ` Ian Campbell [this message]
2015-12-16 12:31 ` [PATCH XEN v7 12/29] tools: Implement xc_map_foreign_range(s) in terms of common helper Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 13/29] tools: Refactor foreign memory mapping into libxenforeignmemory Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 14/29] tools/libs/foreignmemory: provide xenforeignmemory_unmap Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 15/29] tools/libs/foreignmemory: use size_t for size arguments Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 16/29] tools/libs/foreignmemory: Mention restrictions on fork in docs Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 17/29] tools/libs/foreignmemory: Support err == NULL to map Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 18/29] tools/libs/foreignmemory: pull array length argument to map forward Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 19/29] tools/libs/evtchn: Review and update doc comments Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 20/29] tools/libs: Clean up hard tabs Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 21/29] tools/libs/gnttab: Extensive updates to API documentation Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 22/29] tools/libs/call: Update some log messages to not refer to xc Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 23/29] tools/libs/call: Describe return values and error semantics for xencall* Ian Campbell
2015-12-16 12:38 ` Roger Pau Monné
2015-12-16 12:31 ` [PATCH XEN v7 24/29] tools/libs/call: Avoid xc_memalign in netbsd and solaris backends Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 25/29] tools/libs/call: linux: touch newly allocated pages after madvise lockdown Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 26/29] tools/libs/{call, evtchn}: Document requirements around forking Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 27/29] tools/libs/*: Use O_CLOEXEC on Linux and FreeBSD Ian Campbell
2015-12-16 12:37 ` Roger Pau Monné
2015-12-16 13:16 ` Jan Beulich
2015-12-16 14:04 ` Ian Campbell
2015-12-16 14:43 ` Jan Beulich
2015-12-16 14:50 ` Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 28/29] tools: Update CFLAGS for qemu-xen to allow it to use new libraries Ian Campbell
2015-12-16 12:31 ` [PATCH XEN v7 29/29] HACK: Update Config.mk to pull all the right bits from my xenbits trees Ian Campbell
2015-12-16 17:17 ` [PATCH XEN-BONUS v7] tools/libs/*: Introduce APIs to restrict handles to a specific domain Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 0/8] Begin to disentangle libxenctrl and provide some stable libraries Ian Campbell
[not found] ` <1450269131-27735-1-git-send-email-ian.campbell@citrix.com>
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 1/8] xen_console: correctly cleanup primary console on teardown Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 2/8] xen: Switch to libxenevtchn interface for compat shims Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 3/8] xen: Switch to libxengnttab " Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 4/8] xen: Switch uses of xc_map_foreign_range into xc_map_foreign_pages Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 5/8] xen: Switch uses of xc_map_foreign_{pages, bulk} to use libxenforeignmemory API Ian Campbell
2015-12-16 14:39 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1512161436410.17516@kaball.uk.xensource.com>
2015-12-16 14:44 ` Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 6/8] xen: Use stable library interfaces when they are available Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 7/8] xen: domainbuild: reopen libxenctrl interface after forking for domain watcher Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN v7 8/8] xen: make it possible to build without the Xen PV domain builder Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN-TRADITIONAL v7 0/4] Begin to disentangle libxenctrl and provide some stable libraries Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN-TRADITIONAL v7 1/4] qemu-xen-traditional: Use libxenevtchn Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN-TRADITIONAL v7 2/4] qemu-xen-traditional: Use libxengnttab Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN-TRADITIONAL v7 3/4] qemu-xen-traditional: Add libxencall to rpath-link Ian Campbell
2015-12-16 12:32 ` [PATCH QEMU-XEN-TRADITIONAL v7 4/4] qemu-xen-traditional: Add libxenforeignmemory " Ian Campbell
2015-12-16 12:32 ` [PATCH MINI-OS v7 0/4] Begin to disentangle libxenctrl and provide some stable libraries Ian Campbell
2015-12-16 12:32 ` [PATCH MINI-OS v7 1/4] mini-os: Include libxenevtchn with libxc Ian Campbell
2015-12-16 12:32 ` [PATCH MINI-OS v7 2/4] mini-os: Include libxengnttab " Ian Campbell
2015-12-16 12:32 ` [PATCH MINI-OS v7 3/4] mini-os: Include libxencall " Ian Campbell
2015-12-16 12:32 ` [PATCH MINI-OS v7 4/4] mini-os: Include libxenforeignmemory " Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1450269096-27598-12-git-send-email-ian.campbell@citrix.com \
--to=ian.campbell@citrix.com \
--cc=george.dunlap@eu.citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).