mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 17/22] 2.6.22-rc3 perfmon2 : modified powerpc files
@ 2007-05-29 13:48 Stephane Eranian
  2007-06-04 14:40 ` David Rientjes
  0 siblings, 1 reply; 5+ messages in thread
From: Stephane Eranian @ 2007-05-29 13:48 UTC (permalink / raw)
  To: linux-kernel; +Cc: eranian

This patch contains the modified powerpc files.


The modified files are as follows:

arch/powerpc/Kconfig:
	- add link to perfmon menuconfig options

arch/powerpc/Makefile:
	- add perfmon subdir

arch/powerpc/kernel/entry_64.S:
	- add hook for extra work before kernel exit. Need to block a thread after a overflow with
	  user level notification. Also needed to do some bookeeeping, such as reset certain counters
	  and cleanup in some difficult corner cases

arch/powerpc/kernel/process.c:
	- add hook in exit_thread() to cleanup perfmon2 context
	- add hook in copy_thread() to cleanup perfmon2 context in child (perfmon2 context
	  is never inherited)
	- add hook in __switch_to() for PMU state save/restore

arch/powerpc/kernel/systbl.S:
	- add new system calls definitions

include/asm-powerpc/thread_info.h:
	- add TIF_PERFMON which is used for PMU context switching in __switch_to()

include/asm-powerpc/unistd.h:
	- add new system calls




diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/Kconfig linux-2.6.22/arch/powerpc/Kconfig
--- linux-2.6.22.base/arch/powerpc/Kconfig	2007-05-29 03:17:16.000000000 -0700
+++ linux-2.6.22/arch/powerpc/Kconfig	2007-05-29 03:24:14.000000000 -0700
@@ -392,6 +392,9 @@ config NOT_COHERENT_CACHE
 
 config CONFIG_CHECK_CACHE_COHERENCY
 	bool
+ 
+source "arch/powerpc/perfmon/Kconfig"
+
 endmenu
 
 source "init/Kconfig"
diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/Makefile linux-2.6.22/arch/powerpc/Makefile
--- linux-2.6.22.base/arch/powerpc/Makefile	2007-05-29 03:17:16.000000000 -0700
+++ linux-2.6.22/arch/powerpc/Makefile	2007-05-29 03:24:14.000000000 -0700
@@ -137,6 +137,7 @@ core-y				+= arch/powerpc/kernel/ \
 				   arch/powerpc/platforms/
 core-$(CONFIG_MATH_EMULATION)	+= arch/powerpc/math-emu/
 core-$(CONFIG_XMON)		+= arch/powerpc/xmon/
+core-$(CONFIG_PERFMON)		+= arch/powerpc/perfmon/
 
 drivers-$(CONFIG_OPROFILE)	+= arch/powerpc/oprofile/
 
diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/kernel/entry_32.S linux-2.6.22/arch/powerpc/kernel/entry_32.S
--- linux-2.6.22.base/arch/powerpc/kernel/entry_32.S	2007-05-29 03:17:16.000000000 -0700
+++ linux-2.6.22/arch/powerpc/kernel/entry_32.S	2007-05-29 03:24:14.000000000 -0700
@@ -38,7 +38,7 @@
  * MSR_KERNEL is > 0x10000 on 4xx/Book-E since it include MSR_CE.
  */
 #if MSR_KERNEL >= 0x10000
-#define LOAD_MSR_KERNEL(r, x)	lis r,(x)@h; ori r,r,(x)@l
+#define LOAD_MSR_KERNEL(r, x)	lis r,(x)@ha; ori r,r,(x)@l
 #else
 #define LOAD_MSR_KERNEL(r, x)	li r,(x)
 #endif
diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/kernel/entry_64.S linux-2.6.22/arch/powerpc/kernel/entry_64.S
--- linux-2.6.22.base/arch/powerpc/kernel/entry_64.S	2007-05-29 03:20:21.000000000 -0700
+++ linux-2.6.22/arch/powerpc/kernel/entry_64.S	2007-05-29 03:24:14.000000000 -0700
@@ -587,6 +587,10 @@ user_work:
 	b	.ret_from_except_lite
 
 1:	bl	.save_nvgprs
+#ifdef CONFIG_PERFMON
+	addi	r3,r1,STACK_FRAME_OVERHEAD
+	bl	.__pfm_handle_work
+#endif /* CONFIG_PERFMON */
 	li	r3,0
 	addi	r4,r1,STACK_FRAME_OVERHEAD
 	bl	.do_signal
diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/kernel/process.c linux-2.6.22/arch/powerpc/kernel/process.c
--- linux-2.6.22.base/arch/powerpc/kernel/process.c	2007-05-29 03:17:16.000000000 -0700
+++ linux-2.6.22/arch/powerpc/kernel/process.c	2007-05-29 03:24:14.000000000 -0700
@@ -33,6 +33,7 @@
 #include <linux/mqueue.h>
 #include <linux/hardirq.h>
 #include <linux/utsname.h>
+#include <linux/perfmon.h>
 
 #include <asm/pgtable.h>
 #include <asm/uaccess.h>
@@ -322,6 +323,9 @@ struct task_struct *__switch_to(struct t
 		new_thread->start_tb = current_tb;
 	}
 #endif
+	if (test_tsk_thread_flag(new, TIF_PERFMON_CTXSW)
+	    || test_tsk_thread_flag(prev, TIF_PERFMON_CTXSW))
+		pfm_ctxsw(prev, new);
 
 	local_irq_save(flags);
 
@@ -455,6 +459,7 @@ void show_regs(struct pt_regs * regs)
 void exit_thread(void)
 {
 	discard_lazy_cpu_state();
+	pfm_exit_thread(current);
 }
 
 void flush_thread(void)
@@ -570,6 +575,7 @@ int copy_thread(int nr, unsigned long cl
 #else
 	kregs->nip = (unsigned long)ret_from_fork;
 #endif
+	pfm_copy_thread(p);
 
 	return 0;
 }
Only in linux-2.6.22/arch/powerpc: perfmon
Only in linux-2.6.22/include/asm-powerpc: perfmon.h
Only in linux-2.6.22/include/asm-powerpc: perfmon_api.h
diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/systbl.h linux-2.6.22/include/asm-powerpc/systbl.h
--- linux-2.6.22.base/include/asm-powerpc/systbl.h	2007-05-29 03:17:57.000000000 -0700
+++ linux-2.6.22/include/asm-powerpc/systbl.h	2007-05-29 03:24:14.000000000 -0700
@@ -311,3 +311,15 @@ COMPAT_SYS_SPU(utimensat)
 COMPAT_SYS_SPU(signalfd)
 COMPAT_SYS_SPU(timerfd)
 SYSCALL_SPU(eventfd)
+SYSCALL(pfm_create_context)
+SYSCALL(pfm_write_pmcs)
+SYSCALL(pfm_write_pmds)
+SYSCALL(pfm_read_pmds)
+SYSCALL(pfm_load_context)
+SYSCALL(pfm_start)
+SYSCALL(pfm_stop)
+SYSCALL(pfm_restart)
+SYSCALL(pfm_create_evtsets)
+SYSCALL(pfm_getinfo_evtsets)
+SYSCALL(pfm_delete_evtsets)
+SYSCALL(pfm_unload_context)
diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/thread_info.h linux-2.6.22/include/asm-powerpc/thread_info.h
--- linux-2.6.22.base/include/asm-powerpc/thread_info.h	2007-05-29 03:20:21.000000000 -0700
+++ linux-2.6.22/include/asm-powerpc/thread_info.h	2007-05-29 03:24:14.000000000 -0700
@@ -112,16 +112,18 @@ static inline struct thread_info *curren
 #define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
 					   TIF_NEED_RESCHED */
 #define TIF_32BIT		4	/* 32 bit binary */
-#define TIF_RUNLATCH		5	/* Is the runlatch enabled? */
-#define TIF_ABI_PENDING		6	/* 32/64 bit switch needed */
+#define TIF_PERFMON_WORK	5	/* work for pfm_handle_work() */
+#define TIF_PERFMON_CTXSW	6	/* perfmon needs ctxsw calls */
 #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
 #define TIF_SINGLESTEP		8	/* singlestepping active */
 #define TIF_MEMDIE		9
 #define TIF_SECCOMP		10	/* secure computing */
 #define TIF_RESTOREALL		11	/* Restore all regs (implies NOERROR) */
-#define TIF_NOERROR		14	/* Force successful syscall return */
-#define TIF_RESTORE_SIGMASK	15	/* Restore signal mask in do_signal */
-#define TIF_FREEZE		16	/* Freezing for suspend */
+#define TIF_NOERROR		12	/* Force successful syscall return */
+#define TIF_RESTORE_SIGMASK	13	/* Restore signal mask in do_signal */
+#define TIF_FREEZE		14	/* Freezing for suspend */
+#define TIF_RUNLATCH		15	/* Is the runlatch enabled? */
+#define TIF_ABI_PENDING		16	/* 32/64 bit switch needed */
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
@@ -129,8 +131,8 @@ static inline struct thread_info *curren
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
 #define _TIF_32BIT		(1<<TIF_32BIT)
-#define _TIF_RUNLATCH		(1<<TIF_RUNLATCH)
-#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
+#define _TIF_PERFMON_WORK	(1<<TIF_PERFMON_WORK)
+#define _TIF_PERFMON_CTXSW	(1<<TIF_PERFMON_CTXSW)
 #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
 #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
 #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
@@ -138,10 +140,14 @@ static inline struct thread_info *curren
 #define _TIF_NOERROR		(1<<TIF_NOERROR)
 #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
 #define _TIF_FREEZE		(1<<TIF_FREEZE)
+#define _TIF_RUNLATCH		(1<<TIF_RUNLATCH)
+#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
 #define _TIF_SYSCALL_T_OR_A	(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
+#define _TIF_PERFMON_WORK	(1<<TIF_PERFMON_WORK)
+#define _TIF_PERFMON_CTXSW	(1<<TIF_PERFMON_CTXSW)
 
-#define _TIF_USER_WORK_MASK	( _TIF_SIGPENDING | \
-				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
+#define _TIF_USER_WORK_MASK	(_TIF_SIGPENDING | \
+				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK| _TIF_PERFMON_WORK)
 #define _TIF_PERSYSCALL_MASK	(_TIF_RESTOREALL|_TIF_NOERROR)
 
 /* Bits in local_flags */
diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/unistd.h linux-2.6.22/include/asm-powerpc/unistd.h
--- linux-2.6.22.base/include/asm-powerpc/unistd.h	2007-05-29 03:17:57.000000000 -0700
+++ linux-2.6.22/include/asm-powerpc/unistd.h	2007-05-29 03:24:14.000000000 -0700
@@ -330,10 +330,22 @@
 #define __NR_signalfd		305
 #define __NR_timerfd		306
 #define __NR_eventfd		307
+#define __NR_pfm_create_context	308
+#define __NR_pfm_write_pmcs	(__NR_pfm_create_context+1)
+#define __NR_pfm_write_pmds	(__NR_pfm_create_context+2)
+#define __NR_pfm_read_pmds	(__NR_pfm_create_context+3)
+#define __NR_pfm_load_context	(__NR_pfm_create_context+4)
+#define __NR_pfm_start		(__NR_pfm_create_context+5)
+#define __NR_pfm_stop		(__NR_pfm_create_context+6)
+#define __NR_pfm_restart	(__NR_pfm_create_context+7)
+#define __NR_pfm_create_evtsets	(__NR_pfm_create_context+8)
+#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
+#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
+#define __NR_pfm_unload_context	(__NR_pfm_create_context+11)
 
 #ifdef __KERNEL__
 
-#define __NR_syscalls		308
+#define __NR_syscalls		319
 
 #define __NR__exit __NR_exit
 #define NR_syscalls	__NR_syscalls

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 17/22] 2.6.22-rc3 perfmon2 : modified powerpc files
  2007-05-29 13:48 [PATCH 17/22] 2.6.22-rc3 perfmon2 : modified powerpc files Stephane Eranian
@ 2007-06-04 14:40 ` David Rientjes
  2007-06-05 11:41   ` Stephane Eranian
  0 siblings, 1 reply; 5+ messages in thread
From: David Rientjes @ 2007-06-04 14:40 UTC (permalink / raw)
  To: Stephane Eranian; +Cc: linux-kernel, eranian

On Tue, 29 May 2007, Stephane Eranian wrote:

> This patch contains the modified powerpc files.
> 
> 
> The modified files are as follows:
> 
> arch/powerpc/Kconfig:
> 	- add link to perfmon menuconfig options
> 
> arch/powerpc/Makefile:
> 	- add perfmon subdir
> 
> arch/powerpc/kernel/entry_64.S:
> 	- add hook for extra work before kernel exit. Need to block a thread after a overflow with
> 	  user level notification. Also needed to do some bookeeeping, such as reset certain counters
> 	  and cleanup in some difficult corner cases
> 
> arch/powerpc/kernel/process.c:
> 	- add hook in exit_thread() to cleanup perfmon2 context
> 	- add hook in copy_thread() to cleanup perfmon2 context in child (perfmon2 context
> 	  is never inherited)
> 	- add hook in __switch_to() for PMU state save/restore
> 
> arch/powerpc/kernel/systbl.S:
> 	- add new system calls definitions
> 
> include/asm-powerpc/thread_info.h:
> 	- add TIF_PERFMON which is used for PMU context switching in __switch_to()
> 

You mean TIF_PERFMON_CTXSW and TIF_PERFMON_WORK.

> include/asm-powerpc/unistd.h:
> 	- add new system calls
> 
> 
> 
> 
> diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/Kconfig linux-2.6.22/arch/powerpc/Kconfig
> --- linux-2.6.22.base/arch/powerpc/Kconfig	2007-05-29 03:17:16.000000000 -0700
> +++ linux-2.6.22/arch/powerpc/Kconfig	2007-05-29 03:24:14.000000000 -0700
> @@ -392,6 +392,9 @@ config NOT_COHERENT_CACHE
>  
>  config CONFIG_CHECK_CACHE_COHERENCY
>  	bool
> + 
> +source "arch/powerpc/perfmon/Kconfig"
> +
>  endmenu
>  
>  source "init/Kconfig"
> diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/Makefile linux-2.6.22/arch/powerpc/Makefile
> --- linux-2.6.22.base/arch/powerpc/Makefile	2007-05-29 03:17:16.000000000 -0700
> +++ linux-2.6.22/arch/powerpc/Makefile	2007-05-29 03:24:14.000000000 -0700
> @@ -137,6 +137,7 @@ core-y				+= arch/powerpc/kernel/ \
>  				   arch/powerpc/platforms/
>  core-$(CONFIG_MATH_EMULATION)	+= arch/powerpc/math-emu/
>  core-$(CONFIG_XMON)		+= arch/powerpc/xmon/
> +core-$(CONFIG_PERFMON)		+= arch/powerpc/perfmon/
>  
>  drivers-$(CONFIG_OPROFILE)	+= arch/powerpc/oprofile/
>  
> diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/kernel/entry_32.S linux-2.6.22/arch/powerpc/kernel/entry_32.S
> --- linux-2.6.22.base/arch/powerpc/kernel/entry_32.S	2007-05-29 03:17:16.000000000 -0700
> +++ linux-2.6.22/arch/powerpc/kernel/entry_32.S	2007-05-29 03:24:14.000000000 -0700
> @@ -38,7 +38,7 @@
>   * MSR_KERNEL is > 0x10000 on 4xx/Book-E since it include MSR_CE.
>   */
>  #if MSR_KERNEL >= 0x10000
> -#define LOAD_MSR_KERNEL(r, x)	lis r,(x)@h; ori r,r,(x)@l
> +#define LOAD_MSR_KERNEL(r, x)	lis r,(x)@ha; ori r,r,(x)@l
>  #else
>  #define LOAD_MSR_KERNEL(r, x)	li r,(x)
>  #endif
> diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/kernel/entry_64.S linux-2.6.22/arch/powerpc/kernel/entry_64.S
> --- linux-2.6.22.base/arch/powerpc/kernel/entry_64.S	2007-05-29 03:20:21.000000000 -0700
> +++ linux-2.6.22/arch/powerpc/kernel/entry_64.S	2007-05-29 03:24:14.000000000 -0700
> @@ -587,6 +587,10 @@ user_work:
>  	b	.ret_from_except_lite
>  
>  1:	bl	.save_nvgprs
> +#ifdef CONFIG_PERFMON
> +	addi	r3,r1,STACK_FRAME_OVERHEAD
> +	bl	.__pfm_handle_work
> +#endif /* CONFIG_PERFMON */
>  	li	r3,0
>  	addi	r4,r1,STACK_FRAME_OVERHEAD
>  	bl	.do_signal
> diff --exclude=.git -urp linux-2.6.22.base/arch/powerpc/kernel/process.c linux-2.6.22/arch/powerpc/kernel/process.c
> --- linux-2.6.22.base/arch/powerpc/kernel/process.c	2007-05-29 03:17:16.000000000 -0700
> +++ linux-2.6.22/arch/powerpc/kernel/process.c	2007-05-29 03:24:14.000000000 -0700
> @@ -33,6 +33,7 @@
>  #include <linux/mqueue.h>
>  #include <linux/hardirq.h>
>  #include <linux/utsname.h>
> +#include <linux/perfmon.h>
>  
>  #include <asm/pgtable.h>
>  #include <asm/uaccess.h>
> @@ -322,6 +323,9 @@ struct task_struct *__switch_to(struct t
>  		new_thread->start_tb = current_tb;
>  	}
>  #endif
> +	if (test_tsk_thread_flag(new, TIF_PERFMON_CTXSW)
> +	    || test_tsk_thread_flag(prev, TIF_PERFMON_CTXSW))
> +		pfm_ctxsw(prev, new);
>  
>  	local_irq_save(flags);
>  
> @@ -455,6 +459,7 @@ void show_regs(struct pt_regs * regs)
>  void exit_thread(void)
>  {
>  	discard_lazy_cpu_state();
> +	pfm_exit_thread(current);
>  }
>  
>  void flush_thread(void)
> @@ -570,6 +575,7 @@ int copy_thread(int nr, unsigned long cl
>  #else
>  	kregs->nip = (unsigned long)ret_from_fork;
>  #endif
> +	pfm_copy_thread(p);
>  
>  	return 0;
>  }
> Only in linux-2.6.22/arch/powerpc: perfmon
> Only in linux-2.6.22/include/asm-powerpc: perfmon.h
> Only in linux-2.6.22/include/asm-powerpc: perfmon_api.h
> diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/systbl.h linux-2.6.22/include/asm-powerpc/systbl.h
> --- linux-2.6.22.base/include/asm-powerpc/systbl.h	2007-05-29 03:17:57.000000000 -0700
> +++ linux-2.6.22/include/asm-powerpc/systbl.h	2007-05-29 03:24:14.000000000 -0700
> @@ -311,3 +311,15 @@ COMPAT_SYS_SPU(utimensat)
>  COMPAT_SYS_SPU(signalfd)
>  COMPAT_SYS_SPU(timerfd)
>  SYSCALL_SPU(eventfd)
> +SYSCALL(pfm_create_context)
> +SYSCALL(pfm_write_pmcs)
> +SYSCALL(pfm_write_pmds)
> +SYSCALL(pfm_read_pmds)
> +SYSCALL(pfm_load_context)
> +SYSCALL(pfm_start)
> +SYSCALL(pfm_stop)
> +SYSCALL(pfm_restart)
> +SYSCALL(pfm_create_evtsets)
> +SYSCALL(pfm_getinfo_evtsets)
> +SYSCALL(pfm_delete_evtsets)
> +SYSCALL(pfm_unload_context)
> diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/thread_info.h linux-2.6.22/include/asm-powerpc/thread_info.h
> --- linux-2.6.22.base/include/asm-powerpc/thread_info.h	2007-05-29 03:20:21.000000000 -0700
> +++ linux-2.6.22/include/asm-powerpc/thread_info.h	2007-05-29 03:24:14.000000000 -0700
> @@ -112,16 +112,18 @@ static inline struct thread_info *curren
>  #define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
>  					   TIF_NEED_RESCHED */
>  #define TIF_32BIT		4	/* 32 bit binary */
> -#define TIF_RUNLATCH		5	/* Is the runlatch enabled? */
> -#define TIF_ABI_PENDING		6	/* 32/64 bit switch needed */
> +#define TIF_PERFMON_WORK	5	/* work for pfm_handle_work() */
> +#define TIF_PERFMON_CTXSW	6	/* perfmon needs ctxsw calls */
>  #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
>  #define TIF_SINGLESTEP		8	/* singlestepping active */
>  #define TIF_MEMDIE		9
>  #define TIF_SECCOMP		10	/* secure computing */
>  #define TIF_RESTOREALL		11	/* Restore all regs (implies NOERROR) */
> -#define TIF_NOERROR		14	/* Force successful syscall return */
> -#define TIF_RESTORE_SIGMASK	15	/* Restore signal mask in do_signal */
> -#define TIF_FREEZE		16	/* Freezing for suspend */
> +#define TIF_NOERROR		12	/* Force successful syscall return */
> +#define TIF_RESTORE_SIGMASK	13	/* Restore signal mask in do_signal */
> +#define TIF_FREEZE		14	/* Freezing for suspend */
> +#define TIF_RUNLATCH		15	/* Is the runlatch enabled? */
> +#define TIF_ABI_PENDING		16	/* 32/64 bit switch needed */
>  
>  /* as above, but as bit values */
>  #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
> @@ -129,8 +131,8 @@ static inline struct thread_info *curren
>  #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
>  #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
>  #define _TIF_32BIT		(1<<TIF_32BIT)
> -#define _TIF_RUNLATCH		(1<<TIF_RUNLATCH)
> -#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
> +#define _TIF_PERFMON_WORK	(1<<TIF_PERFMON_WORK)
> +#define _TIF_PERFMON_CTXSW	(1<<TIF_PERFMON_CTXSW)
>  #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
>  #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
>  #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
> @@ -138,10 +140,14 @@ static inline struct thread_info *curren
>  #define _TIF_NOERROR		(1<<TIF_NOERROR)
>  #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
>  #define _TIF_FREEZE		(1<<TIF_FREEZE)
> +#define _TIF_RUNLATCH		(1<<TIF_RUNLATCH)
> +#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
>  #define _TIF_SYSCALL_T_OR_A	(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
> +#define _TIF_PERFMON_WORK	(1<<TIF_PERFMON_WORK)
> +#define _TIF_PERFMON_CTXSW	(1<<TIF_PERFMON_CTXSW)
>  
> -#define _TIF_USER_WORK_MASK	( _TIF_SIGPENDING | \
> -				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
> +#define _TIF_USER_WORK_MASK	(_TIF_SIGPENDING | \
> +				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK| _TIF_PERFMON_WORK)
>  #define _TIF_PERSYSCALL_MASK	(_TIF_RESTOREALL|_TIF_NOERROR)

No need to move _TIF_RUNLATCH or _TIF_ABI_PENDING.

>  
>  /* Bits in local_flags */
> diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/unistd.h linux-2.6.22/include/asm-powerpc/unistd.h
> --- linux-2.6.22.base/include/asm-powerpc/unistd.h	2007-05-29 03:17:57.000000000 -0700
> +++ linux-2.6.22/include/asm-powerpc/unistd.h	2007-05-29 03:24:14.000000000 -0700
> @@ -330,10 +330,22 @@
>  #define __NR_signalfd		305
>  #define __NR_timerfd		306
>  #define __NR_eventfd		307
> +#define __NR_pfm_create_context	308
> +#define __NR_pfm_write_pmcs	(__NR_pfm_create_context+1)
> +#define __NR_pfm_write_pmds	(__NR_pfm_create_context+2)
> +#define __NR_pfm_read_pmds	(__NR_pfm_create_context+3)
> +#define __NR_pfm_load_context	(__NR_pfm_create_context+4)
> +#define __NR_pfm_start		(__NR_pfm_create_context+5)
> +#define __NR_pfm_stop		(__NR_pfm_create_context+6)
> +#define __NR_pfm_restart	(__NR_pfm_create_context+7)
> +#define __NR_pfm_create_evtsets	(__NR_pfm_create_context+8)
> +#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
> +#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
> +#define __NR_pfm_unload_context	(__NR_pfm_create_context+11)
>  
>  #ifdef __KERNEL__
>  
> -#define __NR_syscalls		308
> +#define __NR_syscalls		319
>  

The highest numbered syscall, __NR_pfm_create_context+11, is 319 and 
__NR_syscalls is set to the same, which is wrong.

		David

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 17/22] 2.6.22-rc3 perfmon2 : modified powerpc files
  2007-06-04 14:40 ` David Rientjes
