s390/chsc: fix packed-not-aligned warnings
authorSebastian Ott <sebott@linux.ibm.com>
Mon, 25 Jun 2018 12:25:59 +0000 (14:25 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 17 Jul 2018 05:27:56 +0000 (07:27 +0200)
Remove attribute packed where possible failing this add proper alignment
information to fix warnings like the one below:

drivers/s390/cio/chsc.c: In function 'chsc_siosl':
drivers/s390/cio/chsc.c:1287:2: warning: alignment 1 of 'struct <anonymous>' is less than 4 [-Wpacked-not-aligned]
  } __attribute__ ((packed)) *siosl_area;

Note: this patch should be a nop since non of these structs use auto
storage but allocated pages. However there are changes to the generated
code because of additional padding at the end of some of the structs due
to alignment when memset(foo, 0, sizeof(*foo)) is used.

Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/uapi/asm/chsc.h
drivers/s390/cio/chsc.c
drivers/s390/cio/chsc.h

index dc329aa03f7600e7bb763da5f96a4e56fd7a7ea6..83a574e95b3a87554fe88b121152b5f523cb2b03 100644 (file)
@@ -23,29 +23,29 @@ struct chsc_async_header {
        __u32 key : 4;
        __u32 : 28;
        struct subchannel_id sid;
-} __attribute__ ((packed));
+};
 
 struct chsc_async_area {
        struct chsc_async_header header;
        __u8 data[CHSC_SIZE - sizeof(struct chsc_async_header)];
-} __attribute__ ((packed));
+};
 
 struct chsc_header {
        __u16 length;
        __u16 code;
-} __attribute__ ((packed));
+};
 
 struct chsc_sync_area {
        struct chsc_header header;
        __u8 data[CHSC_SIZE - sizeof(struct chsc_header)];
-} __attribute__ ((packed));
+};
 
 struct chsc_response_struct {
        __u16 length;
        __u16 code;
        __u32 parms;
        __u8 data[CHSC_SIZE - 2 * sizeof(__u16) - sizeof(__u32)];
-} __attribute__ ((packed));
+};
 
 struct chsc_chp_cd {
        struct chp_id chpid;
index 9029804dcd225b85d5609c8af6c6ebc95522f12e..a0baee25134c0cd0b6a6e35df694ae763a4b0a21 100644 (file)
@@ -91,7 +91,7 @@ struct chsc_ssd_area {
        u16 sch;          /* subchannel */
        u8 chpid[8];      /* chpids 0-7 */
        u16 fla[8];       /* full link addresses 0-7 */
-} __attribute__ ((packed));
+} __packed __aligned(PAGE_SIZE);
 
 int chsc_get_ssd_info(struct subchannel_id schid, struct chsc_ssd_info *ssd)
 {
@@ -319,7 +319,7 @@ struct chsc_sei {
                struct chsc_sei_nt2_area nt2_area;
                u8 nt_area[PAGE_SIZE - 24];
        } u;
-} __packed;
+} __packed __aligned(PAGE_SIZE);
 
 /*
  * Node Descriptor as defined in SA22-7204, "Common I/O-Device Commands"
@@ -841,7 +841,7 @@ int __chsc_do_secm(struct channel_subsystem *css, int enable)
                u32 : 4;
                u32 fmt : 4;
                u32 : 16;
-       } __attribute__ ((packed)) *secm_area;
+       } *secm_area;
        unsigned long flags;
        int ret, ccode;
 
@@ -1014,7 +1014,7 @@ int chsc_get_channel_measurement_chars(struct channel_path *chp)
                u32 cmg : 8;
                u32 zeroes3;
                u32 data[NR_MEASUREMENT_CHARS];
-       } __attribute__ ((packed)) *scmc_area;
+       } *scmc_area;
 
        chp->shared = -1;
        chp->cmg = -1;
@@ -1142,7 +1142,7 @@ int __init chsc_get_cssid(int idx)
                        u8 cssid;
                        u32 : 24;
                } list[0];
-       } __packed *sdcal_area;
+       } *sdcal_area;
        int ret;
 
        spin_lock_irq(&chsc_page_lock);
@@ -1192,7 +1192,7 @@ chsc_determine_css_characteristics(void)
                u32 reserved4;
                u32 general_char[510];
                u32 chsc_char[508];
-       } __attribute__ ((packed)) *scsc_area;
+       } *scsc_area;
 
        spin_lock_irqsave(&chsc_page_lock, flags);
        memset(chsc_page, 0, PAGE_SIZE);
@@ -1236,7 +1236,7 @@ int chsc_sstpc(void *page, unsigned int op, u16 ctrl, u64 *clock_delta)
                unsigned int rsvd3[3];
                u64 clock_delta;
                unsigned int rsvd4[2];
-       } __attribute__ ((packed)) *rr;
+       } *rr;
        int rc;
 
        memset(page, 0, PAGE_SIZE);
@@ -1261,7 +1261,7 @@ int chsc_sstpi(void *page, void *result, size_t size)
                unsigned int rsvd0[3];
                struct chsc_header response;
                char data[];
-       } __attribute__ ((packed)) *rr;
+       } *rr;
        int rc;
 
        memset(page, 0, PAGE_SIZE);
@@ -1284,7 +1284,7 @@ int chsc_siosl(struct subchannel_id schid)
                u32 word3;
                struct chsc_header response;
                u32 word[11];
-       } __attribute__ ((packed)) *siosl_area;
+       } *siosl_area;
        unsigned long flags;
        int ccode;
        int rc;
index 5c9f0dd33f4ee38634d6cb3b0383d364b2c1f310..78aba8d94eec33eae2c0594dde4a79bf12c8ba82 100644 (file)
 #define NR_MEASUREMENT_CHARS 5
 struct cmg_chars {
        u32 values[NR_MEASUREMENT_CHARS];
-} __attribute__ ((packed));
+};
 
 #define NR_MEASUREMENT_ENTRIES 8
 struct cmg_entry {
        u32 values[NR_MEASUREMENT_ENTRIES];
-} __attribute__ ((packed));
+};
 
 struct channel_path_desc_fmt1 {
        u8 flags;
@@ -38,7 +38,7 @@ struct channel_path_desc_fmt1 {
        u8 s:1;
        u8 f:1;
        u32 zeros[2];
-} __attribute__ ((packed));
+};
 
 struct channel_path_desc_fmt3 {
        struct channel_path_desc_fmt1 fmt1_desc;
@@ -59,7 +59,7 @@ struct css_chsc_char {
        u32:7;
        u32 pnso:1; /* bit 116 */
        u32:11;
