All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Ian Campbell <ian.campbell@citrix.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>
Cc: Paul Durrant <Paul.Durrant@citrix.com>,
	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 17:48:39 +0000	[thread overview]
Message-ID: <56589777.3000601@citrix.com> (raw)
In-Reply-To: <1448644706.13576.138.camel@citrix.com>

On 27/11/15 17:18, Ian Campbell wrote:
> On Fri, 2015-11-13 at 15:27 +0000, Ian Jackson wrote:
>> Ian Campbell writes ("Re: [PATCH XEN v5 13/23] tools: Refactor foreign
>> memory mapping into libxenforeignmemory"):
>>> On Wed, 2015-11-11 at 15:13 +0000, Ian Jackson wrote:
>>> Are you suggesting:
>>>
>>> void *xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t dom,
>>>                            int prot, const xen_pfn_t *arr,
>>>                            int err_out[num],
>>>                            unsigned int num);
>>>
>>> Is that (a var sized array based on another param) really allowed?
>> Yes, if the array size precedes the array.
> Sadly:
>
>     for i in include/xenforeignmemory.h; do \
>         gcc -x c -ansi -Wall -Werror -pedantic -I/local/scratch/ianc/devel/libxenctrl-split/xen.git/tools/libs/foreignmemory/../../../tools/include \
>               -S -o /dev/null $i || exit 1; \
>         echo $i; \
>     done >headers.chk.new
>     include/xenforeignmemory.h:142:28: error: ISO C90 forbids variable length array ‘arr’ [-Werror=vla]
>                                 const xen_pfn_t *arr[pages], int err[pages]);
>                                 ^
>     include/xenforeignmemory.h:142:28: error: ISO C90 forbids variable length array ‘err’ [-Werror=vla]
>     cc1: all warnings being treated as errors
>     /local/scratch/ianc/devel/libxenctrl-split/xen.git/tools/libs/foreignmemory/../../../tools/Rules.mk:200: recipe for target 'headers.chk' failed
>
> It's -ansi (AKA -std=c90) together with -pedantic which does it. -std=c99
> is happy with it (including with -pedantic).
>
> The original motivation for this check was [0]:
>     As part of the tidyup, we should choose a particular C standard (89,
>     probably) and ensure that the API/ABI complies with `gcc -std=c$VER
>     -pedantic`.  This will help to provide a consistent API on other
>     platforms (I seem to recall an effort to port libvchan to windows.)
>
> It's not clear to me how much the "89 probably" was influenced by the "on
> other platforms ... windows" bit (maybe Andy or Paul has an opinion).

I was under the impression that MSVC still doesn't have C99 support.

According to wikipedia, VS2013 gained some C99, and 2015 "achieved a
level of the C99 standard compliance in the library that is similar to
other C compilers".

According to MSDN about Visual C++:

C99 Conformance: Visual Studio 2015 fully implements the C99 Standard
Library, with the exception of any library features that depend on
compiler features not yet supported by the Visual C++ compiler (for
example, <tgmath.h> is not implemented).

which is wonderfully circular.

According to
https://msdn.microsoft.com/en-us/library/zb1574zs%28v=vs.140%29.aspx
which appears to be the documentation, VLAs are still not supported,
even in VS2015.

>
> C99 was 16 years ago now, I'm struggling to think of a reason not to move
> the baseline for tools stuff at least to that.
>
> https://en.wikipedia.org/wiki/Visual_C%2B%2B might be one such reason I
> suppose, although I'm not convinced a libvchan port to Windows, even if not
> entirely hypothetical, would be using any of xen.git/tools/libs/* rather
> than the equivalent frameworks provided by the Windows PV drivers.

It would be nice to at least be able to use the same header files, for
ease of porting userspace software.

In this case, VLAs are just being used as an aid for the compiler to
spot errors.  It doesn't change the API/ABI, and could be #ifdef'd
around, if we care both for using C99 in general, and Windows support.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2015-11-27 17:48 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 [this message]
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
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   ` [Qemu-devel] [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   ` Ian Campbell
2015-11-09 12:01   ` [Qemu-devel] [PATCH QEMU-XEN v5 7/9] xen: Use stable library interfaces when they are available Ian Campbell
2015-11-10 14:00     ` Stefano Stabellini
2015-11-10 14:00     ` [Qemu-devel] " Stefano Stabellini
2015-11-09 12:01   ` Ian Campbell
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=56589777.3000601@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=Paul.Durrant@citrix.com \
    --cc=ian.campbell@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.