@ 2007-06-05 11:41   ` Stephane Eranian
  2007-06-05 16:52     ` David Rientjes
  0 siblings, 1 reply; 5+ messages in thread
From: Stephane Eranian @ 2007-06-05 11:41 UTC (permalink / raw)
  To: David Rientjes; +Cc: linux-kernel

David,

On Mon, Jun 04, 2007 at 07:40:53AM -0700, David Rientjes wrote:
> > include/asm-powerpc/thread_info.h:
> > 	- add TIF_PERFMON which is used for PMU context switching in __switch_to()
> > 
> 
> You mean TIF_PERFMON_CTXSW and TIF_PERFMON_WORK.
> 
Yes.

> > --- linux-2.6.22.base/include/asm-powerpc/thread_info.h	2007-05-29 03:20:21.000000000 -0700
> > +++ linux-2.6.22/include/asm-powerpc/thread_info.h	2007-05-29 03:24:14.000000000 -0700
> > @@ -112,16 +112,18 @@ static inline struct thread_info *curren
> >  #define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
> >  					   TIF_NEED_RESCHED */
> >  #define TIF_32BIT		4	/* 32 bit binary */
> > -#define TIF_RUNLATCH		5	/* Is the runlatch enabled? */
> > -#define TIF_ABI_PENDING		6	/* 32/64 bit switch needed */
> > +#define TIF_PERFMON_WORK	5	/* work for pfm_handle_work() */
> > +#define TIF_PERFMON_CTXSW	6	/* perfmon needs ctxsw calls */
> >  #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
> >  #define TIF_SINGLESTEP		8	/* singlestepping active */
> >  #define TIF_MEMDIE		9
> >  #define TIF_SECCOMP		10	/* secure computing */
> >  #define TIF_RESTOREALL		11	/* Restore all regs (implies NOERROR) */
> > -#define TIF_NOERROR		14	/* Force successful syscall return */
> > -#define TIF_RESTORE_SIGMASK	15	/* Restore signal mask in do_signal */
> > -#define TIF_FREEZE		16	/* Freezing for suspend */
> > +#define TIF_NOERROR		12	/* Force successful syscall return */
> > +#define TIF_RESTORE_SIGMASK	13	/* Restore signal mask in do_signal */
> > +#define TIF_FREEZE		14	/* Freezing for suspend */
> > +#define TIF_RUNLATCH		15	/* Is the runlatch enabled? */
> > +#define TIF_ABI_PENDING		16	/* 32/64 bit switch needed */
> >  
> >  /* as above, but as bit values */
> >  #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
> > @@ -129,8 +131,8 @@ static inline struct thread_info *curren
> >  #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
> >  #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
> >  #define _TIF_32BIT		(1<<TIF_32BIT)
> > -#define _TIF_RUNLATCH		(1<<TIF_RUNLATCH)
> > -#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
> > +#define _TIF_PERFMON_WORK	(1<<TIF_PERFMON_WORK)
> > +#define _TIF_PERFMON_CTXSW	(1<<TIF_PERFMON_CTXSW)
> >  #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
> >  #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
> >  #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
> > @@ -138,10 +140,14 @@ static inline struct thread_info *curren
> >  #define _TIF_NOERROR		(1<<TIF_NOERROR)
> >  #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
> >  #define _TIF_FREEZE		(1<<TIF_FREEZE)
> > +#define _TIF_RUNLATCH		(1<<TIF_RUNLATCH)
> > +#define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
> >  #define _TIF_SYSCALL_T_OR_A	(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
> > +#define _TIF_PERFMON_WORK	(1<<TIF_PERFMON_WORK)
> > +#define _TIF_PERFMON_CTXSW	(1<<TIF_PERFMON_CTXSW)
> >  
> > -#define _TIF_USER_WORK_MASK	( _TIF_SIGPENDING | \
> > -				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
> > +#define _TIF_USER_WORK_MASK	(_TIF_SIGPENDING | \
> > +				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK| _TIF_PERFMON_WORK)
> >  #define _TIF_PERSYSCALL_MASK	(_TIF_RESTOREALL|_TIF_NOERROR)
> 
> No need to move _TIF_RUNLATCH or _TIF_ABI_PENDING.
> 

