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

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
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@

#include <linux/bits.h>
#include <uapi/asm/ptrace.h>
#include <asm/tpi.h>

#define PIF_SYSCALL		0	/* inside a system call */
#define PIF_SYSCALL_RESTART	1	/* restart the current system call */
@@ -86,9 +87,14 @@ struct pt_regs
		};
	};
	unsigned long orig_gpr2;
	union {
		struct {
			unsigned int int_code;
			unsigned int int_parm;
			unsigned long int_parm_long;
		};
		struct tpi_info tpi_info;
	};
	unsigned long flags;
	unsigned long cr1;
};
+4 −0
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@
#include <linux/types.h>
#include <uapi/asm/schid.h>

#ifndef __ASSEMBLY__

/* I/O-Interruption Code as stored by TEST PENDING INTERRUPTION (TPI). */
struct tpi_info {
	struct subchannel_id schid;
@@ -17,4 +19,6 @@ struct tpi_info {
	u32 :12;
} __packed __aligned(4);

#endif /* __ASSEMBLY__ */

#endif /* _ASM_S390_TPI_H */
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@

#include <linux/types.h>

#ifndef __ASSEMBLY__

struct subchannel_id {
	__u32 cssid : 8;
	__u32 : 4;
@@ -13,5 +15,6 @@ struct subchannel_id {
	__u32 sch_no : 16;
} __attribute__ ((packed, aligned(4)));

#endif /* __ASSEMBLY__ */

#endif /* _UAPIASM_SCHID_H */
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ static irqreturn_t do_airq_interrupt(int irq, void *dummy)
	struct hlist_head *head;

	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);
	head = &airq_lists[tpi_info->isc];
	rcu_read_lock();
+1 −1
Original line number Diff line number Diff line
@@ -536,7 +536,7 @@ static irqreturn_t do_cio_interrupt(int irq, void *dummy)
	struct irb *irb;

	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);
	irb = this_cpu_ptr(&cio_irb);
	sch = (struct subchannel *)(unsigned long) tpi_info->intparm;