From: Ian Campbell <ian.campbell@citrix.com>
To: Ian Jackson <Ian.Jackson@eu.citrix.com>
Cc: wei.liu2@citrix.com, xen-devel@lists.xen.org
Subject: Re: [PATCH XEN v5 13/23] tools: Refactor foreign memory mapping into libxenforeignmemory
Date: Fri, 27 Nov 2015 15:46:22 +0000 [thread overview]
Message-ID: <1448639182.13576.123.camel@citrix.com> (raw)
In-Reply-To: <22083.23332.222797.887453@mariner.uk.xensource.com>
On Wed, 2015-11-11 at 15:13 +0000, Ian Jackson wrote:
> > +/*
> > + * Maps a range within one domain to a local address range. Mappings
> > + * should be unmapped with munmap and should follow the same rules as
> > mmap
> > + * regarding page alignment.
> > + *
> > + * prot is as for mmap(2).
> > + *
> > + * Can partially succeed. When a page cannot be mapped, its respective
> > + * field in @err is set to the corresponding errno value.
> > + *
> > + * Returns NULL if no pages can be mapped.
> ...
> > +void *xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t
> > dom,
> > + int prot, const xen_pfn_t *arr, int *err,
> > + unsigned int num);
>
> If it returns NULL, will all of *err be filled with errno values ?
> Ie is all of err[] always written ?
>
> Does this function ever set errno ?
From my reading of the Linux code it appears to be thus:
If it returns NULL it will have set errno. In that case it appears that err
is invalid.
If it returns non-NULL then all of err has been written to either 0 or a
negative errno val, indicating the state of that particular frame.
errno vals are in the OS space, not the Xen one, for both the global errno
and the err[] array vals.
I think the same is true of FreeBSD from my reading of that code.
In both cases the behaviour is a combined property of the behaviours of the
libxc functions, the privcmd driver and the hypercall on xen side, where
the first two differ a fair bit on different platforms (and call different
hypercalls under the hood, with different behaviour there too)
But the sum _seems_ to add up the same in both cases. Mini-OS is simpler
but looks to do about the same.
IOW I'm not 100% sure of the above but it seems a) like a
sensible/desirable enough behaviour and b) it does look, as far as I can
tell, like the code does this.
> This API invites callers to fail to notice partial failures.
>
> How about permitting err==NULL to mean `on partial failure, unmap
> everything and return NULL setting errno' ?
AFAICT both the FreeBSD and Linux privcmd driver do not handle this case,
so we would be looking at adding functionality to the library to paper over
it.
Looking at the users it seems that those which map batches of pages get
things right, since they naturally tend to be looping over the arrays
anyway.
It's the callers who are mapping a single page which tend to get this
wrong, many of them are pre-existing bugs but a fair few are as a result of
conversions made in this set of series.
In particular xc_map_foreign_pages used to unmap and return NULL with errno
set to the value first non-zero errno from the err array, which I suppose
is what you were thinking of for setting errno in this case?
I'm considering whether to add a second function in the API to map single
pages (since that seems to be the most common usage, and commonly exhibits
this error) vs doing as you suggest, which has the downside of throwing
away all the other errors (which may be more critical than the first).
I did briefly consider allow err == NULL iff nr == 1, but that seems worse
than both the other options.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2015-11-27 15:46 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-09 11:59 [Qemu-devel] [Minios-devel] [PATCH v4 0/<VARIOUS>] Begin to disentangle libxenctrl and provide some stable libraries Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 00/23] " Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 01/23] tools/Rules.mk: Properly handle libraries with recursive dependencies Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 02/23] tools: Refactor "xentoollog" into its own library Ian Campbell
2015-11-13 15:05 ` Andrew Cooper
2015-11-13 15:35 ` Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 03/23] tools/libxc: Remove osdep indirection for xc_evtchn Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 04/23] tools: Refactor /dev/xen/evtchn wrappers into libxenevtchn Ian Campbell
2015-11-11 14:50 ` Ian Jackson
2015-11-09 12:00 ` [PATCH XEN v5 05/23] tools: Arrange to check public headers for ANSI compatiblity Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 06/23] tools/libxc: Remove osdep indirection for xc_gnt{shr, tab} Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 07/23] tools: Refactor /dev/xen/gnt{dev, shr} wrappers into libxengnttab Ian Campbell
2015-11-11 14:34 ` Wei Liu
2015-11-11 15:03 ` Ian Jackson
2015-11-13 15:02 ` Ian Campbell
2015-11-13 20:38 ` Daniel De Graaf
2015-11-16 12:30 ` Ian Campbell
2015-11-24 16:32 ` Daniel De Graaf
2015-11-23 17:05 ` Ian Campbell
2015-11-24 9:34 ` Ian Campbell
2015-11-25 15:06 ` Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 08/23] tools/libxc: Remove osdep indirection for privcmd Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 09/23] tools: Refactor hypercall calling wrappers into libxencall Ian Campbell
2015-11-11 15:08 ` Ian Jackson
2015-11-11 15:31 ` Wei Liu
2015-11-13 15:17 ` Ian Campbell
2015-11-13 15:16 ` Ian Campbell
2015-11-13 16:56 ` Ian Campbell
2015-11-13 16:57 ` Ian Campbell
2015-11-13 17:16 ` Roger Pau Monné
2015-11-13 17:23 ` Ian Campbell
2015-11-13 15:35 ` Andrew Cooper
2015-11-13 15:49 ` Andrew Cooper
2015-12-02 14:55 ` Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 10/23] tools/libxc: drop xc_map_foreign_bulk_compat wrappers Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 11/23] tools: Remove xc_map_foreign_batch Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 12/23] tools: Implement xc_map_foreign_range(s) in terms of common helper Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 13/23] tools: Refactor foreign memory mapping into libxenforeignmemory Ian Campbell
2015-11-11 15:13 ` Ian Jackson
2015-11-13 15:21 ` Ian Campbell
2015-11-13 15:27 ` Ian Jackson
2015-11-27 17:18 ` Ian Campbell
2015-11-27 17:48 ` Andrew Cooper
2015-11-29 9:54 ` Paul Durrant
[not found] ` <9AAE0902D5BC7E449B7C8E4E778ABCD02F69D32F@AMSPEX01CL01.citrite.net>
2015-11-30 9:51 ` Ian Campbell
[not found] ` <1448877118.15768.11.camel@citrix.com>
2015-12-01 10:16 ` Paul Durrant
2015-11-27 15:46 ` Ian Campbell [this message]
2015-11-09 12:00 ` [PATCH XEN v5 14/23] tools: foreignmemory: provide xenforeignmemory_unmap Ian Campbell
2015-11-11 15:14 ` Ian Jackson
2015-11-27 15:57 ` Ian Campbell
2015-11-13 16:16 ` Andrew Cooper
2015-11-13 16:17 ` Andrew Cooper
2015-11-09 12:00 ` [PATCH XEN v5 15/23] foreignmemory: use size_t for size arguments Ian Campbell
2015-11-11 15:15 ` Ian Jackson
2015-11-09 12:00 ` [PATCH XEN v5 16/23] tools/libs/evtchn: Review and update doc comments Ian Campbell
2015-11-11 15:15 ` Ian Jackson
2015-11-09 12:00 ` [PATCH XEN v5 17/23] tools/libs: Clean up hard tabs Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 18/23] tools/libs/gnttab: Review and update doc comments Ian Campbell
2015-11-11 15:17 ` Ian Jackson
2015-11-09 12:00 ` [PATCH XEN v5 19/23] tools/libs/call: Update some log messages to not refer to xc Ian Campbell
2015-11-13 16:20 ` Andrew Cooper
2015-11-23 13:10 ` Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 20/23] tools/libs/call: Avoid xc_memalign in netbsd and solaris backends Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 21/23] tools/libs/foreignmemory: Mention restrictions on fork in docs Ian Campbell
2015-11-11 15:18 ` Ian Jackson
2015-11-09 12:00 ` [PATCH XEN v5 22/23] tools: Update CFLAGS for qemu-xen to allow it to use new libraries Ian Campbell
2015-11-09 12:00 ` [PATCH XEN v5 23/23] HACK: Update Config.mk to pull all the right bits from my xenbits trees Ian Campbell
2015-11-11 15:20 ` [PATCH XEN v5 00/23] Begin to disentangle libxenctrl and provide some stable libraries Ian Jackson
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 0/9] " Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 1/9] xen_console: correctly cleanup primary console on teardown Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 2/9] xen: Switch to libxenevtchn interface for compat shims Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 3/9] xen: Switch to libxengnttab " Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-10 14:02 ` [Qemu-devel] " Stefano Stabellini
2015-11-10 14:02 ` Stefano Stabellini
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 4/9] xen: Switch uses of xc_map_foreign_range into xc_map_foreign_bulk Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 5/9] xen: Switch uses of xc_map_foreign_pages " Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-09 12:01 ` [PATCH QEMU-XEN v5 6/9] xen: Switch uses of xc_map_foreign_bulk to use libxenforeignmemory API Ian Campbell
2015-11-09 12:01 ` [Qemu-devel] " Ian Campbell
2015-11-09 12:01 ` [PATCH QEMU-XEN v5 7/9] xen: Use stable library interfaces when they are available Ian Campbell
2015-11-09 12:01 ` [Qemu-devel] " Ian Campbell
2015-11-10 14:00 ` Stefano Stabellini
2015-11-10 14:00 ` Stefano Stabellini
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 8/9] xen: domainbuild: reopen libxenctrl interface after forking for domain watcher Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-09 12:01 ` [Qemu-devel] [PATCH QEMU-XEN v5 9/9] xen: make it possible to build without the Xen PV domain builder Ian Campbell
2015-11-09 12:01 ` Ian Campbell
2015-11-10 12:48 ` Stefano Stabellini
2015-11-10 12:48 ` [Qemu-devel] " Stefano Stabellini
2015-11-09 12:01 ` [PATCH QEMU-XEN-TRADITIONAL v5 0/5] Begin to disentangle libxenctrl and provide some stable libraries Ian Campbell
2015-11-09 12:01 ` [PATCH QEMU-XEN-TRADITIONAL v5 1/5] qemu-xen-traditional: Use xentoollog as a separate library Ian Campbell
2015-11-09 12:01 ` [PATCH QEMU-XEN-TRADITIONAL v5 2/5] qemu-xen-traditional: Use libxenevtchn Ian Campbell
2015-11-11 15:19 ` Ian Jackson
2015-11-09 12:01 ` [PATCH QEMU-XEN-TRADITIONAL v5 3/5] qemu-xen-traditional: Use libxengnttab Ian Campbell
2015-11-11 15:20 ` Ian Jackson
2015-11-09 12:01 ` [PATCH QEMU-XEN-TRADITIONAL v5 4/5] qemu-xen-traditional: Add libxencall to rpath-link Ian Campbell
2015-11-11 15:20 ` Ian Jackson
2015-11-09 12:01 ` [PATCH QEMU-XEN-TRADITIONAL v5 5/5] qemu-xen-traditional: Add libxenforeignmemory " Ian Campbell
2015-11-11 15:21 ` Ian Jackson
2015-11-11 15:23 ` [PATCH QEMU-XEN-TRADITIONAL v5 0/5] Begin to disentangle libxenctrl and provide some stable libraries Ian Jackson
2015-11-09 12:01 ` [PATCH MINI-OS " Ian Campbell
2015-11-09 12:01 ` [PATCH MINI-OS v5 1/5] mini-os: Include libxentoollog with libxc Ian Campbell
2015-11-09 12:01 ` [PATCH MINI-OS v5 2/5] mini-os: Include libxenevtchn " Ian Campbell
2015-11-09 12:01 ` [PATCH MINI-OS v5 3/5] mini-os: Include libxengnttab " Ian Campbell
2015-11-09 12:01 ` [PATCH MINI-OS v5 4/5] mini-os: Include libxencall " Ian Campbell
2015-11-09 12:01 ` [PATCH MINI-OS v5 5/5] 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=1448639182.13576.123.camel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.