Commit fb6cc127 authored by Marco Elver's avatar Marco Elver Committed by Peter Zijlstra
Browse files

signal: Introduce TRAP_PERF si_code and si_perf to siginfo



Introduces the TRAP_PERF si_code, and associated siginfo_t field
si_perf. These will be used by the perf event subsystem to send signals
(if requested) to the task where an event occurred.

Signed-off-by: default avatarMarco Elver <elver@google.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> # m68k
Acked-by: Arnd Bergmann <arnd@arndb.de> # asm-generic
Link: https://lkml.kernel.org/r/20210408103605.1676875-6-elver@google.com
parent 2e498d0a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -622,6 +622,9 @@ static inline void siginfo_build_tests(void)
	/* _sigfault._addr_pkey */
	BUILD_BUG_ON(offsetof(siginfo_t, si_pkey) != 0x12);

	/* _sigfault._perf */
	BUILD_BUG_ON(offsetof(siginfo_t, si_perf) != 0x10);

	/* _sigpoll */
	BUILD_BUG_ON(offsetof(siginfo_t, si_band)   != 0x0c);
	BUILD_BUG_ON(offsetof(siginfo_t, si_fd)     != 0x10);
+4 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ static inline void signal_compat_build_tests(void)
	BUILD_BUG_ON(NSIGFPE  != 15);
	BUILD_BUG_ON(NSIGSEGV != 9);
	BUILD_BUG_ON(NSIGBUS  != 5);
	BUILD_BUG_ON(NSIGTRAP != 5);
	BUILD_BUG_ON(NSIGTRAP != 6);
	BUILD_BUG_ON(NSIGCHLD != 6);
	BUILD_BUG_ON(NSIGSYS  != 2);

@@ -138,6 +138,9 @@ static inline void signal_compat_build_tests(void)
	BUILD_BUG_ON(offsetof(siginfo_t, si_pkey) != 0x20);
	BUILD_BUG_ON(offsetof(compat_siginfo_t, si_pkey) != 0x14);

	BUILD_BUG_ON(offsetof(siginfo_t, si_perf) != 0x18);
	BUILD_BUG_ON(offsetof(compat_siginfo_t, si_perf) != 0x10);

	CHECK_CSI_OFFSET(_sigpoll);
	CHECK_CSI_SIZE  (_sigpoll, 2*sizeof(int));
	CHECK_SI_SIZE   (_sigpoll, 4*sizeof(int));
+4 −0
Original line number Diff line number Diff line
@@ -134,6 +134,10 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,
#endif
		new.ssi_addr_lsb = (short) kinfo->si_addr_lsb;
		break;
	case SIL_PERF_EVENT:
		new.ssi_addr = (long) kinfo->si_addr;
		new.ssi_perf = kinfo->si_perf;
		break;
	case SIL_CHLD:
		new.ssi_pid    = kinfo->si_pid;
		new.ssi_uid    = kinfo->si_uid;
+2 −0
Original line number Diff line number Diff line
@@ -236,6 +236,8 @@ typedef struct compat_siginfo {
					char _dummy_pkey[__COMPAT_ADDR_BND_PKEY_PAD];
					u32 _pkey;
				} _addr_pkey;
				/* used when si_code=TRAP_PERF */
				compat_u64 _perf;
			};
		} _sigfault;

+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ enum siginfo_layout {
	SIL_FAULT_MCEERR,
	SIL_FAULT_BNDERR,
	SIL_FAULT_PKUERR,
	SIL_PERF_EVENT,
	SIL_CHLD,
	SIL_RT,
	SIL_SYS,
Loading