Re: linux-next: manual merge of the perfmon3 tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Stephen,

I compiled your 2008-11-25 linux-next patch relative to 2.6.28-rc6 and
perfmon appeared to be working fine with your changes.
Thanks.


On Tue, Nov 25, 2008 at 11:03 AM, Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote:
> 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@xxxxxxxxxxxxxxxx
> 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.
>
--
To unsubscribe from this list: send the line "unsubscribe linux-next" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux USB Development]     [Yosemite News]     [Linux SCSI]

  Powered by Linux