Commit 4980c176 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull x86 resctrl update from Dave Hansen:
 "Reduce redundant counter reads with resctrl refactoring"

* tag 'x86_cache_for_6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/resctrl: Avoid redundant counter read in __mon_event_count()
parents 682f7bba 322b72e0
Loading
Loading
Loading
Loading
+19 −24
Original line number Diff line number Diff line
@@ -383,41 +383,36 @@ void free_rmid(u32 rmid)
		list_add_tail(&entry->list, &rmid_free_lru);
}

static int __mon_event_count(u32 rmid, struct rmid_read *rr)
static struct mbm_state *get_mbm_state(struct rdt_domain *d, u32 rmid,
				       enum resctrl_event_id evtid)
{
	struct mbm_state *m;
	u64 tval = 0;

	if (rr->first)
		resctrl_arch_reset_rmid(rr->r, rr->d, rmid, rr->evtid);

	rr->err = resctrl_arch_rmid_read(rr->r, rr->d, rmid, rr->evtid, &tval);
	if (rr->err)
		return rr->err;

	switch (rr->evtid) {
	case QOS_L3_OCCUP_EVENT_ID:
		rr->val += tval;
		return 0;
	switch (evtid) {
	case QOS_L3_MBM_TOTAL_EVENT_ID:
		m = &rr->d->mbm_total[rmid];
		break;
		return &d->mbm_total[rmid];
	case QOS_L3_MBM_LOCAL_EVENT_ID:
		m = &rr->d->mbm_local[rmid];
		break;
		return &d->mbm_local[rmid];
	default:
		/*
		 * Code would never reach here because an invalid
		 * event id would fail in resctrl_arch_rmid_read().
		 */
		return -EINVAL;
		return NULL;
	}
}

static int __mon_event_count(u32 rmid, struct rmid_read *rr)
{
	struct mbm_state *m;
	u64 tval = 0;

	if (rr->first) {
		resctrl_arch_reset_rmid(rr->r, rr->d, rmid, rr->evtid);
		m = get_mbm_state(rr->d, rmid, rr->evtid);
		if (m)
			memset(m, 0, sizeof(struct mbm_state));
		return 0;
	}

	rr->err = resctrl_arch_rmid_read(rr->r, rr->d, rmid, rr->evtid, &tval);
	if (rr->err)
		return rr->err;

	rr->val += tval;

	return 0;