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

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

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

Pull perf fixes from Ingo Molnar:
 "Mostly tooling fixes, but also a lockdep annotation fix, a PMU event
  list fix and a new model addition"

* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  tools/liblockdep: Fix compilation error
  tools/liblockdep: Fix linker error in case of cross compile
  perf tools: Use getconf to determine number of online CPUs
  tools: Fix tools/vm build
  perf/x86/rapl: Enable Broadwell-U RAPL support
  perf/x86/intel: Fix SLM cache event list
  perf: Annotate inherited event ctx->mutex recursion
parents 214e9f72 60d5ddea
Loading
Loading
Loading
Loading
+3 −4
Original line number Original line Diff line number Diff line
@@ -1134,7 +1134,7 @@ static __initconst const u64 slm_hw_cache_extra_regs
 [ C(LL  ) ] = {
 [ C(LL  ) ] = {
	[ C(OP_READ) ] = {
	[ C(OP_READ) ] = {
		[ C(RESULT_ACCESS) ] = SLM_DMND_READ|SLM_LLC_ACCESS,
		[ C(RESULT_ACCESS) ] = SLM_DMND_READ|SLM_LLC_ACCESS,
		[ C(RESULT_MISS)   ] = SLM_DMND_READ|SLM_LLC_MISS,
		[ C(RESULT_MISS)   ] = 0,
	},
	},
	[ C(OP_WRITE) ] = {
	[ C(OP_WRITE) ] = {
		[ C(RESULT_ACCESS) ] = SLM_DMND_WRITE|SLM_LLC_ACCESS,
		[ C(RESULT_ACCESS) ] = SLM_DMND_WRITE|SLM_LLC_ACCESS,
@@ -1184,8 +1184,7 @@ static __initconst const u64 slm_hw_cache_event_ids
	[ C(OP_READ) ] = {
	[ C(OP_READ) ] = {
		/* OFFCORE_RESPONSE.ANY_DATA.LOCAL_CACHE */
		/* OFFCORE_RESPONSE.ANY_DATA.LOCAL_CACHE */
		[ C(RESULT_ACCESS) ] = 0x01b7,
		[ C(RESULT_ACCESS) ] = 0x01b7,
		/* OFFCORE_RESPONSE.ANY_DATA.ANY_LLC_MISS */
		[ C(RESULT_MISS)   ] = 0,
		[ C(RESULT_MISS)   ] = 0x01b7,
	},
	},
	[ C(OP_WRITE) ] = {
	[ C(OP_WRITE) ] = {
		/* OFFCORE_RESPONSE.ANY_RFO.LOCAL_CACHE */
		/* OFFCORE_RESPONSE.ANY_RFO.LOCAL_CACHE */
@@ -1217,7 +1216,7 @@ static __initconst const u64 slm_hw_cache_event_ids
 [ C(ITLB) ] = {
 [ C(ITLB) ] = {
	[ C(OP_READ) ] = {
	[ C(OP_READ) ] = {
		[ C(RESULT_ACCESS) ] = 0x00c0, /* INST_RETIRED.ANY_P */
		[ C(RESULT_ACCESS) ] = 0x00c0, /* INST_RETIRED.ANY_P */
		[ C(RESULT_MISS)   ] = 0x0282, /* ITLB.MISSES */
		[ C(RESULT_MISS)   ] = 0x40205, /* PAGE_WALKS.I_SIDE_WALKS */
	},
	},
	[ C(OP_WRITE) ] = {
	[ C(OP_WRITE) ] = {
		[ C(RESULT_ACCESS) ] = -1,
		[ C(RESULT_ACCESS) ] = -1,
+1 −0
Original line number Original line Diff line number Diff line
@@ -722,6 +722,7 @@ static int __init rapl_pmu_init(void)
		break;
		break;
	case 60: /* Haswell */
	case 60: /* Haswell */
	case 69: /* Haswell-Celeron */
	case 69: /* Haswell-Celeron */
	case 61: /* Broadwell */
		rapl_cntr_mask = RAPL_IDX_HSW;
		rapl_cntr_mask = RAPL_IDX_HSW;
		rapl_pmu_events_group.attrs = rapl_events_hsw_attr;
		rapl_pmu_events_group.attrs = rapl_events_hsw_attr;
		break;
		break;
+33 −8
Original line number Original line Diff line number Diff line
@@ -913,10 +913,30 @@ static void put_ctx(struct perf_event_context *ctx)
 * Those places that change perf_event::ctx will hold both
 * Those places that change perf_event::ctx will hold both
 * perf_event_ctx::mutex of the 'old' and 'new' ctx value.
 * perf_event_ctx::mutex of the 'old' and 'new' ctx value.
 *
 *
 * Lock ordering is by mutex address. There is one other site where
 * Lock ordering is by mutex address. There are two other sites where
 * perf_event_context::mutex nests and that is put_event(). But remember that
 * perf_event_context::mutex nests and those are:
 * that is a parent<->child context relation, and migration does not affect
 *
 * children, therefore these two orderings should not interact.
 *  - perf_event_exit_task_context()	[ child , 0 ]
 *      __perf_event_exit_task()
 *        sync_child_event()
 *          put_event()			[ parent, 1 ]
 *
 *  - perf_event_init_context()		[ parent, 0 ]
 *      inherit_task_group()
 *        inherit_group()
 *          inherit_event()
 *            perf_event_alloc()
 *              perf_init_event()
 *                perf_try_init_event()	[ child , 1 ]
 *
 * While it appears there is an obvious deadlock here -- the parent and child
 * nesting levels are inverted between the two. This is in fact safe because
 * life-time rules separate them. That is an exiting task cannot fork, and a
 * spawning task cannot (yet) exit.
 *
 * But remember that that these are parent<->child context relations, and
 * migration does not affect children, therefore these two orderings should not
 * interact.
 *
 *
 * The change in perf_event::ctx does not affect children (as claimed above)
 * The change in perf_event::ctx does not affect children (as claimed above)
 * because the sys_perf_event_open() case will install a new event and break
 * because the sys_perf_event_open() case will install a new event and break
@@ -3657,9 +3677,6 @@ static void perf_remove_from_owner(struct perf_event *event)
	}
	}
}
}


/*
 * Called when the last reference to the file is gone.
 */
static void put_event(struct perf_event *event)
static void put_event(struct perf_event *event)
{
{
	struct perf_event_context *ctx;
	struct perf_event_context *ctx;
@@ -3697,6 +3714,9 @@ int perf_event_release_kernel(struct perf_event *event)
}
}
EXPORT_SYMBOL_GPL(perf_event_release_kernel);
EXPORT_SYMBOL_GPL(perf_event_release_kernel);


/*
 * Called when the last reference to the file is gone.
 */
static int perf_release(struct inode *inode, struct file *file)
static int perf_release(struct inode *inode, struct file *file)
{
{
	put_event(file->private_data);
	put_event(file->private_data);
@@ -7364,7 +7384,12 @@ static int perf_try_init_event(struct pmu *pmu, struct perf_event *event)
		return -ENODEV;
		return -ENODEV;


	if (event->group_leader != event) {
	if (event->group_leader != event) {
		ctx = perf_event_ctx_lock(event->group_leader);
		/*
		 * This ctx->mutex can nest when we're called through
		 * inheritance. See the perf_event_ctx_lock_nested() comment.
		 */
		ctx = perf_event_ctx_lock_nested(event->group_leader,
						 SINGLE_DEPTH_NESTING);
		BUG_ON(!ctx);
		BUG_ON(!ctx);
	}
	}


+2 −1
Original line number Original line Diff line number Diff line
@@ -14,9 +14,10 @@ define allow-override
    $(eval $(1) = $(2)))
    $(eval $(1) = $(2)))
endef
endef


# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
# Allow setting CC and AR and LD, or setting CROSS_COMPILE as a prefix.
$(call allow-override,CC,$(CROSS_COMPILE)gcc)
$(call allow-override,CC,$(CROSS_COMPILE)gcc)
$(call allow-override,AR,$(CROSS_COMPILE)ar)
$(call allow-override,AR,$(CROSS_COMPILE)ar)
$(call allow-override,LD,$(CROSS_COMPILE)ld)


INSTALL = install
INSTALL = install


+3 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,9 @@
#define __init
#define __init
#define noinline
#define noinline
#define list_add_tail_rcu list_add_tail
#define list_add_tail_rcu list_add_tail
#define list_for_each_entry_rcu list_for_each_entry
#define barrier() 
#define synchronize_sched()


#ifndef CALLER_ADDR0
#ifndef CALLER_ADDR0
#define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
#define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
Loading