Well, that was done by IBM to simplify the code in entry_64.S dealing with _TIF_USER_WORK_MASK
would not have to add extra instructions to load the constant, i.e., it had to fit within the 16
low order  bits.

> >  
> >  /* Bits in local_flags */
> > diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/unistd.h linux-2.6.22/include/asm-powerpc/unistd.h
> > --- linux-2.6.22.base/include/asm-powerpc/unistd.h	2007-05-29 03:17:57.000000000 -0700
> > +++ linux-2.6.22/include/asm-powerpc/unistd.h	2007-05-29 03:24:14.000000000 -0700
> > @@ -330,10 +330,22 @@
> >  #define __NR_signalfd		305
> >  #define __NR_timerfd		306
> >  #define __NR_eventfd		307
> > +#define __NR_pfm_create_context	308
> > +#define __NR_pfm_write_pmcs	(__NR_pfm_create_context+1)
> > +#define __NR_pfm_write_pmds	(__NR_pfm_create_context+2)
> > +#define __NR_pfm_read_pmds	(__NR_pfm_create_context+3)
> > +#define __NR_pfm_load_context	(__NR_pfm_create_context+4)
> > +#define __NR_pfm_start		(__NR_pfm_create_context+5)
> > +#define __NR_pfm_stop		(__NR_pfm_create_context+6)
> > +#define __NR_pfm_restart	(__NR_pfm_create_context+7)
> > +#define __NR_pfm_create_evtsets	(__NR_pfm_create_context+8)
> > +#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
> > +#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
> > +#define __NR_pfm_unload_context	(__NR_pfm_create_context+11)
> >  
> >  #ifdef __KERNEL__
> >  
> > -#define __NR_syscalls		308
> > +#define __NR_syscalls		319
> >  
> 
> The highest numbered syscall, __NR_pfm_create_context+11, is 319 and 
> __NR_syscalls is set to the same, which is wrong.
> 
You mean, it is off by one, right? Should be 320, then.

