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

[PATCH 4/4] xen/public: Use -Wpadding for public headers



RFC.  In theory this is a great way to avoid some of the spiketraps involved
with C being the official representation.

However, this doesn't build.  gnttab_transfer has a layout that requires a
CONFIG_COMPAT if we want to satisfy -Wpadding for both forms of the structure.

Thoughts on whether this cross-check is worthwhile-enough to warrant the
ifdefary?

~Andrew
---
CC: George Dunlap <George.Dunlap@xxxxxxxxxx>
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
CC: Julien Grall <julien@xxxxxxx>
---
 xen/common/Makefile              |  1 +
 xen/common/hdr-chk.c             | 13 +++++++++++++
 xen/include/public/grant_table.h |  7 +++++++
 3 files changed, 21 insertions(+)
 create mode 100644 xen/common/hdr-chk.c

diff --git a/xen/common/Makefile b/xen/common/Makefile
index d512cad5243f..dbbda70829f1 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -15,6 +15,7 @@ obj-y += event_fifo.o
 obj-$(CONFIG_GRANT_TABLE) += grant_table.o
 obj-y += guestcopy.o
 obj-y += gzip/
+obj-y += hdr-chk.o
 obj-$(CONFIG_HYPFS) += hypfs.o
 obj-$(CONFIG_IOREQ_SERVER) += ioreq.o
 obj-y += irq.o
diff --git a/xen/common/hdr-chk.c b/xen/common/hdr-chk.c
new file mode 100644
index 000000000000..1c7a509dcd06
--- /dev/null
+++ b/xen/common/hdr-chk.c
@@ -0,0 +1,13 @@
+#include <xen/stdint.h>
+
+#include <public/xen.h>
+
+#pragma GCC diagnostic error "-Wpadded"
+
+#include <public/grant_table.h>
+
+#ifdef CONFIG_COMPAT
+
+#include <compat/grant_table.h>
+
+#endif /* CONFIG_COMPAT */
diff --git a/xen/include/public/grant_table.h b/xen/include/public/grant_table.h
index 1dfa17a6d02a..a66c77d0166c 100644
--- a/xen/include/public/grant_table.h
+++ b/xen/include/public/grant_table.h
@@ -355,6 +355,7 @@ struct gnttab_unmap_grant_ref {
     grant_handle_t handle;
     /* OUT parameters. */
     int16_t  status;              /* => enum grant_status */
+    uint16_t _pad0;
 };
 typedef struct gnttab_unmap_grant_ref gnttab_unmap_grant_ref_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t);
@@ -371,6 +372,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t);
 struct gnttab_setup_table {
     /* IN parameters. */
     domid_t  dom;
+    uint16_t _pad0;
     uint32_t nr_frames;
     /* OUT parameters. */
     int16_t  status;              /* => enum grant_status */
@@ -409,9 +411,12 @@ struct gnttab_transfer {
     /* IN parameters. */
     xen_pfn_t     mfn;
     domid_t       domid;
+    uint16_t      _pad0;
     grant_ref_t   ref;
     /* OUT parameters. */
     int16_t       status;
+    uint16_t      _pad1;
+    /* XXX compat-dependent padding. */
 };
 typedef struct gnttab_transfer gnttab_transfer_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_transfer_t);
@@ -468,10 +473,12 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_copy_t);
 struct gnttab_query_size {
     /* IN parameters. */
     domid_t  dom;
+    uint16_t _ign1;
     /* OUT parameters. */
     uint32_t nr_frames;
     uint32_t max_nr_frames;
     int16_t  status;              /* => enum grant_status */
+    uint16_t _ign2;
 };
 typedef struct gnttab_query_size gnttab_query_size_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_query_size_t);
-- 
2.30.2




 


Rackspace

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