Commit b2ea0f54 authored by Ravi Bangoria's avatar Ravi Bangoria Committed by Peter Zijlstra
Browse files

perf/amd/ibs: Advertise remote socket capability



IBS OP on future hardware can indicate data source from remote socket
as well. Advertise this capability to userspace so that userspace tools
can decode IBS data accordingly.

Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@amd.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260216042530.1546-8-ravi.bangoria@amd.com
parent 8ae68bfe
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -730,6 +730,7 @@ PMU_EVENT_ATTR_STRING(fetchlat, ibs_fetch_lat_format, "config1:0-10");
PMU_EVENT_ATTR_STRING(fetchlat, ibs_fetch_lat_cap, "1");
PMU_EVENT_ATTR_STRING(strmst, ibs_op_strmst_format, "config1:12");
PMU_EVENT_ATTR_STRING(strmst, ibs_op_strmst_cap, "1");
PMU_EVENT_ATTR_STRING(rmtsocket, ibs_op_rmtsocket_cap, "1");

static umode_t
zen4_ibs_extensions_is_visible(struct kobject *kobj, struct attribute *attr, int i)
@@ -749,6 +750,12 @@ ibs_op_strmst_is_visible(struct kobject *kobj, struct attribute *attr, int i)
	return ibs_caps & IBS_CAPS_STRMST_RMTSOCKET ? attr->mode : 0;
}

static umode_t
ibs_op_rmtsocket_is_visible(struct kobject *kobj, struct attribute *attr, int i)
{
	return ibs_caps & IBS_CAPS_STRMST_RMTSOCKET ? attr->mode : 0;
}

static umode_t
ibs_op_ldlat_is_visible(struct kobject *kobj, struct attribute *attr, int i)
{
@@ -802,6 +809,11 @@ static struct attribute *ibs_op_strmst_cap_attrs[] = {
	NULL,
};

static struct attribute *ibs_op_rmtsocket_cap_attrs[] = {
	&ibs_op_rmtsocket_cap.attr.attr,
	NULL,
};

static struct attribute_group group_fetch_formats = {
	.name = "format",
	.attrs = fetch_attrs,
@@ -849,6 +861,12 @@ static struct attribute_group group_ibs_op_strmst_cap = {
	.is_visible = ibs_op_strmst_is_visible,
};

static struct attribute_group group_ibs_op_rmtsocket_cap = {
	.name = "caps",
	.attrs = ibs_op_rmtsocket_cap_attrs,
	.is_visible = ibs_op_rmtsocket_is_visible,
};

static const struct attribute_group *fetch_attr_groups[] = {
	&group_fetch_formats,
	&empty_caps_group,
@@ -938,6 +956,7 @@ static const struct attribute_group *op_attr_update[] = {
	&group_ibs_op_dtlb_pgsize_cap,
	&group_ibs_op_strmst_cap,
	&group_ibs_op_strmst_format,
	&group_ibs_op_rmtsocket_cap,
	NULL,
};

+2 −1
Original line number Diff line number Diff line
@@ -100,7 +100,8 @@ union ibs_op_data2 {
			cache_hit_st:1,	/* 5: cache hit state */
			data_src_hi:2,	/* 6-7: data source high */
			strm_st:1,	/* 8: streaming store */
			reserved1:55;	/* 9-63: reserved */
			rmt_socket:1,   /* 9: remote socket */
			reserved1:54;   /* 10-63: reserved */
	};
};