From b2ea0f541d354c10186a894e8bf5bf83abf8a517 Mon Sep 17 00:00:00 2001 From: Ravi Bangoria Date: Mon, 16 Feb 2026 04:25:30 +0000 Subject: [PATCH] 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: Ravi Bangoria Signed-off-by: Peter Zijlstra (Intel) Link: https://patch.msgid.link/20260216042530.1546-8-ravi.bangoria@amd.com --- arch/x86/events/amd/ibs.c | 19 +++++++++++++++++++ arch/x86/include/asm/amd/ibs.h | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c index 0a8313ea6331a..eeb607b84ddae 100644 --- a/arch/x86/events/amd/ibs.c +++ b/arch/x86/events/amd/ibs.c @@ -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, }; diff --git a/arch/x86/include/asm/amd/ibs.h b/arch/x86/include/asm/amd/ibs.h index 020916eb7b4e9..4eac36c42db66 100644 --- a/arch/x86/include/asm/amd/ibs.h +++ b/arch/x86/include/asm/amd/ibs.h @@ -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 */ }; }; -- 2.47.3