Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e80b1359 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'perf-fixes-for-linus' of...

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

* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  perf: x86: Add support for the ANY bit
  perf: Change the is_software_event() definition
  perf: Honour event state for aux stream data
  perf: Fix perf_event_do_pending() fallback callsite
  perf kmem: Print usage help for unknown commands
  perf kmem: Increase "Hit" column length
  hw-breakpoints, perf: Fix broken mmiotrace due to dr6 by reference change
  perf timechart: Use tid not pid for COMM change
parents 341031ca b27d515a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#define MSR_ARCH_PERFMON_EVENTSEL1			     0x187

#define ARCH_PERFMON_EVENTSEL0_ENABLE			  (1 << 22)
#define ARCH_PERFMON_EVENTSEL_ANY			  (1 << 21)
#define ARCH_PERFMON_EVENTSEL_INT			  (1 << 20)
#define ARCH_PERFMON_EVENTSEL_OS			  (1 << 17)
#define ARCH_PERFMON_EVENTSEL_USR			  (1 << 16)
+7 −0
Original line number Diff line number Diff line
@@ -1343,6 +1343,13 @@ intel_pmu_enable_fixed(struct hw_perf_event *hwc, int __idx)
		bits |= 0x2;
	if (hwc->config & ARCH_PERFMON_EVENTSEL_OS)
		bits |= 0x1;

	/*
	 * ANY bit is supported in v3 and up
	 */
	if (x86_pmu.version > 2 && hwc->config & ARCH_PERFMON_EVENTSEL_ANY)
		bits |= 0x4;

	bits <<= (idx * 4);
	mask = 0xfULL << (idx * 4);

+4 −3
Original line number Diff line number Diff line
@@ -538,14 +538,15 @@ static int
kmmio_die_notifier(struct notifier_block *nb, unsigned long val, void *args)
{
	struct die_args *arg = args;
	unsigned long* dr6_p = (unsigned long *)ERR_PTR(arg->err);

	if (val == DIE_DEBUG && (arg->err & DR_STEP))
		if (post_kmmio_handler(arg->err, arg->regs) == 1) {
	if (val == DIE_DEBUG && (*dr6_p & DR_STEP))
		if (post_kmmio_handler(*dr6_p, arg->regs) == 1) {
			/*
			 * Reset the BS bit in dr6 (pointed by args->err) to
			 * denote completion of processing
			 */
			(*(unsigned long *)ERR_PTR(arg->err)) &= ~DR_STEP;
			*dr6_p &= ~DR_STEP;
			return NOTIFY_STOP;
		}

+8 −3
Original line number Diff line number Diff line
@@ -814,9 +814,14 @@ extern int perf_event_overflow(struct perf_event *event, int nmi,
 */
static inline int is_software_event(struct perf_event *event)
{
	return (event->attr.type != PERF_TYPE_RAW) &&
		(event->attr.type != PERF_TYPE_HARDWARE) &&
		(event->attr.type != PERF_TYPE_HW_CACHE);
	switch (event->attr.type) {
	case PERF_TYPE_SOFTWARE:
	case PERF_TYPE_TRACEPOINT:
	/* for now the breakpoint stuff also works as software event */
	case PERF_TYPE_BREAKPOINT:
		return 1;
	}
	return 0;
}

extern atomic_t perf_swevent_enabled[PERF_COUNT_SW_MAX];
+9 −0
Original line number Diff line number Diff line
@@ -3268,6 +3268,9 @@ static void perf_event_task_output(struct perf_event *event,

static int perf_event_task_match(struct perf_event *event)
{
	if (event->state != PERF_EVENT_STATE_ACTIVE)
		return 0;

	if (event->cpu != -1 && event->cpu != smp_processor_id())
		return 0;

@@ -3377,6 +3380,9 @@ static void perf_event_comm_output(struct perf_event *event,

static int perf_event_comm_match(struct perf_event *event)
{
	if (event->state != PERF_EVENT_STATE_ACTIVE)
		return 0;

	if (event->cpu != -1 && event->cpu != smp_processor_id())
		return 0;

@@ -3494,6 +3500,9 @@ static void perf_event_mmap_output(struct perf_event *event,
static int perf_event_mmap_match(struct perf_event *event,
				   struct perf_mmap_event *mmap_event)
{
	if (event->state != PERF_EVENT_STATE_ACTIVE)
		return 0;

	if (event->cpu != -1 && event->cpu != smp_processor_id())
		return 0;

Loading