Thanks for your feedback.


-- 

-Stephane

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 17/22] 2.6.22-rc3 perfmon2 : modified powerpc files
  2007-06-05 11:41   ` Stephane Eranian
@ 2007-06-05 16:52     ` David Rientjes
  2007-06-05 20:27       ` Stephane Eranian
  0 siblings, 1 reply; 5+ messages in thread
From: David Rientjes @ 2007-06-05 16:52 UTC (permalink / raw)
  To: Stephane Eranian; +Cc: linux-kernel

On Tue, 5 Jun 2007, Stephane Eranian wrote:

> > > diff --exclude=.git -urp linux-2.6.22.base/include/asm-powerpc/unistd.h linux-2.6.22/include/asm-powerpc/unistd.h
> > > --- linux-2.6.22.base/include/asm-powerpc/unistd.h	2007-05-29 03:17:57.000000000 -0700
> > > +++ linux-2.6.22/include/asm-powerpc/unistd.h	2007-05-29 03:24:14.000000000 -0700
> > > @@ -330,10 +330,22 @@
> > >  #define __NR_signalfd		305
> > >  #define __NR_timerfd		306
> > >  #define __NR_eventfd		307
> > > +#define __NR_pfm_create_context	308
> > > +#define __NR_pfm_write_pmcs	(__NR_pfm_create_context+1)
> > > +#define __NR_pfm_write_pmds	(__NR_pfm_create_context+2)
> > > +#define __NR_pfm_read_pmds	(__NR_pfm_create_context+3)
> > > +#define __NR_pfm_load_context	(__NR_pfm_create_context+4)
> > > +#define __NR_pfm_start		(__NR_pfm_create_context+5)
> > > +#define __NR_pfm_stop		(__NR_pfm_create_context+6)
> > > +#define __NR_pfm_restart	(__NR_pfm_create_context+7)
> > > +#define __NR_pfm_create_evtsets	(__NR_pfm_create_context+8)
> > > +#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
> > > +#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
> > > +#define __NR_pfm_unload_context	(__NR_pfm_create_context+11)
> > >  
> > >  #ifdef __KERNEL__
> > >  
> > > -#define __NR_syscalls		308
> > > +#define __NR_syscalls		319
> > >  
> > 
> > The highest numbered syscall, __NR_pfm_create_context+11, is 319 and 
> > __NR_syscalls is set to the same, which is wrong.
> > 
> You mean, it is off by one, right? Should be 320, then.
> 

Yes, and the same off by one problem exists in your i386 patch that adds 
the new syscalls as well.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 17/22] 2.6.22-rc3 perfmon2 : modified powerpc files
  2007-06-05 16:52     ` David Rientjes
