Hi, Xiaochen,

On 12/5/25 01:25, Xiaochen Shen wrote:
The resctrl selftest currently fails on Hygon CPUs that support Platform
QoS features, printing the error:

   "# Can not get vendor info..."

This occurs because vendor detection is missing for Hygon CPUs.

Fix this by extending the CPU vendor detection logic to include
Hygon's vendor ID.

Signed-off-by: Xiaochen Shen <[email protected]>
---
  tools/testing/selftests/resctrl/resctrl.h       | 6 ++++--
  tools/testing/selftests/resctrl/resctrl_tests.c | 2 ++
  2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/resctrl/resctrl.h 
b/tools/testing/selftests/resctrl/resctrl.h
index cd3adfc14969..411ee10380a5 100644
--- a/tools/testing/selftests/resctrl/resctrl.h
+++ b/tools/testing/selftests/resctrl/resctrl.h
@@ -23,6 +23,7 @@
  #include <asm/unistd.h>
  #include <linux/perf_event.h>
  #include <linux/compiler.h>
+#include <linux/bits.h>
  #include "../kselftest.h"
#define MB (1024 * 1024)
@@ -36,8 +37,9 @@
   * Define as bits because they're used for vendor_specific bitmask in
   * the struct resctrl_test.
   */
-#define ARCH_INTEL     1
-#define ARCH_AMD       2
+#define ARCH_INTEL     BIT(0)
+#define ARCH_AMD       BIT(1)
+#define ARCH_HYGON     BIT(2)
#define END_OF_TESTS 1 diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
index 5154ffd821c4..9bf35f3beb6b 100644
--- a/tools/testing/selftests/resctrl/resctrl_tests.c
+++ b/tools/testing/selftests/resctrl/resctrl_tests.c
@@ -42,6 +42,8 @@ static int detect_vendor(void)
                vendor_id = ARCH_INTEL;
        else if (s && !strcmp(s, ": AuthenticAMD\n"))
                vendor_id = ARCH_AMD;
+       else if (s && !strcmp(s, ": HygonGenuine\n"))
+               vendor_id = ARCH_HYGON;
Since vendor_id is bitmask now and BIT() is a UL value, it's better to define it as "unsigned int" (unsigned long is a bit overkill). Otherwise, type conversion may be risky.

Is it better to change vendor_id as "unsigned int", static unsigned int detect_vendor(), and a couple of other places?


        fclose(inf);
        free(res);
Thanks.
-Fenghua

Reply via email to