Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf fixes from Ingo Molnar:
"Small perf fixlets"

* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
tracing: Don't call page_to_pfn() if page is NULL
perf/x86: Fix Intel Ivy Bridge support
perf/x86/ibs: Check syscall attribute flags
perf/x86: Export Sandy Bridge uncore clockticks event in sysfs

+61 -3
+2
arch/x86/kernel/cpu/perf_event.h
··· 586 586 587 587 extern struct event_constraint intel_snb_pebs_event_constraints[]; 588 588 589 + extern struct event_constraint intel_ivb_pebs_event_constraints[]; 590 + 589 591 struct event_constraint *intel_pebs_constraints(struct perf_event *event); 590 592 591 593 void intel_pmu_pebs_enable(struct perf_event *event);
+12
arch/x86/kernel/cpu/perf_event_amd_ibs.c
··· 209 209 return -EOPNOTSUPP; 210 210 } 211 211 212 + static const struct perf_event_attr ibs_notsupp = { 213 + .exclude_user = 1, 214 + .exclude_kernel = 1, 215 + .exclude_hv = 1, 216 + .exclude_idle = 1, 217 + .exclude_host = 1, 218 + .exclude_guest = 1, 219 + }; 220 + 212 221 static int perf_ibs_init(struct perf_event *event) 213 222 { 214 223 struct hw_perf_event *hwc = &event->hw; ··· 237 228 238 229 if (event->pmu != &perf_ibs->pmu) 239 230 return -ENOENT; 231 + 232 + if (perf_flags(&event->attr) & perf_flags(&ibs_notsupp)) 233 + return -EINVAL; 240 234 241 235 if (config & ~perf_ibs->config_mask) 242 236 return -EINVAL;
+23 -1
arch/x86/kernel/cpu/perf_event_intel.c
··· 2048 2048 case 42: /* SandyBridge */ 2049 2049 case 45: /* SandyBridge, "Romely-EP" */ 2050 2050 x86_add_quirk(intel_sandybridge_quirk); 2051 - case 58: /* IvyBridge */ 2052 2051 memcpy(hw_cache_event_ids, snb_hw_cache_event_ids, 2053 2052 sizeof(hw_cache_event_ids)); 2054 2053 memcpy(hw_cache_extra_regs, snb_hw_cache_extra_regs, ··· 2072 2073 2073 2074 pr_cont("SandyBridge events, "); 2074 2075 break; 2076 + case 58: /* IvyBridge */ 2077 + memcpy(hw_cache_event_ids, snb_hw_cache_event_ids, 2078 + sizeof(hw_cache_event_ids)); 2079 + memcpy(hw_cache_extra_regs, snb_hw_cache_extra_regs, 2080 + sizeof(hw_cache_extra_regs)); 2081 + 2082 + intel_pmu_lbr_init_snb(); 2083 + 2084 + x86_pmu.event_constraints = intel_snb_event_constraints; 2085 + x86_pmu.pebs_constraints = intel_ivb_pebs_event_constraints; 2086 + x86_pmu.pebs_aliases = intel_pebs_aliases_snb; 2087 + x86_pmu.extra_regs = intel_snb_extra_regs; 2088 + /* all extra regs are per-cpu when HT is on */ 2089 + x86_pmu.er_flags |= ERF_HAS_RSP_1; 2090 + x86_pmu.er_flags |= ERF_NO_HT_SHARING; 2091 + 2092 + /* UOPS_ISSUED.ANY,c=1,i=1 to count stall cycles */ 2093 + intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 2094 + X86_CONFIG(.event=0x0e, .umask=0x01, .inv=1, .cmask=1); 2095 + 2096 + pr_cont("IvyBridge events, "); 2097 + break; 2098 + 2075 2099 2076 2100 default: 2077 2101 switch (x86_pmu.version) {
+14
arch/x86/kernel/cpu/perf_event_intel_ds.c
··· 407 407 EVENT_CONSTRAINT_END 408 408 }; 409 409 410 + struct event_constraint intel_ivb_pebs_event_constraints[] = { 411 + INTEL_UEVENT_CONSTRAINT(0x01c0, 0x2), /* INST_RETIRED.PRECDIST */ 412 + INTEL_UEVENT_CONSTRAINT(0x01c2, 0xf), /* UOPS_RETIRED.ALL */ 413 + INTEL_UEVENT_CONSTRAINT(0x02c2, 0xf), /* UOPS_RETIRED.RETIRE_SLOTS */ 414 + INTEL_EVENT_CONSTRAINT(0xc4, 0xf), /* BR_INST_RETIRED.* */ 415 + INTEL_EVENT_CONSTRAINT(0xc5, 0xf), /* BR_MISP_RETIRED.* */ 416 + INTEL_EVENT_CONSTRAINT(0xcd, 0x8), /* MEM_TRANS_RETIRED.* */ 417 + INTEL_EVENT_CONSTRAINT(0xd0, 0xf), /* MEM_UOP_RETIRED.* */ 418 + INTEL_EVENT_CONSTRAINT(0xd1, 0xf), /* MEM_LOAD_UOPS_RETIRED.* */ 419 + INTEL_EVENT_CONSTRAINT(0xd2, 0xf), /* MEM_LOAD_UOPS_LLC_HIT_RETIRED.* */ 420 + INTEL_EVENT_CONSTRAINT(0xd3, 0xf), /* MEM_LOAD_UOPS_LLC_MISS_RETIRED.* */ 421 + EVENT_CONSTRAINT_END 422 + }; 423 + 410 424 struct event_constraint *intel_pebs_constraints(struct perf_event *event) 411 425 { 412 426 struct event_constraint *c;
+6
arch/x86/kernel/cpu/perf_event_intel_uncore.c
··· 661 661 } 662 662 } 663 663 664 + static struct uncore_event_desc snb_uncore_events[] = { 665 + INTEL_UNCORE_EVENT_DESC(clockticks, "event=0xff,umask=0x00"), 666 + { /* end: all zeroes */ }, 667 + }; 668 + 664 669 static struct attribute *snb_uncore_formats_attr[] = { 665 670 &format_attr_event.attr, 666 671 &format_attr_umask.attr, ··· 709 704 .constraints = snb_uncore_cbox_constraints, 710 705 .ops = &snb_uncore_msr_ops, 711 706 .format_group = &snb_uncore_format_group, 707 + .event_descs = snb_uncore_events, 712 708 }; 713 709 714 710 static struct intel_uncore_type *snb_msr_uncores[] = {
+2
include/linux/perf_event.h
··· 274 274 __u64 branch_sample_type; /* enum branch_sample_type */ 275 275 }; 276 276 277 + #define perf_flags(attr) (*(&(attr)->read_format + 1)) 278 + 277 279 /* 278 280 * Ioctls that can be done on a perf event fd: 279 281 */
+2 -2
include/trace/events/kmem.h
··· 214 214 215 215 TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s", 216 216 __entry->page, 217 - page_to_pfn(__entry->page), 217 + __entry->page ? page_to_pfn(__entry->page) : 0, 218 218 __entry->order, 219 219 __entry->migratetype, 220 220 show_gfp_flags(__entry->gfp_flags)) ··· 240 240 241 241 TP_printk("page=%p pfn=%lu order=%u migratetype=%d percpu_refill=%d", 242 242 __entry->page, 243 - page_to_pfn(__entry->page), 243 + __entry->page ? page_to_pfn(__entry->page) : 0, 244 244 __entry->order, 245 245 __entry->migratetype, 246 246 __entry->order == 0)