@ 2007-06-05 20:27       ` Stephane Eranian
  0 siblings, 0 replies; 5+ messages in thread
From: Stephane Eranian @ 2007-06-05 20:27 UTC (permalink / raw)
  To: David Rientjes; +Cc: linux-kernel

David,

On Tue, Jun 05, 2007 at 09:52:19AM -0700, David Rientjes wrote:
> > > > @@ -330,10 +330,22 @@
> > > >  #define __NR_signalfd		305
> > > >  #define __NR_timerfd		306
> > > >  #define __NR_eventfd		307
> > > > +#define __NR_pfm_create_context	308
> > > > +#define __NR_pfm_write_pmcs	(__NR_pfm_create_context+1)
> > > > +#define __NR_pfm_write_pmds	(__NR_pfm_create_context+2)
> > > > +#define __NR_pfm_read_pmds	(__NR_pfm_create_context+3)
> > > > +#define __NR_pfm_load_context	(__NR_pfm_create_context+4)
> > > > +#define __NR_pfm_start		(__NR_pfm_create_context+5)
> > > > +#define __NR_pfm_stop		(__NR_pfm_create_context+6)
> > > > +#define __NR_pfm_restart	(__NR_pfm_create_context+7)
> > > > +#define __NR_pfm_create_evtsets	(__NR_pfm_create_context+8)
> > > > +#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
> > > > +#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
> > > > +#define __NR_pfm_unload_context	(__NR_pfm_create_context+11)
> > > >  
> > > >  #ifdef __KERNEL__
> > > >  
> > > > -#define __NR_syscalls		308
> > > > +#define __NR_syscalls		319
> > > >  
> > > 
> > > The highest numbered syscall, __NR_pfm_create_context+11, is 319 and 
> > > __NR_syscalls is set to the same, which is wrong.
> > > 
> > You mean, it is off by one, right? Should be 320, then.
> > 
> 
> Yes, and the same off by one problem exists in your i386 patch that adds 
> the new syscalls as well.

Okay, I have fixed that now for powerpc, i386. Mips and IA-64 were fine.

Thanks.


-- 

-Stephane

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-06-05 20:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-05-29 13:48 [PATCH 17/22] 2.6.22-rc3 perfmon2 : modified powerpc files Stephane Eranian
2007-06-04 14:40 ` David Rientjes
2007-06-05 11:41   ` Stephane Eranian
2007-06-05 16:52     ` David Rientjes
2007-06-05 20:27       ` Stephane Eranian

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®