Add a proper union in lowcore to reflect architecture and get rid of a
"magic" cast in order to read the full program interruption code.
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
                __u32 ext_int_code_addr;
        };
        __u32   svc_int_code;                   /* 0x0088 */
-       __u16   pgm_ilc;                        /* 0x008c */
-       __u16   pgm_code;                       /* 0x008e */
+       union {
+               struct {
+                       __u16   pgm_ilc;        /* 0x008c */
+                       __u16   pgm_code;       /* 0x008e */
+               };
+               __u32 pgm_int_code;
+       };
        __u32   data_exc_code;                  /* 0x0090 */
        __u16   mon_class_num;                  /* 0x0094 */
        __u8    per_code;                       /* 0x0096 */
 
        unsigned int trapnr;
        irqentry_state_t state;
 
-       regs->int_code = *(u32 *)&S390_lowcore.pgm_ilc;
+       regs->int_code = S390_lowcore.pgm_int_code;
        regs->int_parm_long = S390_lowcore.trans_exc_code;
 
        state = irqentry_enter(regs);