public inbox for linux-next@vger.kernel.org 
 help / color / mirror / Atom feed
* linux-next: manual merge of the perfmon3 tree
@ 2008-11-25 10:03 Stephen Rothwell
  2008-11-25 10:22 ` Ingo Molnar
                   ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Stephen Rothwell @ 2008-11-25 10:03 UTC (permalink / raw)
  To: stephane eranian; +Cc: linux-next, Alexander van Heukelum, Ingo Molnar

Hi Stephane,

Today's linux-next merge of the perfmon3 tree got a conflict in
arch/x86/kernel/entry_64.S between commit
322648d1ba75280d62f114d47048beb0b35f5047 ("x86: include ENTRY/END in
entry handlers in entry_64.S") from the x86 tree and commit
3511a04973eaac18ee386f0db8c109e589019511 ("perfmon: x86-64 hooks") from
the perfmon3 tree.

A new way of doing things.  I fixed it up (see below) and can carry the
fixup as necessary.  I am not sure about this fix, confirmation would be
nice.
-- 
Cheers,
Stephen Rothwell                    sfr@canb•auug.org.au
http://www.canb.auug.org.au/~sfr/

diff --cc arch/x86/kernel/entry_64.S
index fc0ad87,b6f061e..0000000
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@@ -929,190 -810,133 +929,195 @@@ ENTRY(\sym
  	INTR_FRAME
  	pushq $~(\num)
  	CFI_ADJUST_CFA_OFFSET 8
 -	interrupt \func
 +	interrupt \do_sym
  	jmp ret_from_intr
  	CFI_ENDPROC
 -	.endm
 -
 -ENTRY(thermal_interrupt)
 -	apicinterrupt THERMAL_APIC_VECTOR,smp_thermal_interrupt
 -END(thermal_interrupt)
 -
 -ENTRY(threshold_interrupt)
 -	apicinterrupt THRESHOLD_APIC_VECTOR,mce_threshold_interrupt
 -END(threshold_interrupt)
 -
 -#ifdef CONFIG_SMP	
 -ENTRY(reschedule_interrupt)
 -	apicinterrupt RESCHEDULE_VECTOR,smp_reschedule_interrupt
 -END(reschedule_interrupt)
 -
 -	.macro INVALIDATE_ENTRY num
 -ENTRY(invalidate_interrupt\num)
 -	apicinterrupt INVALIDATE_TLB_VECTOR_START+\num,smp_invalidate_interrupt	
 -END(invalidate_interrupt\num)
 -	.endm
 +END(\sym)
 +.endm
  
 -	INVALIDATE_ENTRY 0
 -	INVALIDATE_ENTRY 1
 -	INVALIDATE_ENTRY 2
 -	INVALIDATE_ENTRY 3
 -	INVALIDATE_ENTRY 4
 -	INVALIDATE_ENTRY 5
 -	INVALIDATE_ENTRY 6
 -	INVALIDATE_ENTRY 7
 -
 -ENTRY(call_function_interrupt)
 -	apicinterrupt CALL_FUNCTION_VECTOR,smp_call_function_interrupt
 -END(call_function_interrupt)
 -ENTRY(call_function_single_interrupt)
 -	apicinterrupt CALL_FUNCTION_SINGLE_VECTOR,smp_call_function_single_interrupt
 -END(call_function_single_interrupt)
 -ENTRY(irq_move_cleanup_interrupt)
 -	apicinterrupt IRQ_MOVE_CLEANUP_VECTOR,smp_irq_move_cleanup_interrupt
 -END(irq_move_cleanup_interrupt)
 +#ifdef CONFIG_SMP
 +apicinterrupt IRQ_MOVE_CLEANUP_VECTOR \
 +	irq_move_cleanup_interrupt smp_irq_move_cleanup_interrupt
  #endif
  
 -ENTRY(apic_timer_interrupt)
 -	apicinterrupt LOCAL_TIMER_VECTOR,smp_apic_timer_interrupt
 -END(apic_timer_interrupt)
 -
 -ENTRY(uv_bau_message_intr1)
 -	apicinterrupt 220,uv_bau_message_interrupt
 -END(uv_bau_message_intr1)
 +apicinterrupt 220 \
 +	uv_bau_message_intr1 uv_bau_message_interrupt
 +apicinterrupt LOCAL_TIMER_VECTOR \
 +	apic_timer_interrupt smp_apic_timer_interrupt
 +
 +#ifdef CONFIG_SMP
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+0 \
 +	invalidate_interrupt0 smp_invalidate_interrupt
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+1 \
 +	invalidate_interrupt1 smp_invalidate_interrupt
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+2 \
 +	invalidate_interrupt2 smp_invalidate_interrupt
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+3 \
 +	invalidate_interrupt3 smp_invalidate_interrupt
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+4 \
 +	invalidate_interrupt4 smp_invalidate_interrupt
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+5 \
 +	invalidate_interrupt5 smp_invalidate_interrupt
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+6 \
 +	invalidate_interrupt6 smp_invalidate_interrupt
 +apicinterrupt INVALIDATE_TLB_VECTOR_START+7 \
 +	invalidate_interrupt7 smp_invalidate_interrupt
 +#endif
  
 -ENTRY(error_interrupt)
 -	apicinterrupt ERROR_APIC_VECTOR,smp_error_interrupt
 -END(error_interrupt)
 +apicinterrupt THRESHOLD_APIC_VECTOR \
 +	threshold_interrupt mce_threshold_interrupt
 +apicinterrupt THERMAL_APIC_VECTOR \
 +	thermal_interrupt smp_thermal_interrupt
 +
 +#ifdef CONFIG_SMP
 +apicinterrupt CALL_FUNCTION_SINGLE_VECTOR \
 +	call_function_single_interrupt smp_call_function_single_interrupt
 +apicinterrupt CALL_FUNCTION_VECTOR \
 +	call_function_interrupt smp_call_function_interrupt
 +apicinterrupt RESCHEDULE_VECTOR \
 +	reschedule_interrupt smp_reschedule_interrupt
 +#endif
  
 -ENTRY(spurious_interrupt)
 -	apicinterrupt SPURIOUS_APIC_VECTOR,smp_spurious_interrupt
 -END(spurious_interrupt)
 +apicinterrupt ERROR_APIC_VECTOR \
 +	error_interrupt smp_error_interrupt
 +apicinterrupt SPURIOUS_APIC_VECTOR \
 +	spurious_interrupt smp_spurious_interrupt
  
+ #ifdef CONFIG_PERFMON
 -ENTRY(pmu_interrupt)
 -	apicinterrupt LOCAL_PERFMON_VECTOR,smp_pmu_interrupt
 -END(pmu_interrupt)
++apicinterrupt LOCAL_PERFMON_VECTOR \
++	pmu_interrupt smp_pmu_interrupt
+ #endif
+ 
  /*
   * Exception entry points.
 - */ 		
 -	.macro zeroentry sym
 + */
 +.macro zeroentry sym do_sym
 +ENTRY(\sym)
  	INTR_FRAME
  	PARAVIRT_ADJUST_EXCEPTION_FRAME
 -	pushq $0	/* push error code/oldrax */ 
 +	pushq_cfi $-1		/* ORIG_RAX: no syscall to restart */
 +	subq $15*8,%rsp
 +	CFI_ADJUST_CFA_OFFSET 15*8
 +	call error_entry
 +	DEFAULT_FRAME 0
 +	movq %rsp,%rdi		/* pt_regs pointer */
 +	xorl %esi,%esi		/* no error code */
 +	call \do_sym
 +	jmp error_exit		/* %ebx: no swapgs flag */
 +	CFI_ENDPROC
 +END(\sym)
 +.endm
 +
 +.macro paranoidzeroentry sym do_sym
 +KPROBE_ENTRY(\sym)
 +	INTR_FRAME
 +	PARAVIRT_ADJUST_EXCEPTION_FRAME
 +	pushq $-1		/* ORIG_RAX: no syscall to restart */
  	CFI_ADJUST_CFA_OFFSET 8
 -	pushq %rax	/* push real oldrax to the rdi slot */ 
 +	subq $15*8, %rsp
 +	call save_paranoid
 +	TRACE_IRQS_OFF
 +	movq %rsp,%rdi		/* pt_regs pointer */
 +	xorl %esi,%esi		/* no error code */
 +	call \do_sym
 +	jmp paranoid_exit	/* %ebx: no swapgs flag */
 +	CFI_ENDPROC
 +KPROBE_END(\sym)
 +.endm
 +
 +.macro paranoidzeroentry_ist sym do_sym ist
 +KPROBE_ENTRY(\sym)
 + 	INTR_FRAME
 +	PARAVIRT_ADJUST_EXCEPTION_FRAME
 +	pushq $-1		/* ORIG_RAX: no syscall to restart */
  	CFI_ADJUST_CFA_OFFSET 8
 -	CFI_REL_OFFSET rax,0
 -	leaq  \sym(%rip),%rax
 -	jmp error_entry
 +	subq $15*8, %rsp
 +	call save_paranoid
 +	TRACE_IRQS_OFF
 +	movq %rsp,%rdi		/* pt_regs pointer */
 +	xorl %esi,%esi		/* no error code */
 +	movq %gs:pda_data_offset, %rbp
 +	subq $EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp)
 +	call \do_sym
 +	addq $EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp)
 +	jmp paranoid_exit	/* %ebx: no swapgs flag */
  	CFI_ENDPROC
 -	.endm	
 +KPROBE_END(\sym)
 +.endm
  
 -	.macro errorentry sym
 +.macro errorentry sym do_sym entry=0
 +.if \entry
 +KPROBE_ENTRY(\sym)
 +.else
 +ENTRY(\sym)
 +.endif
  	XCPT_FRAME
  	PARAVIRT_ADJUST_EXCEPTION_FRAME
 -	pushq %rax
 -	CFI_ADJUST_CFA_OFFSET 8
 -	CFI_REL_OFFSET rax,0
 -	leaq  \sym(%rip),%rax
 -	jmp error_entry
 +	subq $15*8,%rsp
 +	CFI_ADJUST_CFA_OFFSET 15*8
 +	call error_entry
 +	DEFAULT_FRAME 0
 +	movq %rsp,%rdi			/* pt_regs pointer */
 +	movq ORIG_RAX(%rsp),%rsi	/* get error code */
 +	movq $-1,ORIG_RAX(%rsp)		/* no syscall to restart */
 +	call \do_sym
 +	jmp error_exit			/* %ebx: no swapgs flag */
  	CFI_ENDPROC
 -	.endm
 +.if \entry
 +KPROBE_END(\sym)
 +.else
 +END(\sym)
 +.endif
 +.endm
  
  	/* error code is on the stack already */
 -	/* handle NMI like exceptions that can happen everywhere */
 -	.macro paranoidentry sym, ist=0, irqtrace=1
 -	SAVE_ALL
 -	cld
 -	movl $1,%ebx
 -	movl  $MSR_GS_BASE,%ecx
 -	rdmsr
 -	testl %edx,%edx
 -	js    1f
 -	SWAPGS
 -	xorl  %ebx,%ebx
 -1:
 -	.if \ist
 -	movq	%gs:pda_data_offset, %rbp
 -	.endif
 -	.if \irqtrace
 -	TRACE_IRQS_OFF
 -	.endif
 -	movq %rsp,%rdi
 -	movq ORIG_RAX(%rsp),%rsi
 -	movq $-1,ORIG_RAX(%rsp)
 -	.if \ist
 -	subq	$EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp)
 -	.endif
 -	call \sym
 -	.if \ist
 -	addq	$EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp)
 -	.endif
 -	DISABLE_INTERRUPTS(CLBR_NONE)
 -	.if \irqtrace
 +.macro paranoiderrorentry sym do_sym entry=1
 +.if \entry
 +KPROBE_ENTRY(\sym)
 +.else
 +ENTRY(\sym)
 +.endif
 +	XCPT_FRAME
 +	PARAVIRT_ADJUST_EXCEPTION_FRAME
 +	subq $15*8,%rsp
 +	CFI_ADJUST_CFA_OFFSET 15*8
 +	call save_paranoid
 +	DEFAULT_FRAME 0
  	TRACE_IRQS_OFF
 -	.endif
 -	.endm
 +	movq %rsp,%rdi			/* pt_regs pointer */
 +	movq ORIG_RAX(%rsp),%rsi	/* get error code */
 +	movq $-1,ORIG_RAX(%rsp)		/* no syscall to restart */
 +	call \do_sym
 +	jmp paranoid_exit		/* %ebx: no swapgs flag */
 +	CFI_ENDPROC
 +.if \entry
 +KPROBE_END(\sym)
 +.else
 +END(\sym)
 +.endif
 +.endm
 +
 +zeroentry divide_error do_divide_error
 +paranoidzeroentry_ist debug do_debug DEBUG_STACK
 +paranoidzeroentry_ist int3 do_int3 DEBUG_STACK
 +zeroentry overflow do_overflow
 +zeroentry bounds do_bounds
 +zeroentry invalid_op do_invalid_op
 +zeroentry device_not_available do_device_not_available
 +paranoiderrorentry double_fault do_double_fault 0
 +zeroentry coprocessor_segment_overrun do_coprocessor_segment_overrun
 +errorentry invalid_TSS do_invalid_TSS
 +errorentry segment_not_present do_segment_not_present
 +paranoiderrorentry stack_segment do_stack_segment
 +errorentry general_protection do_general_protection 1
 +errorentry page_fault do_page_fault 1
 +zeroentry spurious_interrupt_bug do_spurious_interrupt_bug
 +zeroentry coprocessor_error do_coprocessor_error
 +errorentry alignment_check do_alignment_check
 +#ifdef CONFIG_X86_MCE
 +paranoidzeroentry machine_check do_machine_check
 +#endif
 +zeroentry simd_coprocessor_error do_simd_coprocessor_error
  
  	/*
   	 * "Paranoid" exit path from exception stack.

^ permalink raw reply	[flat|nested] 20+ messages in thread
* RE: linux-next: manual merge of the perfmon3 tree
@ 2008-11-26  4:24 H. Peter Anvin
  0 siblings, 0 replies; 20+ messages in thread
From: H. Peter Anvin @ 2008-11-26  4:24 UTC (permalink / raw)
  To: Ingo Molnar, Stephen Rothwell
  Cc: eranian, linux-next, Alexander van Heukelum,
	the arch/x86 maintainers, Thomas Gleixner, Peter Zijlstra,
	Andrew Morton

I guess it really comes down to: is -next a merge window preview tree, or is it another -mm tree just based on a different toolset/workflow?

    -hpa

-- 
Sent from my mobile phone (pardon any lack of formatting)


-----Original Message-----
From: Ingo Molnar <mingo@elte•hu>
Sent: Tuesday, November 25, 2008 19:33
To: Stephen Rothwell <sfr@canb•auug.org.au>
Cc: eranian@gmail•com; linux-next@vger•kernel.org; Alexander van Heukelum <heukelum@mailshack•com>; the arch/x86 maintainers <x86@kernel•org>; H. Peter Anvin <hpa@zytor•com>; Thomas Gleixner <tglx@linutronix•de>; Peter Zijlstra <a.p.zijlstra@chello•nl>; Andrew Morton <akpm@linux-foundation•org>
Subject: Re: linux-next: manual merge of the perfmon3 tree


* Stephen Rothwell <sfr@canb•auug.org.au> wrote:

> > In any case, until that happens and until there's agreement with 
> > the x86 maintainers (there's none at the moment) the perfmon3 tree 
> > (or at least its x86 bits) needs to be removed from linux-next. I 
> > already see a number of problems with the patchset that we'll have 
> > to work out via an iterative review process.
> 
> That process has been happening except it seems that the x86 
> maintainers haven't bothered to participate. [...]

uhm, that's plain not true. There are three x86 maintainers and we 
take pride in replying to all x86 patch submission within a day 
typically, so i reject your suggestion.

We know and knew about the existence of the perfmon patches, but they 
were always in the vague RFC category and never directly submitted or 
Cc:-ed to us.

The authors of those patches never even bothered to Cc: the x86 arch 
maintainers, and never asked for those patches to be Ack-ed, accepted 
or reviewed. If that is not so, please show me the lkml link that 
contradicts my claim.

And how did we notice that this was going on? Not because we were 
told, but due to a bad perfmon commit modifying x86 code that suddenly 
showed up in linux-next ...

> [...] If, as you say, all the x86 parts have to go via the x86 tree, 
> then be aware that this woukd probably delay x86 perfmon integration 
> until 2.6.30 or later [...]

Why should that be so?

All i'm asking for you is to follow the upstream kernel integration 
process. All i'm asking you is when a new tree matches such a wide 
pattern of x86 modifications:

       25 files changed, 2340 insertions(+), 6 deletions(-)

_to at least Cc: the maintainers and ask their opinion_

this isnt just a file here and there. It goes straight into the guts 
of the architecture.

All i'm asking for is to not use linux-next as a backdoor to get 
_unreviewed_ and _clearly bad_ patches behind the back of architecture 
maintainers who specifically asked to be involved.

> [...] (*cough* ftrace *cough*). [...]

I'm not sure what you want to imply by that. ftrace was delayed for 
several kernel releases before it went upstream and the initial port 
went upstream with the full knowledge (and participation) of the 
architecture maintainers. (x86, incidentally)

> [...] As Andrew pointed out in another thread you seem to have 
> missed, the integration of perfmon (or something like it) is way 
> over due.  The way he suggested to go forward was to get it into 
> linux-next and aim for 2.6.29 integration.
>
> Several other architectures want this code in the kernel, so if they 
> have to wait for the x86 maintainers to decide what they want, then 
> the only way forward may be to separate the generic parts of the 
> code and get that integrated along with one of the other 
> architectures.

There's a proper process for merging brand new features, and it starts 
with asking the opinion of the maintainers. This isnt just a random 
stale subsystem no-one is interested in. This is a highly active piece 
of code maintained by three maintainers. This subsystem saw more than 
5800 commits in the last year alone.

Stephen, this is kernel maintenance 101, and you must follow it.

	Ingo

^ permalink raw reply	[flat|nested] 20+ messages in thread
* linux-next: manual merge of the perfmon3 tree
@ 2008-11-25 10:03 Stephen Rothwell
  0 siblings, 0 replies; 20+ messages in thread
From: Stephen Rothwell @ 2008-11-25 10:03 UTC (permalink / raw)
  To: stephane eranian; +Cc: linux-next, Hiroshi Shimamoto, Ingo Molnar

Hi Stephane,

Today's linux-next merge of the perfmon3 tree got a conflict in
arch/x86/kernel/signal_32.c between commit
5c9b3a0c7b8be3cdef3d7418f0a49127e7cdc998 ("x86: signal: cosmetic
unification of including headers") from the x86 tree and commit
b8509b08e429bf36e4ac99dd03d24a3618428f71 ("perfmon: x86-32 hooks") from
the perfmon3 tree.

I fixed it up (see below) and can carry the fix.
-- 
Cheers,
Stephen Rothwell                    sfr@canb•auug.org.au
http://www.canb.auug.org.au/~sfr/

diff --cc arch/x86/kernel/signal_32.c
index f7dd6c4,74da315..0000000
--- a/arch/x86/kernel/signal_32.c
+++ b/arch/x86/kernel/signal_32.c
@@@ -4,20 -4,24 +4,21 @@@
   *  1997-11-28  Modified for POSIX.1b signals by Richard Henderson
   *  2000-06-20  Pentium III FXSR, SSE support by Gareth Hughes
   */
 -#include <linux/list.h>
  
 -#include <linux/personality.h>
 -#include <linux/binfmts.h>
 -#include <linux/suspend.h>
 +#include <linux/sched.h>
 +#include <linux/mm.h>
 +#include <linux/smp.h>
  #include <linux/kernel.h>
 -#include <linux/ptrace.h>
  #include <linux/signal.h>
 -#include <linux/stddef.h>
 -#include <linux/unistd.h>
  #include <linux/errno.h>
 -#include <linux/sched.h>
  #include <linux/wait.h>
 +#include <linux/ptrace.h>
  #include <linux/tracehook.h>
 -#include <linux/elf.h>
 +#include <linux/unistd.h>
 +#include <linux/stddef.h>
 +#include <linux/personality.h>
 +#include <linux/uaccess.h>
+ #include <linux/perfmon_kern.h>
 -#include <linux/smp.h>
 -#include <linux/mm.h>
  
  #include <asm/processor.h>
  #include <asm/ucontext.h>

^ permalink raw reply	[flat|nested] 20+ messages in thread
* linux-next: manual merge of the perfmon3 tree
@ 2008-11-07  8:42 Stephen Rothwell
  0 siblings, 0 replies; 20+ messages in thread
From: Stephen Rothwell @ 2008-11-07  8:42 UTC (permalink / raw)
  To: stephane eranian; +Cc: linux-next, David Miller

Hi Stephane,

Today's linux-next merge of the perfmon3 tree got a conflict in
include/linux/sched.h between commit
f8d570a4745835f2238a33b537218a1bb03fc671 ("net: Fix recursive descent in
__scm_destroy()") from Linus' tree and commit
dab167960a632d29ef819adfa2d4c76a2ee3b26b ("perfmon: base code") from the
perfmon3 tree.

Just overlapping additions.  I fixed it up (see below) and you should fix
it in your tree by merging in Linus' tree and doing the same fixup in the
merge commit.
-- 
Cheers,
Stephen Rothwell                    sfr@canb•auug.org.au
http://www.canb.auug.org.au/~sfr/

diff --cc include/linux/sched.h
index 755b570,16bf42d..0000000
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@@ -1304,8 -1349,9 +1304,11 @@@ struct task_struct 
  	 */
  	unsigned long timer_slack_ns;
  	unsigned long default_timer_slack_ns;
 +
 +	struct list_head	*scm_work_list;
+ #ifdef CONFIG_PERFMON_V20
+ 	struct pfm_context *pfm_context;
+ #endif
  };
  
  /*

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

end of thread, other threads:[~2008-11-26 10:22 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-25 10:03 linux-next: manual merge of the perfmon3 tree Stephen Rothwell
2008-11-25 10:22 ` Ingo Molnar
2008-11-25 14:40   ` stephane eranian
2008-11-25 15:33     ` Ingo Molnar
2008-11-25 16:36       ` stephane eranian
2008-11-25 16:51         ` Ingo Molnar
2008-11-26  3:00           ` Stephen Rothwell
2008-11-26  3:33             ` Ingo Molnar
2008-11-26  7:06               ` Paul Mackerras
2008-11-26  7:16                 ` Ingo Molnar
2008-11-26  8:32               ` stephane eranian
2008-11-26  8:46                 ` Ingo Molnar
2008-11-26  9:00                   ` Andrew Morton
2008-11-26  9:31                     ` Peter Zijlstra
2008-11-26 10:21                     ` Ingo Molnar
2008-11-25 10:39 ` Alexander van Heukelum
2008-11-25 15:19 ` stephane eranian
  -- strict thread matches above, loose matches on Subject: below --
2008-11-26  4:24 H. Peter Anvin
2008-11-25 10:03 Stephen Rothwell
2008-11-07  8:42 Stephen Rothwell

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