-}__attribute__((packed));
+} __packed;
 
 extern struct css_chsc_char css_chsc_characteristics;
 
@@ -82,7 +82,7 @@ struct chsc_ssqd_area {
        struct chsc_header response;
        u32:32;
        struct qdio_ssqd_desc qdio_ssqd;
-} __packed;
+} __packed __aligned(PAGE_SIZE);
 
 struct chsc_scssc_area {
        struct chsc_header request;
@@ -102,7 +102,7 @@ struct chsc_scssc_area {
        u32 reserved[1004];
        struct chsc_header response;
        u32:32;
-} __packed;
+} __packed __aligned(PAGE_SIZE);
 
 struct chsc_scpd {
        struct chsc_header request;
@@ -120,7 +120,7 @@ struct chsc_scpd {
        struct chsc_header response;
        u32:32;
        u8 data[0];
-} __packed;
+} __packed __aligned(PAGE_SIZE);
 
 struct chsc_sda_area {
        struct chsc_header request;
@@ -199,7 +199,7 @@ struct chsc_scm_info {
        u32 reserved2[10];
        u64 restok;
        struct sale scmal[248];
-} __packed;
+} __packed __aligned(PAGE_SIZE);
 
 int chsc_scm_info(struct chsc_scm_info *scm_area, u64 token);
 
@@ -243,7 +243,7 @@ struct chsc_pnso_area {
                struct qdio_brinfo_entry_l3_ipv4 l3_ipv4[0];
                struct qdio_brinfo_entry_l2      l2[0];
        } entries;
-} __packed;
+} __packed __aligned(PAGE_SIZE);
 
 int chsc_pnso_brinfo(struct subchannel_id schid,
                struct chsc_pnso_area *brinfo_area,