From: Ian Campbell <ian.campbell@citrix.com>
To: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, xen-devel@lists.xen.org
Cc: Ian Campbell <ian.campbell@citrix.com>
Subject: [PATCH XEN v7 26/29] tools/libs/{call, evtchn}: Document requirements around forking.
Date: Wed, 16 Dec 2015 12:31:33 +0000 [thread overview]
Message-ID: <1450269096-27598-27-git-send-email-ian.campbell@citrix.com> (raw)
In-Reply-To: <1450269096-27598-1-git-send-email-ian.campbell@citrix.com>
Much like for gnttab and foreignmemory xencall hypercall buffers need
care.
Evtchn is a bit simpler (no magic mappings) but may not work from
parent + child simultaneously, document "parent only" since it is
consistent with the others.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
v7: New
---
tools/libs/call/include/xencall.h | 28 ++++++++++++++++++++++++++++
tools/libs/evtchn/include/xenevtchn.h | 23 +++++++++++++++++++----
2 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/tools/libs/call/include/xencall.h b/tools/libs/call/include/xencall.h
index 3f325f0..559624a 100644
--- a/tools/libs/call/include/xencall.h
+++ b/tools/libs/call/include/xencall.h
@@ -36,11 +36,39 @@ typedef struct xencall_handle xencall_handle;
/*
* Return a handle onto the hypercall driver. Logs errors.
+ * *
+ * Note: After fork(2) a child process must not use any opened
+ * xencall handle inherited from their parent, nor access any
+ * hypercall argument buffers associated with that handle.
+ *
+ * The child must open a new handle if they want to interact with
+ * xencall.
+ *
+ * Calling exec(2) in a child will safely (and reliably) reclaim any
+ * resources which were allocated via a xencall_handle in the parent.
+ *
+ * A child which does not call exec(2) may safely call xencall_close()
+ * on a xencall_handle inherited from their parent. This will attempt
+ * to reclaim any resources associated with that handle. Note that in
+ * some implementations this reclamation may not be completely
+ * effective, in this case any affected resources remain allocated.
+ *
+ * Calling xencall_close() is the only safe operation on a
+ * xencall_handle which has been inherited.
*/
xencall_handle *xencall_open(xentoollog_logger *logger, unsigned open_flags);
/*
* Close a handle previously allocated with xencall_open().
+ *
+ * Under normal circumstances (i.e. not in the child after a fork) any
+ * allocated hypercall argument buffers should be freed using the
+ * appropriate xencall_free_*() prior to closing the handle in order
+ * to free up resources associated with those mappings.
+ *
+ * This is the only function which may be safely called on a
+ * xencall_handle in a child after a fork. xencall_free_*() must not
+ * be called under such circumstances.
*/
int xencall_close(xencall_handle *xcall);
diff --git a/tools/libs/evtchn/include/xenevtchn.h b/tools/libs/evtchn/include/xenevtchn.h
index 60da2a3..bb24462 100644
--- a/tools/libs/evtchn/include/xenevtchn.h
+++ b/tools/libs/evtchn/include/xenevtchn.h
@@ -45,10 +45,25 @@ typedef struct xentoollog_logger xentoollog_logger;
* Return a handle to the event channel driver, or NULL on failure, in
* which case errno will be set appropriately.
*
- * Note:
- * After fork a child process must not use any opened evtchn
- * handle inherited from their parent. They must open a new handle if
- * they want to interact with evtchn.
+ * Note: After fork(2) a child process must not use any opened evtchn
+ * handle inherited from their parent, nor access any grant mapped
+ * areas associated with that handle.
+ *
+ * The child must open a new handle if they want to interact with
+ * evtchn.
+ *
+ * Calling exec(2) in a child will safely (and reliably) reclaim any
+ * allocated resources via a xenevtchn_handle in the parent.
+ *
+ * A child which does not call exec(2) may safely call
+ * xenevtchn_close() on a xenevtchn_handle inherited from their
+ * parent. This will attempt to reclaim any resources associated with
+ * that handle. Note that in some implementations this reclamation may
+ * not be completely effective, in this case any affected resources
+ * remain allocated.
+ *
+ * Calling xenevtchn_close() is the only safe operation on a
+ * xenevtchn_handle which has been inherited.
*/
/* Currently no flags are defined */
xenevtchn_handle *xenevtchn_open(xentoollog_logger *logger, unsigned open_flags);
--
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 ` [PATCH XEN v7 11/29] tools: Remove xc_map_foreign_batch Ian Campbell
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 ` Ian Campbell [this message]
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-27-git-send-email-ian.campbell@citrix.com \
--to=ian.campbell@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).