mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'ptrace' of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc
* 'ptrace' of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (41 commits) signal: trivial, fix the "timespec declared inside parameter list" warning job control: reorganize wait_task_stopped() ptrace: fix signal->wait_chldexit usage in task_clear_group_stop_trapping() signal: sys_sigprocmask() needs retarget_shared_pending() signal: cleanup sys_sigprocmask() signal: rename signandsets() to sigandnsets() signal: do_sigtimedwait() needs retarget_shared_pending() signal: introduce do_sigtimedwait() to factor out compat/native code signal: sys_rt_sigtimedwait: simplify the timeout logic signal: cleanup sys_rt_sigprocmask() x86: signal: sys_rt_sigreturn() should use set_current_blocked() x86: signal: handle_signal() should use set_current_blocked() signal: sigprocmask() should do retarget_shared_pending() signal: sigprocmask: narrow the scope of ->siglock signal: retarget_shared_pending: optimize while_each_thread() loop signal: retarget_shared_pending: consider shared/unblocked signals only signal: introduce retarget_shared_pending() ptrace: ptrace_check_attach() should not do s/STOPPED/TRACED/ signal: Turn SIGNAL_STOP_DEQUEUED into GROUP_STOP_DEQUEUED signal: do_signal_stop: Remove the unneeded task_clear_group_stop_pending() ...
This commit is contained in:
commit
3ed4c0583d
9 changed files with 659 additions and 366 deletions
|
|
@ -653,9 +653,8 @@ struct signal_struct {
|
|||
* Bits in flags field of signal_struct.
|
||||
*/
|
||||
#define SIGNAL_STOP_STOPPED 0x00000001 /* job control stop in effect */
|
||||
#define SIGNAL_STOP_DEQUEUED 0x00000002 /* stop signal dequeued */
|
||||
#define SIGNAL_STOP_CONTINUED 0x00000004 /* SIGCONT since WCONTINUED reap */
|
||||
#define SIGNAL_GROUP_EXIT 0x00000008 /* group exit in progress */
|
||||
#define SIGNAL_STOP_CONTINUED 0x00000002 /* SIGCONT since WCONTINUED reap */
|
||||
#define SIGNAL_GROUP_EXIT 0x00000004 /* group exit in progress */
|
||||
/*
|
||||
* Pending notifications to parent.
|
||||
*/
|
||||
|
|
@ -1251,6 +1250,7 @@ struct task_struct {
|
|||
int exit_state;
|
||||
int exit_code, exit_signal;
|
||||
int pdeath_signal; /* The signal sent when the parent dies */
|
||||
unsigned int group_stop; /* GROUP_STOP_*, siglock protected */
|
||||
/* ??? */
|
||||
unsigned int personality;
|
||||
unsigned did_exec:1;
|
||||
|
|
@ -1771,6 +1771,17 @@ extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *
|
|||
#define tsk_used_math(p) ((p)->flags & PF_USED_MATH)
|
||||
#define used_math() tsk_used_math(current)
|
||||
|
||||
/*
|
||||
* task->group_stop flags
|
||||
*/
|
||||
#define GROUP_STOP_SIGMASK 0xffff /* signr of the last group stop */
|
||||
#define GROUP_STOP_PENDING (1 << 16) /* task should stop for group stop */
|
||||
#define GROUP_STOP_CONSUME (1 << 17) /* consume group stop count */
|
||||
#define GROUP_STOP_TRAPPING (1 << 18) /* switching from STOPPED to TRACED */
|
||||
#define GROUP_STOP_DEQUEUED (1 << 19) /* stop signal dequeued */
|
||||
|
||||
extern void task_clear_group_stop_pending(struct task_struct *task);
|
||||
|
||||
#ifdef CONFIG_PREEMPT_RCU
|
||||
|
||||
#define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */
|
||||
|
|
|
|||
|
|
@ -125,13 +125,13 @@ _SIG_SET_BINOP(sigorsets, _sig_or)
|
|||
#define _sig_and(x,y) ((x) & (y))
|
||||
_SIG_SET_BINOP(sigandsets, _sig_and)
|
||||
|
||||
#define _sig_nand(x,y) ((x) & ~(y))
|
||||
_SIG_SET_BINOP(signandsets, _sig_nand)
|
||||
#define _sig_andn(x,y) ((x) & ~(y))
|
||||
_SIG_SET_BINOP(sigandnsets, _sig_andn)
|
||||
|
||||
#undef _SIG_SET_BINOP
|
||||
#undef _sig_or
|
||||
#undef _sig_and
|
||||
#undef _sig_nand
|
||||
#undef _sig_andn
|
||||
|
||||
#define _SIG_SET_OP(name, op) \
|
||||
static inline void name(sigset_t *set) \
|
||||
|
|
@ -236,6 +236,9 @@ static inline int valid_signal(unsigned long sig)
|
|||
return sig <= _NSIG ? 1 : 0;
|
||||
}
|
||||
|
||||
struct timespec;
|
||||
struct pt_regs;
|
||||
|
||||
extern int next_signal(struct sigpending *pending, sigset_t *mask);
|
||||
extern int do_send_sig_info(int sig, struct siginfo *info,
|
||||
struct task_struct *p, bool group);
|
||||
|
|
@ -244,10 +247,12 @@ extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *);
|
|||
extern long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig,
|
||||
siginfo_t *info);
|
||||
extern long do_sigpending(void __user *, unsigned long);
|
||||
extern int do_sigtimedwait(const sigset_t *, siginfo_t *,
|
||||
const struct timespec *);
|
||||
extern int sigprocmask(int, sigset_t *, sigset_t *);
|
||||
extern void set_current_blocked(const sigset_t *);
|
||||
extern int show_unhandled_signals;
|
||||
|
||||
struct pt_regs;
|
||||
extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie);
|
||||
extern void exit_signals(struct task_struct *tsk);
|
||||
|
||||
|
|
|
|||
|
|
@ -468,33 +468,6 @@ static inline int tracehook_get_signal(struct task_struct *task,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* tracehook_notify_jctl - report about job control stop/continue
|
||||
* @notify: zero, %CLD_STOPPED or %CLD_CONTINUED
|
||||
* @why: %CLD_STOPPED or %CLD_CONTINUED
|
||||
*
|
||||
* This is called when we might call do_notify_parent_cldstop().
|
||||
*
|
||||
* @notify is zero if we would not ordinarily send a %SIGCHLD,
|
||||
* or is the %CLD_STOPPED or %CLD_CONTINUED .si_code for %SIGCHLD.
|
||||
*
|
||||
* @why is %CLD_STOPPED when about to stop for job control;
|
||||
* we are already in %TASK_STOPPED state, about to call schedule().
|
||||
* It might also be that we have just exited (check %PF_EXITING),
|
||||
* but need to report that a group-wide stop is complete.
|
||||
*
|
||||
* @why is %CLD_CONTINUED when waking up after job control stop and
|
||||
* ready to make a delayed @notify report.
|
||||
*
|
||||
* Return the %CLD_* value for %SIGCHLD, or zero to generate no signal.
|
||||
*
|
||||
* Called with the siglock held.
|
||||
*/
|
||||
static inline int tracehook_notify_jctl(int notify, int why)
|
||||
{
|
||||
return notify ?: (current->ptrace & PT_PTRACED) ? why : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* tracehook_finish_jctl - report about return from job control stop
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue