forked from Minki/linux
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Thomas Gleixner: "A couple of fixes for performance counters and kprobes: - a series of small patches which make the uncore performance counters on Skylake server systems work correctly - add a missing instruction slot release to the failure path of kprobes" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: kprobes/x86: Release insn_slot in failure path perf/x86/intel/uncore: Fix missing marker for skx_uncore_cha_extra_regs perf/x86/intel/uncore: Fix SKX CHA event extra regs perf/x86/intel/uncore: Remove invalid Skylake server CHA filter field perf/x86/intel/uncore: Fix Skylake server CHA LLC_LOOKUP event umask perf/x86/intel/uncore: Fix Skylake server PCU PMU event format perf/x86/intel/uncore: Fix Skylake UPI PMU event masks
This commit is contained in:
commit
dbc52a8030
@ -316,7 +316,7 @@
|
||||
#define SKX_UPI_PCI_PMON_CTL0 0x350
|
||||
#define SKX_UPI_PCI_PMON_CTR0 0x318
|
||||
#define SKX_UPI_PCI_PMON_BOX_CTL 0x378
|
||||
#define SKX_PMON_CTL_UMASK_EXT 0xff
|
||||
#define SKX_UPI_CTL_UMASK_EXT 0xffefff
|
||||
|
||||
/* SKX M2M */
|
||||
#define SKX_M2M_PCI_PMON_CTL0 0x228
|
||||
@ -328,7 +328,7 @@ DEFINE_UNCORE_FORMAT_ATTR(event2, event, "config:0-6");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(event_ext, event, "config:0-7,21");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(use_occ_ctr, use_occ_ctr, "config:7");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(umask, umask, "config:8-15");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(umask_ext, umask, "config:8-15,32-39");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(umask_ext, umask, "config:8-15,32-43,45-55");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(qor, qor, "config:16");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(edge, edge, "config:18");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(tid_en, tid_en, "config:19");
|
||||
@ -351,7 +351,6 @@ DEFINE_UNCORE_FORMAT_ATTR(filter_cid, filter_cid, "config1:5");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(filter_link, filter_link, "config1:5-8");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(filter_link2, filter_link, "config1:6-8");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(filter_link3, filter_link, "config1:12");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(filter_link4, filter_link, "config1:9-12");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(filter_nid, filter_nid, "config1:10-17");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(filter_nid2, filter_nid, "config1:32-47");
|
||||
DEFINE_UNCORE_FORMAT_ATTR(filter_state, filter_state, "config1:18-22");
|
||||
@ -3302,7 +3301,6 @@ static struct attribute *skx_uncore_cha_formats_attr[] = {
|
||||
&format_attr_inv.attr,
|
||||
&format_attr_thresh8.attr,
|
||||
&format_attr_filter_tid4.attr,
|
||||
&format_attr_filter_link4.attr,
|
||||
&format_attr_filter_state5.attr,
|
||||
&format_attr_filter_rem.attr,
|
||||
&format_attr_filter_loc.attr,
|
||||
@ -3312,7 +3310,6 @@ static struct attribute *skx_uncore_cha_formats_attr[] = {
|
||||
&format_attr_filter_opc_0.attr,
|
||||
&format_attr_filter_opc_1.attr,
|
||||
&format_attr_filter_nc.attr,
|
||||
&format_attr_filter_c6.attr,
|
||||
&format_attr_filter_isoc.attr,
|
||||
NULL,
|
||||
};
|
||||
@ -3333,8 +3330,11 @@ static struct extra_reg skx_uncore_cha_extra_regs[] = {
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x0534, 0xffff, 0x4),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x0934, 0xffff, 0x4),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x1134, 0xffff, 0x4),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x2134, 0xffff, 0x4),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x8134, 0xffff, 0x4),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x3134, 0xffff, 0x4),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x9134, 0xffff, 0x4),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x35, 0xff, 0x8),
|
||||
SNBEP_CBO_EVENT_EXTRA_REG(0x36, 0xff, 0x8),
|
||||
EVENT_EXTRA_END
|
||||
};
|
||||
|
||||
static u64 skx_cha_filter_mask(int fields)
|
||||
@ -3347,6 +3347,17 @@ static u64 skx_cha_filter_mask(int fields)
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_LINK;
|
||||
if (fields & 0x4)
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_STATE;
|
||||
if (fields & 0x8) {
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_REM;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_LOC;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_ALL_OPC;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_NM;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_NOT_NM;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_OPC0;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_OPC1;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_NC;
|
||||
mask |= SKX_CHA_MSR_PMON_BOX_FILTER_ISOC;
|
||||
}
|
||||
return mask;
|
||||
}
|
||||
|
||||
@ -3492,6 +3503,26 @@ static struct intel_uncore_type skx_uncore_irp = {
|
||||
.format_group = &skx_uncore_format_group,
|
||||
};
|
||||
|
||||
static struct attribute *skx_uncore_pcu_formats_attr[] = {
|
||||
&format_attr_event.attr,
|
||||
&format_attr_umask.attr,
|
||||
&format_attr_edge.attr,
|
||||
&format_attr_inv.attr,
|
||||
&format_attr_thresh8.attr,
|
||||
&format_attr_occ_invert.attr,
|
||||
&format_attr_occ_edge_det.attr,
|
||||
&format_attr_filter_band0.attr,
|
||||
&format_attr_filter_band1.attr,
|
||||
&format_attr_filter_band2.attr,
|
||||
&format_attr_filter_band3.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group skx_uncore_pcu_format_group = {
|
||||
.name = "format",
|
||||
.attrs = skx_uncore_pcu_formats_attr,
|
||||
};
|
||||
|
||||
static struct intel_uncore_ops skx_uncore_pcu_ops = {
|
||||
IVBEP_UNCORE_MSR_OPS_COMMON_INIT(),
|
||||
.hw_config = hswep_pcu_hw_config,
|
||||
@ -3510,7 +3541,7 @@ static struct intel_uncore_type skx_uncore_pcu = {
|
||||
.box_ctl = HSWEP_PCU_MSR_PMON_BOX_CTL,
|
||||
.num_shared_regs = 1,
|
||||
.ops = &skx_uncore_pcu_ops,
|
||||
.format_group = &snbep_uncore_pcu_format_group,
|
||||
.format_group = &skx_uncore_pcu_format_group,
|
||||
};
|
||||
|
||||
static struct intel_uncore_type *skx_msr_uncores[] = {
|
||||
@ -3603,8 +3634,8 @@ static struct intel_uncore_type skx_uncore_upi = {
|
||||
.perf_ctr_bits = 48,
|
||||
.perf_ctr = SKX_UPI_PCI_PMON_CTR0,
|
||||
.event_ctl = SKX_UPI_PCI_PMON_CTL0,
|
||||
.event_mask = SNBEP_QPI_PCI_PMON_RAW_EVENT_MASK,
|
||||
.event_mask_ext = SKX_PMON_CTL_UMASK_EXT,
|
||||
.event_mask = SNBEP_PMON_RAW_EVENT_MASK,
|
||||
.event_mask_ext = SKX_UPI_CTL_UMASK_EXT,
|
||||
.box_ctl = SKX_UPI_PCI_PMON_BOX_CTL,
|
||||
.ops = &skx_upi_uncore_pci_ops,
|
||||
.format_group = &skx_upi_uncore_format_group,
|
||||
|
@ -457,6 +457,8 @@ static int arch_copy_kprobe(struct kprobe *p)
|
||||
|
||||
int arch_prepare_kprobe(struct kprobe *p)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (alternatives_text_reserved(p->addr, p->addr))
|
||||
return -EINVAL;
|
||||
|
||||
@ -467,7 +469,13 @@ int arch_prepare_kprobe(struct kprobe *p)
|
||||
if (!p->ainsn.insn)
|
||||
return -ENOMEM;
|
||||
|
||||
return arch_copy_kprobe(p);
|
||||
ret = arch_copy_kprobe(p);
|
||||
if (ret) {
|
||||
free_insn_slot(p->ainsn.insn, 0);
|
||||
p->ainsn.insn = NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void arch_arm_kprobe(struct kprobe *p)
|
||||
|
Loading…
Reference in New Issue
Block a user