]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf/amd/ibs: Advertise remote socket capability
authorRavi Bangoria <ravi.bangoria@amd.com>
Mon, 16 Feb 2026 04:25:30 +0000 (04:25 +0000)
committerPeter Zijlstra <peterz@infradead.org>
Sat, 28 Feb 2026 11:03:29 +0000 (12:03 +0100)
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: Ravi Bangoria <ravi.bangoria@amd.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260216042530.1546-8-ravi.bangoria@amd.com
arch/x86/events/amd/ibs.c
arch/x86/include/asm/amd/ibs.h

index 0a8313ea6331ac2c9bae9a93e8117d07e3de541b..eeb607b84ddaec3502bc3b738dadefbbbd979a61 100644 (file)
@@ -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,
 };
 
index 020916eb7b4e9204f28df07964637a7cdc87bc19..4eac36c42db6647612781f9c33f3b4724cdcd30f 100644 (file)
@@ -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 */
        };
 };