Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (470 commits) x86: Fix comments of register/stack access functions perf tools: Replace %m with %a in sscanf hw-breakpoints: Keep track of user disabled breakpoints tracing/syscalls: Make syscall events print callbacks static tracing: Add DEFINE_EVENT(), DEFINE_SINGLE_EVENT() support to docbook perf: Don't free perf_mmap_data until work has been done perf_event: Fix compile error perf tools: Fix _GNU_SOURCE macro related strndup() build error trace_syscalls: Remove unused syscall_name_to_nr() trace_syscalls: Simplify syscall profile trace_syscalls: Remove duplicate init_enter_##sname() trace_syscalls: Add syscall_nr field to struct syscall_metadata trace_syscalls: Remove enter_id exit_id trace_syscalls: Set event_enter_##sname->data to its metadata trace_syscalls: Remove unused event_syscall_enter and event_syscall_exit perf_event: Initialize data.period in perf_swevent_hrtimer() perf probe: Simplify event naming perf probe: Add --list option for listing current probe events perf probe: Add argv_split() from lib/argv_split.c perf probe: Move probe event utility functions to probe-event.c ...
This commit is contained in:
@@ -732,7 +732,7 @@ int fix_alignment(struct pt_regs *regs)
|
||||
|
||||
#ifdef CONFIG_SPE
|
||||
if ((instr >> 26) == 0x4) {
|
||||
PPC_WARN_EMULATED(spe);
|
||||
PPC_WARN_ALIGNMENT(spe, regs);
|
||||
return emulate_spe(regs, reg, instr);
|
||||
}
|
||||
#endif
|
||||
@@ -786,7 +786,7 @@ int fix_alignment(struct pt_regs *regs)
|
||||
flags |= SPLT;
|
||||
nb = 8;
|
||||
}
|
||||
PPC_WARN_EMULATED(vsx);
|
||||
PPC_WARN_ALIGNMENT(vsx, regs);
|
||||
return emulate_vsx(addr, reg, areg, regs, flags, nb);
|
||||
}
|
||||
#endif
|
||||
@@ -794,7 +794,7 @@ int fix_alignment(struct pt_regs *regs)
|
||||
* the exception of DCBZ which is handled as a special case here
|
||||
*/
|
||||
if (instr == DCBZ) {
|
||||
PPC_WARN_EMULATED(dcbz);
|
||||
PPC_WARN_ALIGNMENT(dcbz, regs);
|
||||
return emulate_dcbz(regs, addr);
|
||||
}
|
||||
if (unlikely(nb == 0))
|
||||
@@ -804,7 +804,7 @@ int fix_alignment(struct pt_regs *regs)
|
||||
* function
|
||||
*/
|
||||
if (flags & M) {
|
||||
PPC_WARN_EMULATED(multiple);
|
||||
PPC_WARN_ALIGNMENT(multiple, regs);
|
||||
return emulate_multiple(regs, addr, reg, nb,
|
||||
flags, instr, swiz);
|
||||
}
|
||||
@@ -825,11 +825,11 @@ int fix_alignment(struct pt_regs *regs)
|
||||
|
||||
/* Special case for 16-byte FP loads and stores */
|
||||
if (nb == 16) {
|
||||
PPC_WARN_EMULATED(fp_pair);
|
||||
PPC_WARN_ALIGNMENT(fp_pair, regs);
|
||||
return emulate_fp_pair(addr, reg, flags);
|
||||
}
|
||||
|
||||
PPC_WARN_EMULATED(unaligned);
|
||||
PPC_WARN_ALIGNMENT(unaligned, regs);
|
||||
|
||||
/* If we are loading, get the data from user space, else
|
||||
* get it from register values
|
||||
|
@@ -551,7 +551,7 @@ restore:
|
||||
BEGIN_FW_FTR_SECTION
|
||||
ld r5,SOFTE(r1)
|
||||
FW_FTR_SECTION_ELSE
|
||||
b iseries_check_pending_irqs
|
||||
b .Liseries_check_pending_irqs
|
||||
ALT_FW_FTR_SECTION_END_IFCLR(FW_FEATURE_ISERIES)
|
||||
2:
|
||||
TRACE_AND_RESTORE_IRQ(r5);
|
||||
@@ -623,7 +623,7 @@ ALT_FW_FTR_SECTION_END_IFCLR(FW_FEATURE_ISERIES)
|
||||
|
||||
#endif /* CONFIG_PPC_BOOK3E */
|
||||
|
||||
iseries_check_pending_irqs:
|
||||
.Liseries_check_pending_irqs:
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
ld r5,SOFTE(r1)
|
||||
cmpdi 0,r5,0
|
||||
|
@@ -185,12 +185,15 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE)
|
||||
* prolog code of the PerformanceMonitor one. A little
|
||||
* trickery is thus necessary
|
||||
*/
|
||||
performance_monitor_pSeries_1:
|
||||
. = 0xf00
|
||||
b performance_monitor_pSeries
|
||||
|
||||
altivec_unavailable_pSeries_1:
|
||||
. = 0xf20
|
||||
b altivec_unavailable_pSeries
|
||||
|
||||
vsx_unavailable_pSeries_1:
|
||||
. = 0xf40
|
||||
b vsx_unavailable_pSeries
|
||||
|
||||
|
@@ -70,6 +70,8 @@
|
||||
#include <asm/firmware.h>
|
||||
#include <asm/lv1call.h>
|
||||
#endif
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <asm/trace.h>
|
||||
|
||||
int __irq_offset_value;
|
||||
static int ppc_spurious_interrupts;
|
||||
@@ -325,6 +327,8 @@ void do_IRQ(struct pt_regs *regs)
|
||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||
unsigned int irq;
|
||||
|
||||
trace_irq_entry(regs);
|
||||
|
||||
irq_enter();
|
||||
|
||||
check_stack_overflow();
|
||||
@@ -348,6 +352,8 @@ void do_IRQ(struct pt_regs *regs)
|
||||
timer_interrupt(regs);
|
||||
}
|
||||
#endif
|
||||
|
||||
trace_irq_exit(regs);
|
||||
}
|
||||
|
||||
void __init init_IRQ(void)
|
||||
|
@@ -1165,7 +1165,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
|
||||
*/
|
||||
if (record) {
|
||||
struct perf_sample_data data = {
|
||||
.addr = 0,
|
||||
.addr = ~0ULL,
|
||||
.period = event->hw.last_period,
|
||||
};
|
||||
|
||||
|
@@ -72,10 +72,6 @@
|
||||
#define MMCR1_PMCSEL_SH(n) (MMCR1_PMC1SEL_SH - (n) * 8)
|
||||
#define MMCR1_PMCSEL_MSK 0x7f
|
||||
|
||||
/*
|
||||
* Bits in MMCRA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Layout of constraint bits:
|
||||
* 6666555555555544444444443333333333222222222211111111110000000000
|
||||
|
@@ -72,10 +72,6 @@
|
||||
#define MMCR1_PMCSEL_SH(n) (MMCR1_PMC1SEL_SH - (n) * 8)
|
||||
#define MMCR1_PMCSEL_MSK 0x7f
|
||||
|
||||
/*
|
||||
* Bits in MMCRA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Layout of constraint bits:
|
||||
* 6666555555555544444444443333333333222222222211111111110000000000
|
||||
@@ -390,7 +386,7 @@ static int power5_compute_mmcr(u64 event[], int n_ev,
|
||||
unsigned int hwc[], unsigned long mmcr[])
|
||||
{
|
||||
unsigned long mmcr1 = 0;
|
||||
unsigned long mmcra = 0;
|
||||
unsigned long mmcra = MMCRA_SDAR_DCACHE_MISS | MMCRA_SDAR_ERAT_MISS;
|
||||
unsigned int pmc, unit, byte, psel;
|
||||
unsigned int ttm, grp;
|
||||
int i, isbus, bit, grsel;
|
||||
|
@@ -178,7 +178,7 @@ static int p6_compute_mmcr(u64 event[], int n_ev,
|
||||
unsigned int hwc[], unsigned long mmcr[])
|
||||
{
|
||||
unsigned long mmcr1 = 0;
|
||||
unsigned long mmcra = 0;
|
||||
unsigned long mmcra = MMCRA_SDAR_DCACHE_MISS | MMCRA_SDAR_ERAT_MISS;
|
||||
int i;
|
||||
unsigned int pmc, ev, b, u, s, psel;
|
||||
unsigned int ttmset = 0;
|
||||
|
@@ -50,10 +50,6 @@
|
||||
#define MMCR1_PMCSEL_SH(n) (MMCR1_PMC1SEL_SH - (n) * 8)
|
||||
#define MMCR1_PMCSEL_MSK 0xff
|
||||
|
||||
/*
|
||||
* Bits in MMCRA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Layout of constraint bits:
|
||||
* 6666555555555544444444443333333333222222222211111111110000000000
|
||||
@@ -230,7 +226,7 @@ static int power7_compute_mmcr(u64 event[], int n_ev,
|
||||
unsigned int hwc[], unsigned long mmcr[])
|
||||
{
|
||||
unsigned long mmcr1 = 0;
|
||||
unsigned long mmcra = 0;
|
||||
unsigned long mmcra = MMCRA_SDAR_DCACHE_MISS | MMCRA_SDAR_ERAT_MISS;
|
||||
unsigned int pmc, unit, combine, l2sel, psel;
|
||||
unsigned int pmc_inuse = 0;
|
||||
int i;
|
||||
|
@@ -83,10 +83,6 @@ static short mmcr1_adder_bits[8] = {
|
||||
MMCR1_PMC8_ADDER_SEL_SH
|
||||
};
|
||||
|
||||
/*
|
||||
* Bits in MMCRA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Layout of constraint bits:
|
||||
* 6666555555555544444444443333333333222222222211111111110000000000
|
||||
|
@@ -660,6 +660,7 @@ late_initcall(check_cache_coherency);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *powerpc_debugfs_root;
|
||||
EXPORT_SYMBOL(powerpc_debugfs_root);
|
||||
|
||||
static int powerpc_debugfs_init(void)
|
||||
{
|
||||
|
@@ -54,6 +54,7 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/perf_event.h>
|
||||
#include <asm/trace.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/processor.h>
|
||||
@@ -571,6 +572,8 @@ void timer_interrupt(struct pt_regs * regs)
|
||||
struct clock_event_device *evt = &decrementer->event;
|
||||
u64 now;
|
||||
|
||||
trace_timer_interrupt_entry(regs);
|
||||
|
||||
/* Ensure a positive value is written to the decrementer, or else
|
||||
* some CPUs will continuue to take decrementer exceptions */
|
||||
set_dec(DECREMENTER_MAX);
|
||||
@@ -590,6 +593,7 @@ void timer_interrupt(struct pt_regs * regs)
|
||||
now = decrementer->next_tb - now;
|
||||
if (now <= DECREMENTER_MAX)
|
||||
set_dec((int)now);
|
||||
trace_timer_interrupt_exit(regs);
|
||||
return;
|
||||
}
|
||||
old_regs = set_irq_regs(regs);
|
||||
@@ -620,6 +624,8 @@ void timer_interrupt(struct pt_regs * regs)
|
||||
|
||||
irq_exit();
|
||||
set_irq_regs(old_regs);
|
||||
|
||||
trace_timer_interrupt_exit(regs);
|
||||
}
|
||||
|
||||
void wakeup_decrementer(void)
|
||||
|
@@ -759,7 +759,7 @@ static int emulate_instruction(struct pt_regs *regs)
|
||||
|
||||
/* Emulate the mfspr rD, PVR. */
|
||||
if ((instword & PPC_INST_MFSPR_PVR_MASK) == PPC_INST_MFSPR_PVR) {
|
||||
PPC_WARN_EMULATED(mfpvr);
|
||||
PPC_WARN_EMULATED(mfpvr, regs);
|
||||
rd = (instword >> 21) & 0x1f;
|
||||
regs->gpr[rd] = mfspr(SPRN_PVR);
|
||||
return 0;
|
||||
@@ -767,7 +767,7 @@ static int emulate_instruction(struct pt_regs *regs)
|
||||
|
||||
/* Emulating the dcba insn is just a no-op. */
|
||||
if ((instword & PPC_INST_DCBA_MASK) == PPC_INST_DCBA) {
|
||||
PPC_WARN_EMULATED(dcba);
|
||||
PPC_WARN_EMULATED(dcba, regs);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -776,7 +776,7 @@ static int emulate_instruction(struct pt_regs *regs)
|
||||
int shift = (instword >> 21) & 0x1c;
|
||||
unsigned long msk = 0xf0000000UL >> shift;
|
||||
|
||||
PPC_WARN_EMULATED(mcrxr);
|
||||
PPC_WARN_EMULATED(mcrxr, regs);
|
||||
regs->ccr = (regs->ccr & ~msk) | ((regs->xer >> shift) & msk);
|
||||
regs->xer &= ~0xf0000000UL;
|
||||
return 0;
|
||||
@@ -784,19 +784,19 @@ static int emulate_instruction(struct pt_regs *regs)
|
||||
|
||||
/* Emulate load/store string insn. */
|
||||
if ((instword & PPC_INST_STRING_GEN_MASK) == PPC_INST_STRING) {
|
||||
PPC_WARN_EMULATED(string);
|
||||
PPC_WARN_EMULATED(string, regs);
|
||||
return emulate_string_inst(regs, instword);
|
||||
}
|
||||
|
||||
/* Emulate the popcntb (Population Count Bytes) instruction. */
|
||||
if ((instword & PPC_INST_POPCNTB_MASK) == PPC_INST_POPCNTB) {
|
||||
PPC_WARN_EMULATED(popcntb);
|
||||
PPC_WARN_EMULATED(popcntb, regs);
|
||||
return emulate_popcntb_inst(regs, instword);
|
||||
}
|
||||
|
||||
/* Emulate isel (Integer Select) instruction */
|
||||
if ((instword & PPC_INST_ISEL_MASK) == PPC_INST_ISEL) {
|
||||
PPC_WARN_EMULATED(isel);
|
||||
PPC_WARN_EMULATED(isel, regs);
|
||||
return emulate_isel(regs, instword);
|
||||
}
|
||||
|
||||
@@ -995,7 +995,7 @@ void SoftwareEmulation(struct pt_regs *regs)
|
||||
#ifdef CONFIG_MATH_EMULATION
|
||||
errcode = do_mathemu(regs);
|
||||
if (errcode >= 0)
|
||||
PPC_WARN_EMULATED(math);
|
||||
PPC_WARN_EMULATED(math, regs);
|
||||
|
||||
switch (errcode) {
|
||||
case 0:
|
||||
@@ -1018,7 +1018,7 @@ void SoftwareEmulation(struct pt_regs *regs)
|
||||
#elif defined(CONFIG_8XX_MINIMAL_FPEMU)
|
||||
errcode = Soft_emulate_8xx(regs);
|
||||
if (errcode >= 0)
|
||||
PPC_WARN_EMULATED(8xx);
|
||||
PPC_WARN_EMULATED(8xx, regs);
|
||||
|
||||
switch (errcode) {
|
||||
case 0:
|
||||
@@ -1129,7 +1129,7 @@ void altivec_assist_exception(struct pt_regs *regs)
|
||||
|
||||
flush_altivec_to_thread(current);
|
||||
|
||||
PPC_WARN_EMULATED(altivec);
|
||||
PPC_WARN_EMULATED(altivec, regs);
|
||||
err = emulate_altivec(regs);
|
||||
if (err == 0) {
|
||||
regs->nip += 4; /* skip emulated instruction */
|
||||
|
Reference in New Issue
Block a user