|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v11 05/27] tools/libxenevtchn: add possibility to not close file descriptor on exec
On 15.01.21 02:01, Andrew Cooper wrote: On 14/01/2021 15:37, Juergen Gross wrote:diff --git a/tools/include/xenevtchn.h b/tools/include/xenevtchn.h index 3e9b6e7323..b6dd8f3186 100644 --- a/tools/include/xenevtchn.h +++ b/tools/include/xenevtchn.h @@ -64,11 +64,25 @@ struct xentoollog_logger; * * Calling xenevtchn_close() is the only safe operation on a * xenevtchn_handle which has been inherited. + * + * Setting XENEVTCHN_NO_CLOEXEC allows to keep the file descriptor used + * for the event channel driver open across exec(2). In order to be able + * to use that file descriptor the new binary activated via exec(2) has + * to call xenevtchn_fdopen() with that file descriptor as parameter in + * order to associate it with a new handle. The file descriptor can be + * obtained via xenevtchn_fd() before calling exec(2). */Earlier commentary in this block is already wrong (refer to gnttab, and making what appear to be false claims), and/or made stale by this change. How about: /* * Opens the evtchn device node. Return a handle to the event channel * driver, or NULL on failure, in which case errno will be set * appropriately. * * On fork(2): * * After fork, a child process must not use any opened evtchn handle * inherited from their parent. This includes operations such as * poll() on the underlying file descriptor. Calling xenevtchn_close() * is the only safe operation on a xenevtchn_handle which has been * inherited. * * The child must open a new handle if they want to interact with * evtchn. * * On exec(2): * * Wherever possible, the device node will be opened with O_CLOEXEC, * so it is not inherited by the subsequent program. * * However the XENEVTCHN_NO_CLOEXEC flag may be used to avoid opening * the device node with O_CLOEXEC. This is intended for use by * daemons which support a self-reexec method of updating themselves. * * In this case, the updated daemon should pass the underlying file * descriptor it inherited to xenevtchn_fdopen() to reconstruct the * library handle. */ which I think is somewhat more concise? Yes, I'll change it. -/* Currently no flags are defined */ + +/* Don't set O_CLOEXEC when opening event channel driver node. */ +#define XENEVTCHN_NO_CLOEXEC 0x01Do we really want an byte-looking constant? Wouldn't (1 << 0) be a more normal way of writing this? Fine with me.
Ah, right.
Fine with me. diff --git a/tools/libs/evtchn/freebsd.c b/tools/libs/evtchn/freebsd.c index bb601f350f..ed2baf3c95 100644 --- a/tools/libs/evtchn/freebsd.c +++ b/tools/libs/evtchn/freebsd.c @@ -33,8 +33,12 @@int osdep_evtchn_open(xenevtchn_handle *xce, unsigned int flags) Yes. If you're happy with the suggestions, I'm happy folding them on commit, to avoid yet another posting. I'll post v12 today. Juergen Attachment:
OpenPGP_0xB0DE9DD628BF132F.asc Attachment:
OpenPGP_signature
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |