rpms/kernel/devel kernel.spec, 1.965, 1.966 linux-2.6-utrace.patch, 1.97, 1.98 linux-2.6-x86-tracehook.patch, 1.8, 1.9

Roland McGrath roland at fedoraproject.org
Mon Sep 22 20:11:25 UTC 2008


Author: roland

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv3918

Modified Files:
	kernel.spec linux-2.6-utrace.patch 
	linux-2.6-x86-tracehook.patch 
Log Message:
utrace update


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.965
retrieving revision 1.966
diff -u -r1.965 -r1.966
--- kernel.spec	22 Sep 2008 19:43:49 -0000	1.965
+++ kernel.spec	22 Sep 2008 20:10:55 -0000	1.966
@@ -1760,6 +1760,9 @@
 %kernel_variant_files -k vmlinux %{with_kdump} kdump
 
 %changelog
+* Mon Sep 22 2008 Roland McGrath <roland at redhat.com>
+- utrace update
+
 * Mon Sep 22 2008 Dave Jones <davej at redhat.com>
 - Readd CONFIG_IWLCORE that disappeared for no apparent reason.
 

linux-2.6-utrace.patch:

Index: linux-2.6-utrace.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-utrace.patch,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -r1.97 -r1.98
--- linux-2.6-utrace.patch	7 Sep 2008 18:01:05 -0000	1.97
+++ linux-2.6-utrace.patch	22 Sep 2008 20:10:55 -0000	1.98
@@ -1,17 +1,16 @@
  Documentation/DocBook/Makefile    |    2 +-
  Documentation/DocBook/utrace.tmpl |  566 +++++++++
  fs/proc/array.c                   |    3 +
- include/asm-generic/syscall.h     |    2 +-
  include/linux/ptrace.h            |   21 +
  include/linux/sched.h             |    6 +
- include/linux/tracehook.h         |   67 +-
+ include/linux/tracehook.h         |   65 +-
  include/linux/utrace.h            |  706 +++++++++++
  init/Kconfig                      |   26 +
  kernel/Makefile                   |    1 +
  kernel/ptrace.c                   |  605 +++++++++-
  kernel/signal.c                   |   14 +-
- kernel/utrace.c                   | 2516 +++++++++++++++++++++++++++++++++++++
- 13 files changed, 4525 insertions(+), 10 deletions(-)
+ kernel/utrace.c                   | 2538 +++++++++++++++++++++++++++++++++++++
+ 12 files changed, 4545 insertions(+), 8 deletions(-)
 
 diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
 index 1615350..92ca631 100644  
@@ -599,7 +598,7 @@
 +
 +</book>
 diff --git a/fs/proc/array.c b/fs/proc/array.c
-index 0d6eb33..99041de 100644  
+index 71c9be5..adc7a53 100644  
 --- a/fs/proc/array.c
 +++ b/fs/proc/array.c
 @@ -81,6 +81,7 @@
@@ -659,7 +658,7 @@
   * ptrace_init_task - initialize ptrace state for a new child
   * @child:		new child task
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index cfb0d87..581c487 100644  
+index 3d9120c..e063c78 100644  
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
 @@ -1196,6 +1196,11 @@ struct task_struct {
@@ -674,7 +673,7 @@
  /* Thread group tracking */
     	u32 parent_exec_id;
     	u32 self_exec_id;
-@@ -1768,6 +1773,7 @@ extern int kill_pgrp(struct pid *pid, in
+@@ -1772,6 +1777,7 @@ extern int kill_pgrp(struct pid *pid, in
  extern int kill_pid(struct pid *pid, int sig, int priv);
  extern int kill_proc_info(int, struct siginfo *, pid_t);
  extern int do_notify_parent(struct task_struct *, int);
@@ -683,7 +682,7 @@
  extern void force_sig_specific(int, struct task_struct *);
  extern int send_sig(int, struct task_struct *, int);
 diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
-index b48d819..968909d 100644  
+index 6186a78..968909d 100644  
 --- a/include/linux/tracehook.h
 +++ b/include/linux/tracehook.h
 @@ -49,6 +49,7 @@
@@ -2430,10 +2429,10 @@
  			  struct pt_regs *regs, void *cookie)
 diff --git a/kernel/utrace.c b/kernel/utrace.c
 new file mode 100644
-index ...5ef8fcd 100644  
+index ...1b794bb 100644  
 --- /dev/null
 +++ b/kernel/utrace.c
-@@ -0,0 +1,2516 @@
+@@ -0,0 +1,2538 @@
 +/*
 + * utrace infrastructure interface for debugging user processes
 + *
@@ -2671,6 +2670,17 @@
 +}
 +
 +/*
++ * This is called with @utrace->lock held when the task is safely
++ * quiescent, i.e. it won't consult utrace->attached without the lock.
++ * Move any engines attached asynchronously from @utrace->attaching
++ * onto the @utrace->attached list.
++ */
++static void splice_attaching(struct utrace *utrace)
++{
++	list_splice_tail_init(&utrace->attaching, &utrace->attached);
++}
++
++/*
 + * Allocate a new engine structure.  It starts out with two refs:
 + * one ref for utrace_attach_task() to return, and ref for being attached.
 + */
@@ -2798,7 +2808,29 @@
 +	rcu_read_unlock();
 +
 +	list_add_tail(&engine->entry, &utrace->attaching);
-+	utrace->report = 1;
++
++	/*
++	 * Now the new engine is on the pending ->attaching list.  Make
++	 * sure it gets onto the ->attached list by the next time it's
++	 * examined.  When called on current (e.g. from inside a callback),
++	 * we can do it right away.  Otherwise, we set ->report to ensure
++	 * that start_report() takes the lock and does it next time.
++	 */
++
++	if (target == current) {
++		splice_attaching(utrace);
++	} else {
++		/*
++		 * Whenever setting ->report, we must maintain the
++		 * invariant that TIF_NOTIFY_RESUME is also set.
++		 * Otherwise utrace_control() or utrace_do_stop()
++		 * might skip setting TIF_NOTIFY_RESUME upon seeing
++		 * ->report already set, and we'd miss a necessary
++		 * callback.
++		 */
++		utrace->report = 1;
++		set_notify_resume(target);
++	}
 +	goto finish;
 +
 +first:
@@ -2848,17 +2880,6 @@
 +EXPORT_SYMBOL_GPL(utrace_attach_pid);
 +
 +/*
-+ * This is called with @utrace->lock held when the task is safely
-+ * quiescent, i.e. it won't consult utrace->attached without the lock.
-+ * Move any engines attached asynchronously from @utrace->attaching
-+ * onto the @utrace->attached list.
-+ */
-+static void splice_attaching(struct utrace *utrace)
-+{
-+	list_splice_tail_init(&utrace->attaching, &utrace->attached);
-+}
-+
-+/*
 + * When an engine is detached, the target thread may still see it and
 + * make callbacks until it quiesces.  We install a special ops vector
 + * with these two callbacks.  When the target thread quiesces, it can

linux-2.6-x86-tracehook.patch:

Index: linux-2.6-x86-tracehook.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-x86-tracehook.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-x86-tracehook.patch	20 Aug 2008 20:23:16 -0000	1.8
+++ linux-2.6-x86-tracehook.patch	22 Sep 2008 20:10:55 -0000	1.9
@@ -3,12 +3,12 @@
  arch/x86/kernel/signal_32.c   |   11 ++-
  arch/x86/kernel/signal_64.c   |   49 +++-------
  include/asm-x86/ptrace.h      |    5 +
- include/asm-x86/syscall.h     |  210 +++++++++++++++++++++++++++++++++++++++++
+ include/asm-x86/syscall.h     |  211 +++++++++++++++++++++++++++++++++++++++++
  include/asm-x86/thread_info.h |    4 +-
- 7 files changed, 248 insertions(+), 66 deletions(-)
+ 7 files changed, 249 insertions(+), 66 deletions(-)
 
 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index ac2fb06..2206787 100644  
+index ed92864..ebfd7ff 100644  
 --- a/arch/x86/Kconfig
 +++ b/arch/x86/Kconfig
 @@ -29,6 +29,7 @@ config X86
@@ -134,7 +134,7 @@
  	clear_thread_flag(TIF_IRET);
  }
 diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c
-index b45ef8d..d01e3f6 100644  
+index ca316b5..1e19338 100644  
 --- a/arch/x86/kernel/signal_64.c
 +++ b/arch/x86/kernel/signal_64.c
 @@ -15,6 +15,7 @@
@@ -153,7 +153,7 @@
  #include "sigframe.h"
  
  #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
-@@ -346,35 +348,6 @@ give_sigsegv:
+@@ -355,35 +357,6 @@ give_sigsegv:
  }
  
  /*
@@ -189,7 +189,7 @@
   * OK, we're invoking a handler
   */	
  
-@@ -385,9 +358,9 @@ handle_signal(unsigned long sig, siginfo
+@@ -394,9 +367,9 @@ handle_signal(unsigned long sig, siginfo
  	int ret;
  
  	/* Are we from a system call? */
@@ -201,7 +201,7 @@
  		case -ERESTART_RESTARTBLOCK:
  		case -ERESTARTNOHAND:
  			regs->ax = -EINTR;
-@@ -444,8 +417,6 @@ handle_signal(unsigned long sig, siginfo
+@@ -453,8 +426,6 @@ handle_signal(unsigned long sig, siginfo
  		 * handler too.
  		 */
  		regs->flags &= ~X86_EFLAGS_TF;
@@ -210,7 +210,7 @@
  
  		spin_lock_irq(&current->sighand->siglock);
  		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
-@@ -453,6 +424,9 @@ handle_signal(unsigned long sig, siginfo
+@@ -462,6 +433,9 @@ handle_signal(unsigned long sig, siginfo
  			sigaddset(&current->blocked,sig);
  		recalc_sigpending();
  		spin_unlock_irq(&current->sighand->siglock);
@@ -220,7 +220,7 @@
  	}
  
  	return ret;
-@@ -509,9 +483,9 @@ static void do_signal(struct pt_regs *re
+@@ -518,9 +492,9 @@ static void do_signal(struct pt_regs *re
  	}
  
  	/* Did we come from a system call? */
@@ -232,7 +232,7 @@
  		case -ERESTARTNOHAND:
  		case -ERESTARTSYS:
  		case -ERESTARTNOINTR:
-@@ -549,6 +523,11 @@ void do_notify_resume(struct pt_regs *re
+@@ -558,6 +532,11 @@ void do_notify_resume(struct pt_regs *re
  	/* deal with pending signal delivery */
  	if (thread_info_flags & _TIF_SIGPENDING)
  		do_signal(regs);
@@ -262,10 +262,10 @@
   */
 diff --git a/include/asm-x86/syscall.h b/include/asm-x86/syscall.h
 new file mode 100644
-index ...6f29389 100644  
+index ...04c47dc 100644  
 --- /dev/null
 +++ b/include/asm-x86/syscall.h
-@@ -0,0 +1,210 @@
+@@ -0,0 +1,211 @@
 +/*
 + * Access to user system call parameters and results
 + *
@@ -282,6 +282,7 @@
 +#define _ASM_SYSCALL_H	1
 +
 +#include <linux/sched.h>
++#include <linux/err.h>
 +
 +static inline long syscall_get_nr(struct task_struct *task,
 +				  struct pt_regs *regs)
@@ -315,7 +316,7 @@
 +		 */
 +		error = (long) (int) error;
 +#endif
-+	return error >= -4095L ? error : 0;
++	return IS_ERR_VALUE(error) ? error : 0;
 +}
 +
 +static inline long syscall_get_return_value(struct task_struct *task,




More information about the fedora-extras-commits mailing list