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: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
committed by
Vasily Gorbik
parent
c63c473f18
commit
34bbeed074
@@ -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
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
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 @@
|
|||||||
#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 {
|
|||||||
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 @@
|
|||||||
|
|
||||||
#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 {
|
|||||||
__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)
|
|||||||
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)
|
|||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user