[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2] RFC: Automatically check xen's public headers for C++ pitfalls.



At 11:55 +0000 on 05 Mar (1425552955), Ian Campbell wrote:
> On Thu, 2015-03-05 at 11:41 +0000, Jan Beulich wrote:
> > >>> On 05.03.15 at 12:35, <ian.campbell@xxxxxxxxxx> wrote:
> > > On Thu, 2015-03-05 at 12:25 +0100, Tim Deegan wrote:
> > >> So I've seen four responses in favour of just renaming the field
> > >> (Andrew Cooper, Razvan Cojocaru, Don Slutz and David Vrabel) and one
> > >> in favour of #ifdeffing it so it's only renamed in C++ (Jan Beulich).
> > >> I really don't like adding more #ifdefs to an already hard-to-read
> > >> file; I'd rather just rename the field, or else leaving it alone and
> > >> letting C++ users carry the fixup in their own code.
> > >> 
> > >> CC'ing the other "THE REST" maintainers for their opinions.
> > > 
> > > Rather than ifdefs for C++, don't we need them based on
> > > __XEN_INTERFACE_VERSION__?
> > 
> > That's not applicable to the stuff under public/io/.
> 
> In which case I'd certainly prefer just changing the name and getting it
> over with.
> 
> mini-os would need checking, since that's (AFAIK) the only intree user
> of these headers.

mini-os doesn't in fact use this field; it's a blktap2-ism.
Here's a (non-RFC) patch to rename it and update blktap2:

From a97715b97a02c3182914cee90b363d2939c5d416 Mon Sep 17 00:00:00 2001
From: Tim Deegan <tim@xxxxxxx>
Date: Thu, 5 Mar 2015 12:11:25 +0000
Subject: [PATCH] xen: don't use C++ keyword 'private' in public headers.

The 'private' field in io/ring.h (for blktap2, see 1b9cecdb)
is the last thing in the Xen public headers that a C++ compiler
will object to.

Rename it to pvt, update the only in-tree user, and remove the
workaround in the C++ compatibility check.

Signed-off-by: Tim Deegan <tim@xxxxxxx>
---
 tools/blktap2/drivers/tapdisk-vbd.c | 2 +-
 xen/include/Makefile                | 3 +--
 xen/include/public/io/ring.h        | 4 ++--
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/tools/blktap2/drivers/tapdisk-vbd.c 
b/tools/blktap2/drivers/tapdisk-vbd.c
index c665f27..6d1d94a 100644
--- a/tools/blktap2/drivers/tapdisk-vbd.c
+++ b/tools/blktap2/drivers/tapdisk-vbd.c
@@ -1684,7 +1684,7 @@ tapdisk_vbd_check_ring_message(td_vbd_t *vbd)
        if (!vbd->ring.sring)
                return -EINVAL;
 
-       switch (vbd->ring.sring->private.tapif_user.msg) {
+       switch (vbd->ring.sring->pvt.tapif_user.msg) {
        case 0:
                return 0;
 
diff --git a/xen/include/Makefile b/xen/include/Makefile
index d48a642..c7a1d52 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -104,8 +104,7 @@ headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
 headers++.chk: $(PUBLIC_HEADERS) Makefile
        if $(CXX) -v >/dev/null 2>&1; then \
            for i in $(filter %.h,$^); do \
-               $(CXX) -x c++ -std=gnu++98 -Wall -Werror \
-                      -D__XEN_TOOLS__ -Dprivate=private_is_a_keyword_in_cpp \
+               $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__ \
                       -include stdint.h -include public/xen.h \
                       -S -o /dev/null $$i || exit 1; \
                echo $$i; \
diff --git a/xen/include/public/io/ring.h b/xen/include/public/io/ring.h
index 73e13d7..ba9401b 100644
--- a/xen/include/public/io/ring.h
+++ b/xen/include/public/io/ring.h
@@ -111,7 +111,7 @@ struct __name##_sring {                                     
            \
             uint8_t msg;                                                \
         } tapif_user;                                                   \
         uint8_t pvt_pad[4];                                             \
-    } private;                                                          \
+    } pvt;                                                              \
     uint8_t __pad[44];                                                  \
     union __name##_sring_entry ring[1]; /* variable-length */           \
 };                                                                      \
@@ -156,7 +156,7 @@ typedef struct __name##_back_ring __name##_back_ring_t
 #define SHARED_RING_INIT(_s) do {                                       \
     (_s)->req_prod  = (_s)->rsp_prod  = 0;                              \
     (_s)->req_event = (_s)->rsp_event = 1;                              \
-    (void)memset((_s)->private.pvt_pad, 0, sizeof((_s)->private.pvt_pad)); \
+    (void)memset((_s)->pvt.pvt_pad, 0, sizeof((_s)->pvt.pvt_pad));      \
     (void)memset((_s)->__pad, 0, sizeof((_s)->__pad));                  \
 } while(0)
 
-- 
2.1.4


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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.