Add a proper union in lowcore to reflect architecture and get rid of a
"magic" cast in order to read the full per code.
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
        };
        __u32   data_exc_code;                  /* 0x0090 */
        __u16   mon_class_num;                  /* 0x0094 */
-       __u8    per_code;                       /* 0x0096 */
-       __u8    per_atmid;                      /* 0x0097 */
+       union {
+               struct {
+                       __u8    per_code;       /* 0x0096 */
+                       __u8    per_atmid;      /* 0x0097 */
+               };
+               __u16 per_code_combined;
+       };
        __u64   per_address;                    /* 0x0098 */
        __u8    exc_access_id;                  /* 0x00a0 */
        __u8    per_access_id;                  /* 0x00a1 */
 
 
                        set_thread_flag(TIF_PER_TRAP);
                        ev->address = S390_lowcore.per_address;
-                       ev->cause = *(u16 *)&S390_lowcore.per_code;
+                       ev->cause = S390_lowcore.per_code_combined;
                        ev->paid = S390_lowcore.per_access_id;
                } else {
                        /* PER event in kernel is kprobes */