Commit 34bbeed0 authored by Sven Schnelle's avatar Sven Schnelle Committed by Vasily Gorbik

s390: add struct tpi_info to struct pt_regs

To avoid casting ptrace members, add a union containing
both struct tpi_info and explicit int_code/int_parm members.
Signed-off-by: default avatarSven Schnelle <svens@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent c63c473f
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/bits.h> #include <linux/bits.h>
#include <uapi/asm/ptrace.h> #include <uapi/asm/ptrace.h>
#include <asm/tpi.h>
#define PIF_SYSCALL 0 /* inside a system call */ #define PIF_SYSCALL 0 /* inside a system call */
#define PIF_SYSCALL_RESTART 1 /* restart the current system call */ #define PIF_SYSCALL_RESTART 1 /* restart the current system call */
...@@ -86,9 +87,14 @@ struct pt_regs ...@@ -86,9 +87,14 @@ struct pt_regs
}; };
}; };
unsigned long orig_gpr2; unsigned long orig_gpr2;
unsigned int int_code; union {
unsigned int int_parm; struct {
unsigned long int_parm_long; unsigned int int_code;
unsigned int int_parm;
unsigned long int_parm_long;
};
struct tpi_info tpi_info;
};
unsigned long flags; unsigned long flags;
unsigned long cr1; unsigned long cr1;
}; };
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include <linux/types.h> #include <linux/types.h>
#include <uapi/asm/schid.h> #include <uapi/asm/schid.h>
#ifndef __ASSEMBLY__
/* I/O-Interruption Code as stored by TEST PENDING INTERRUPTION (TPI). */ /* I/O-Interruption Code as stored by TEST PENDING INTERRUPTION (TPI). */
struct tpi_info { struct tpi_info {
struct subchannel_id schid; struct subchannel_id schid;
...@@ -17,4 +19,6 @@ struct tpi_info { ...@@ -17,4 +19,6 @@ struct tpi_info {
u32 :12; u32 :12;
} __packed __aligned(4); } __packed __aligned(4);
#endif /* __ASSEMBLY__ */
#endif /* _ASM_S390_TPI_H */ #endif /* _ASM_S390_TPI_H */
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include <linux/types.h> #include <linux/types.h>
#ifndef __ASSEMBLY__
struct subchannel_id { struct subchannel_id {
__u32 cssid : 8; __u32 cssid : 8;
__u32 : 4; __u32 : 4;
...@@ -13,5 +15,6 @@ struct subchannel_id { ...@@ -13,5 +15,6 @@ struct subchannel_id {
__u32 sch_no : 16; __u32 sch_no : 16;
} __attribute__ ((packed, aligned(4))); } __attribute__ ((packed, aligned(4)));
#endif /* __ASSEMBLY__ */
#endif /* _UAPIASM_SCHID_H */ #endif /* _UAPIASM_SCHID_H */
...@@ -93,7 +93,7 @@ static irqreturn_t do_airq_interrupt(int irq, void *dummy) ...@@ -93,7 +93,7 @@ static irqreturn_t do_airq_interrupt(int irq, void *dummy)
struct hlist_head *head; struct hlist_head *head;
set_cpu_flag(CIF_NOHZ_DELAY); set_cpu_flag(CIF_NOHZ_DELAY);
tpi_info = (struct tpi_info *) &get_irq_regs()->int_code; tpi_info = &get_irq_regs()->tpi_info;
trace_s390_cio_adapter_int(tpi_info); trace_s390_cio_adapter_int(tpi_info);
head = &airq_lists[tpi_info->isc]; head = &airq_lists[tpi_info->isc];
rcu_read_lock(); rcu_read_lock();
......
...@@ -536,7 +536,7 @@ static irqreturn_t do_cio_interrupt(int irq, void *dummy) ...@@ -536,7 +536,7 @@ static irqreturn_t do_cio_interrupt(int irq, void *dummy)
struct irb *irb; struct irb *irb;
set_cpu_flag(CIF_NOHZ_DELAY); set_cpu_flag(CIF_NOHZ_DELAY);
tpi_info = (struct tpi_info *) &get_irq_regs()->int_code; tpi_info = &get_irq_regs()->tpi_info;
trace_s390_cio_interrupt(tpi_info); trace_s390_cio_interrupt(tpi_info);
irb = this_cpu_ptr(&cio_irb); irb = this_cpu_ptr(&cio_irb);
sch = (struct subchannel *)(unsigned long) tpi_info->intparm; sch = (struct subchannel *)(unsigned long) tpi_info->intparm;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment