Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors
@ 2025-10-27  5:57 Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 1/8] drm/xe/cri: Add new performance limit reasons bits Lucas De Marchi
                   ` (12 more replies)
  0 siblings, 13 replies; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav, Sk Anirban, Rodrigo Vivi

First patch was extracted from the rest of the CRI support series:
https://patch.msgid.link/20251021-cri-v1-0-bf11e61d9f49@intel.com

I did some minor tweaks for a v2 of that patch: something that could be
considered for merging since it follows the style of that file.

Patches on top are refactors to simplify the code and reduce its
verbosity/boilerplate.

Finally last patch tries to resolve the TOCTOU issue previously
discussed in a reasonable way.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
Changes in v2:
- Handle comments on v1, noted on individual patches
- Improve documentation, adding it to the html output
- Add patch to introduce status_reasons attribute to overcome the TOCTOU
  of the current API
- Link to v1: https://patch.msgid.link/20251023-gt-throttle-cri-v1-0-9f36f3c8861c@intel.com
---
Lucas De Marchi (7):
      drm/xe/gt_throttle: Tidy up perf reasons reading
      drm/xe/gt_throttle: Always read and mask
      drm/xe/gt_throttle: Add throttle_to_gt()
      drm/xe/gt_throttle: Tidy up attribute definition
      drm/xe: Improve freq and throttle documentation
      drm/xe/gt_throttle: Drop individual show functions
      drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons

Sk Anirban (1):
      drm/xe/cri: Add new performance limit reasons bits

 Documentation/gpu/xe/xe_gt_freq.rst  |   3 +
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |  13 ++
 drivers/gpu/drm/xe/xe_gt_freq.c      |  30 +--
 drivers/gpu/drm/xe/xe_gt_throttle.c  | 347 ++++++++++++++++++-----------------
 4 files changed, 209 insertions(+), 184 deletions(-)

base-commit: c03916cb446b6eefe91538599775bb54bf98238c
change-id: 20251023-gt-throttle-cri-06f3c9d33c44

Lucas De Marchi


^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH v2 1/8] drm/xe/cri: Add new performance limit reasons bits
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 2/8] drm/xe/gt_throttle: Tidy up perf reasons reading Lucas De Marchi
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav, Sk Anirban

From: Sk Anirban <sk.anirban@intel.com>

Crescent Island has some additional and different bits for performance
limit reasons. Add the new definitions and use them for CRI.

Signed-off-by: Sk Anirban <sk.anirban@intel.com>
Reviewed-by: Raag Jadav <raag.jadav@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
v3:
 - Reword commit message (Raag)
v2:
 - Tidy up read_status() and register definition
 - s/throttle_cri_specific_attrs/cri_throttle_attrs/
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |  13 ++
 drivers/gpu/drm/xe/xe_gt_throttle.c  | 251 ++++++++++++++++++++++++++++++++++-
 2 files changed, 261 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 3545e0be06dae..c316a4e8165b1 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -589,6 +589,7 @@
 #define GT_GFX_RC6				XE_REG(0x138108)
 
 #define GT0_PERF_LIMIT_REASONS			XE_REG(0x1381a8)
+/* Common performance limit reason bits - available on all platforms */
 #define   GT0_PERF_LIMIT_REASONS_MASK		0xde3
 #define   PROCHOT_MASK				REG_BIT(0)
 #define   THERMAL_LIMIT_MASK			REG_BIT(1)
@@ -598,6 +599,18 @@
 #define   POWER_LIMIT_4_MASK			REG_BIT(8)
 #define   POWER_LIMIT_1_MASK			REG_BIT(10)
 #define   POWER_LIMIT_2_MASK			REG_BIT(11)
+/* Platform-specific performance limit reason bits - for Crescent Island */
+#define   CRI_PERF_LIMIT_REASONS_MASK		0xfdff
+#define   SOC_THERMAL_LIMIT_MASK		REG_BIT(1)
+#define   MEM_THERMAL_MASK			REG_BIT(2)
+#define   VR_THERMAL_MASK			REG_BIT(3)
+#define   ICCMAX_MASK				REG_BIT(4)
+#define   SOC_AVG_THERMAL_MASK			REG_BIT(6)
+#define   FASTVMODE_MASK			REG_BIT(7)
+#define   PSYS_PL1_MASK				REG_BIT(12)
+#define   PSYS_PL2_MASK				REG_BIT(13)
+#define   P0_FREQ_MASK				REG_BIT(14)
+#define   PSYS_CRIT_MASK			REG_BIT(15)
 
 #define GT_PERF_STATUS				XE_REG(0x1381b4)
 #define   VOLTAGE_MASK				REG_GENMASK(10, 0)
diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index aa962c783cdf7..a4fe43f4663dd 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -12,6 +12,7 @@
 #include "xe_gt_sysfs.h"
 #include "xe_gt_throttle.h"
 #include "xe_mmio.h"
+#include "xe_platform_types.h"
 #include "xe_pm.h"
 
 /**
@@ -28,6 +29,24 @@
  * device/gt#/freq0/throttle/reason_ratl - Frequency throttle due to RATL
  * device/gt#/freq0/throttle/reason_vr_thermalert - Frequency throttle due to VR THERMALERT
  * device/gt#/freq0/throttle/reason_vr_tdc -  Frequency throttle due to VR TDC
+ *
+ * The following attributes are available on Crescent Island platform:
+ * device/gt#/freq0/throttle/status - Overall throttle status
+ * device/gt#/freq0/throttle/reason_pl1 - Frequency throttle due to package PL1
+ * device/gt#/freq0/throttle/reason_pl2 - Frequency throttle due to package PL2
+ * device/gt#/freq0/throttle/reason_pl4 - Frequency throttle due to PL4
+ * device/gt#/freq0/throttle/reason_prochot - Frequency throttle due to prochot
+ * device/gt#/freq0/throttle/reason_soc_thermal - Frequency throttle due to SoC thermal
+ * device/gt#/freq0/throttle/reason_mem_thermal - Frequency throttle due to memory thermal
+ * device/gt#/freq0/throttle/reason_vr_thermal - Frequency throttle due to VR thermal
+ * device/gt#/freq0/throttle/reason_iccmax - Frequency throttle due to ICCMAX
+ * device/gt#/freq0/throttle/reason_ratl - Frequency throttle due to RATL thermal algorithm
+ * device/gt#/freq0/throttle/reason_soc_avg_thermal - Frequency throttle due to SoC average temp
+ * device/gt#/freq0/throttle/reason_fastvmode - Frequency throttle due to VR is hitting FastVMode
+ * device/gt#/freq0/throttle/reason_psys_pl1 - Frequency throttle due to PSYS PL1
+ * device/gt#/freq0/throttle/reason_psys_pl2 - Frequency throttle due to PSYS PL2
+ * device/gt#/freq0/throttle/reason_p0_freq - Frequency throttle due to P0 frequency
+ * device/gt#/freq0/throttle/reason_psys_crit - Frequency throttle due to PSYS critical
  */
 
 static struct xe_gt *
@@ -52,9 +71,17 @@ u32 xe_gt_throttle_get_limit_reasons(struct xe_gt *gt)
 
 static u32 read_status(struct xe_gt *gt)
 {
-	u32 status = xe_gt_throttle_get_limit_reasons(gt) & GT0_PERF_LIMIT_REASONS_MASK;
+	struct xe_device *xe = gt_to_xe(gt);
+	u32 status, mask;
+
+	if (xe->info.platform == XE_CRESCENTISLAND)
+		mask = CRI_PERF_LIMIT_REASONS_MASK;
+	else
+		mask = GT0_PERF_LIMIT_REASONS_MASK;
 
+	status = xe_gt_throttle_get_limit_reasons(gt) & mask;
 	xe_gt_dbg(gt, "throttle reasons: 0x%08x\n", status);
+
 	return status;
 }
 
@@ -86,6 +113,13 @@ static u32 read_reason_thermal(struct xe_gt *gt)
 	return thermal;
 }
 
+static u32 read_reason_soc_thermal(struct xe_gt *gt)
+{
+	u32 thermal = xe_gt_throttle_get_limit_reasons(gt) & SOC_THERMAL_LIMIT_MASK;
+
+	return thermal;
+}
+
 static u32 read_reason_prochot(struct xe_gt *gt)
 {
 	u32 prochot = xe_gt_throttle_get_limit_reasons(gt) & PROCHOT_MASK;
@@ -107,6 +141,13 @@ static u32 read_reason_vr_thermalert(struct xe_gt *gt)
 	return thermalert;
 }
 
+static u32 read_reason_soc_avg_thermal(struct xe_gt *gt)
+{
+	u32 soc_avg_thermal = xe_gt_throttle_get_limit_reasons(gt) & SOC_AVG_THERMAL_MASK;
+
+	return soc_avg_thermal;
+}
+
 static u32 read_reason_vr_tdc(struct xe_gt *gt)
 {
 	u32 tdc = xe_gt_throttle_get_limit_reasons(gt) & VR_TDC_MASK;
@@ -114,6 +155,62 @@ static u32 read_reason_vr_tdc(struct xe_gt *gt)
 	return tdc;
 }
 
+static u32 read_reason_fastvmode(struct xe_gt *gt)
+{
+	u32 fastvmode = xe_gt_throttle_get_limit_reasons(gt) & FASTVMODE_MASK;
+
+	return fastvmode;
+}
+
+static u32 read_reason_mem_thermal(struct xe_gt *gt)
+{
+	u32 mem_thermal = xe_gt_throttle_get_limit_reasons(gt) & MEM_THERMAL_MASK;
+
+	return mem_thermal;
+}
+
+static u32 read_reason_vr_thermal(struct xe_gt *gt)
+{
+	u32 vr_thermal = xe_gt_throttle_get_limit_reasons(gt) & VR_THERMAL_MASK;
+
+	return vr_thermal;
+}
+
+static u32 read_reason_iccmax(struct xe_gt *gt)
+{
+	u32 iccmax = xe_gt_throttle_get_limit_reasons(gt) & ICCMAX_MASK;
+
+	return iccmax;
+}
+
+static u32 read_reason_psys_pl1(struct xe_gt *gt)
+{
+	u32 psys_pl1 = xe_gt_throttle_get_limit_reasons(gt) & PSYS_PL1_MASK;
+
+	return psys_pl1;
+}
+
+static u32 read_reason_psys_pl2(struct xe_gt *gt)
+{
+	u32 psys_pl2 = xe_gt_throttle_get_limit_reasons(gt) & PSYS_PL2_MASK;
+
+	return psys_pl2;
+}
+
+static u32 read_reason_p0_freq(struct xe_gt *gt)
+{
+	u32 p0_freq = xe_gt_throttle_get_limit_reasons(gt) & P0_FREQ_MASK;
+
+	return p0_freq;
+}
+
+static u32 read_reason_psys_crit(struct xe_gt *gt)
+{
+	u32 psys_crit = xe_gt_throttle_get_limit_reasons(gt) & PSYS_CRIT_MASK;
+
+	return psys_crit;
+}
+
 static ssize_t status_show(struct kobject *kobj,
 			   struct kobj_attribute *attr, char *buff)
 {
@@ -169,6 +266,17 @@ static ssize_t reason_thermal_show(struct kobject *kobj,
 }
 static struct kobj_attribute attr_reason_thermal = __ATTR_RO(reason_thermal);
 
+static ssize_t reason_soc_thermal_show(struct kobject *kobj,
+				       struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool thermal = !!read_reason_soc_thermal(gt);
+
+	return sysfs_emit(buff, "%u\n", thermal);
+}
+static struct kobj_attribute attr_reason_soc_thermal = __ATTR_RO(reason_soc_thermal);
+
 static ssize_t reason_prochot_show(struct kobject *kobj,
 				   struct kobj_attribute *attr, char *buff)
 {
@@ -202,6 +310,17 @@ static ssize_t reason_vr_thermalert_show(struct kobject *kobj,
 }
 static struct kobj_attribute attr_reason_vr_thermalert = __ATTR_RO(reason_vr_thermalert);
 
+static ssize_t reason_soc_avg_thermal_show(struct kobject *kobj,
+					   struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool avg_thermalert = !!read_reason_soc_avg_thermal(gt);
+
+	return sysfs_emit(buff, "%u\n", avg_thermalert);
+}
+static struct kobj_attribute attr_reason_soc_avg_thermal = __ATTR_RO(reason_soc_avg_thermal);
+
 static ssize_t reason_vr_tdc_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buff)
 {
@@ -213,6 +332,94 @@ static ssize_t reason_vr_tdc_show(struct kobject *kobj,
 }
 static struct kobj_attribute attr_reason_vr_tdc = __ATTR_RO(reason_vr_tdc);
 
+static ssize_t reason_fastvmode_show(struct kobject *kobj,
+				     struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool fastvmode = !!read_reason_fastvmode(gt);
+
+	return sysfs_emit(buff, "%u\n", fastvmode);
+}
+static struct kobj_attribute attr_reason_fastvmode = __ATTR_RO(reason_fastvmode);
+
+static ssize_t reason_mem_thermal_show(struct kobject *kobj,
+				       struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool mem_thermal = !!read_reason_mem_thermal(gt);
+
+	return sysfs_emit(buff, "%u\n", mem_thermal);
+}
+static struct kobj_attribute attr_reason_mem_thermal = __ATTR_RO(reason_mem_thermal);
+
+static ssize_t reason_vr_thermal_show(struct kobject *kobj,
+				      struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool vr_thermal = !!read_reason_vr_thermal(gt);
+
+	return sysfs_emit(buff, "%u\n", vr_thermal);
+}
+static struct kobj_attribute attr_reason_vr_thermal = __ATTR_RO(reason_vr_thermal);
+
+static ssize_t reason_iccmax_show(struct kobject *kobj,
+				  struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool iccmax = !!read_reason_iccmax(gt);
+
+	return sysfs_emit(buff, "%u\n", iccmax);
+}
+static struct kobj_attribute attr_reason_iccmax = __ATTR_RO(reason_iccmax);
+
+static ssize_t reason_psys_pl1_show(struct kobject *kobj,
+				    struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool psys_pl1 = !!read_reason_psys_pl1(gt);
+
+	return sysfs_emit(buff, "%u\n", psys_pl1);
+}
+static struct kobj_attribute attr_reason_psys_pl1 = __ATTR_RO(reason_psys_pl1);
+
+static ssize_t reason_psys_pl2_show(struct kobject *kobj,
+				    struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool psys_pl2 = !!read_reason_psys_pl2(gt);
+
+	return sysfs_emit(buff, "%u\n", psys_pl2);
+}
+static struct kobj_attribute attr_reason_psys_pl2 = __ATTR_RO(reason_psys_pl2);
+
+static ssize_t reason_p0_freq_show(struct kobject *kobj,
+				   struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool p0_freq = !!read_reason_p0_freq(gt);
+
+	return sysfs_emit(buff, "%u\n", p0_freq);
+}
+static struct kobj_attribute attr_reason_p0_freq = __ATTR_RO(reason_p0_freq);
+
+static ssize_t reason_psys_crit_show(struct kobject *kobj,
+				     struct kobj_attribute *attr, char *buff)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct xe_gt *gt = dev_to_gt(dev);
+	bool psys_crit = !!read_reason_psys_crit(gt);
+
+	return sysfs_emit(buff, "%u\n", psys_crit);
+}
+static struct kobj_attribute attr_reason_psys_crit = __ATTR_RO(reason_psys_crit);
+
 static struct attribute *throttle_attrs[] = {
 	&attr_status.attr,
 	&attr_reason_pl1.attr,
@@ -226,24 +433,62 @@ static struct attribute *throttle_attrs[] = {
 	NULL
 };
 
+static struct attribute *cri_throttle_attrs[] = {
+	&attr_status.attr,
+	&attr_reason_prochot.attr,
+	&attr_reason_soc_thermal.attr,
+	&attr_reason_mem_thermal.attr,
+	&attr_reason_vr_thermal.attr,
+	&attr_reason_iccmax.attr,
+	&attr_reason_ratl.attr,
+	&attr_reason_soc_avg_thermal.attr,
+	&attr_reason_fastvmode.attr,
+	&attr_reason_pl4.attr,
+	&attr_reason_pl1.attr,
+	&attr_reason_pl2.attr,
+	&attr_reason_psys_pl1.attr,
+	&attr_reason_psys_pl2.attr,
+	&attr_reason_p0_freq.attr,
+	&attr_reason_psys_crit.attr,
+	NULL
+};
+
 static const struct attribute_group throttle_group_attrs = {
 	.name = "throttle",
 	.attrs = throttle_attrs,
 };
 
+static const struct attribute_group cri_throttle_group_attrs = {
+	.name = "throttle",
+	.attrs = cri_throttle_attrs,
+};
+
+static const struct attribute_group *get_platform_throttle_group(struct xe_device *xe)
+{
+	switch (xe->info.platform) {
+	case XE_CRESCENTISLAND:
+		return &cri_throttle_group_attrs;
+	default:
+		return &throttle_group_attrs;
+	}
+}
+
 static void gt_throttle_sysfs_fini(void *arg)
 {
 	struct xe_gt *gt = arg;
+	struct xe_device *xe = gt_to_xe(gt);
+	const struct attribute_group *group = get_platform_throttle_group(xe);
 
-	sysfs_remove_group(gt->freq, &throttle_group_attrs);
+	sysfs_remove_group(gt->freq, group);
 }
 
 int xe_gt_throttle_init(struct xe_gt *gt)
 {
 	struct xe_device *xe = gt_to_xe(gt);
+	const struct attribute_group *group = get_platform_throttle_group(xe);
 	int err;
 
-	err = sysfs_create_group(gt->freq, &throttle_group_attrs);
+	err = sysfs_create_group(gt->freq, group);
 	if (err)
 		return err;
 

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 2/8] drm/xe/gt_throttle: Tidy up perf reasons reading
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 1/8] drm/xe/cri: Add new performance limit reasons bits Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 3/8] drm/xe/gt_throttle: Always read and mask Lucas De Marchi
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav

There's no need to be so verbose with two functions per bit:
read_reason_xxxxx() and reason_xxxxx_show(). Drop the former and just
use a new is_throttled_by() that receives the mask as parameter.

Reviewed-by: Raag Jadav <raag.jadav@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_throttle.c | 182 +++++-------------------------------
 1 file changed, 21 insertions(+), 161 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index a4fe43f4663dd..c69710f2dbeb5 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -85,130 +85,9 @@ static u32 read_status(struct xe_gt *gt)
 	return status;
 }
 
-static u32 read_reason_pl1(struct xe_gt *gt)
+static bool is_throttled_by(struct xe_gt *gt, u32 mask)
 {
-	u32 pl1 = xe_gt_throttle_get_limit_reasons(gt) & POWER_LIMIT_1_MASK;
-
-	return pl1;
-}
-
-static u32 read_reason_pl2(struct xe_gt *gt)
-{
-	u32 pl2 = xe_gt_throttle_get_limit_reasons(gt) & POWER_LIMIT_2_MASK;
-
-	return pl2;
-}
-
-static u32 read_reason_pl4(struct xe_gt *gt)
-{
-	u32 pl4 = xe_gt_throttle_get_limit_reasons(gt) & POWER_LIMIT_4_MASK;
-
-	return pl4;
-}
-
-static u32 read_reason_thermal(struct xe_gt *gt)
-{
-	u32 thermal = xe_gt_throttle_get_limit_reasons(gt) & THERMAL_LIMIT_MASK;
-
-	return thermal;
-}
-
-static u32 read_reason_soc_thermal(struct xe_gt *gt)
-{
-	u32 thermal = xe_gt_throttle_get_limit_reasons(gt) & SOC_THERMAL_LIMIT_MASK;
-
-	return thermal;
-}
-
-static u32 read_reason_prochot(struct xe_gt *gt)
-{
-	u32 prochot = xe_gt_throttle_get_limit_reasons(gt) & PROCHOT_MASK;
-
-	return prochot;
-}
-
-static u32 read_reason_ratl(struct xe_gt *gt)
-{
-	u32 ratl = xe_gt_throttle_get_limit_reasons(gt) & RATL_MASK;
-
-	return ratl;
-}
-
-static u32 read_reason_vr_thermalert(struct xe_gt *gt)
-{
-	u32 thermalert = xe_gt_throttle_get_limit_reasons(gt) & VR_THERMALERT_MASK;
-
-	return thermalert;
-}
-
-static u32 read_reason_soc_avg_thermal(struct xe_gt *gt)
-{
-	u32 soc_avg_thermal = xe_gt_throttle_get_limit_reasons(gt) & SOC_AVG_THERMAL_MASK;
-
-	return soc_avg_thermal;
-}
-
-static u32 read_reason_vr_tdc(struct xe_gt *gt)
-{
-	u32 tdc = xe_gt_throttle_get_limit_reasons(gt) & VR_TDC_MASK;
-
-	return tdc;
-}
-
-static u32 read_reason_fastvmode(struct xe_gt *gt)
-{
-	u32 fastvmode = xe_gt_throttle_get_limit_reasons(gt) & FASTVMODE_MASK;
-
-	return fastvmode;
-}
-
-static u32 read_reason_mem_thermal(struct xe_gt *gt)
-{
-	u32 mem_thermal = xe_gt_throttle_get_limit_reasons(gt) & MEM_THERMAL_MASK;
-
-	return mem_thermal;
-}
-
-static u32 read_reason_vr_thermal(struct xe_gt *gt)
-{
-	u32 vr_thermal = xe_gt_throttle_get_limit_reasons(gt) & VR_THERMAL_MASK;
-
-	return vr_thermal;
-}
-
-static u32 read_reason_iccmax(struct xe_gt *gt)
-{
-	u32 iccmax = xe_gt_throttle_get_limit_reasons(gt) & ICCMAX_MASK;
-
-	return iccmax;
-}
-
-static u32 read_reason_psys_pl1(struct xe_gt *gt)
-{
-	u32 psys_pl1 = xe_gt_throttle_get_limit_reasons(gt) & PSYS_PL1_MASK;
-
-	return psys_pl1;
-}
-
-static u32 read_reason_psys_pl2(struct xe_gt *gt)
-{
-	u32 psys_pl2 = xe_gt_throttle_get_limit_reasons(gt) & PSYS_PL2_MASK;
-
-	return psys_pl2;
-}
-
-static u32 read_reason_p0_freq(struct xe_gt *gt)
-{
-	u32 p0_freq = xe_gt_throttle_get_limit_reasons(gt) & P0_FREQ_MASK;
-
-	return p0_freq;
-}
-
-static u32 read_reason_psys_crit(struct xe_gt *gt)
-{
-	u32 psys_crit = xe_gt_throttle_get_limit_reasons(gt) & PSYS_CRIT_MASK;
-
-	return psys_crit;
+	return xe_gt_throttle_get_limit_reasons(gt) & mask;
 }
 
 static ssize_t status_show(struct kobject *kobj,
@@ -216,9 +95,8 @@ static ssize_t status_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool status = !!read_status(gt);
 
-	return sysfs_emit(buff, "%u\n", status);
+	return sysfs_emit(buff, "%u\n", !!read_status(gt));
 }
 static struct kobj_attribute attr_status = __ATTR_RO(status);
 
@@ -227,9 +105,8 @@ static ssize_t reason_pl1_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool pl1 = !!read_reason_pl1(gt);
 
-	return sysfs_emit(buff, "%u\n", pl1);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_1_MASK));
 }
 static struct kobj_attribute attr_reason_pl1 = __ATTR_RO(reason_pl1);
 
@@ -238,9 +115,8 @@ static ssize_t reason_pl2_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool pl2 = !!read_reason_pl2(gt);
 
-	return sysfs_emit(buff, "%u\n", pl2);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_2_MASK));
 }
 static struct kobj_attribute attr_reason_pl2 = __ATTR_RO(reason_pl2);
 
@@ -249,9 +125,8 @@ static ssize_t reason_pl4_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool pl4 = !!read_reason_pl4(gt);
 
-	return sysfs_emit(buff, "%u\n", pl4);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_4_MASK));
 }
 static struct kobj_attribute attr_reason_pl4 = __ATTR_RO(reason_pl4);
 
@@ -260,9 +135,8 @@ static ssize_t reason_thermal_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool thermal = !!read_reason_thermal(gt);
 
-	return sysfs_emit(buff, "%u\n", thermal);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, THERMAL_LIMIT_MASK));
 }
 static struct kobj_attribute attr_reason_thermal = __ATTR_RO(reason_thermal);
 
@@ -271,9 +145,8 @@ static ssize_t reason_soc_thermal_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool thermal = !!read_reason_soc_thermal(gt);
 
-	return sysfs_emit(buff, "%u\n", thermal);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_THERMAL_LIMIT_MASK));
 }
 static struct kobj_attribute attr_reason_soc_thermal = __ATTR_RO(reason_soc_thermal);
 
@@ -282,9 +155,8 @@ static ssize_t reason_prochot_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool prochot = !!read_reason_prochot(gt);
 
-	return sysfs_emit(buff, "%u\n", prochot);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PROCHOT_MASK));
 }
 static struct kobj_attribute attr_reason_prochot = __ATTR_RO(reason_prochot);
 
@@ -293,9 +165,8 @@ static ssize_t reason_ratl_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool ratl = !!read_reason_ratl(gt);
 
-	return sysfs_emit(buff, "%u\n", ratl);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, RATL_MASK));
 }
 static struct kobj_attribute attr_reason_ratl = __ATTR_RO(reason_ratl);
 
@@ -304,9 +175,8 @@ static ssize_t reason_vr_thermalert_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool thermalert = !!read_reason_vr_thermalert(gt);
 
-	return sysfs_emit(buff, "%u\n", thermalert);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMALERT_MASK));
 }
 static struct kobj_attribute attr_reason_vr_thermalert = __ATTR_RO(reason_vr_thermalert);
 
@@ -315,9 +185,8 @@ static ssize_t reason_soc_avg_thermal_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool avg_thermalert = !!read_reason_soc_avg_thermal(gt);
 
-	return sysfs_emit(buff, "%u\n", avg_thermalert);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_AVG_THERMAL_MASK));
 }
 static struct kobj_attribute attr_reason_soc_avg_thermal = __ATTR_RO(reason_soc_avg_thermal);
 
@@ -326,9 +195,8 @@ static ssize_t reason_vr_tdc_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool tdc = !!read_reason_vr_tdc(gt);
 
-	return sysfs_emit(buff, "%u\n", tdc);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_TDC_MASK));
 }
 static struct kobj_attribute attr_reason_vr_tdc = __ATTR_RO(reason_vr_tdc);
 
@@ -337,9 +205,8 @@ static ssize_t reason_fastvmode_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool fastvmode = !!read_reason_fastvmode(gt);
 
-	return sysfs_emit(buff, "%u\n", fastvmode);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, FASTVMODE_MASK));
 }
 static struct kobj_attribute attr_reason_fastvmode = __ATTR_RO(reason_fastvmode);
 
@@ -348,9 +215,8 @@ static ssize_t reason_mem_thermal_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool mem_thermal = !!read_reason_mem_thermal(gt);
 
-	return sysfs_emit(buff, "%u\n", mem_thermal);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, MEM_THERMAL_MASK));
 }
 static struct kobj_attribute attr_reason_mem_thermal = __ATTR_RO(reason_mem_thermal);
 
@@ -359,9 +225,8 @@ static ssize_t reason_vr_thermal_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool vr_thermal = !!read_reason_vr_thermal(gt);
 
-	return sysfs_emit(buff, "%u\n", vr_thermal);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMAL_MASK));
 }
 static struct kobj_attribute attr_reason_vr_thermal = __ATTR_RO(reason_vr_thermal);
 
@@ -370,9 +235,8 @@ static ssize_t reason_iccmax_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool iccmax = !!read_reason_iccmax(gt);
 
-	return sysfs_emit(buff, "%u\n", iccmax);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ICCMAX_MASK));
 }
 static struct kobj_attribute attr_reason_iccmax = __ATTR_RO(reason_iccmax);
 
@@ -381,9 +245,8 @@ static ssize_t reason_psys_pl1_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool psys_pl1 = !!read_reason_psys_pl1(gt);
 
-	return sysfs_emit(buff, "%u\n", psys_pl1);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL1_MASK));
 }
 static struct kobj_attribute attr_reason_psys_pl1 = __ATTR_RO(reason_psys_pl1);
 
@@ -392,9 +255,8 @@ static ssize_t reason_psys_pl2_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool psys_pl2 = !!read_reason_psys_pl2(gt);
 
-	return sysfs_emit(buff, "%u\n", psys_pl2);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL2_MASK));
 }
 static struct kobj_attribute attr_reason_psys_pl2 = __ATTR_RO(reason_psys_pl2);
 
@@ -403,9 +265,8 @@ static ssize_t reason_p0_freq_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool p0_freq = !!read_reason_p0_freq(gt);
 
-	return sysfs_emit(buff, "%u\n", p0_freq);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, P0_FREQ_MASK));
 }
 static struct kobj_attribute attr_reason_p0_freq = __ATTR_RO(reason_p0_freq);
 
@@ -414,9 +275,8 @@ static ssize_t reason_psys_crit_show(struct kobject *kobj,
 {
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
-	bool psys_crit = !!read_reason_psys_crit(gt);
 
-	return sysfs_emit(buff, "%u\n", psys_crit);
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_CRIT_MASK));
 }
 static struct kobj_attribute attr_reason_psys_crit = __ATTR_RO(reason_psys_crit);
 

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 3/8] drm/xe/gt_throttle: Always read and mask
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 1/8] drm/xe/cri: Add new performance limit reasons bits Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 2/8] drm/xe/gt_throttle: Tidy up perf reasons reading Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 4/8] drm/xe/gt_throttle: Add throttle_to_gt() Lucas De Marchi
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav

Use a single function to read and mask the value the callers will be
interested in. This reduces the risk of a caller using a plain call to
xe_gt_throttle_get_limit_reasons() without applying any mask, which can
return unexpected bits for future platforms.

Select which reg and mask it's going to be used according to the
platform and gt type and always use that one function.

There was an odd xe_gt_dbg() when reading the status, which is not done
for any other throttle/* sysfs file, so just make the status be as
special as everybody else.

Reviewed-by: Raag Jadav <raag.jadav@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_throttle.c | 28 ++++++++++------------------
 1 file changed, 10 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index c69710f2dbeb5..f743444f641a8 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -8,7 +8,6 @@
 #include <regs/xe_gt_regs.h>
 #include "xe_device.h"
 #include "xe_gt.h"
-#include "xe_gt_printk.h"
 #include "xe_gt_sysfs.h"
 #include "xe_gt_throttle.h"
 #include "xe_mmio.h"
@@ -57,32 +56,25 @@ dev_to_gt(struct device *dev)
 
 u32 xe_gt_throttle_get_limit_reasons(struct xe_gt *gt)
 {
-	u32 reg;
+	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_reg reg;
+	u32 val, mask;
 
-	xe_pm_runtime_get(gt_to_xe(gt));
 	if (xe_gt_is_media_type(gt))
-		reg = xe_mmio_read32(&gt->mmio, MTL_MEDIA_PERF_LIMIT_REASONS);
+		reg = MTL_MEDIA_PERF_LIMIT_REASONS;
 	else
-		reg = xe_mmio_read32(&gt->mmio, GT0_PERF_LIMIT_REASONS);
-	xe_pm_runtime_put(gt_to_xe(gt));
-
-	return reg;
-}
-
-static u32 read_status(struct xe_gt *gt)
-{
-	struct xe_device *xe = gt_to_xe(gt);
-	u32 status, mask;
+		reg = GT0_PERF_LIMIT_REASONS;
 
 	if (xe->info.platform == XE_CRESCENTISLAND)
 		mask = CRI_PERF_LIMIT_REASONS_MASK;
 	else
 		mask = GT0_PERF_LIMIT_REASONS_MASK;
 
-	status = xe_gt_throttle_get_limit_reasons(gt) & mask;
-	xe_gt_dbg(gt, "throttle reasons: 0x%08x\n", status);
+	xe_pm_runtime_get(xe);
+	val = xe_mmio_read32(&gt->mmio, reg) & mask;
+	xe_pm_runtime_put(xe);
 
-	return status;
+	return val;
 }
 
 static bool is_throttled_by(struct xe_gt *gt, u32 mask)
@@ -96,7 +88,7 @@ static ssize_t status_show(struct kobject *kobj,
 	struct device *dev = kobj_to_dev(kobj);
 	struct xe_gt *gt = dev_to_gt(dev);
 
-	return sysfs_emit(buff, "%u\n", !!read_status(gt));
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, U32_MAX));
 }
 static struct kobj_attribute attr_status = __ATTR_RO(status);
 

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 4/8] drm/xe/gt_throttle: Add throttle_to_gt()
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (2 preceding siblings ...)
  2025-10-27  5:57 ` [PATCH v2 3/8] drm/xe/gt_throttle: Always read and mask Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27  5:57 ` [PATCH v2 5/8] drm/xe/gt_throttle: Tidy up attribute definition Lucas De Marchi
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav

Reduce boilerplate code by adding a helper to go directly from the
throttle kobject to the gt. Note that there's already a kobj_to_gt(),
but that actually converts our kobj_gt object to gt.

Reviewed-by: Raag Jadav <raag.jadav@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_throttle.c | 65 ++++++++++++++-----------------------
 1 file changed, 25 insertions(+), 40 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index f743444f641a8..e08023c5e77b6 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -48,12 +48,16 @@
  * device/gt#/freq0/throttle/reason_psys_crit - Frequency throttle due to PSYS critical
  */
 
-static struct xe_gt *
-dev_to_gt(struct device *dev)
+static struct xe_gt *dev_to_gt(struct device *dev)
 {
 	return kobj_to_gt(dev->kobj.parent);
 }
 
+static struct xe_gt *throttle_to_gt(struct kobject *kobj)
+{
+	return dev_to_gt(kobj_to_dev(kobj));
+}
+
 u32 xe_gt_throttle_get_limit_reasons(struct xe_gt *gt)
 {
 	struct xe_device *xe = gt_to_xe(gt);
@@ -85,8 +89,7 @@ static bool is_throttled_by(struct xe_gt *gt, u32 mask)
 static ssize_t status_show(struct kobject *kobj,
 			   struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, U32_MAX));
 }
@@ -95,8 +98,7 @@ static struct kobj_attribute attr_status = __ATTR_RO(status);
 static ssize_t reason_pl1_show(struct kobject *kobj,
 			       struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_1_MASK));
 }
@@ -105,8 +107,7 @@ static struct kobj_attribute attr_reason_pl1 = __ATTR_RO(reason_pl1);
 static ssize_t reason_pl2_show(struct kobject *kobj,
 			       struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_2_MASK));
 }
@@ -115,8 +116,7 @@ static struct kobj_attribute attr_reason_pl2 = __ATTR_RO(reason_pl2);
 static ssize_t reason_pl4_show(struct kobject *kobj,
 			       struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_4_MASK));
 }
@@ -125,8 +125,7 @@ static struct kobj_attribute attr_reason_pl4 = __ATTR_RO(reason_pl4);
 static ssize_t reason_thermal_show(struct kobject *kobj,
 				   struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, THERMAL_LIMIT_MASK));
 }
@@ -135,8 +134,7 @@ static struct kobj_attribute attr_reason_thermal = __ATTR_RO(reason_thermal);
 static ssize_t reason_soc_thermal_show(struct kobject *kobj,
 				       struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_THERMAL_LIMIT_MASK));
 }
@@ -145,8 +143,7 @@ static struct kobj_attribute attr_reason_soc_thermal = __ATTR_RO(reason_soc_ther
 static ssize_t reason_prochot_show(struct kobject *kobj,
 				   struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PROCHOT_MASK));
 }
@@ -155,8 +152,7 @@ static struct kobj_attribute attr_reason_prochot = __ATTR_RO(reason_prochot);
 static ssize_t reason_ratl_show(struct kobject *kobj,
 				struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, RATL_MASK));
 }
@@ -165,8 +161,7 @@ static struct kobj_attribute attr_reason_ratl = __ATTR_RO(reason_ratl);
 static ssize_t reason_vr_thermalert_show(struct kobject *kobj,
 					 struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMALERT_MASK));
 }
@@ -175,8 +170,7 @@ static struct kobj_attribute attr_reason_vr_thermalert = __ATTR_RO(reason_vr_the
 static ssize_t reason_soc_avg_thermal_show(struct kobject *kobj,
 					   struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_AVG_THERMAL_MASK));
 }
@@ -185,8 +179,7 @@ static struct kobj_attribute attr_reason_soc_avg_thermal = __ATTR_RO(reason_soc_
 static ssize_t reason_vr_tdc_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_TDC_MASK));
 }
@@ -195,8 +188,7 @@ static struct kobj_attribute attr_reason_vr_tdc = __ATTR_RO(reason_vr_tdc);
 static ssize_t reason_fastvmode_show(struct kobject *kobj,
 				     struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, FASTVMODE_MASK));
 }
@@ -205,8 +197,7 @@ static struct kobj_attribute attr_reason_fastvmode = __ATTR_RO(reason_fastvmode)
 static ssize_t reason_mem_thermal_show(struct kobject *kobj,
 				       struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, MEM_THERMAL_MASK));
 }
@@ -215,8 +206,7 @@ static struct kobj_attribute attr_reason_mem_thermal = __ATTR_RO(reason_mem_ther
 static ssize_t reason_vr_thermal_show(struct kobject *kobj,
 				      struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMAL_MASK));
 }
@@ -225,8 +215,7 @@ static struct kobj_attribute attr_reason_vr_thermal = __ATTR_RO(reason_vr_therma
 static ssize_t reason_iccmax_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ICCMAX_MASK));
 }
@@ -235,8 +224,7 @@ static struct kobj_attribute attr_reason_iccmax = __ATTR_RO(reason_iccmax);
 static ssize_t reason_psys_pl1_show(struct kobject *kobj,
 				    struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL1_MASK));
 }
@@ -245,8 +233,7 @@ static struct kobj_attribute attr_reason_psys_pl1 = __ATTR_RO(reason_psys_pl1);
 static ssize_t reason_psys_pl2_show(struct kobject *kobj,
 				    struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL2_MASK));
 }
@@ -255,8 +242,7 @@ static struct kobj_attribute attr_reason_psys_pl2 = __ATTR_RO(reason_psys_pl2);
 static ssize_t reason_p0_freq_show(struct kobject *kobj,
 				   struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, P0_FREQ_MASK));
 }
@@ -265,8 +251,7 @@ static struct kobj_attribute attr_reason_p0_freq = __ATTR_RO(reason_p0_freq);
 static ssize_t reason_psys_crit_show(struct kobject *kobj,
 				     struct kobj_attribute *attr, char *buff)
 {
-	struct device *dev = kobj_to_dev(kobj);
-	struct xe_gt *gt = dev_to_gt(dev);
+	struct xe_gt *gt = throttle_to_gt(kobj);
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_CRIT_MASK));
 }

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 5/8] drm/xe/gt_throttle: Tidy up attribute definition
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (3 preceding siblings ...)
  2025-10-27  5:57 ` [PATCH v2 4/8] drm/xe/gt_throttle: Add throttle_to_gt() Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27 11:38   ` Raag Jadav
  2025-10-27  5:57 ` [PATCH v2 6/8] drm/xe: Improve freq and throttle documentation Lucas De Marchi
                   ` (7 subsequent siblings)
  12 siblings, 1 reply; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav

Move the attribute definitions to be grouped together rather than near
the show() function: checkpatch keeps complaining about the missing
newline when defining new attributes and it reads better to group
everything, which should match e.g. the xe_pmu.c style.

While grouping them, also define a THROTTLE_ATTR_RO(), similar to
DEVICE_ATTR_RO(), and use it to define all attributes. This makes it
shorter and with a familiar syntax.

Finally, during the cri_throttle_attrs[] array definition, also
highlight what's coming from common attributes and what is CRI-specific.

These 3 things could be done as separate commits, but they are all about
the same thing: reduce the attribute definition verbosity and are very
simple and mechanical.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
v2:
 - Reorder attribute definition to match cri_throttle_attrs array (Raag)
---
 drivers/gpu/drm/xe/xe_gt_throttle.c | 55 +++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index e08023c5e77b6..b5317cf714e2e 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -93,7 +93,6 @@ static ssize_t status_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, U32_MAX));
 }
-static struct kobj_attribute attr_status = __ATTR_RO(status);
 
 static ssize_t reason_pl1_show(struct kobject *kobj,
 			       struct kobj_attribute *attr, char *buff)
@@ -102,7 +101,6 @@ static ssize_t reason_pl1_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_1_MASK));
 }
-static struct kobj_attribute attr_reason_pl1 = __ATTR_RO(reason_pl1);
 
 static ssize_t reason_pl2_show(struct kobject *kobj,
 			       struct kobj_attribute *attr, char *buff)
@@ -111,7 +109,6 @@ static ssize_t reason_pl2_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_2_MASK));
 }
-static struct kobj_attribute attr_reason_pl2 = __ATTR_RO(reason_pl2);
 
 static ssize_t reason_pl4_show(struct kobject *kobj,
 			       struct kobj_attribute *attr, char *buff)
@@ -120,7 +117,6 @@ static ssize_t reason_pl4_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_4_MASK));
 }
-static struct kobj_attribute attr_reason_pl4 = __ATTR_RO(reason_pl4);
 
 static ssize_t reason_thermal_show(struct kobject *kobj,
 				   struct kobj_attribute *attr, char *buff)
@@ -129,7 +125,6 @@ static ssize_t reason_thermal_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, THERMAL_LIMIT_MASK));
 }
-static struct kobj_attribute attr_reason_thermal = __ATTR_RO(reason_thermal);
 
 static ssize_t reason_soc_thermal_show(struct kobject *kobj,
 				       struct kobj_attribute *attr, char *buff)
@@ -138,7 +133,6 @@ static ssize_t reason_soc_thermal_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_THERMAL_LIMIT_MASK));
 }
-static struct kobj_attribute attr_reason_soc_thermal = __ATTR_RO(reason_soc_thermal);
 
 static ssize_t reason_prochot_show(struct kobject *kobj,
 				   struct kobj_attribute *attr, char *buff)
@@ -147,7 +141,6 @@ static ssize_t reason_prochot_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PROCHOT_MASK));
 }
-static struct kobj_attribute attr_reason_prochot = __ATTR_RO(reason_prochot);
 
 static ssize_t reason_ratl_show(struct kobject *kobj,
 				struct kobj_attribute *attr, char *buff)
@@ -156,7 +149,6 @@ static ssize_t reason_ratl_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, RATL_MASK));
 }
-static struct kobj_attribute attr_reason_ratl = __ATTR_RO(reason_ratl);
 
 static ssize_t reason_vr_thermalert_show(struct kobject *kobj,
 					 struct kobj_attribute *attr, char *buff)
@@ -165,7 +157,6 @@ static ssize_t reason_vr_thermalert_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMALERT_MASK));
 }
-static struct kobj_attribute attr_reason_vr_thermalert = __ATTR_RO(reason_vr_thermalert);
 
 static ssize_t reason_soc_avg_thermal_show(struct kobject *kobj,
 					   struct kobj_attribute *attr, char *buff)
@@ -174,7 +165,6 @@ static ssize_t reason_soc_avg_thermal_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_AVG_THERMAL_MASK));
 }
-static struct kobj_attribute attr_reason_soc_avg_thermal = __ATTR_RO(reason_soc_avg_thermal);
 
 static ssize_t reason_vr_tdc_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buff)
@@ -183,7 +173,6 @@ static ssize_t reason_vr_tdc_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_TDC_MASK));
 }
-static struct kobj_attribute attr_reason_vr_tdc = __ATTR_RO(reason_vr_tdc);
 
 static ssize_t reason_fastvmode_show(struct kobject *kobj,
 				     struct kobj_attribute *attr, char *buff)
@@ -192,7 +181,6 @@ static ssize_t reason_fastvmode_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, FASTVMODE_MASK));
 }
-static struct kobj_attribute attr_reason_fastvmode = __ATTR_RO(reason_fastvmode);
 
 static ssize_t reason_mem_thermal_show(struct kobject *kobj,
 				       struct kobj_attribute *attr, char *buff)
@@ -201,7 +189,6 @@ static ssize_t reason_mem_thermal_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, MEM_THERMAL_MASK));
 }
-static struct kobj_attribute attr_reason_mem_thermal = __ATTR_RO(reason_mem_thermal);
 
 static ssize_t reason_vr_thermal_show(struct kobject *kobj,
 				      struct kobj_attribute *attr, char *buff)
@@ -210,7 +197,6 @@ static ssize_t reason_vr_thermal_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMAL_MASK));
 }
-static struct kobj_attribute attr_reason_vr_thermal = __ATTR_RO(reason_vr_thermal);
 
 static ssize_t reason_iccmax_show(struct kobject *kobj,
 				  struct kobj_attribute *attr, char *buff)
@@ -219,7 +205,6 @@ static ssize_t reason_iccmax_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ICCMAX_MASK));
 }
-static struct kobj_attribute attr_reason_iccmax = __ATTR_RO(reason_iccmax);
 
 static ssize_t reason_psys_pl1_show(struct kobject *kobj,
 				    struct kobj_attribute *attr, char *buff)
@@ -228,7 +213,6 @@ static ssize_t reason_psys_pl1_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL1_MASK));
 }
-static struct kobj_attribute attr_reason_psys_pl1 = __ATTR_RO(reason_psys_pl1);
 
 static ssize_t reason_psys_pl2_show(struct kobject *kobj,
 				    struct kobj_attribute *attr, char *buff)
@@ -237,7 +221,6 @@ static ssize_t reason_psys_pl2_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL2_MASK));
 }
-static struct kobj_attribute attr_reason_psys_pl2 = __ATTR_RO(reason_psys_pl2);
 
 static ssize_t reason_p0_freq_show(struct kobject *kobj,
 				   struct kobj_attribute *attr, char *buff)
@@ -246,7 +229,6 @@ static ssize_t reason_p0_freq_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, P0_FREQ_MASK));
 }
-static struct kobj_attribute attr_reason_p0_freq = __ATTR_RO(reason_p0_freq);
 
 static ssize_t reason_psys_crit_show(struct kobject *kobj,
 				     struct kobj_attribute *attr, char *buff)
@@ -255,7 +237,19 @@ static ssize_t reason_psys_crit_show(struct kobject *kobj,
 
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_CRIT_MASK));
 }
-static struct kobj_attribute attr_reason_psys_crit = __ATTR_RO(reason_psys_crit);
+
+#define THROTTLE_ATTR_RO(name) \
+	struct kobj_attribute attr_##name = __ATTR_RO(name)
+
+static THROTTLE_ATTR_RO(status);
+static THROTTLE_ATTR_RO(reason_pl1);
+static THROTTLE_ATTR_RO(reason_pl2);
+static THROTTLE_ATTR_RO(reason_pl4);
+static THROTTLE_ATTR_RO(reason_thermal);
+static THROTTLE_ATTR_RO(reason_prochot);
+static THROTTLE_ATTR_RO(reason_ratl);
+static THROTTLE_ATTR_RO(reason_vr_thermalert);
+static THROTTLE_ATTR_RO(reason_vr_tdc);
 
 static struct attribute *throttle_attrs[] = {
 	&attr_status.attr,
@@ -270,19 +264,32 @@ static struct attribute *throttle_attrs[] = {
 	NULL
 };
 
+static THROTTLE_ATTR_RO(reason_vr_thermal);
+static THROTTLE_ATTR_RO(reason_soc_thermal);
+static THROTTLE_ATTR_RO(reason_mem_thermal);
+static THROTTLE_ATTR_RO(reason_iccmax);
+static THROTTLE_ATTR_RO(reason_soc_avg_thermal);
+static THROTTLE_ATTR_RO(reason_fastvmode);
+static THROTTLE_ATTR_RO(reason_psys_pl1);
+static THROTTLE_ATTR_RO(reason_psys_pl2);
+static THROTTLE_ATTR_RO(reason_p0_freq);
+static THROTTLE_ATTR_RO(reason_psys_crit);
+
 static struct attribute *cri_throttle_attrs[] = {
+	/* Common */
 	&attr_status.attr,
+	&attr_reason_pl1.attr,
+	&attr_reason_pl2.attr,
+	&attr_reason_pl4.attr,
 	&attr_reason_prochot.attr,
+	&attr_reason_ratl.attr,
+	/* CRI */
+	&attr_reason_vr_thermal.attr,
 	&attr_reason_soc_thermal.attr,
 	&attr_reason_mem_thermal.attr,
-	&attr_reason_vr_thermal.attr,
 	&attr_reason_iccmax.attr,
-	&attr_reason_ratl.attr,
 	&attr_reason_soc_avg_thermal.attr,
 	&attr_reason_fastvmode.attr,
-	&attr_reason_pl4.attr,
-	&attr_reason_pl1.attr,
-	&attr_reason_pl2.attr,
 	&attr_reason_psys_pl1.attr,
 	&attr_reason_psys_pl2.attr,
 	&attr_reason_p0_freq.attr,

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 6/8] drm/xe: Improve freq and throttle documentation
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (4 preceding siblings ...)
  2025-10-27  5:57 ` [PATCH v2 5/8] drm/xe/gt_throttle: Tidy up attribute definition Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27 11:43   ` Raag Jadav
  2025-10-27  5:57 ` [PATCH v2 7/8] drm/xe/gt_throttle: Drop individual show functions Lucas De Marchi
                   ` (6 subsequent siblings)
  12 siblings, 1 reply; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav

Add xe_gt_throttle under the "GT Frequency Management" and improve the
narrative making sure the documentation for both *_freq and throttle/*
attributes follow the same style.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 Documentation/gpu/xe/xe_gt_freq.rst |  3 ++
 drivers/gpu/drm/xe/xe_gt_freq.c     | 30 ++++++++++---------
 drivers/gpu/drm/xe/xe_gt_throttle.c | 60 ++++++++++++++++++++-----------------
 3 files changed, 52 insertions(+), 41 deletions(-)

diff --git a/Documentation/gpu/xe/xe_gt_freq.rst b/Documentation/gpu/xe/xe_gt_freq.rst
index c0811200e3275..182d6aabeee18 100644
--- a/Documentation/gpu/xe/xe_gt_freq.rst
+++ b/Documentation/gpu/xe/xe_gt_freq.rst
@@ -7,6 +7,9 @@ Xe GT Frequency Management
 .. kernel-doc:: drivers/gpu/drm/xe/xe_gt_freq.c
    :doc: Xe GT Frequency Management
 
+.. kernel-doc:: drivers/gpu/drm/xe/xe_gt_throttle.c
+   :doc: Xe GT Throttle
+
 Internal API
 ============
 
diff --git a/drivers/gpu/drm/xe/xe_gt_freq.c b/drivers/gpu/drm/xe/xe_gt_freq.c
index 701349251bbc5..9e0d94e213611 100644
--- a/drivers/gpu/drm/xe/xe_gt_freq.c
+++ b/drivers/gpu/drm/xe/xe_gt_freq.c
@@ -29,24 +29,26 @@
  * PCODE is the ultimate decision maker of the actual running frequency, based
  * on thermal and other running conditions.
  *
- * Xe's Freq provides a sysfs API for frequency management:
+ * Xe's Freq provides a sysfs API for frequency management under
+ * ``<device>/tile#/gt#/freq0/`` directory.
  *
- * device/tile#/gt#/freq0/<item>_freq *read-only* files:
+ * **Read-only** attributes:
  *
- * - act_freq: The actual resolved frequency decided by PCODE.
- * - cur_freq: The current one requested by GuC PC to the PCODE.
- * - rpn_freq: The Render Performance (RP) N level, which is the minimal one.
- * - rpa_freq: The Render Performance (RP) A level, which is the achiveable one.
- *   Calculated by PCODE at runtime based on multiple running conditions
- * - rpe_freq: The Render Performance (RP) E level, which is the efficient one.
- *   Calculated by PCODE at runtime based on multiple running conditions
- * - rp0_freq: The Render Performance (RP) 0 level, which is the maximum one.
+ * - ``act_freq``: The actual resolved frequency decided by PCODE.
+ * - ``cur_freq``: The current one requested by GuC PC to the PCODE.
+ * - ``rpn_freq``: The Render Performance (RP) N level, which is the minimal one.
+ * - ``rpa_freq``: The Render Performance (RP) A level, which is the achiveable one.
+ *                 Calculated by PCODE at runtime based on multiple running conditions
+ * - ``rpe_freq``: The Render Performance (RP) E level, which is the efficient one.
+ *                 Calculated by PCODE at runtime based on multiple running conditions
+ * - ``rp0_freq``: The Render Performance (RP) 0 level, which is the maximum one.
  *
- * device/tile#/gt#/freq0/<item>_freq *read-write* files:
+ * **Read-write** attributes:
  *
- * - min_freq: Min frequency request.
- * - max_freq: Max frequency request.
- *             If max <= min, then freq_min becomes a fixed frequency request.
+ * - ``min_freq``: Min frequency request.
+ * - ``max_freq``: Max frequency request.
+ *                 If max <= min, then freq_min becomes a fixed frequency
+ *                 request.
  */
 
 static struct xe_guc_pc *
diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index b5317cf714e2e..8647d2c997347 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -17,35 +17,41 @@
 /**
  * DOC: Xe GT Throttle
  *
- * Provides sysfs entries and other helpers for frequency throttle reasons in GT
- *
- * device/gt#/freq0/throttle/status - Overall status
- * device/gt#/freq0/throttle/reason_pl1 - Frequency throttle due to PL1
- * device/gt#/freq0/throttle/reason_pl2 - Frequency throttle due to PL2
- * device/gt#/freq0/throttle/reason_pl4 - Frequency throttle due to PL4, Iccmax etc.
- * device/gt#/freq0/throttle/reason_thermal - Frequency throttle due to thermal
- * device/gt#/freq0/throttle/reason_prochot - Frequency throttle due to prochot
- * device/gt#/freq0/throttle/reason_ratl - Frequency throttle due to RATL
- * device/gt#/freq0/throttle/reason_vr_thermalert - Frequency throttle due to VR THERMALERT
- * device/gt#/freq0/throttle/reason_vr_tdc -  Frequency throttle due to VR TDC
+ * The GT frequency may be throttled by hardware/firmware for various reasons
+ * that are provided through attributes under the ``freq0/throttle/`` directory.
+ * Their availability depend on the platform and some may not be visible if that
+ * reason is not available.
  *
  * The following attributes are available on Crescent Island platform:
- * device/gt#/freq0/throttle/status - Overall throttle status
- * device/gt#/freq0/throttle/reason_pl1 - Frequency throttle due to package PL1
- * device/gt#/freq0/throttle/reason_pl2 - Frequency throttle due to package PL2
- * device/gt#/freq0/throttle/reason_pl4 - Frequency throttle due to PL4
- * device/gt#/freq0/throttle/reason_prochot - Frequency throttle due to prochot
- * device/gt#/freq0/throttle/reason_soc_thermal - Frequency throttle due to SoC thermal
- * device/gt#/freq0/throttle/reason_mem_thermal - Frequency throttle due to memory thermal
- * device/gt#/freq0/throttle/reason_vr_thermal - Frequency throttle due to VR thermal
- * device/gt#/freq0/throttle/reason_iccmax - Frequency throttle due to ICCMAX
- * device/gt#/freq0/throttle/reason_ratl - Frequency throttle due to RATL thermal algorithm
- * device/gt#/freq0/throttle/reason_soc_avg_thermal - Frequency throttle due to SoC average temp
- * device/gt#/freq0/throttle/reason_fastvmode - Frequency throttle due to VR is hitting FastVMode
- * device/gt#/freq0/throttle/reason_psys_pl1 - Frequency throttle due to PSYS PL1
- * device/gt#/freq0/throttle/reason_psys_pl2 - Frequency throttle due to PSYS PL2
- * device/gt#/freq0/throttle/reason_p0_freq - Frequency throttle due to P0 frequency
- * device/gt#/freq0/throttle/reason_psys_crit - Frequency throttle due to PSYS critical
+ *
+ * - ``status``: Overall throttle status
+ * - ``reason_pl1``: package PL1
+ * - ``reason_pl2``: package PL2
+ * - ``reason_pl4``: package PL4
+ * - ``reason_prochot``: prochot
+ * - ``reason_soc_thermal``: SoC thermal
+ * - ``reason_mem_thermal``: Memory thermal
+ * - ``reason_vr_thermal``: VR thermal
+ * - ``reason_iccmax``: ICCMAX
+ * - ``reason_ratl``: RATL thermal algorithm
+ * - ``reason_soc_avg_thermal``: SoC average temp
+ * - ``reason_fastvmode``: VR is hitting FastVMode
+ * - ``reason_psys_pl1``: PSYS PL1
+ * - ``reason_psys_pl2``: PSYS PL2
+ * - ``reason_p0_freq``: P0 frequency
+ * - ``reason_psys_crit``: PSYS critical
+ *
+ * Other platforms support the following reasons:
+ *
+ * - ``status``: Overall status
+ * - ``reason_pl1``: package PL1
+ * - ``reason_pl2``: package PL2
+ * - ``reason_pl4``: package PL4, Iccmax etc.
+ * - ``reason_thermal``: thermal
+ * - ``reason_prochot``: prochot
+ * - ``reason_ratl``: RATL hermal algorithm
+ * - ``reason_vr_thermalert``: VR THERMALERT
+ * - ``reason_vr_tdc``: VR TDC
  */
 
 static struct xe_gt *dev_to_gt(struct device *dev)

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 7/8] drm/xe/gt_throttle: Drop individual show functions
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (5 preceding siblings ...)
  2025-10-27  5:57 ` [PATCH v2 6/8] drm/xe: Improve freq and throttle documentation Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27 12:15   ` Raag Jadav
  2025-10-27  5:57 ` [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons Lucas De Marchi
                   ` (5 subsequent siblings)
  12 siblings, 1 reply; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav

They are all doing the same thing with the mask being the param. Just
declare our own attribute to store the mask and provide a single
function.

Another common pattern is to define the show function in the macro,
however on follow up work the mask may be used for returning more
information, so it'd need to be stored in any case.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_throttle.c | 254 +++++++++---------------------------
 1 file changed, 62 insertions(+), 192 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index 8647d2c997347..fa7068aac3344 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -54,6 +54,11 @@
  * - ``reason_vr_tdc``: VR TDC
  */
 
+struct throttle_attribute {
+	struct kobj_attribute attr;
+	u32 mask;
+};
+
 static struct xe_gt *dev_to_gt(struct device *dev)
 {
 	return kobj_to_gt(dev->kobj.parent);
@@ -64,6 +69,11 @@ static struct xe_gt *throttle_to_gt(struct kobject *kobj)
 	return dev_to_gt(kobj_to_dev(kobj));
 }
 
+static struct throttle_attribute *kobj_attribute_to_throttle(struct kobj_attribute *attr)
+{
+	return container_of(attr, struct throttle_attribute, attr);
+}
+
 u32 xe_gt_throttle_get_limit_reasons(struct xe_gt *gt)
 {
 	struct xe_device *xe = gt_to_xe(gt);
@@ -92,214 +102,74 @@ static bool is_throttled_by(struct xe_gt *gt, u32 mask)
 	return xe_gt_throttle_get_limit_reasons(gt) & mask;
 }
 
-static ssize_t status_show(struct kobject *kobj,
+static ssize_t reason_show(struct kobject *kobj,
 			   struct kobj_attribute *attr, char *buff)
 {
+	struct throttle_attribute *ta = kobj_attribute_to_throttle(attr);
 	struct xe_gt *gt = throttle_to_gt(kobj);
 
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, U32_MAX));
-}
-
-static ssize_t reason_pl1_show(struct kobject *kobj,
-			       struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_1_MASK));
-}
-
-static ssize_t reason_pl2_show(struct kobject *kobj,
-			       struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_2_MASK));
-}
-
-static ssize_t reason_pl4_show(struct kobject *kobj,
-			       struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, POWER_LIMIT_4_MASK));
-}
-
-static ssize_t reason_thermal_show(struct kobject *kobj,
-				   struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, THERMAL_LIMIT_MASK));
-}
-
-static ssize_t reason_soc_thermal_show(struct kobject *kobj,
-				       struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_THERMAL_LIMIT_MASK));
-}
-
-static ssize_t reason_prochot_show(struct kobject *kobj,
-				   struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PROCHOT_MASK));
-}
-
-static ssize_t reason_ratl_show(struct kobject *kobj,
-				struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, RATL_MASK));
-}
-
-static ssize_t reason_vr_thermalert_show(struct kobject *kobj,
-					 struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMALERT_MASK));
-}
-
-static ssize_t reason_soc_avg_thermal_show(struct kobject *kobj,
-					   struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, SOC_AVG_THERMAL_MASK));
-}
-
-static ssize_t reason_vr_tdc_show(struct kobject *kobj,
-				  struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_TDC_MASK));
-}
-
-static ssize_t reason_fastvmode_show(struct kobject *kobj,
-				     struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, FASTVMODE_MASK));
-}
-
-static ssize_t reason_mem_thermal_show(struct kobject *kobj,
-				       struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, MEM_THERMAL_MASK));
-}
-
-static ssize_t reason_vr_thermal_show(struct kobject *kobj,
-				      struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, VR_THERMAL_MASK));
-}
-
-static ssize_t reason_iccmax_show(struct kobject *kobj,
-				  struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ICCMAX_MASK));
-}
-
-static ssize_t reason_psys_pl1_show(struct kobject *kobj,
-				    struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL1_MASK));
-}
-
-static ssize_t reason_psys_pl2_show(struct kobject *kobj,
-				    struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_PL2_MASK));
-}
-
-static ssize_t reason_p0_freq_show(struct kobject *kobj,
-				   struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, P0_FREQ_MASK));
+	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ta->mask));
 }
 
-static ssize_t reason_psys_crit_show(struct kobject *kobj,
-				     struct kobj_attribute *attr, char *buff)
-{
-	struct xe_gt *gt = throttle_to_gt(kobj);
-
-	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, PSYS_CRIT_MASK));
-}
-
-#define THROTTLE_ATTR_RO(name) \
-	struct kobj_attribute attr_##name = __ATTR_RO(name)
+#define THROTTLE_ATTR_RO(name, _mask)				\
+	struct throttle_attribute attr_##name =	{		\
+		.attr = __ATTR(name, 0444, reason_show, NULL),	\
+		.mask = _mask,					\
+	}
 
-static THROTTLE_ATTR_RO(status);
-static THROTTLE_ATTR_RO(reason_pl1);
-static THROTTLE_ATTR_RO(reason_pl2);
-static THROTTLE_ATTR_RO(reason_pl4);
-static THROTTLE_ATTR_RO(reason_thermal);
-static THROTTLE_ATTR_RO(reason_prochot);
-static THROTTLE_ATTR_RO(reason_ratl);
-static THROTTLE_ATTR_RO(reason_vr_thermalert);
-static THROTTLE_ATTR_RO(reason_vr_tdc);
+static THROTTLE_ATTR_RO(status, U32_MAX);
+static THROTTLE_ATTR_RO(reason_pl1, POWER_LIMIT_1_MASK);
+static THROTTLE_ATTR_RO(reason_pl2, POWER_LIMIT_2_MASK);
+static THROTTLE_ATTR_RO(reason_pl4, POWER_LIMIT_4_MASK);
+static THROTTLE_ATTR_RO(reason_thermal, THERMAL_LIMIT_MASK);
+static THROTTLE_ATTR_RO(reason_prochot, PROCHOT_MASK);
+static THROTTLE_ATTR_RO(reason_ratl, RATL_MASK);
+static THROTTLE_ATTR_RO(reason_vr_thermalert, VR_THERMALERT_MASK);
+static THROTTLE_ATTR_RO(reason_vr_tdc, VR_TDC_MASK);
 
 static struct attribute *throttle_attrs[] = {
-	&attr_status.attr,
-	&attr_reason_pl1.attr,
-	&attr_reason_pl2.attr,
-	&attr_reason_pl4.attr,
-	&attr_reason_thermal.attr,
-	&attr_reason_prochot.attr,
-	&attr_reason_ratl.attr,
-	&attr_reason_vr_thermalert.attr,
-	&attr_reason_vr_tdc.attr,
+	&attr_status.attr.attr,
+	&attr_reason_pl1.attr.attr,
+	&attr_reason_pl2.attr.attr,
+	&attr_reason_pl4.attr.attr,
+	&attr_reason_thermal.attr.attr,
+	&attr_reason_prochot.attr.attr,
+	&attr_reason_ratl.attr.attr,
+	&attr_reason_vr_thermalert.attr.attr,
+	&attr_reason_vr_tdc.attr.attr,
 	NULL
 };
 
-static THROTTLE_ATTR_RO(reason_vr_thermal);
-static THROTTLE_ATTR_RO(reason_soc_thermal);
-static THROTTLE_ATTR_RO(reason_mem_thermal);
-static THROTTLE_ATTR_RO(reason_iccmax);
-static THROTTLE_ATTR_RO(reason_soc_avg_thermal);
-static THROTTLE_ATTR_RO(reason_fastvmode);
-static THROTTLE_ATTR_RO(reason_psys_pl1);
-static THROTTLE_ATTR_RO(reason_psys_pl2);
-static THROTTLE_ATTR_RO(reason_p0_freq);
-static THROTTLE_ATTR_RO(reason_psys_crit);
+static THROTTLE_ATTR_RO(reason_vr_thermal, VR_THERMAL_MASK);
+static THROTTLE_ATTR_RO(reason_soc_thermal, SOC_THERMAL_LIMIT_MASK);
+static THROTTLE_ATTR_RO(reason_mem_thermal, MEM_THERMAL_MASK);
+static THROTTLE_ATTR_RO(reason_iccmax, ICCMAX_MASK);
+static THROTTLE_ATTR_RO(reason_soc_avg_thermal, SOC_AVG_THERMAL_MASK);
+static THROTTLE_ATTR_RO(reason_fastvmode, FASTVMODE_MASK);
+static THROTTLE_ATTR_RO(reason_psys_pl1, PSYS_PL1_MASK);
+static THROTTLE_ATTR_RO(reason_psys_pl2, PSYS_PL2_MASK);
+static THROTTLE_ATTR_RO(reason_p0_freq, P0_FREQ_MASK);
+static THROTTLE_ATTR_RO(reason_psys_crit, PSYS_CRIT_MASK);
 
 static struct attribute *cri_throttle_attrs[] = {
 	/* Common */
-	&attr_status.attr,
-	&attr_reason_pl1.attr,
-	&attr_reason_pl2.attr,
-	&attr_reason_pl4.attr,
-	&attr_reason_prochot.attr,
-	&attr_reason_ratl.attr,
+	&attr_status.attr.attr,
+	&attr_reason_pl1.attr.attr,
+	&attr_reason_pl2.attr.attr,
+	&attr_reason_pl4.attr.attr,
+	&attr_reason_prochot.attr.attr,
+	&attr_reason_ratl.attr.attr,
 	/* CRI */
-	&attr_reason_vr_thermal.attr,
-	&attr_reason_soc_thermal.attr,
-	&attr_reason_mem_thermal.attr,
-	&attr_reason_iccmax.attr,
-	&attr_reason_soc_avg_thermal.attr,
-	&attr_reason_fastvmode.attr,
-	&attr_reason_psys_pl1.attr,
-	&attr_reason_psys_pl2.attr,
-	&attr_reason_p0_freq.attr,
-	&attr_reason_psys_crit.attr,
+	&attr_reason_vr_thermal.attr.attr,
+	&attr_reason_soc_thermal.attr.attr,
+	&attr_reason_mem_thermal.attr.attr,
+	&attr_reason_iccmax.attr.attr,
+	&attr_reason_soc_avg_thermal.attr.attr,
+	&attr_reason_fastvmode.attr.attr,
+	&attr_reason_psys_pl1.attr.attr,
+	&attr_reason_psys_pl2.attr.attr,
+	&attr_reason_p0_freq.attr.attr,
+	&attr_reason_psys_crit.attr.attr,
 	NULL
 };
 

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (6 preceding siblings ...)
  2025-10-27  5:57 ` [PATCH v2 7/8] drm/xe/gt_throttle: Drop individual show functions Lucas De Marchi
@ 2025-10-27  5:57 ` Lucas De Marchi
  2025-10-27 11:50   ` Raag Jadav
  2025-10-28 14:02   ` Rodrigo Vivi
  2025-10-27  6:04 ` ✗ CI.checkpatch: warning for drm/xe: CRI support in gt_throttle + refactors (rev2) Patchwork
                   ` (4 subsequent siblings)
  12 siblings, 2 replies; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27  5:57 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Raag Jadav, Rodrigo Vivi

It's currently not possible to safely monitor if there's throttling
happening and what are the reasons. The approach of reading the status
and then reading the reasons is not reliable as by the time sysadmin
reads the reason, the throttling could not be happening anymore.

Previous tentative to fix that[1] was breaking the ABI and potentially
sysadmin's scripts. This takes a different approach of adding and
documenting the additional attribute. It's still valuable, though
redundant, to provide the simpler 0/1 interface.

In order to avoid userspace knowledge on the bitmask meaning and to be
able to maintain the kernel side in sync with possible changes in
future, just walk the attribute group and check what are the masks that
match the value read.

[1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/

Cc: Raag Jadav <raag.jadav@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_throttle.c | 46 +++++++++++++++++++++++++++++++++++--
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
index fa7068aac3344..fd2988dacbbb6 100644
--- a/drivers/gpu/drm/xe/xe_gt_throttle.c
+++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
@@ -22,9 +22,15 @@
  * Their availability depend on the platform and some may not be visible if that
  * reason is not available.
  *
+ * The ``status_reasons`` attribute can be used by sysadmin monitoring all
+ * possible reasons for throttling and reporting them. It's preferred over
+ * monitoring ``status`` and then reading the reason both for simplicity and to
+ * avoid TOCTOU.
+ *
  * The following attributes are available on Crescent Island platform:
  *
- * - ``status``: Overall throttle status
+ * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
+ * - ``status_reasons``: All reasons causing throttling separated by newline.
  * - ``reason_pl1``: package PL1
  * - ``reason_pl2``: package PL2
  * - ``reason_pl4``: package PL4
@@ -43,7 +49,8 @@
  *
  * Other platforms support the following reasons:
  *
- * - ``status``: Overall status
+ * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
+ * - ``status_reasons``: All reasons causing throttling separated by newline.
  * - ``reason_pl1``: package PL1
  * - ``reason_pl2``: package PL2
  * - ``reason_pl4``: package PL4, Iccmax etc.
@@ -111,12 +118,45 @@ static ssize_t reason_show(struct kobject *kobj,
 	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ta->mask));
 }
 
+static const struct attribute_group *get_platform_throttle_group(struct xe_device *xe);
+
+static ssize_t status_reasons_show(struct kobject *kobj,
+				   struct kobj_attribute *attr, char *buff)
+{
+	struct xe_gt *gt = throttle_to_gt(kobj);
+	struct xe_device *xe = gt_to_xe(gt);
+	const struct attribute_group *group;
+	struct attribute **pother;
+	ssize_t ret = 0;
+	u32 reasons;
+
+	reasons = xe_gt_throttle_get_limit_reasons(gt);
+	group = get_platform_throttle_group(xe);
+
+	for (pother = group->attrs; *pother; pother++) {
+		struct kobj_attribute *kattr = container_of(*pother, struct kobj_attribute, attr);
+		struct throttle_attribute *other_ta = kobj_attribute_to_throttle(kattr);
+
+		if (other_ta->mask != U32_MAX && reasons & other_ta->mask)
+			ret += sysfs_emit_at(buff, ret, "%s\n", (*pother)->name);
+	}
+
+	return ret;
+}
+
 #define THROTTLE_ATTR_RO(name, _mask)				\
 	struct throttle_attribute attr_##name =	{		\
 		.attr = __ATTR(name, 0444, reason_show, NULL),	\
 		.mask = _mask,					\
 	}
 
+#define THROTTLE_ATTR_RO_FUNC(name, _mask, _show)		\
+	struct throttle_attribute attr_##name =	{		\
+		.attr = __ATTR(name, 0444, _show, NULL),	\
+		.mask = _mask,					\
+	}
+
+static THROTTLE_ATTR_RO_FUNC(status_reasons, 0, status_reasons_show);
 static THROTTLE_ATTR_RO(status, U32_MAX);
 static THROTTLE_ATTR_RO(reason_pl1, POWER_LIMIT_1_MASK);
 static THROTTLE_ATTR_RO(reason_pl2, POWER_LIMIT_2_MASK);
@@ -128,6 +168,7 @@ static THROTTLE_ATTR_RO(reason_vr_thermalert, VR_THERMALERT_MASK);
 static THROTTLE_ATTR_RO(reason_vr_tdc, VR_TDC_MASK);
 
 static struct attribute *throttle_attrs[] = {
+	&attr_status_reasons.attr.attr,
 	&attr_status.attr.attr,
 	&attr_reason_pl1.attr.attr,
 	&attr_reason_pl2.attr.attr,
@@ -153,6 +194,7 @@ static THROTTLE_ATTR_RO(reason_psys_crit, PSYS_CRIT_MASK);
 
 static struct attribute *cri_throttle_attrs[] = {
 	/* Common */
+	&attr_status_reasons.attr.attr,
 	&attr_status.attr.attr,
 	&attr_reason_pl1.attr.attr,
 	&attr_reason_pl2.attr.attr,

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* ✗ CI.checkpatch: warning for drm/xe: CRI support in gt_throttle + refactors (rev2)
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (7 preceding siblings ...)
  2025-10-27  5:57 ` [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons Lucas De Marchi
@ 2025-10-27  6:04 ` Patchwork
  2025-10-27  6:05 ` ✓ CI.KUnit: success " Patchwork
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2025-10-27  6:04 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

== Series Details ==

Series: drm/xe: CRI support in gt_throttle + refactors (rev2)
URL   : https://patchwork.freedesktop.org/series/156437/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
f867e605613af1770f90c4b0afd4a8f06424d1f0
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 518e6112a32408998b8e7d9e62fe8c90bc46d747
Author: Lucas De Marchi <lucas.demarchi@intel.com>
Date:   Sun Oct 26 22:57:20 2025 -0700

    drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
    
    It's currently not possible to safely monitor if there's throttling
    happening and what are the reasons. The approach of reading the status
    and then reading the reasons is not reliable as by the time sysadmin
    reads the reason, the throttling could not be happening anymore.
    
    Previous tentative to fix that[1] was breaking the ABI and potentially
    sysadmin's scripts. This takes a different approach of adding and
    documenting the additional attribute. It's still valuable, though
    redundant, to provide the simpler 0/1 interface.
    
    In order to avoid userspace knowledge on the bitmask meaning and to be
    able to maintain the kernel side in sync with possible changes in
    future, just walk the attribute group and check what are the masks that
    match the value read.
    
    [1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/
    
    Cc: Raag Jadav <raag.jadav@intel.com>
    Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
+ /mt/dim checkpatch c03916cb446b6eefe91538599775bb54bf98238c drm-intel
ed47bf0f340b drm/xe/cri: Add new performance limit reasons bits
-:204: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#204: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:278:
+}
+static struct kobj_attribute attr_reason_soc_thermal = __ATTR_RO(reason_soc_thermal);

-:222: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#222: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:322:
+}
+static struct kobj_attribute attr_reason_soc_avg_thermal = __ATTR_RO(reason_soc_avg_thermal);

-:240: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#240: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:344:
+}
+static struct kobj_attribute attr_reason_fastvmode = __ATTR_RO(reason_fastvmode);

-:251: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#251: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:355:
+}
+static struct kobj_attribute attr_reason_mem_thermal = __ATTR_RO(reason_mem_thermal);

-:262: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#262: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:366:
+}
+static struct kobj_attribute attr_reason_vr_thermal = __ATTR_RO(reason_vr_thermal);

-:273: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#273: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:377:
+}
+static struct kobj_attribute attr_reason_iccmax = __ATTR_RO(reason_iccmax);

-:284: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#284: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:388:
+}
+static struct kobj_attribute attr_reason_psys_pl1 = __ATTR_RO(reason_psys_pl1);

-:295: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#295: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:399:
+}
+static struct kobj_attribute attr_reason_psys_pl2 = __ATTR_RO(reason_psys_pl2);

-:306: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#306: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:410:
+}
+static struct kobj_attribute attr_reason_p0_freq = __ATTR_RO(reason_p0_freq);

-:317: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#317: FILE: drivers/gpu/drm/xe/xe_gt_throttle.c:421:
+}
+static struct kobj_attribute attr_reason_psys_crit = __ATTR_RO(reason_psys_crit);

total: 0 errors, 0 warnings, 10 checks, 354 lines checked
596215eac759 drm/xe/gt_throttle: Tidy up perf reasons reading
3112c5a24b89 drm/xe/gt_throttle: Always read and mask
137c111dcbb7 drm/xe/gt_throttle: Add throttle_to_gt()
90c45b3abb40 drm/xe/gt_throttle: Tidy up attribute definition
e34179d2e1fa drm/xe: Improve freq and throttle documentation
6eb187106e7a drm/xe/gt_throttle: Drop individual show functions
518e6112a324 drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
-:21: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#21: 
[1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/

total: 0 errors, 1 warnings, 0 checks, 84 lines checked



^ permalink raw reply	[flat|nested] 23+ messages in thread

* ✓ CI.KUnit: success for drm/xe: CRI support in gt_throttle + refactors (rev2)
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (8 preceding siblings ...)
  2025-10-27  6:04 ` ✗ CI.checkpatch: warning for drm/xe: CRI support in gt_throttle + refactors (rev2) Patchwork
@ 2025-10-27  6:05 ` Patchwork
  2025-10-27  6:51 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2025-10-27  6:05 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

== Series Details ==

Series: drm/xe: CRI support in gt_throttle + refactors (rev2)
URL   : https://patchwork.freedesktop.org/series/156437/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[06:04:27] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[06:04:31] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[06:05:02] Starting KUnit Kernel (1/1)...
[06:05:02] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[06:05:02] ================== guc_buf (11 subtests) ===================
[06:05:02] [PASSED] test_smallest
[06:05:02] [PASSED] test_largest
[06:05:02] [PASSED] test_granular
[06:05:02] [PASSED] test_unique
[06:05:02] [PASSED] test_overlap
[06:05:02] [PASSED] test_reusable
[06:05:02] [PASSED] test_too_big
[06:05:02] [PASSED] test_flush
[06:05:02] [PASSED] test_lookup
[06:05:02] [PASSED] test_data
[06:05:02] [PASSED] test_class
[06:05:02] ===================== [PASSED] guc_buf =====================
[06:05:02] =================== guc_dbm (7 subtests) ===================
[06:05:02] [PASSED] test_empty
[06:05:02] [PASSED] test_default
[06:05:02] ======================== test_size  ========================
[06:05:02] [PASSED] 4
[06:05:02] [PASSED] 8
[06:05:02] [PASSED] 32
[06:05:02] [PASSED] 256
[06:05:02] ==================== [PASSED] test_size ====================
[06:05:02] ======================= test_reuse  ========================
[06:05:02] [PASSED] 4
[06:05:02] [PASSED] 8
[06:05:02] [PASSED] 32
[06:05:02] [PASSED] 256
[06:05:02] =================== [PASSED] test_reuse ====================
[06:05:02] =================== test_range_overlap  ====================
[06:05:02] [PASSED] 4
[06:05:02] [PASSED] 8
[06:05:02] [PASSED] 32
[06:05:02] [PASSED] 256
[06:05:02] =============== [PASSED] test_range_overlap ================
[06:05:02] =================== test_range_compact  ====================
[06:05:02] [PASSED] 4
[06:05:02] [PASSED] 8
[06:05:02] [PASSED] 32
[06:05:02] [PASSED] 256
[06:05:02] =============== [PASSED] test_range_compact ================
[06:05:02] ==================== test_range_spare  =====================
[06:05:02] [PASSED] 4
[06:05:02] [PASSED] 8
[06:05:02] [PASSED] 32
[06:05:02] [PASSED] 256
[06:05:02] ================ [PASSED] test_range_spare =================
[06:05:02] ===================== [PASSED] guc_dbm =====================
[06:05:02] =================== guc_idm (6 subtests) ===================
[06:05:02] [PASSED] bad_init
[06:05:02] [PASSED] no_init
[06:05:02] [PASSED] init_fini
[06:05:02] [PASSED] check_used
[06:05:02] [PASSED] check_quota
[06:05:02] [PASSED] check_all
[06:05:02] ===================== [PASSED] guc_idm =====================
[06:05:02] ================== no_relay (3 subtests) ===================
[06:05:02] [PASSED] xe_drops_guc2pf_if_not_ready
[06:05:02] [PASSED] xe_drops_guc2vf_if_not_ready
[06:05:02] [PASSED] xe_rejects_send_if_not_ready
[06:05:02] ==================== [PASSED] no_relay =====================
[06:05:02] ================== pf_relay (14 subtests) ==================
[06:05:02] [PASSED] pf_rejects_guc2pf_too_short
[06:05:02] [PASSED] pf_rejects_guc2pf_too_long
[06:05:02] [PASSED] pf_rejects_guc2pf_no_payload
[06:05:02] [PASSED] pf_fails_no_payload
[06:05:02] [PASSED] pf_fails_bad_origin
[06:05:02] [PASSED] pf_fails_bad_type
[06:05:02] [PASSED] pf_txn_reports_error
[06:05:02] [PASSED] pf_txn_sends_pf2guc
[06:05:02] [PASSED] pf_sends_pf2guc
[06:05:02] [SKIPPED] pf_loopback_nop
[06:05:02] [SKIPPED] pf_loopback_echo
[06:05:02] [SKIPPED] pf_loopback_fail
[06:05:02] [SKIPPED] pf_loopback_busy
[06:05:02] [SKIPPED] pf_loopback_retry
[06:05:02] ==================== [PASSED] pf_relay =====================
[06:05:02] ================== vf_relay (3 subtests) ===================
[06:05:02] [PASSED] vf_rejects_guc2vf_too_short
[06:05:02] [PASSED] vf_rejects_guc2vf_too_long
[06:05:02] [PASSED] vf_rejects_guc2vf_no_payload
[06:05:02] ==================== [PASSED] vf_relay =====================
[06:05:02] ===================== lmtt (1 subtest) =====================
[06:05:02] ======================== test_ops  =========================
[06:05:02] [PASSED] 2-level
[06:05:02] [PASSED] multi-level
[06:05:02] ==================== [PASSED] test_ops =====================
[06:05:02] ====================== [PASSED] lmtt =======================
[06:05:02] ================= pf_service (11 subtests) =================
[06:05:02] [PASSED] pf_negotiate_any
[06:05:02] [PASSED] pf_negotiate_base_match
[06:05:02] [PASSED] pf_negotiate_base_newer
[06:05:02] [PASSED] pf_negotiate_base_next
[06:05:02] [SKIPPED] pf_negotiate_base_older
[06:05:02] [PASSED] pf_negotiate_base_prev
[06:05:02] [PASSED] pf_negotiate_latest_match
[06:05:02] [PASSED] pf_negotiate_latest_newer
[06:05:02] [PASSED] pf_negotiate_latest_next
[06:05:02] [SKIPPED] pf_negotiate_latest_older
[06:05:02] [SKIPPED] pf_negotiate_latest_prev
[06:05:02] =================== [PASSED] pf_service ====================
[06:05:02] ================= xe_guc_g2g (2 subtests) ==================
[06:05:02] ============== xe_live_guc_g2g_kunit_default  ==============
[06:05:02] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[06:05:02] ============== xe_live_guc_g2g_kunit_allmem  ===============
[06:05:02] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[06:05:02] =================== [SKIPPED] xe_guc_g2g ===================
[06:05:02] =================== xe_mocs (2 subtests) ===================
[06:05:02] ================ xe_live_mocs_kernel_kunit  ================
[06:05:02] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[06:05:02] ================ xe_live_mocs_reset_kunit  =================
[06:05:02] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[06:05:02] ==================== [SKIPPED] xe_mocs =====================
[06:05:02] ================= xe_migrate (2 subtests) ==================
[06:05:02] ================= xe_migrate_sanity_kunit  =================
[06:05:02] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[06:05:02] ================== xe_validate_ccs_kunit  ==================
[06:05:02] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[06:05:02] =================== [SKIPPED] xe_migrate ===================
[06:05:02] ================== xe_dma_buf (1 subtest) ==================
[06:05:02] ==================== xe_dma_buf_kunit  =====================
[06:05:02] ================ [SKIPPED] xe_dma_buf_kunit ================
[06:05:02] =================== [SKIPPED] xe_dma_buf ===================
[06:05:02] ================= xe_bo_shrink (1 subtest) =================
[06:05:02] =================== xe_bo_shrink_kunit  ====================
[06:05:02] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[06:05:02] ================== [SKIPPED] xe_bo_shrink ==================
[06:05:02] ==================== xe_bo (2 subtests) ====================
[06:05:02] ================== xe_ccs_migrate_kunit  ===================
[06:05:02] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[06:05:02] ==================== xe_bo_evict_kunit  ====================
[06:05:02] =============== [SKIPPED] xe_bo_evict_kunit ================
[06:05:02] ===================== [SKIPPED] xe_bo ======================
[06:05:02] ==================== args (11 subtests) ====================
[06:05:02] [PASSED] count_args_test
[06:05:02] [PASSED] call_args_example
[06:05:02] [PASSED] call_args_test
[06:05:02] [PASSED] drop_first_arg_example
[06:05:02] [PASSED] drop_first_arg_test
[06:05:02] [PASSED] first_arg_example
[06:05:02] [PASSED] first_arg_test
[06:05:02] [PASSED] last_arg_example
[06:05:02] [PASSED] last_arg_test
[06:05:02] [PASSED] pick_arg_example
[06:05:02] [PASSED] sep_comma_example
[06:05:02] ====================== [PASSED] args =======================
[06:05:02] =================== xe_pci (3 subtests) ====================
[06:05:02] ==================== check_graphics_ip  ====================
[06:05:02] [PASSED] 12.00 Xe_LP
[06:05:02] [PASSED] 12.10 Xe_LP+
[06:05:02] [PASSED] 12.55 Xe_HPG
[06:05:02] [PASSED] 12.60 Xe_HPC
[06:05:02] [PASSED] 12.70 Xe_LPG
[06:05:02] [PASSED] 12.71 Xe_LPG
[06:05:02] [PASSED] 12.74 Xe_LPG+
[06:05:02] [PASSED] 20.01 Xe2_HPG
[06:05:02] [PASSED] 20.02 Xe2_HPG
[06:05:02] [PASSED] 20.04 Xe2_LPG
[06:05:02] [PASSED] 30.00 Xe3_LPG
[06:05:02] [PASSED] 30.01 Xe3_LPG
[06:05:02] [PASSED] 30.03 Xe3_LPG
[06:05:02] [PASSED] 30.04 Xe3_LPG
[06:05:02] [PASSED] 30.05 Xe3_LPG
[06:05:02] [PASSED] 35.11 Xe3p_XPC
[06:05:02] ================ [PASSED] check_graphics_ip ================
[06:05:02] ===================== check_media_ip  ======================
[06:05:02] [PASSED] 12.00 Xe_M
[06:05:02] [PASSED] 12.55 Xe_HPM
[06:05:02] [PASSED] 13.00 Xe_LPM+
[06:05:02] [PASSED] 13.01 Xe2_HPM
[06:05:02] [PASSED] 20.00 Xe2_LPM
[06:05:02] [PASSED] 30.00 Xe3_LPM
[06:05:02] [PASSED] 30.02 Xe3_LPM
[06:05:02] [PASSED] 35.00 Xe3p_LPM
[06:05:02] [PASSED] 35.03 Xe3p_HPM
[06:05:02] ================= [PASSED] check_media_ip ==================
[06:05:02] =================== check_platform_desc  ===================
[06:05:02] [PASSED] 0x9A60 (TIGERLAKE)
[06:05:02] [PASSED] 0x9A68 (TIGERLAKE)
[06:05:02] [PASSED] 0x9A70 (TIGERLAKE)
[06:05:02] [PASSED] 0x9A40 (TIGERLAKE)
[06:05:02] [PASSED] 0x9A49 (TIGERLAKE)
[06:05:02] [PASSED] 0x9A59 (TIGERLAKE)
[06:05:02] [PASSED] 0x9A78 (TIGERLAKE)
[06:05:02] [PASSED] 0x9AC0 (TIGERLAKE)
[06:05:02] [PASSED] 0x9AC9 (TIGERLAKE)
[06:05:02] [PASSED] 0x9AD9 (TIGERLAKE)
[06:05:02] [PASSED] 0x9AF8 (TIGERLAKE)
[06:05:02] [PASSED] 0x4C80 (ROCKETLAKE)
[06:05:02] [PASSED] 0x4C8A (ROCKETLAKE)
[06:05:02] [PASSED] 0x4C8B (ROCKETLAKE)
[06:05:02] [PASSED] 0x4C8C (ROCKETLAKE)
[06:05:02] [PASSED] 0x4C90 (ROCKETLAKE)
[06:05:02] [PASSED] 0x4C9A (ROCKETLAKE)
[06:05:02] [PASSED] 0x4680 (ALDERLAKE_S)
[06:05:02] [PASSED] 0x4682 (ALDERLAKE_S)
[06:05:02] [PASSED] 0x4688 (ALDERLAKE_S)
[06:05:02] [PASSED] 0x468A (ALDERLAKE_S)
[06:05:02] [PASSED] 0x468B (ALDERLAKE_S)
[06:05:02] [PASSED] 0x4690 (ALDERLAKE_S)
[06:05:02] [PASSED] 0x4692 (ALDERLAKE_S)
[06:05:02] [PASSED] 0x4693 (ALDERLAKE_S)
[06:05:02] [PASSED] 0x46A0 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46A1 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46A2 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46A3 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46A6 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46A8 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46AA (ALDERLAKE_P)
[06:05:02] [PASSED] 0x462A (ALDERLAKE_P)
[06:05:02] [PASSED] 0x4626 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x4628 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46B0 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46B1 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46B2 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46B3 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46C0 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46C1 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46C2 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46C3 (ALDERLAKE_P)
[06:05:02] [PASSED] 0x46D0 (ALDERLAKE_N)
[06:05:02] [PASSED] 0x46D1 (ALDERLAKE_N)
[06:05:02] [PASSED] 0x46D2 (ALDERLAKE_N)
[06:05:02] [PASSED] 0x46D3 (ALDERLAKE_N)
[06:05:02] [PASSED] 0x46D4 (ALDERLAKE_N)
[06:05:02] [PASSED] 0xA721 (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7A1 (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7A9 (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7AC (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7AD (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA720 (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7A0 (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7A8 (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7AA (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA7AB (ALDERLAKE_P)
[06:05:02] [PASSED] 0xA780 (ALDERLAKE_S)
[06:05:02] [PASSED] 0xA781 (ALDERLAKE_S)
[06:05:02] [PASSED] 0xA782 (ALDERLAKE_S)
[06:05:02] [PASSED] 0xA783 (ALDERLAKE_S)
[06:05:02] [PASSED] 0xA788 (ALDERLAKE_S)
[06:05:02] [PASSED] 0xA789 (ALDERLAKE_S)
[06:05:02] [PASSED] 0xA78A (ALDERLAKE_S)
[06:05:02] [PASSED] 0xA78B (ALDERLAKE_S)
[06:05:02] [PASSED] 0x4905 (DG1)
[06:05:02] [PASSED] 0x4906 (DG1)
[06:05:02] [PASSED] 0x4907 (DG1)
[06:05:02] [PASSED] 0x4908 (DG1)
[06:05:02] [PASSED] 0x4909 (DG1)
[06:05:02] [PASSED] 0x56C0 (DG2)
[06:05:02] [PASSED] 0x56C2 (DG2)
[06:05:02] [PASSED] 0x56C1 (DG2)
[06:05:02] [PASSED] 0x7D51 (METEORLAKE)
[06:05:02] [PASSED] 0x7DD1 (METEORLAKE)
[06:05:02] [PASSED] 0x7D41 (METEORLAKE)
[06:05:02] [PASSED] 0x7D67 (METEORLAKE)
[06:05:02] [PASSED] 0xB640 (METEORLAKE)
[06:05:02] [PASSED] 0x56A0 (DG2)
[06:05:02] [PASSED] 0x56A1 (DG2)
[06:05:02] [PASSED] 0x56A2 (DG2)
[06:05:02] [PASSED] 0x56BE (DG2)
[06:05:02] [PASSED] 0x56BF (DG2)
[06:05:02] [PASSED] 0x5690 (DG2)
[06:05:02] [PASSED] 0x5691 (DG2)
[06:05:02] [PASSED] 0x5692 (DG2)
[06:05:02] [PASSED] 0x56A5 (DG2)
[06:05:02] [PASSED] 0x56A6 (DG2)
[06:05:02] [PASSED] 0x56B0 (DG2)
[06:05:02] [PASSED] 0x56B1 (DG2)
[06:05:02] [PASSED] 0x56BA (DG2)
[06:05:02] [PASSED] 0x56BB (DG2)
[06:05:02] [PASSED] 0x56BC (DG2)
[06:05:02] [PASSED] 0x56BD (DG2)
[06:05:02] [PASSED] 0x5693 (DG2)
[06:05:02] [PASSED] 0x5694 (DG2)
[06:05:02] [PASSED] 0x5695 (DG2)
[06:05:02] [PASSED] 0x56A3 (DG2)
[06:05:02] [PASSED] 0x56A4 (DG2)
[06:05:02] [PASSED] 0x56B2 (DG2)
[06:05:02] [PASSED] 0x56B3 (DG2)
[06:05:02] [PASSED] 0x5696 (DG2)
[06:05:02] [PASSED] 0x5697 (DG2)
[06:05:02] [PASSED] 0xB69 (PVC)
[06:05:02] [PASSED] 0xB6E (PVC)
[06:05:02] [PASSED] 0xBD4 (PVC)
[06:05:02] [PASSED] 0xBD5 (PVC)
[06:05:02] [PASSED] 0xBD6 (PVC)
[06:05:02] [PASSED] 0xBD7 (PVC)
[06:05:02] [PASSED] 0xBD8 (PVC)
[06:05:02] [PASSED] 0xBD9 (PVC)
[06:05:02] [PASSED] 0xBDA (PVC)
[06:05:02] [PASSED] 0xBDB (PVC)
[06:05:02] [PASSED] 0xBE0 (PVC)
[06:05:02] [PASSED] 0xBE1 (PVC)
[06:05:02] [PASSED] 0xBE5 (PVC)
[06:05:02] [PASSED] 0x7D40 (METEORLAKE)
[06:05:02] [PASSED] 0x7D45 (METEORLAKE)
[06:05:02] [PASSED] 0x7D55 (METEORLAKE)
[06:05:02] [PASSED] 0x7D60 (METEORLAKE)
[06:05:02] [PASSED] 0x7DD5 (METEORLAKE)
[06:05:02] [PASSED] 0x6420 (LUNARLAKE)
[06:05:02] [PASSED] 0x64A0 (LUNARLAKE)
[06:05:02] [PASSED] 0x64B0 (LUNARLAKE)
[06:05:02] [PASSED] 0xE202 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE209 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE20B (BATTLEMAGE)
[06:05:02] [PASSED] 0xE20C (BATTLEMAGE)
[06:05:02] [PASSED] 0xE20D (BATTLEMAGE)
[06:05:02] [PASSED] 0xE210 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE211 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE212 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE216 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE220 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE221 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE222 (BATTLEMAGE)
[06:05:02] [PASSED] 0xE223 (BATTLEMAGE)
[06:05:02] [PASSED] 0xB080 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB081 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB082 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB083 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB084 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB085 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB086 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB087 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB08F (PANTHERLAKE)
[06:05:02] [PASSED] 0xB090 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB0A0 (PANTHERLAKE)
[06:05:02] [PASSED] 0xB0B0 (PANTHERLAKE)
[06:05:02] [PASSED] 0xFD80 (PANTHERLAKE)
[06:05:02] [PASSED] 0xFD81 (PANTHERLAKE)
[06:05:02] [PASSED] 0xD740 (NOVALAKE_S)
[06:05:02] [PASSED] 0xD741 (NOVALAKE_S)
[06:05:02] [PASSED] 0xD742 (NOVALAKE_S)
[06:05:02] [PASSED] 0xD743 (NOVALAKE_S)
[06:05:02] [PASSED] 0xD744 (NOVALAKE_S)
[06:05:02] [PASSED] 0xD745 (NOVALAKE_S)
[06:05:02] [PASSED] 0x674C (CRESCENTISLAND)
[06:05:02] =============== [PASSED] check_platform_desc ===============
[06:05:02] ===================== [PASSED] xe_pci ======================
[06:05:02] =================== xe_rtp (2 subtests) ====================
[06:05:02] =============== xe_rtp_process_to_sr_tests  ================
[06:05:02] [PASSED] coalesce-same-reg
[06:05:02] [PASSED] no-match-no-add
[06:05:02] [PASSED] match-or
[06:05:02] [PASSED] match-or-xfail
[06:05:02] [PASSED] no-match-no-add-multiple-rules
[06:05:02] [PASSED] two-regs-two-entries
[06:05:02] [PASSED] clr-one-set-other
[06:05:02] [PASSED] set-field
[06:05:02] [PASSED] conflict-duplicate
[06:05:02] [PASSED] conflict-not-disjoint
[06:05:02] [PASSED] conflict-reg-type
[06:05:02] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[06:05:02] ================== xe_rtp_process_tests  ===================
[06:05:02] [PASSED] active1
[06:05:02] [PASSED] active2
[06:05:02] [PASSED] active-inactive
[06:05:02] [PASSED] inactive-active
[06:05:02] [PASSED] inactive-1st_or_active-inactive
[06:05:02] [PASSED] inactive-2nd_or_active-inactive
[06:05:02] [PASSED] inactive-last_or_active-inactive
stty: 'standard input': Inappropriate ioctl for device
[06:05:02] [PASSED] inactive-no_or_active-inactive
[06:05:02] ============== [PASSED] xe_rtp_process_tests ===============
[06:05:02] ===================== [PASSED] xe_rtp ======================
[06:05:02] ==================== xe_wa (1 subtest) =====================
[06:05:02] ======================== xe_wa_gt  =========================
[06:05:02] [PASSED] TIGERLAKE B0
[06:05:02] [PASSED] DG1 A0
[06:05:02] [PASSED] DG1 B0
[06:05:02] [PASSED] ALDERLAKE_S A0
[06:05:02] [PASSED] ALDERLAKE_S B0
[06:05:02] [PASSED] ALDERLAKE_S C0
[06:05:02] [PASSED] ALDERLAKE_S D0
[06:05:02] [PASSED] ALDERLAKE_P A0
[06:05:02] [PASSED] ALDERLAKE_P B0
[06:05:02] [PASSED] ALDERLAKE_P C0
[06:05:02] [PASSED] ALDERLAKE_S RPLS D0
[06:05:02] [PASSED] ALDERLAKE_P RPLU E0
[06:05:02] [PASSED] DG2 G10 C0
[06:05:02] [PASSED] DG2 G11 B1
[06:05:02] [PASSED] DG2 G12 A1
[06:05:02] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[06:05:02] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[06:05:02] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[06:05:02] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[06:05:02] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[06:05:02] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[06:05:02] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[06:05:02] ==================== [PASSED] xe_wa_gt =====================
[06:05:02] ====================== [PASSED] xe_wa ======================
[06:05:02] ============================================================
[06:05:02] Testing complete. Ran 318 tests: passed: 300, skipped: 18
[06:05:02] Elapsed time: 35.524s total, 4.211s configuring, 30.947s building, 0.331s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[06:05:03] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[06:05:04] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[06:05:29] Starting KUnit Kernel (1/1)...
[06:05:29] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[06:05:29] ============ drm_test_pick_cmdline (2 subtests) ============
[06:05:29] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[06:05:29] =============== drm_test_pick_cmdline_named  ===============
[06:05:29] [PASSED] NTSC
[06:05:29] [PASSED] NTSC-J
[06:05:29] [PASSED] PAL
[06:05:29] [PASSED] PAL-M
[06:05:29] =========== [PASSED] drm_test_pick_cmdline_named ===========
[06:05:29] ============== [PASSED] drm_test_pick_cmdline ==============
[06:05:29] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[06:05:29] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[06:05:29] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[06:05:29] =========== drm_validate_clone_mode (2 subtests) ===========
[06:05:29] ============== drm_test_check_in_clone_mode  ===============
[06:05:29] [PASSED] in_clone_mode
[06:05:29] [PASSED] not_in_clone_mode
[06:05:29] ========== [PASSED] drm_test_check_in_clone_mode ===========
[06:05:29] =============== drm_test_check_valid_clones  ===============
[06:05:29] [PASSED] not_in_clone_mode
[06:05:29] [PASSED] valid_clone
[06:05:29] [PASSED] invalid_clone
[06:05:29] =========== [PASSED] drm_test_check_valid_clones ===========
[06:05:29] ============= [PASSED] drm_validate_clone_mode =============
[06:05:29] ============= drm_validate_modeset (1 subtest) =============
[06:05:29] [PASSED] drm_test_check_connector_changed_modeset
[06:05:29] ============== [PASSED] drm_validate_modeset ===============
[06:05:29] ====== drm_test_bridge_get_current_state (2 subtests) ======
[06:05:29] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[06:05:29] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[06:05:29] ======== [PASSED] drm_test_bridge_get_current_state ========
[06:05:29] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[06:05:29] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[06:05:29] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[06:05:29] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[06:05:29] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[06:05:29] ============== drm_bridge_alloc (2 subtests) ===============
[06:05:29] [PASSED] drm_test_drm_bridge_alloc_basic
[06:05:29] [PASSED] drm_test_drm_bridge_alloc_get_put
[06:05:29] ================ [PASSED] drm_bridge_alloc =================
[06:05:29] ================== drm_buddy (8 subtests) ==================
[06:05:29] [PASSED] drm_test_buddy_alloc_limit
[06:05:29] [PASSED] drm_test_buddy_alloc_optimistic
[06:05:29] [PASSED] drm_test_buddy_alloc_pessimistic
[06:05:29] [PASSED] drm_test_buddy_alloc_pathological
[06:05:29] [PASSED] drm_test_buddy_alloc_contiguous
[06:05:29] [PASSED] drm_test_buddy_alloc_clear
[06:05:29] [PASSED] drm_test_buddy_alloc_range_bias
[06:05:29] [PASSED] drm_test_buddy_fragmentation_performance
[06:05:29] ==================== [PASSED] drm_buddy ====================
[06:05:29] ============= drm_cmdline_parser (40 subtests) =============
[06:05:29] [PASSED] drm_test_cmdline_force_d_only
[06:05:29] [PASSED] drm_test_cmdline_force_D_only_dvi
[06:05:29] [PASSED] drm_test_cmdline_force_D_only_hdmi
[06:05:29] [PASSED] drm_test_cmdline_force_D_only_not_digital
[06:05:29] [PASSED] drm_test_cmdline_force_e_only
[06:05:29] [PASSED] drm_test_cmdline_res
[06:05:29] [PASSED] drm_test_cmdline_res_vesa
[06:05:29] [PASSED] drm_test_cmdline_res_vesa_rblank
[06:05:29] [PASSED] drm_test_cmdline_res_rblank
[06:05:29] [PASSED] drm_test_cmdline_res_bpp
[06:05:29] [PASSED] drm_test_cmdline_res_refresh
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[06:05:29] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[06:05:29] [PASSED] drm_test_cmdline_res_margins_force_on
[06:05:29] [PASSED] drm_test_cmdline_res_vesa_margins
[06:05:29] [PASSED] drm_test_cmdline_name
[06:05:29] [PASSED] drm_test_cmdline_name_bpp
[06:05:29] [PASSED] drm_test_cmdline_name_option
[06:05:29] [PASSED] drm_test_cmdline_name_bpp_option
[06:05:29] [PASSED] drm_test_cmdline_rotate_0
[06:05:29] [PASSED] drm_test_cmdline_rotate_90
[06:05:29] [PASSED] drm_test_cmdline_rotate_180
[06:05:29] [PASSED] drm_test_cmdline_rotate_270
[06:05:29] [PASSED] drm_test_cmdline_hmirror
[06:05:29] [PASSED] drm_test_cmdline_vmirror
[06:05:29] [PASSED] drm_test_cmdline_margin_options
[06:05:29] [PASSED] drm_test_cmdline_multiple_options
[06:05:29] [PASSED] drm_test_cmdline_bpp_extra_and_option
[06:05:29] [PASSED] drm_test_cmdline_extra_and_option
[06:05:29] [PASSED] drm_test_cmdline_freestanding_options
[06:05:29] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[06:05:29] [PASSED] drm_test_cmdline_panel_orientation
[06:05:29] ================ drm_test_cmdline_invalid  =================
[06:05:29] [PASSED] margin_only
[06:05:29] [PASSED] interlace_only
[06:05:29] [PASSED] res_missing_x
[06:05:29] [PASSED] res_missing_y
[06:05:29] [PASSED] res_bad_y
[06:05:29] [PASSED] res_missing_y_bpp
[06:05:29] [PASSED] res_bad_bpp
[06:05:29] [PASSED] res_bad_refresh
[06:05:29] [PASSED] res_bpp_refresh_force_on_off
[06:05:29] [PASSED] res_invalid_mode
[06:05:29] [PASSED] res_bpp_wrong_place_mode
[06:05:29] [PASSED] name_bpp_refresh
[06:05:29] [PASSED] name_refresh
[06:05:29] [PASSED] name_refresh_wrong_mode
[06:05:29] [PASSED] name_refresh_invalid_mode
[06:05:29] [PASSED] rotate_multiple
[06:05:29] [PASSED] rotate_invalid_val
[06:05:29] [PASSED] rotate_truncated
[06:05:29] [PASSED] invalid_option
[06:05:29] [PASSED] invalid_tv_option
[06:05:29] [PASSED] truncated_tv_option
[06:05:29] ============ [PASSED] drm_test_cmdline_invalid =============
[06:05:29] =============== drm_test_cmdline_tv_options  ===============
[06:05:29] [PASSED] NTSC
[06:05:29] [PASSED] NTSC_443
[06:05:29] [PASSED] NTSC_J
[06:05:29] [PASSED] PAL
[06:05:29] [PASSED] PAL_M
[06:05:29] [PASSED] PAL_N
[06:05:29] [PASSED] SECAM
[06:05:29] [PASSED] MONO_525
[06:05:29] [PASSED] MONO_625
[06:05:29] =========== [PASSED] drm_test_cmdline_tv_options ===========
[06:05:29] =============== [PASSED] drm_cmdline_parser ================
[06:05:29] ========== drmm_connector_hdmi_init (20 subtests) ==========
[06:05:29] [PASSED] drm_test_connector_hdmi_init_valid
[06:05:29] [PASSED] drm_test_connector_hdmi_init_bpc_8
[06:05:29] [PASSED] drm_test_connector_hdmi_init_bpc_10
[06:05:29] [PASSED] drm_test_connector_hdmi_init_bpc_12
[06:05:29] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[06:05:29] [PASSED] drm_test_connector_hdmi_init_bpc_null
[06:05:29] [PASSED] drm_test_connector_hdmi_init_formats_empty
[06:05:29] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[06:05:29] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[06:05:29] [PASSED] supported_formats=0x9 yuv420_allowed=1
[06:05:29] [PASSED] supported_formats=0x9 yuv420_allowed=0
[06:05:29] [PASSED] supported_formats=0x3 yuv420_allowed=1
[06:05:29] [PASSED] supported_formats=0x3 yuv420_allowed=0
[06:05:29] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[06:05:29] [PASSED] drm_test_connector_hdmi_init_null_ddc
[06:05:29] [PASSED] drm_test_connector_hdmi_init_null_product
[06:05:29] [PASSED] drm_test_connector_hdmi_init_null_vendor
[06:05:29] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[06:05:29] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[06:05:29] [PASSED] drm_test_connector_hdmi_init_product_valid
[06:05:29] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[06:05:29] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[06:05:29] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[06:05:29] ========= drm_test_connector_hdmi_init_type_valid  =========
[06:05:29] [PASSED] HDMI-A
[06:05:29] [PASSED] HDMI-B
[06:05:29] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[06:05:29] ======== drm_test_connector_hdmi_init_type_invalid  ========
[06:05:29] [PASSED] Unknown
[06:05:29] [PASSED] VGA
[06:05:29] [PASSED] DVI-I
[06:05:29] [PASSED] DVI-D
[06:05:29] [PASSED] DVI-A
[06:05:29] [PASSED] Composite
[06:05:29] [PASSED] SVIDEO
[06:05:29] [PASSED] LVDS
[06:05:29] [PASSED] Component
[06:05:29] [PASSED] DIN
[06:05:29] [PASSED] DP
[06:05:29] [PASSED] TV
[06:05:29] [PASSED] eDP
[06:05:29] [PASSED] Virtual
[06:05:29] [PASSED] DSI
[06:05:29] [PASSED] DPI
[06:05:29] [PASSED] Writeback
[06:05:29] [PASSED] SPI
[06:05:29] [PASSED] USB
[06:05:29] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[06:05:29] ============ [PASSED] drmm_connector_hdmi_init =============
[06:05:29] ============= drmm_connector_init (3 subtests) =============
[06:05:29] [PASSED] drm_test_drmm_connector_init
[06:05:29] [PASSED] drm_test_drmm_connector_init_null_ddc
[06:05:29] ========= drm_test_drmm_connector_init_type_valid  =========
[06:05:29] [PASSED] Unknown
[06:05:29] [PASSED] VGA
[06:05:29] [PASSED] DVI-I
[06:05:29] [PASSED] DVI-D
[06:05:29] [PASSED] DVI-A
[06:05:29] [PASSED] Composite
[06:05:29] [PASSED] SVIDEO
[06:05:29] [PASSED] LVDS
[06:05:29] [PASSED] Component
[06:05:29] [PASSED] DIN
[06:05:29] [PASSED] DP
[06:05:29] [PASSED] HDMI-A
[06:05:29] [PASSED] HDMI-B
[06:05:29] [PASSED] TV
[06:05:29] [PASSED] eDP
[06:05:29] [PASSED] Virtual
[06:05:29] [PASSED] DSI
[06:05:29] [PASSED] DPI
[06:05:29] [PASSED] Writeback
[06:05:29] [PASSED] SPI
[06:05:29] [PASSED] USB
[06:05:29] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[06:05:29] =============== [PASSED] drmm_connector_init ===============
[06:05:29] ========= drm_connector_dynamic_init (6 subtests) ==========
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_init
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_init_properties
[06:05:29] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[06:05:29] [PASSED] Unknown
[06:05:29] [PASSED] VGA
[06:05:29] [PASSED] DVI-I
[06:05:29] [PASSED] DVI-D
[06:05:29] [PASSED] DVI-A
[06:05:29] [PASSED] Composite
[06:05:29] [PASSED] SVIDEO
[06:05:29] [PASSED] LVDS
[06:05:29] [PASSED] Component
[06:05:29] [PASSED] DIN
[06:05:29] [PASSED] DP
[06:05:29] [PASSED] HDMI-A
[06:05:29] [PASSED] HDMI-B
[06:05:29] [PASSED] TV
[06:05:29] [PASSED] eDP
[06:05:29] [PASSED] Virtual
[06:05:29] [PASSED] DSI
[06:05:29] [PASSED] DPI
[06:05:29] [PASSED] Writeback
[06:05:29] [PASSED] SPI
[06:05:29] [PASSED] USB
[06:05:29] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[06:05:29] ======== drm_test_drm_connector_dynamic_init_name  =========
[06:05:29] [PASSED] Unknown
[06:05:29] [PASSED] VGA
[06:05:29] [PASSED] DVI-I
[06:05:29] [PASSED] DVI-D
[06:05:29] [PASSED] DVI-A
[06:05:29] [PASSED] Composite
[06:05:29] [PASSED] SVIDEO
[06:05:29] [PASSED] LVDS
[06:05:29] [PASSED] Component
[06:05:29] [PASSED] DIN
[06:05:29] [PASSED] DP
[06:05:29] [PASSED] HDMI-A
[06:05:29] [PASSED] HDMI-B
[06:05:29] [PASSED] TV
[06:05:29] [PASSED] eDP
[06:05:29] [PASSED] Virtual
[06:05:29] [PASSED] DSI
[06:05:29] [PASSED] DPI
[06:05:29] [PASSED] Writeback
[06:05:29] [PASSED] SPI
[06:05:29] [PASSED] USB
[06:05:29] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[06:05:29] =========== [PASSED] drm_connector_dynamic_init ============
[06:05:29] ==== drm_connector_dynamic_register_early (4 subtests) =====
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[06:05:29] ====== [PASSED] drm_connector_dynamic_register_early =======
[06:05:29] ======= drm_connector_dynamic_register (7 subtests) ========
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[06:05:29] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[06:05:29] ========= [PASSED] drm_connector_dynamic_register ==========
[06:05:29] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[06:05:29] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[06:05:29] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[06:05:29] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[06:05:29] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[06:05:29] ========== drm_test_get_tv_mode_from_name_valid  ===========
[06:05:29] [PASSED] NTSC
[06:05:29] [PASSED] NTSC-443
[06:05:29] [PASSED] NTSC-J
[06:05:29] [PASSED] PAL
[06:05:29] [PASSED] PAL-M
[06:05:29] [PASSED] PAL-N
[06:05:29] [PASSED] SECAM
[06:05:29] [PASSED] Mono
[06:05:29] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[06:05:29] [PASSED] drm_test_get_tv_mode_from_name_truncated
[06:05:29] ============ [PASSED] drm_get_tv_mode_from_name ============
[06:05:29] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[06:05:29] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[06:05:29] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[06:05:29] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[06:05:29] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[06:05:29] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[06:05:29] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[06:05:29] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[06:05:29] [PASSED] VIC 96
[06:05:29] [PASSED] VIC 97
[06:05:29] [PASSED] VIC 101
[06:05:29] [PASSED] VIC 102
[06:05:29] [PASSED] VIC 106
[06:05:29] [PASSED] VIC 107
[06:05:29] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[06:05:29] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[06:05:29] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[06:05:29] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[06:05:29] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[06:05:29] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[06:05:29] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[06:05:29] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[06:05:29] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[06:05:29] [PASSED] Automatic
[06:05:29] [PASSED] Full
[06:05:29] [PASSED] Limited 16:235
[06:05:29] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[06:05:29] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[06:05:29] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[06:05:29] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[06:05:29] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[06:05:29] [PASSED] RGB
[06:05:29] [PASSED] YUV 4:2:0
[06:05:29] [PASSED] YUV 4:2:2
[06:05:29] [PASSED] YUV 4:4:4
[06:05:29] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[06:05:29] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[06:05:29] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[06:05:29] ============= drm_damage_helper (21 subtests) ==============
[06:05:29] [PASSED] drm_test_damage_iter_no_damage
[06:05:29] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[06:05:29] [PASSED] drm_test_damage_iter_no_damage_src_moved
[06:05:29] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[06:05:29] [PASSED] drm_test_damage_iter_no_damage_not_visible
[06:05:29] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[06:05:29] [PASSED] drm_test_damage_iter_no_damage_no_fb
[06:05:29] [PASSED] drm_test_damage_iter_simple_damage
[06:05:29] [PASSED] drm_test_damage_iter_single_damage
[06:05:29] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[06:05:29] [PASSED] drm_test_damage_iter_single_damage_outside_src
[06:05:29] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[06:05:29] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[06:05:29] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[06:05:29] [PASSED] drm_test_damage_iter_single_damage_src_moved
[06:05:29] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[06:05:29] [PASSED] drm_test_damage_iter_damage
[06:05:29] [PASSED] drm_test_damage_iter_damage_one_intersect
[06:05:29] [PASSED] drm_test_damage_iter_damage_one_outside
[06:05:29] [PASSED] drm_test_damage_iter_damage_src_moved
[06:05:29] [PASSED] drm_test_damage_iter_damage_not_visible
[06:05:29] ================ [PASSED] drm_damage_helper ================
[06:05:29] ============== drm_dp_mst_helper (3 subtests) ==============
[06:05:29] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[06:05:29] [PASSED] Clock 154000 BPP 30 DSC disabled
[06:05:29] [PASSED] Clock 234000 BPP 30 DSC disabled
[06:05:29] [PASSED] Clock 297000 BPP 24 DSC disabled
[06:05:29] [PASSED] Clock 332880 BPP 24 DSC enabled
[06:05:29] [PASSED] Clock 324540 BPP 24 DSC enabled
[06:05:29] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[06:05:29] ============== drm_test_dp_mst_calc_pbn_div  ===============
[06:05:29] [PASSED] Link rate 2000000 lane count 4
[06:05:29] [PASSED] Link rate 2000000 lane count 2
[06:05:29] [PASSED] Link rate 2000000 lane count 1
[06:05:29] [PASSED] Link rate 1350000 lane count 4
[06:05:29] [PASSED] Link rate 1350000 lane count 2
[06:05:29] [PASSED] Link rate 1350000 lane count 1
[06:05:29] [PASSED] Link rate 1000000 lane count 4
[06:05:29] [PASSED] Link rate 1000000 lane count 2
[06:05:29] [PASSED] Link rate 1000000 lane count 1
[06:05:29] [PASSED] Link rate 810000 lane count 4
[06:05:29] [PASSED] Link rate 810000 lane count 2
[06:05:29] [PASSED] Link rate 810000 lane count 1
[06:05:29] [PASSED] Link rate 540000 lane count 4
[06:05:29] [PASSED] Link rate 540000 lane count 2
[06:05:29] [PASSED] Link rate 540000 lane count 1
[06:05:29] [PASSED] Link rate 270000 lane count 4
[06:05:29] [PASSED] Link rate 270000 lane count 2
[06:05:29] [PASSED] Link rate 270000 lane count 1
[06:05:29] [PASSED] Link rate 162000 lane count 4
[06:05:29] [PASSED] Link rate 162000 lane count 2
[06:05:29] [PASSED] Link rate 162000 lane count 1
[06:05:29] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[06:05:29] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[06:05:29] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[06:05:29] [PASSED] DP_POWER_UP_PHY with port number
[06:05:29] [PASSED] DP_POWER_DOWN_PHY with port number
[06:05:29] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[06:05:29] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[06:05:29] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[06:05:29] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[06:05:29] [PASSED] DP_QUERY_PAYLOAD with port number
[06:05:29] [PASSED] DP_QUERY_PAYLOAD with VCPI
[06:05:29] [PASSED] DP_REMOTE_DPCD_READ with port number
[06:05:29] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[06:05:29] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[06:05:29] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[06:05:29] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[06:05:29] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[06:05:29] [PASSED] DP_REMOTE_I2C_READ with port number
[06:05:29] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[06:05:29] [PASSED] DP_REMOTE_I2C_READ with transactions array
[06:05:29] [PASSED] DP_REMOTE_I2C_WRITE with port number
[06:05:29] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[06:05:29] [PASSED] DP_REMOTE_I2C_WRITE with data array
[06:05:29] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[06:05:29] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[06:05:29] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[06:05:29] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[06:05:29] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[06:05:29] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[06:05:29] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[06:05:29] ================ [PASSED] drm_dp_mst_helper ================
[06:05:29] ================== drm_exec (7 subtests) ===================
[06:05:29] [PASSED] sanitycheck
[06:05:29] [PASSED] test_lock
[06:05:29] [PASSED] test_lock_unlock
[06:05:29] [PASSED] test_duplicates
[06:05:29] [PASSED] test_prepare
[06:05:29] [PASSED] test_prepare_array
[06:05:29] [PASSED] test_multiple_loops
[06:05:29] ==================== [PASSED] drm_exec =====================
[06:05:29] =========== drm_format_helper_test (17 subtests) ===========
[06:05:29] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[06:05:29] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[06:05:29] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[06:05:29] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[06:05:29] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[06:05:29] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[06:05:29] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[06:05:29] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[06:05:29] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[06:05:29] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[06:05:29] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[06:05:29] ============== drm_test_fb_xrgb8888_to_mono  ===============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[06:05:29] ==================== drm_test_fb_swab  =====================
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ================ [PASSED] drm_test_fb_swab =================
[06:05:29] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[06:05:29] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[06:05:29] [PASSED] single_pixel_source_buffer
[06:05:29] [PASSED] single_pixel_clip_rectangle
[06:05:29] [PASSED] well_known_colors
[06:05:29] [PASSED] destination_pitch
[06:05:29] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[06:05:29] ================= drm_test_fb_clip_offset  =================
[06:05:29] [PASSED] pass through
[06:05:29] [PASSED] horizontal offset
[06:05:29] [PASSED] vertical offset
[06:05:29] [PASSED] horizontal and vertical offset
[06:05:29] [PASSED] horizontal offset (custom pitch)
[06:05:29] [PASSED] vertical offset (custom pitch)
[06:05:29] [PASSED] horizontal and vertical offset (custom pitch)
[06:05:29] ============= [PASSED] drm_test_fb_clip_offset =============
[06:05:29] =================== drm_test_fb_memcpy  ====================
[06:05:29] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[06:05:29] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[06:05:29] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[06:05:29] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[06:05:29] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[06:05:29] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[06:05:29] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[06:05:29] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[06:05:29] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[06:05:29] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[06:05:29] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[06:05:29] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[06:05:29] =============== [PASSED] drm_test_fb_memcpy ================
[06:05:29] ============= [PASSED] drm_format_helper_test ==============
[06:05:29] ================= drm_format (18 subtests) =================
[06:05:29] [PASSED] drm_test_format_block_width_invalid
[06:05:29] [PASSED] drm_test_format_block_width_one_plane
[06:05:29] [PASSED] drm_test_format_block_width_two_plane
[06:05:29] [PASSED] drm_test_format_block_width_three_plane
[06:05:29] [PASSED] drm_test_format_block_width_tiled
[06:05:29] [PASSED] drm_test_format_block_height_invalid
[06:05:29] [PASSED] drm_test_format_block_height_one_plane
[06:05:29] [PASSED] drm_test_format_block_height_two_plane
[06:05:29] [PASSED] drm_test_format_block_height_three_plane
[06:05:29] [PASSED] drm_test_format_block_height_tiled
[06:05:29] [PASSED] drm_test_format_min_pitch_invalid
[06:05:29] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[06:05:29] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[06:05:29] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[06:05:29] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[06:05:29] [PASSED] drm_test_format_min_pitch_two_plane
[06:05:29] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[06:05:29] [PASSED] drm_test_format_min_pitch_tiled
[06:05:29] =================== [PASSED] drm_format ====================
[06:05:29] ============== drm_framebuffer (10 subtests) ===============
[06:05:29] ========== drm_test_framebuffer_check_src_coords  ==========
[06:05:29] [PASSED] Success: source fits into fb
[06:05:29] [PASSED] Fail: overflowing fb with x-axis coordinate
[06:05:29] [PASSED] Fail: overflowing fb with y-axis coordinate
[06:05:29] [PASSED] Fail: overflowing fb with source width
[06:05:29] [PASSED] Fail: overflowing fb with source height
[06:05:29] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[06:05:29] [PASSED] drm_test_framebuffer_cleanup
[06:05:29] =============== drm_test_framebuffer_create  ===============
[06:05:29] [PASSED] ABGR8888 normal sizes
[06:05:29] [PASSED] ABGR8888 max sizes
[06:05:29] [PASSED] ABGR8888 pitch greater than min required
[06:05:29] [PASSED] ABGR8888 pitch less than min required
[06:05:29] [PASSED] ABGR8888 Invalid width
[06:05:29] [PASSED] ABGR8888 Invalid buffer handle
[06:05:29] [PASSED] No pixel format
[06:05:29] [PASSED] ABGR8888 Width 0
[06:05:29] [PASSED] ABGR8888 Height 0
[06:05:29] [PASSED] ABGR8888 Out of bound height * pitch combination
[06:05:29] [PASSED] ABGR8888 Large buffer offset
[06:05:29] [PASSED] ABGR8888 Buffer offset for inexistent plane
[06:05:29] [PASSED] ABGR8888 Invalid flag
[06:05:29] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[06:05:29] [PASSED] ABGR8888 Valid buffer modifier
[06:05:29] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[06:05:29] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[06:05:29] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[06:05:29] [PASSED] NV12 Normal sizes
[06:05:29] [PASSED] NV12 Max sizes
[06:05:29] [PASSED] NV12 Invalid pitch
[06:05:29] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[06:05:29] [PASSED] NV12 different  modifier per-plane
[06:05:29] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[06:05:29] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[06:05:29] [PASSED] NV12 Modifier for inexistent plane
[06:05:29] [PASSED] NV12 Handle for inexistent plane
[06:05:29] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[06:05:29] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[06:05:29] [PASSED] YVU420 Normal sizes
[06:05:29] [PASSED] YVU420 Max sizes
[06:05:29] [PASSED] YVU420 Invalid pitch
[06:05:29] [PASSED] YVU420 Different pitches
[06:05:29] [PASSED] YVU420 Different buffer offsets/pitches
[06:05:29] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[06:05:29] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[06:05:29] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[06:05:29] [PASSED] YVU420 Valid modifier
[06:05:29] [PASSED] YVU420 Different modifiers per plane
[06:05:29] [PASSED] YVU420 Modifier for inexistent plane
[06:05:29] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[06:05:29] [PASSED] X0L2 Normal sizes
[06:05:29] [PASSED] X0L2 Max sizes
[06:05:29] [PASSED] X0L2 Invalid pitch
[06:05:29] [PASSED] X0L2 Pitch greater than minimum required
[06:05:29] [PASSED] X0L2 Handle for inexistent plane
[06:05:29] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[06:05:29] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[06:05:29] [PASSED] X0L2 Valid modifier
[06:05:29] [PASSED] X0L2 Modifier for inexistent plane
[06:05:29] =========== [PASSED] drm_test_framebuffer_create ===========
[06:05:29] [PASSED] drm_test_framebuffer_free
[06:05:29] [PASSED] drm_test_framebuffer_init
[06:05:29] [PASSED] drm_test_framebuffer_init_bad_format
[06:05:29] [PASSED] drm_test_framebuffer_init_dev_mismatch
[06:05:29] [PASSED] drm_test_framebuffer_lookup
[06:05:29] [PASSED] drm_test_framebuffer_lookup_inexistent
[06:05:29] [PASSED] drm_test_framebuffer_modifiers_not_supported
[06:05:29] ================= [PASSED] drm_framebuffer =================
[06:05:29] ================ drm_gem_shmem (8 subtests) ================
[06:05:29] [PASSED] drm_gem_shmem_test_obj_create
[06:05:29] [PASSED] drm_gem_shmem_test_obj_create_private
[06:05:29] [PASSED] drm_gem_shmem_test_pin_pages
[06:05:29] [PASSED] drm_gem_shmem_test_vmap
[06:05:29] [PASSED] drm_gem_shmem_test_get_pages_sgt
[06:05:29] [PASSED] drm_gem_shmem_test_get_sg_table
[06:05:29] [PASSED] drm_gem_shmem_test_madvise
[06:05:29] [PASSED] drm_gem_shmem_test_purge
[06:05:29] ================== [PASSED] drm_gem_shmem ==================
[06:05:29] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[06:05:29] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[06:05:29] [PASSED] Automatic
[06:05:29] [PASSED] Full
[06:05:29] [PASSED] Limited 16:235
[06:05:29] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[06:05:29] [PASSED] drm_test_check_disable_connector
[06:05:29] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[06:05:29] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[06:05:29] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[06:05:29] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[06:05:29] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[06:05:29] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[06:05:29] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[06:05:29] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[06:05:29] [PASSED] drm_test_check_output_bpc_dvi
[06:05:29] [PASSED] drm_test_check_output_bpc_format_vic_1
[06:05:29] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[06:05:29] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[06:05:29] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[06:05:29] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[06:05:29] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[06:05:29] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[06:05:29] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[06:05:29] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[06:05:29] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[06:05:29] [PASSED] drm_test_check_broadcast_rgb_value
[06:05:29] [PASSED] drm_test_check_bpc_8_value
[06:05:29] [PASSED] drm_test_check_bpc_10_value
[06:05:29] [PASSED] drm_test_check_bpc_12_value
[06:05:29] [PASSED] drm_test_check_format_value
[06:05:29] [PASSED] drm_test_check_tmds_char_value
[06:05:29] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[06:05:29] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[06:05:29] [PASSED] drm_test_check_mode_valid
[06:05:29] [PASSED] drm_test_check_mode_valid_reject
[06:05:29] [PASSED] drm_test_check_mode_valid_reject_rate
[06:05:29] [PASSED] drm_test_check_mode_valid_reject_max_clock
[06:05:29] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[06:05:29] ================= drm_managed (2 subtests) =================
[06:05:29] [PASSED] drm_test_managed_release_action
[06:05:29] [PASSED] drm_test_managed_run_action
[06:05:29] =================== [PASSED] drm_managed ===================
[06:05:29] =================== drm_mm (6 subtests) ====================
[06:05:29] [PASSED] drm_test_mm_init
[06:05:29] [PASSED] drm_test_mm_debug
[06:05:29] [PASSED] drm_test_mm_align32
[06:05:29] [PASSED] drm_test_mm_align64
[06:05:29] [PASSED] drm_test_mm_lowest
[06:05:29] [PASSED] drm_test_mm_highest
[06:05:29] ===================== [PASSED] drm_mm ======================
[06:05:29] ============= drm_modes_analog_tv (5 subtests) =============
[06:05:29] [PASSED] drm_test_modes_analog_tv_mono_576i
[06:05:29] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[06:05:29] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[06:05:29] [PASSED] drm_test_modes_analog_tv_pal_576i
[06:05:29] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[06:05:29] =============== [PASSED] drm_modes_analog_tv ===============
[06:05:29] ============== drm_plane_helper (2 subtests) ===============
[06:05:29] =============== drm_test_check_plane_state  ================
[06:05:29] [PASSED] clipping_simple
[06:05:29] [PASSED] clipping_rotate_reflect
[06:05:29] [PASSED] positioning_simple
[06:05:29] [PASSED] upscaling
[06:05:29] [PASSED] downscaling
[06:05:29] [PASSED] rounding1
[06:05:29] [PASSED] rounding2
[06:05:29] [PASSED] rounding3
[06:05:29] [PASSED] rounding4
[06:05:29] =========== [PASSED] drm_test_check_plane_state ============
[06:05:29] =========== drm_test_check_invalid_plane_state  ============
[06:05:29] [PASSED] positioning_invalid
[06:05:29] [PASSED] upscaling_invalid
[06:05:29] [PASSED] downscaling_invalid
[06:05:29] ======= [PASSED] drm_test_check_invalid_plane_state ========
[06:05:29] ================ [PASSED] drm_plane_helper =================
[06:05:29] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[06:05:29] ====== drm_test_connector_helper_tv_get_modes_check  =======
[06:05:29] [PASSED] None
[06:05:29] [PASSED] PAL
[06:05:29] [PASSED] NTSC
[06:05:29] [PASSED] Both, NTSC Default
[06:05:29] [PASSED] Both, PAL Default
[06:05:29] [PASSED] Both, NTSC Default, with PAL on command-line
[06:05:29] [PASSED] Both, PAL Default, with NTSC on command-line
[06:05:29] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[06:05:29] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[06:05:29] ================== drm_rect (9 subtests) ===================
[06:05:29] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[06:05:29] [PASSED] drm_test_rect_clip_scaled_not_clipped
[06:05:29] [PASSED] drm_test_rect_clip_scaled_clipped
[06:05:29] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[06:05:29] ================= drm_test_rect_intersect  =================
[06:05:29] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[06:05:29] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[06:05:29] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[06:05:29] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[06:05:29] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[06:05:29] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[06:05:29] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[06:05:29] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[06:05:29] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[06:05:29] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[06:05:29] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[06:05:29] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[06:05:29] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[06:05:29] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[06:05:29] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[06:05:29] ============= [PASSED] drm_test_rect_intersect =============
[06:05:29] ================ drm_test_rect_calc_hscale  ================
[06:05:29] [PASSED] normal use
[06:05:29] [PASSED] out of max range
[06:05:29] [PASSED] out of min range
[06:05:29] [PASSED] zero dst
[06:05:29] [PASSED] negative src
[06:05:29] [PASSED] negative dst
[06:05:29] ============ [PASSED] drm_test_rect_calc_hscale ============
[06:05:29] ================ drm_test_rect_calc_vscale  ================
[06:05:29] [PASSED] normal use
stty: 'standard input': Inappropriate ioctl for device
[06:05:29] [PASSED] out of max range
[06:05:29] [PASSED] out of min range
[06:05:29] [PASSED] zero dst
[06:05:29] [PASSED] negative src
[06:05:29] [PASSED] negative dst
[06:05:29] ============ [PASSED] drm_test_rect_calc_vscale ============
[06:05:29] ================== drm_test_rect_rotate  ===================
[06:05:29] [PASSED] reflect-x
[06:05:29] [PASSED] reflect-y
[06:05:29] [PASSED] rotate-0
[06:05:29] [PASSED] rotate-90
[06:05:29] [PASSED] rotate-180
[06:05:29] [PASSED] rotate-270
[06:05:29] ============== [PASSED] drm_test_rect_rotate ===============
[06:05:29] ================ drm_test_rect_rotate_inv  =================
[06:05:29] [PASSED] reflect-x
[06:05:29] [PASSED] reflect-y
[06:05:29] [PASSED] rotate-0
[06:05:29] [PASSED] rotate-90
[06:05:29] [PASSED] rotate-180
[06:05:29] [PASSED] rotate-270
[06:05:29] ============ [PASSED] drm_test_rect_rotate_inv =============
[06:05:29] ==================== [PASSED] drm_rect =====================
[06:05:29] ============ drm_sysfb_modeset_test (1 subtest) ============
[06:05:29] ============ drm_test_sysfb_build_fourcc_list  =============
[06:05:29] [PASSED] no native formats
[06:05:29] [PASSED] XRGB8888 as native format
[06:05:29] [PASSED] remove duplicates
[06:05:29] [PASSED] convert alpha formats
[06:05:29] [PASSED] random formats
[06:05:29] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[06:05:29] ============= [PASSED] drm_sysfb_modeset_test ==============
[06:05:29] ============================================================
[06:05:29] Testing complete. Ran 622 tests: passed: 622
[06:05:29] Elapsed time: 26.952s total, 1.645s configuring, 24.837s building, 0.427s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[06:05:30] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[06:05:31] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[06:05:41] Starting KUnit Kernel (1/1)...
[06:05:41] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[06:05:41] ================= ttm_device (5 subtests) ==================
[06:05:41] [PASSED] ttm_device_init_basic
[06:05:41] [PASSED] ttm_device_init_multiple
[06:05:41] [PASSED] ttm_device_fini_basic
[06:05:41] [PASSED] ttm_device_init_no_vma_man
[06:05:41] ================== ttm_device_init_pools  ==================
[06:05:41] [PASSED] No DMA allocations, no DMA32 required
[06:05:41] [PASSED] DMA allocations, DMA32 required
[06:05:41] [PASSED] No DMA allocations, DMA32 required
[06:05:41] [PASSED] DMA allocations, no DMA32 required
[06:05:41] ============== [PASSED] ttm_device_init_pools ==============
[06:05:41] =================== [PASSED] ttm_device ====================
[06:05:41] ================== ttm_pool (8 subtests) ===================
[06:05:41] ================== ttm_pool_alloc_basic  ===================
[06:05:41] [PASSED] One page
[06:05:41] [PASSED] More than one page
[06:05:41] [PASSED] Above the allocation limit
[06:05:41] [PASSED] One page, with coherent DMA mappings enabled
[06:05:41] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[06:05:41] ============== [PASSED] ttm_pool_alloc_basic ===============
[06:05:41] ============== ttm_pool_alloc_basic_dma_addr  ==============
[06:05:41] [PASSED] One page
[06:05:41] [PASSED] More than one page
[06:05:41] [PASSED] Above the allocation limit
[06:05:41] [PASSED] One page, with coherent DMA mappings enabled
[06:05:41] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[06:05:41] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[06:05:41] [PASSED] ttm_pool_alloc_order_caching_match
[06:05:41] [PASSED] ttm_pool_alloc_caching_mismatch
[06:05:41] [PASSED] ttm_pool_alloc_order_mismatch
[06:05:41] [PASSED] ttm_pool_free_dma_alloc
[06:05:41] [PASSED] ttm_pool_free_no_dma_alloc
[06:05:41] [PASSED] ttm_pool_fini_basic
[06:05:41] ==================== [PASSED] ttm_pool =====================
[06:05:41] ================ ttm_resource (8 subtests) =================
[06:05:41] ================= ttm_resource_init_basic  =================
[06:05:41] [PASSED] Init resource in TTM_PL_SYSTEM
[06:05:41] [PASSED] Init resource in TTM_PL_VRAM
[06:05:41] [PASSED] Init resource in a private placement
[06:05:41] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[06:05:41] ============= [PASSED] ttm_resource_init_basic =============
[06:05:41] [PASSED] ttm_resource_init_pinned
[06:05:41] [PASSED] ttm_resource_fini_basic
[06:05:41] [PASSED] ttm_resource_manager_init_basic
[06:05:41] [PASSED] ttm_resource_manager_usage_basic
[06:05:41] [PASSED] ttm_resource_manager_set_used_basic
[06:05:41] [PASSED] ttm_sys_man_alloc_basic
[06:05:41] [PASSED] ttm_sys_man_free_basic
[06:05:41] ================== [PASSED] ttm_resource ===================
[06:05:41] =================== ttm_tt (15 subtests) ===================
[06:05:41] ==================== ttm_tt_init_basic  ====================
[06:05:41] [PASSED] Page-aligned size
[06:05:41] [PASSED] Extra pages requested
[06:05:41] ================ [PASSED] ttm_tt_init_basic ================
[06:05:41] [PASSED] ttm_tt_init_misaligned
[06:05:41] [PASSED] ttm_tt_fini_basic
[06:05:41] [PASSED] ttm_tt_fini_sg
[06:05:41] [PASSED] ttm_tt_fini_shmem
[06:05:41] [PASSED] ttm_tt_create_basic
[06:05:41] [PASSED] ttm_tt_create_invalid_bo_type
[06:05:41] [PASSED] ttm_tt_create_ttm_exists
[06:05:41] [PASSED] ttm_tt_create_failed
[06:05:41] [PASSED] ttm_tt_destroy_basic
[06:05:41] [PASSED] ttm_tt_populate_null_ttm
[06:05:41] [PASSED] ttm_tt_populate_populated_ttm
[06:05:41] [PASSED] ttm_tt_unpopulate_basic
[06:05:41] [PASSED] ttm_tt_unpopulate_empty_ttm
[06:05:41] [PASSED] ttm_tt_swapin_basic
[06:05:41] ===================== [PASSED] ttm_tt ======================
[06:05:41] =================== ttm_bo (14 subtests) ===================
[06:05:41] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[06:05:41] [PASSED] Cannot be interrupted and sleeps
[06:05:41] [PASSED] Cannot be interrupted, locks straight away
[06:05:41] [PASSED] Can be interrupted, sleeps
[06:05:41] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[06:05:41] [PASSED] ttm_bo_reserve_locked_no_sleep
[06:05:41] [PASSED] ttm_bo_reserve_no_wait_ticket
[06:05:41] [PASSED] ttm_bo_reserve_double_resv
[06:05:41] [PASSED] ttm_bo_reserve_interrupted
[06:05:41] [PASSED] ttm_bo_reserve_deadlock
[06:05:41] [PASSED] ttm_bo_unreserve_basic
[06:05:41] [PASSED] ttm_bo_unreserve_pinned
[06:05:41] [PASSED] ttm_bo_unreserve_bulk
[06:05:41] [PASSED] ttm_bo_fini_basic
[06:05:41] [PASSED] ttm_bo_fini_shared_resv
[06:05:41] [PASSED] ttm_bo_pin_basic
[06:05:41] [PASSED] ttm_bo_pin_unpin_resource
[06:05:41] [PASSED] ttm_bo_multiple_pin_one_unpin
[06:05:41] ===================== [PASSED] ttm_bo ======================
[06:05:41] ============== ttm_bo_validate (21 subtests) ===============
[06:05:41] ============== ttm_bo_init_reserved_sys_man  ===============
[06:05:41] [PASSED] Buffer object for userspace
[06:05:41] [PASSED] Kernel buffer object
[06:05:41] [PASSED] Shared buffer object
[06:05:41] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[06:05:41] ============== ttm_bo_init_reserved_mock_man  ==============
[06:05:41] [PASSED] Buffer object for userspace
[06:05:41] [PASSED] Kernel buffer object
[06:05:41] [PASSED] Shared buffer object
[06:05:41] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[06:05:41] [PASSED] ttm_bo_init_reserved_resv
[06:05:41] ================== ttm_bo_validate_basic  ==================
[06:05:41] [PASSED] Buffer object for userspace
[06:05:41] [PASSED] Kernel buffer object
[06:05:41] [PASSED] Shared buffer object
[06:05:41] ============== [PASSED] ttm_bo_validate_basic ==============
[06:05:41] [PASSED] ttm_bo_validate_invalid_placement
[06:05:41] ============= ttm_bo_validate_same_placement  ==============
[06:05:41] [PASSED] System manager
[06:05:41] [PASSED] VRAM manager
[06:05:41] ========= [PASSED] ttm_bo_validate_same_placement ==========
[06:05:41] [PASSED] ttm_bo_validate_failed_alloc
[06:05:41] [PASSED] ttm_bo_validate_pinned
[06:05:41] [PASSED] ttm_bo_validate_busy_placement
[06:05:41] ================ ttm_bo_validate_multihop  =================
[06:05:41] [PASSED] Buffer object for userspace
[06:05:41] [PASSED] Kernel buffer object
[06:05:41] [PASSED] Shared buffer object
[06:05:41] ============ [PASSED] ttm_bo_validate_multihop =============
[06:05:41] ========== ttm_bo_validate_no_placement_signaled  ==========
[06:05:41] [PASSED] Buffer object in system domain, no page vector
[06:05:41] [PASSED] Buffer object in system domain with an existing page vector
[06:05:41] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[06:05:41] ======== ttm_bo_validate_no_placement_not_signaled  ========
[06:05:41] [PASSED] Buffer object for userspace
[06:05:41] [PASSED] Kernel buffer object
[06:05:41] [PASSED] Shared buffer object
[06:05:41] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[06:05:41] [PASSED] ttm_bo_validate_move_fence_signaled
[06:05:41] ========= ttm_bo_validate_move_fence_not_signaled  =========
[06:05:41] [PASSED] Waits for GPU
[06:05:41] [PASSED] Tries to lock straight away
[06:05:41] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[06:05:41] [PASSED] ttm_bo_validate_happy_evict
[06:05:41] [PASSED] ttm_bo_validate_all_pinned_evict
[06:05:41] [PASSED] ttm_bo_validate_allowed_only_evict
[06:05:41] [PASSED] ttm_bo_validate_deleted_evict
[06:05:41] [PASSED] ttm_bo_validate_busy_domain_evict
[06:05:41] [PASSED] ttm_bo_validate_evict_gutting
[06:05:41] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[06:05:41] ================= [PASSED] ttm_bo_validate =================
[06:05:41] ============================================================
[06:05:41] Testing complete. Ran 101 tests: passed: 101
[06:05:41] Elapsed time: 11.246s total, 1.726s configuring, 9.253s building, 0.217s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 23+ messages in thread

* ✓ Xe.CI.BAT: success for drm/xe: CRI support in gt_throttle + refactors (rev2)
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (9 preceding siblings ...)
  2025-10-27  6:05 ` ✓ CI.KUnit: success " Patchwork
@ 2025-10-27  6:51 ` Patchwork
  2025-10-27  8:25 ` ✗ Xe.CI.Full: failure " Patchwork
  2025-10-27 11:38 ` [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Raag Jadav
  12 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2025-10-27  6:51 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 1481 bytes --]

== Series Details ==

Series: drm/xe: CRI support in gt_throttle + refactors (rev2)
URL   : https://patchwork.freedesktop.org/series/156437/
State : success

== Summary ==

CI Bug Log - changes from xe-3988-c03916cb446b6eefe91538599775bb54bf98238c_BAT -> xe-pw-156437v2_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (13 -> 13)
------------------------------

  No changes in participating hosts

Known issues
------------

  Here are the changes found in xe-pw-156437v2_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_flip@basic-flip-vs-wf_vblank:
    - bat-adlp-7:         [PASS][1] -> [DMESG-WARN][2] ([Intel XE#4543]) +3 other tests dmesg-warn
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank.html

  
  [Intel XE#4543]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4543


Build changes
-------------

  * Linux: xe-3988-c03916cb446b6eefe91538599775bb54bf98238c -> xe-pw-156437v2

  IGT_8596: 8596
  xe-3988-c03916cb446b6eefe91538599775bb54bf98238c: c03916cb446b6eefe91538599775bb54bf98238c
  xe-pw-156437v2: 156437v2

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/index.html

[-- Attachment #2: Type: text/html, Size: 2046 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* ✗ Xe.CI.Full: failure for drm/xe: CRI support in gt_throttle + refactors (rev2)
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (10 preceding siblings ...)
  2025-10-27  6:51 ` ✓ Xe.CI.BAT: " Patchwork
@ 2025-10-27  8:25 ` Patchwork
  2025-10-27 11:38 ` [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Raag Jadav
  12 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2025-10-27  8:25 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 42655 bytes --]

== Series Details ==

Series: drm/xe: CRI support in gt_throttle + refactors (rev2)
URL   : https://patchwork.freedesktop.org/series/156437/
State : failure

== Summary ==

CI Bug Log - changes from xe-3988-c03916cb446b6eefe91538599775bb54bf98238c_FULL -> xe-pw-156437v2_FULL
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-156437v2_FULL absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-156437v2_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (4 -> 4)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in xe-pw-156437v2_FULL:

### IGT changes ###

#### Possible regressions ####

  * igt@xe_exec_reset@long-spin-many-preempt:
    - shard-bmg:          [PASS][1] -> [DMESG-WARN][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@xe_exec_reset@long-spin-many-preempt.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-2/igt@xe_exec_reset@long-spin-many-preempt.html

  
New tests
---------

  New tests have been introduced between xe-3988-c03916cb446b6eefe91538599775bb54bf98238c_FULL and xe-pw-156437v2_FULL:

### New IGT tests (13) ###

  * igt@kms_color@ctm-0-25@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [1.35] s

  * igt@kms_color@ctm-0-50@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [1.33] s

  * igt@kms_color@ctm-0-75@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [1.75] s

  * igt@kms_color@ctm-blue-to-red@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.48] s

  * igt@kms_color@ctm-green-to-red@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.51] s

  * igt@kms_color@ctm-max@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.50] s

  * igt@kms_color@ctm-negative@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.48] s

  * igt@kms_color@ctm-red-to-blue@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.51] s

  * igt@kms_color@ctm-signed@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.89] s

  * igt@kms_color@degamma@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.51] s

  * igt@kms_color@gamma@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.47] s

  * igt@kms_color@legacy-gamma-reset@pipe-b-hdmi-a-6:
    - Statuses : 1 pass(s)
    - Exec time: [0.01] s

  * igt@kms_hdr:
    - Statuses :
    - Exec time: [None] s

  

Known issues
------------

  Here are the changes found in xe-pw-156437v2_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-dg2-set2:     NOTRUN -> [SKIP][3] ([Intel XE#455]) +3 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@linear-16bpp-rotate-270:
    - shard-dg2-set2:     NOTRUN -> [SKIP][4] ([Intel XE#316])
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_big_fb@linear-16bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
    - shard-dg2-set2:     NOTRUN -> [SKIP][5] ([Intel XE#607])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
    - shard-dg2-set2:     NOTRUN -> [SKIP][6] ([Intel XE#1124]) +4 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html

  * igt@kms_bw@linear-tiling-4-displays-2560x1440p:
    - shard-dg2-set2:     NOTRUN -> [SKIP][7] ([Intel XE#367])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@kms_bw@linear-tiling-4-displays-2560x1440p.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs@pipe-b-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][8] ([Intel XE#2652] / [Intel XE#787]) +3 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs@pipe-b-dp-2.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][9] ([Intel XE#3442])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs@pipe-b-dp-4:
    - shard-dg2-set2:     NOTRUN -> [SKIP][10] ([Intel XE#787]) +27 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs@pipe-b-dp-4.html

  * igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][11] ([Intel XE#455] / [Intel XE#787]) +7 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_chamelium_color@gamma:
    - shard-dg2-set2:     NOTRUN -> [SKIP][12] ([Intel XE#306]) +1 other test skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_chamelium_color@gamma.html

  * igt@kms_chamelium_hpd@vga-hpd:
    - shard-dg2-set2:     NOTRUN -> [SKIP][13] ([Intel XE#373]) +3 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_chamelium_hpd@vga-hpd.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
    - shard-bmg:          [PASS][14] -> [SKIP][15] ([Intel XE#2291]) +3 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-1/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic:
    - shard-bmg:          [PASS][16] -> [FAIL][17] ([Intel XE#1475])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-4/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@flip-vs-cursor-legacy:
    - shard-bmg:          [PASS][18] -> [FAIL][19] ([Intel XE#5299])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-7/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-dg2-set2:     NOTRUN -> [SKIP][20] ([Intel XE#323])
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_flip@2x-plain-flip-fb-recreate:
    - shard-bmg:          [PASS][21] -> [SKIP][22] ([Intel XE#2316]) +6 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-5/igt@kms_flip@2x-plain-flip-fb-recreate.html
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-6/igt@kms_flip@2x-plain-flip-fb-recreate.html

  * igt@kms_flip@flip-vs-expired-vblank@a-edp1:
    - shard-lnl:          [PASS][23] -> [FAIL][24] ([Intel XE#301]) +1 other test fail
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html

  * igt@kms_flip@flip-vs-rmfb-interruptible:
    - shard-adlp:         [PASS][25] -> [DMESG-WARN][26] ([Intel XE#5208])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-3/igt@kms_flip@flip-vs-rmfb-interruptible.html
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-8/igt@kms_flip@flip-vs-rmfb-interruptible.html

  * igt@kms_flip@flip-vs-rmfb-interruptible@d-hdmi-a1:
    - shard-adlp:         [PASS][27] -> [DMESG-WARN][28] ([Intel XE#4543]) +1 other test dmesg-warn
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-3/igt@kms_flip@flip-vs-rmfb-interruptible@d-hdmi-a1.html
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-8/igt@kms_flip@flip-vs-rmfb-interruptible@d-hdmi-a1.html

  * igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-x-to-y:
    - shard-adlp:         [PASS][29] -> [DMESG-FAIL][30] ([Intel XE#4543])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-6/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-x-to-y.html
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-6/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-x-to-y.html

  * igt@kms_force_connector_basic@force-connector-state:
    - shard-adlp:         [PASS][31] -> [ABORT][32] ([Intel XE#2953])
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-9/igt@kms_force_connector_basic@force-connector-state.html
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-4/igt@kms_force_connector_basic@force-connector-state.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-msflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][33] ([Intel XE#2311]) +1 other test skip
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-8/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render:
    - shard-dg2-set2:     NOTRUN -> [SKIP][34] ([Intel XE#651]) +8 other tests skip
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-mmap-wc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][35] ([Intel XE#6312]) +2 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen:
    - shard-dg2-set2:     NOTRUN -> [SKIP][36] ([Intel XE#653]) +12 other tests skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][37] ([Intel XE#2313]) +1 other test skip
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-dg2-set2:     NOTRUN -> [SKIP][38] ([Intel XE#5020])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-pixel-format:
    - shard-dg2-set2:     [PASS][39] -> [INCOMPLETE][40] ([Intel XE#4842]) +1 other test incomplete
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-432/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-pixel-format.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-464/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-pixel-format.html

  * igt@kms_pm_rpm@drm-resources-equal:
    - shard-adlp:         [PASS][41] -> [DMESG-WARN][42] ([Intel XE#2953] / [Intel XE#4173])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-9/igt@kms_pm_rpm@drm-resources-equal.html
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-4/igt@kms_pm_rpm@drm-resources-equal.html

  * igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area:
    - shard-dg2-set2:     NOTRUN -> [SKIP][43] ([Intel XE#1406] / [Intel XE#1489]) +2 other tests skip
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html

  * igt@kms_psr@fbc-pr-primary-page-flip:
    - shard-dg2-set2:     NOTRUN -> [SKIP][44] ([Intel XE#1406] / [Intel XE#2850] / [Intel XE#929]) +2 other tests skip
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@kms_psr@fbc-pr-primary-page-flip.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
    - shard-dg2-set2:     NOTRUN -> [SKIP][45] ([Intel XE#3414])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html

  * igt@kms_setmode@basic@pipe-b-edp-1:
    - shard-lnl:          [PASS][46] -> [FAIL][47] ([Intel XE#6361]) +1 other test fail
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-lnl-3/igt@kms_setmode@basic@pipe-b-edp-1.html
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-lnl-5/igt@kms_setmode@basic@pipe-b-edp-1.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg2-set2:     NOTRUN -> [SKIP][48] ([Intel XE#1091] / [Intel XE#2849])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@xe_copy_basic@mem-set-linear-0xfffe:
    - shard-dg2-set2:     NOTRUN -> [SKIP][49] ([Intel XE#1126])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_copy_basic@mem-set-linear-0xfffe.html

  * igt@xe_eudebug_online@writes-caching-sram-bb-vram-target-sram:
    - shard-dg2-set2:     NOTRUN -> [SKIP][50] ([Intel XE#4837]) +2 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_eudebug_online@writes-caching-sram-bb-vram-target-sram.html

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - shard-bmg:          [PASS][51] -> [INCOMPLETE][52] ([Intel XE#6321])
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-7/igt@xe_evict@evict-beng-mixed-many-threads-small.html
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-3/igt@xe_evict@evict-beng-mixed-many-threads-small.html

  * igt@xe_exec_fault_mode@twice-invalid-fault:
    - shard-dg2-set2:     NOTRUN -> [SKIP][53] ([Intel XE#288]) +7 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_exec_fault_mode@twice-invalid-fault.html

  * igt@xe_exec_reset@cm-close-fd:
    - shard-adlp:         [PASS][54] -> [DMESG-WARN][55] ([Intel XE#3868])
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-4/igt@xe_exec_reset@cm-close-fd.html
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-3/igt@xe_exec_reset@cm-close-fd.html

  * igt@xe_exec_system_allocator@process-many-large-execqueues-mmap-prefetch-shared:
    - shard-dg2-set2:     NOTRUN -> [SKIP][56] ([Intel XE#4915]) +115 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@xe_exec_system_allocator@process-many-large-execqueues-mmap-prefetch-shared.html

  * igt@xe_module_load@load:
    - shard-dg2-set2:     ([PASS][57], [PASS][58], [PASS][59], [PASS][60], [PASS][61], [PASS][62], [PASS][63], [PASS][64], [PASS][65], [PASS][66], [PASS][67], [PASS][68], [PASS][69], [PASS][70], [PASS][71], [PASS][72], [PASS][73], [PASS][74], [PASS][75], [PASS][76], [PASS][77], [PASS][78], [PASS][79], [PASS][80], [PASS][81]) -> ([PASS][82], [PASS][83], [PASS][84], [PASS][85], [PASS][86], [SKIP][87], [PASS][88], [PASS][89], [PASS][90], [PASS][91], [PASS][92], [PASS][93], [PASS][94], [PASS][95], [PASS][96], [PASS][97], [PASS][98], [PASS][99], [PASS][100], [PASS][101], [PASS][102], [PASS][103], [PASS][104], [PASS][105], [PASS][106], [PASS][107]) ([Intel XE#378])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-464/igt@xe_module_load@load.html
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-433/igt@xe_module_load@load.html
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-436/igt@xe_module_load@load.html
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-436/igt@xe_module_load@load.html
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-434/igt@xe_module_load@load.html
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-464/igt@xe_module_load@load.html
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-434/igt@xe_module_load@load.html
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-463/igt@xe_module_load@load.html
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-436/igt@xe_module_load@load.html
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-434/igt@xe_module_load@load.html
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-466/igt@xe_module_load@load.html
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-466/igt@xe_module_load@load.html
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-434/igt@xe_module_load@load.html
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-432/igt@xe_module_load@load.html
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-435/igt@xe_module_load@load.html
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-432/igt@xe_module_load@load.html
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-463/igt@xe_module_load@load.html
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-463/igt@xe_module_load@load.html
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-435/igt@xe_module_load@load.html
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-432/igt@xe_module_load@load.html
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-433/igt@xe_module_load@load.html
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-433/igt@xe_module_load@load.html
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-466/igt@xe_module_load@load.html
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-435/igt@xe_module_load@load.html
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-464/igt@xe_module_load@load.html
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-434/igt@xe_module_load@load.html
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-434/igt@xe_module_load@load.html
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-464/igt@xe_module_load@load.html
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-464/igt@xe_module_load@load.html
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-464/igt@xe_module_load@load.html
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@xe_module_load@load.html
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@xe_module_load@load.html
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_module_load@load.html
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_module_load@load.html
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-436/igt@xe_module_load@load.html
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@xe_module_load@load.html
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-435/igt@xe_module_load@load.html
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@xe_module_load@load.html
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@xe_module_load@load.html
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@xe_module_load@load.html
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_module_load@load.html
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-436/igt@xe_module_load@load.html
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-435/igt@xe_module_load@load.html
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@xe_module_load@load.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-435/igt@xe_module_load@load.html
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-434/igt@xe_module_load@load.html
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@xe_module_load@load.html
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-464/igt@xe_module_load@load.html
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-466/igt@xe_module_load@load.html
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-466/igt@xe_module_load@load.html
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-466/igt@xe_module_load@load.html

  * igt@xe_oa@whitelisted-registers-userspace-config:
    - shard-dg2-set2:     NOTRUN -> [SKIP][108] ([Intel XE#3573]) +2 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@xe_oa@whitelisted-registers-userspace-config.html

  * igt@xe_pm@d3hot-i2c:
    - shard-dg2-set2:     NOTRUN -> [SKIP][109] ([Intel XE#5742])
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_pm@d3hot-i2c.html

  * igt@xe_pxp@pxp-optout:
    - shard-dg2-set2:     NOTRUN -> [SKIP][110] ([Intel XE#4733])
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_pxp@pxp-optout.html

  * igt@xe_query@multigpu-query-pxp-status:
    - shard-dg2-set2:     NOTRUN -> [SKIP][111] ([Intel XE#944])
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-463/igt@xe_query@multigpu-query-pxp-status.html

  * igt@xe_render_copy@render-stress-1-copies:
    - shard-dg2-set2:     NOTRUN -> [SKIP][112] ([Intel XE#4814])
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@xe_render_copy@render-stress-1-copies.html

  * igt@xe_sriov_auto_provisioning@selfconfig-reprovision-reduce-numvfs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][113] ([Intel XE#4130])
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_sriov_auto_provisioning@selfconfig-reprovision-reduce-numvfs.html

  * igt@xe_sriov_flr@flr-vfs-parallel:
    - shard-dg2-set2:     NOTRUN -> [SKIP][114] ([Intel XE#4273])
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-433/igt@xe_sriov_flr@flr-vfs-parallel.html

  * igt@xe_sriov_scheduling@nonpreempt-engine-resets@numvfs-random:
    - shard-adlp:         [PASS][115] -> [DMESG-FAIL][116] ([Intel XE#3868] / [Intel XE#5213]) +1 other test dmesg-fail
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-8/igt@xe_sriov_scheduling@nonpreempt-engine-resets@numvfs-random.html
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-9/igt@xe_sriov_scheduling@nonpreempt-engine-resets@numvfs-random.html

  
#### Possible fixes ####

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
    - shard-adlp:         [FAIL][117] ([Intel XE#3908]) -> [PASS][118] +1 other test pass
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-4/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-8/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs:
    - shard-dg2-set2:     [INCOMPLETE][119] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#4345] / [Intel XE#6168]) -> [PASS][120]
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs.html
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-a-dp-4:
    - shard-dg2-set2:     [INCOMPLETE][121] ([Intel XE#6168] / [i915#14968]) -> [PASS][122]
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-a-dp-4.html
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-a-dp-4.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [DMESG-WARN][123] ([Intel XE#1727] / [Intel XE#3113]) -> [PASS][124]
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-6.html
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-6.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
    - shard-bmg:          [SKIP][125] ([Intel XE#2291]) -> [PASS][126] +2 other tests pass
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html

  * igt@kms_feature_discovery@display-2x:
    - shard-bmg:          [SKIP][127] ([Intel XE#2373]) -> [PASS][128]
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_feature_discovery@display-2x.html
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_feature_discovery@display-2x.html

  * igt@kms_flip@2x-plain-flip-ts-check-interruptible:
    - shard-bmg:          [SKIP][129] ([Intel XE#2316]) -> [PASS][130] +2 other tests pass
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a1:
    - shard-adlp:         [DMESG-WARN][131] ([Intel XE#4543]) -> [PASS][132] +1 other test pass
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-6/igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a1.html
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-6/igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a1.html

  * igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a6:
    - shard-dg2-set2:     [FAIL][133] ([Intel XE#301]) -> [PASS][134] +1 other test pass
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-436/igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a6.html
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-432/igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a6.html

  * igt@kms_flip@flip-vs-rmfb:
    - shard-adlp:         [DMESG-WARN][135] ([Intel XE#4543] / [Intel XE#5208]) -> [PASS][136]
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-1/igt@kms_flip@flip-vs-rmfb.html
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-3/igt@kms_flip@flip-vs-rmfb.html

  * igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-x-to-x:
    - shard-adlp:         [DMESG-FAIL][137] ([Intel XE#4543]) -> [PASS][138]
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-6/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-x-to-x.html
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-6/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-x-to-x.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt:
    - shard-adlp:         [DMESG-WARN][139] ([Intel XE#2953] / [Intel XE#4173]) -> [PASS][140]
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt.html
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-9/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-bmg:          [SKIP][141] ([Intel XE#1503]) -> [PASS][142]
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_hdr@static-toggle-suspend.html
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-2/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_plane_multiple@2x-tiling-x:
    - shard-bmg:          [SKIP][143] ([Intel XE#4596]) -> [PASS][144]
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_plane_multiple@2x-tiling-x.html
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_plane_multiple@2x-tiling-x.html

  * igt@kms_vrr@cmrr@pipe-a-edp-1:
    - shard-lnl:          [FAIL][145] ([Intel XE#4459]) -> [PASS][146] +1 other test pass
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-lnl-2/igt@kms_vrr@cmrr@pipe-a-edp-1.html
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-lnl-2/igt@kms_vrr@cmrr@pipe-a-edp-1.html

  * igt@xe_exec_threads@threads-bal-mixed-rebind:
    - shard-adlp:         [DMESG-FAIL][147] ([Intel XE#3876]) -> [PASS][148] +4 other tests pass
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-8/igt@xe_exec_threads@threads-bal-mixed-rebind.html
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-2/igt@xe_exec_threads@threads-bal-mixed-rebind.html

  
#### Warnings ####

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-dp-4:
    - shard-dg2-set2:     [INCOMPLETE][149] ([Intel XE#2705] / [Intel XE#4212] / [Intel XE#4345]) -> [INCOMPLETE][150] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#4345] / [Intel XE#6168]) +1 other test incomplete
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-dp-4.html
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-dp-4.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt:
    - shard-bmg:          [SKIP][151] ([Intel XE#2311]) -> [SKIP][152] ([Intel XE#2312]) +10 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-8/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt.html
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt:
    - shard-bmg:          [SKIP][153] ([Intel XE#2312]) -> [SKIP][154] ([Intel XE#2311]) +6 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt.html
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-7/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt:
    - shard-bmg:          [SKIP][155] ([Intel XE#2312]) -> [SKIP][156] ([Intel XE#5390]) +1 other test skip
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt.html
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][157] ([Intel XE#5390]) -> [SKIP][158] ([Intel XE#2312]) +8 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc.html
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff:
    - shard-bmg:          [SKIP][159] ([Intel XE#2313]) -> [SKIP][160] ([Intel XE#2312]) +9 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff.html
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][161] ([Intel XE#2312]) -> [SKIP][162] ([Intel XE#2313]) +6 other tests skip
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc.html
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-2/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [FAIL][163] ([Intel XE#1729]) -> [SKIP][164] ([Intel XE#2426])
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-bmg-6/igt@kms_tiled_display@basic-test-pattern.html

  * igt@xe_exec_reset@cm-cat-error:
    - shard-adlp:         [DMESG-FAIL][165] ([Intel XE#3868]) -> [DMESG-WARN][166] ([Intel XE#3868])
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3988-c03916cb446b6eefe91538599775bb54bf98238c/shard-adlp-8/igt@xe_exec_reset@cm-cat-error.html
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/shard-adlp-2/igt@xe_exec_reset@cm-cat-error.html

  
  [Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1475]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1475
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2705
  [Intel XE#2849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2849
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [Intel XE#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
  [Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
  [Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
  [Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
  [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
  [Intel XE#3442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3442
  [Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
  [Intel XE#3868]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3868
  [Intel XE#3876]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3876
  [Intel XE#3908]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3908
  [Intel XE#4130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4130
  [Intel XE#4173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4173
  [Intel XE#4212]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4212
  [Intel XE#4273]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4273
  [Intel XE#4345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4345
  [Intel XE#4459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4459
  [Intel XE#4543]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4543
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
  [Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
  [Intel XE#4814]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4814
  [Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
  [Intel XE#4842]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4842
  [Intel XE#4915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4915
  [Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
  [Intel XE#5208]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5208
  [Intel XE#5213]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5213
  [Intel XE#5299]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5299
  [Intel XE#5390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5390
  [Intel XE#5742]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5742
  [Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
  [Intel XE#6168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6168
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
  [Intel XE#6361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6361
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [i915#14968]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14968


Build changes
-------------

  * Linux: xe-3988-c03916cb446b6eefe91538599775bb54bf98238c -> xe-pw-156437v2

  IGT_8596: 8596
  xe-3988-c03916cb446b6eefe91538599775bb54bf98238c: c03916cb446b6eefe91538599775bb54bf98238c
  xe-pw-156437v2: 156437v2

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156437v2/index.html

[-- Attachment #2: Type: text/html, Size: 48227 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors
  2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
                   ` (11 preceding siblings ...)
  2025-10-27  8:25 ` ✗ Xe.CI.Full: failure " Patchwork
@ 2025-10-27 11:38 ` Raag Jadav
  12 siblings, 0 replies; 23+ messages in thread
From: Raag Jadav @ 2025-10-27 11:38 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe, Sk Anirban, Rodrigo Vivi

On Sun, Oct 26, 2025 at 10:57:12PM -0700, Lucas De Marchi wrote:

...

> Finally last patch tries to resolve the TOCTOU issue previously

> discussed in a reasonable way.

:D

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 5/8] drm/xe/gt_throttle: Tidy up attribute definition
  2025-10-27  5:57 ` [PATCH v2 5/8] drm/xe/gt_throttle: Tidy up attribute definition Lucas De Marchi
@ 2025-10-27 11:38   ` Raag Jadav
  0 siblings, 0 replies; 23+ messages in thread
From: Raag Jadav @ 2025-10-27 11:38 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

On Sun, Oct 26, 2025 at 10:57:17PM -0700, Lucas De Marchi wrote:
> Move the attribute definitions to be grouped together rather than near
> the show() function: checkpatch keeps complaining about the missing
> newline when defining new attributes and it reads better to group
> everything, which should match e.g. the xe_pmu.c style.
> 
> While grouping them, also define a THROTTLE_ATTR_RO(), similar to
> DEVICE_ATTR_RO(), and use it to define all attributes. This makes it
> shorter and with a familiar syntax.
> 
> Finally, during the cri_throttle_attrs[] array definition, also
> highlight what's coming from common attributes and what is CRI-specific.
> 
> These 3 things could be done as separate commits, but they are all about
> the same thing: reduce the attribute definition verbosity and are very
> simple and mechanical.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>

Reviewed-by: Raag Jadav <raag.jadav@intel.com>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 6/8] drm/xe: Improve freq and throttle documentation
  2025-10-27  5:57 ` [PATCH v2 6/8] drm/xe: Improve freq and throttle documentation Lucas De Marchi
@ 2025-10-27 11:43   ` Raag Jadav
  0 siblings, 0 replies; 23+ messages in thread
From: Raag Jadav @ 2025-10-27 11:43 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

On Sun, Oct 26, 2025 at 10:57:18PM -0700, Lucas De Marchi wrote:
> Add xe_gt_throttle under the "GT Frequency Management" and improve the
> narrative making sure the documentation for both *_freq and throttle/*
> attributes follow the same style.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>

I've not checked htmldocs but trusting you did.

Reviewed-by: Raag Jadav <raag.jadav@intel.com>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
  2025-10-27  5:57 ` [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons Lucas De Marchi
@ 2025-10-27 11:50   ` Raag Jadav
  2025-10-27 13:26     ` Lucas De Marchi
  2025-10-28 14:02   ` Rodrigo Vivi
  1 sibling, 1 reply; 23+ messages in thread
From: Raag Jadav @ 2025-10-27 11:50 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe, Rodrigo Vivi

On Sun, Oct 26, 2025 at 10:57:20PM -0700, Lucas De Marchi wrote:
> It's currently not possible to safely monitor if there's throttling
> happening and what are the reasons. The approach of reading the status
> and then reading the reasons is not reliable as by the time sysadmin
> reads the reason, the throttling could not be happening anymore.
> 
> Previous tentative to fix that[1] was breaking the ABI and potentially
> sysadmin's scripts. This takes a different approach of adding and
> documenting the additional attribute. It's still valuable, though
> redundant, to provide the simpler 0/1 interface.
> 
> In order to avoid userspace knowledge on the bitmask meaning and to be
> able to maintain the kernel side in sync with possible changes in
> future, just walk the attribute group and check what are the masks that
> match the value read.
> 
> [1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/

Thanks for looking into this, but following the recent developments on [2]
I'm beginning to have my doubts about this.

I don't have any strong opinions but we can probably hold on to this one
until we reach some conclusion on the matter.

[2] https://lore.kernel.org/intel-xe/20251014053257.3417575-2-riana.tauro@intel.com/

Raag

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 7/8] drm/xe/gt_throttle: Drop individual show functions
  2025-10-27  5:57 ` [PATCH v2 7/8] drm/xe/gt_throttle: Drop individual show functions Lucas De Marchi
@ 2025-10-27 12:15   ` Raag Jadav
  0 siblings, 0 replies; 23+ messages in thread
From: Raag Jadav @ 2025-10-27 12:15 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

On Sun, Oct 26, 2025 at 10:57:19PM -0700, Lucas De Marchi wrote:
> They are all doing the same thing with the mask being the param. Just
> declare our own attribute to store the mask and provide a single
> function.
> 
> Another common pattern is to define the show function in the macro,
> however on follow up work the mask may be used for returning more
> information, so it'd need to be stored in any case.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>

Reviewed-by: Raag Jadav <raag.jadav@intel.com>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
  2025-10-27 11:50   ` Raag Jadav
@ 2025-10-27 13:26     ` Lucas De Marchi
  2025-10-28  5:24       ` Raag Jadav
  0 siblings, 1 reply; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-27 13:26 UTC (permalink / raw)
  To: Raag Jadav; +Cc: intel-xe, Rodrigo Vivi

On Mon, Oct 27, 2025 at 12:50:43PM +0100, Raag Jadav wrote:
>On Sun, Oct 26, 2025 at 10:57:20PM -0700, Lucas De Marchi wrote:
>> It's currently not possible to safely monitor if there's throttling
>> happening and what are the reasons. The approach of reading the status
>> and then reading the reasons is not reliable as by the time sysadmin
>> reads the reason, the throttling could not be happening anymore.
>>
>> Previous tentative to fix that[1] was breaking the ABI and potentially
>> sysadmin's scripts. This takes a different approach of adding and
>> documenting the additional attribute. It's still valuable, though
>> redundant, to provide the simpler 0/1 interface.
>>
>> In order to avoid userspace knowledge on the bitmask meaning and to be
>> able to maintain the kernel side in sync with possible changes in
>> future, just walk the attribute group and check what are the masks that
>> match the value read.
>>
>> [1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/
>
>Thanks for looking into this, but following the recent developments on [2]
>I'm beginning to have my doubts about this.
>
>I don't have any strong opinions but we can probably hold on to this one
>until we reach some conclusion on the matter.
>
>[2] https://lore.kernel.org/intel-xe/20251014053257.3417575-2-riana.tauro@intel.com/

what's the relation between that patch and this one? If it's about
multiple values in a single attribute, then they are not really at the
same level:

Compare this:
	pl1
	pl4

To that:
	Capability Info: 0x138320 - 0x2001ae06
	Postcode Info: 0x138324 - 0x0
	Overflow Info: 0x138328 - 0x0
	Auxiliary Info 0: 0x13832c - 0x0

And from Documentation/filesystems/sysfs.rst:

	Attributes should be ASCII text files, preferably with only one value
	per file. It is noted that it may not be efficient to contain only one
	value per file, so it is socially acceptable to express an array of
	values of the same type.

	Mixing types, expressing multiple lines of data, and doing fancy
	formatting of data is heavily frowned upon. Doing these things may get
	you publicly humiliated and your code rewritten without notice.

I'd say the array of "reasons" in this patch clearly matches the first
paragraph: it's the same type, not fancy formatting and has a reason to
exist: TOCTOU mentioned in the docs and commit message). Another thing
that I consider important: not expose the raw number to userspace so it
doesn't have to decode the bitmapp per platform in userspace (the
platform abstraction belongs in the kernel) and is easy to maintain for
new platforms (hence the walk over the attribute_group).

The capability stuff on the other patch is much closer to the second
paragraph.

Lucas De Marchi

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
  2025-10-27 13:26     ` Lucas De Marchi
@ 2025-10-28  5:24       ` Raag Jadav
  0 siblings, 0 replies; 23+ messages in thread
From: Raag Jadav @ 2025-10-28  5:24 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe, Rodrigo Vivi

On Mon, Oct 27, 2025 at 08:26:01AM -0500, Lucas De Marchi wrote:
> On Mon, Oct 27, 2025 at 12:50:43PM +0100, Raag Jadav wrote:
> > On Sun, Oct 26, 2025 at 10:57:20PM -0700, Lucas De Marchi wrote:
> > > It's currently not possible to safely monitor if there's throttling
> > > happening and what are the reasons. The approach of reading the status
> > > and then reading the reasons is not reliable as by the time sysadmin
> > > reads the reason, the throttling could not be happening anymore.
> > > 
> > > Previous tentative to fix that[1] was breaking the ABI and potentially
> > > sysadmin's scripts. This takes a different approach of adding and
> > > documenting the additional attribute. It's still valuable, though
> > > redundant, to provide the simpler 0/1 interface.
> > > 
> > > In order to avoid userspace knowledge on the bitmask meaning and to be
> > > able to maintain the kernel side in sync with possible changes in
> > > future, just walk the attribute group and check what are the masks that
> > > match the value read.
> > > 
> > > [1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/
> > 
> > Thanks for looking into this, but following the recent developments on [2]
> > I'm beginning to have my doubts about this.
> > 
> > I don't have any strong opinions but we can probably hold on to this one
> > until we reach some conclusion on the matter.
> > 
> > [2] https://lore.kernel.org/intel-xe/20251014053257.3417575-2-riana.tauro@intel.com/
> 
> what's the relation between that patch and this one? If it's about
> multiple values in a single attribute, then they are not really at the
> same level:
> 
> Compare this:
> 	pl1
> 	pl4
> 
> To that:
> 	Capability Info: 0x138320 - 0x2001ae06
> 	Postcode Info: 0x138324 - 0x0
> 	Overflow Info: 0x138328 - 0x0
> 	Auxiliary Info 0: 0x13832c - 0x0
> 
> And from Documentation/filesystems/sysfs.rst:
> 
> 	Attributes should be ASCII text files, preferably with only one value
> 	per file. It is noted that it may not be efficient to contain only one
> 	value per file, so it is socially acceptable to express an array of
> 	values of the same type.
> 
> 	Mixing types, expressing multiple lines of data, and doing fancy
> 	formatting of data is heavily frowned upon. Doing these things may get
> 	you publicly humiliated and your code rewritten without notice.
> 
> I'd say the array of "reasons" in this patch clearly matches the first
> paragraph: it's the same type, not fancy formatting and has a reason to
> exist: TOCTOU mentioned in the docs and commit message). Another thing
> that I consider important: not expose the raw number to userspace so it
> doesn't have to decode the bitmapp per platform in userspace (the
> platform abstraction belongs in the kernel) and is easy to maintain for
> new platforms (hence the walk over the attribute_group).
> 
> The capability stuff on the other patch is much closer to the second
> paragraph.

Let me discuss this with Anirban if there are any particular caveats
on consumer side.

Raag

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
  2025-10-27  5:57 ` [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons Lucas De Marchi
  2025-10-27 11:50   ` Raag Jadav
@ 2025-10-28 14:02   ` Rodrigo Vivi
  2025-10-28 16:04     ` Lucas De Marchi
  1 sibling, 1 reply; 23+ messages in thread
From: Rodrigo Vivi @ 2025-10-28 14:02 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe, Raag Jadav

On Sun, Oct 26, 2025 at 10:57:20PM -0700, Lucas De Marchi wrote:
> It's currently not possible to safely monitor if there's throttling
> happening and what are the reasons. The approach of reading the status
> and then reading the reasons is not reliable as by the time sysadmin
> reads the reason, the throttling could not be happening anymore.
> 
> Previous tentative to fix that[1] was breaking the ABI and potentially
> sysadmin's scripts. This takes a different approach of adding and
> documenting the additional attribute. It's still valuable, though
> redundant, to provide the simpler 0/1 interface.
> 
> In order to avoid userspace knowledge on the bitmask meaning and to be
> able to maintain the kernel side in sync with possible changes in
> future, just walk the attribute group and check what are the masks that
> match the value read.
> 
> [1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/
> 
> Cc: Raag Jadav <raag.jadav@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_gt_throttle.c | 46 +++++++++++++++++++++++++++++++++++--
>  1 file changed, 44 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
> index fa7068aac3344..fd2988dacbbb6 100644
> --- a/drivers/gpu/drm/xe/xe_gt_throttle.c
> +++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
> @@ -22,9 +22,15 @@
>   * Their availability depend on the platform and some may not be visible if that
>   * reason is not available.
>   *
> + * The ``status_reasons`` attribute can be used by sysadmin monitoring all
> + * possible reasons for throttling and reporting them. It's preferred over
> + * monitoring ``status`` and then reading the reason both for simplicity and to
> + * avoid TOCTOU.

Perhaps add something like: TOCTOU (time-of-check to time-of-use).

> + *
>   * The following attributes are available on Crescent Island platform:
>   *
> - * - ``status``: Overall throttle status
> + * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
> + * - ``status_reasons``: All reasons causing throttling separated by newline.
>   * - ``reason_pl1``: package PL1
>   * - ``reason_pl2``: package PL2
>   * - ``reason_pl4``: package PL4
> @@ -43,7 +49,8 @@
>   *
>   * Other platforms support the following reasons:
>   *
> - * - ``status``: Overall status
> + * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
> + * - ``status_reasons``: All reasons causing throttling separated by newline.
>   * - ``reason_pl1``: package PL1
>   * - ``reason_pl2``: package PL2
>   * - ``reason_pl4``: package PL4, Iccmax etc.
> @@ -111,12 +118,45 @@ static ssize_t reason_show(struct kobject *kobj,
>  	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ta->mask));
>  }
>  
> +static const struct attribute_group *get_platform_throttle_group(struct xe_device *xe);
> +
> +static ssize_t status_reasons_show(struct kobject *kobj,
> +				   struct kobj_attribute *attr, char *buff)
> +{
> +	struct xe_gt *gt = throttle_to_gt(kobj);
> +	struct xe_device *xe = gt_to_xe(gt);
> +	const struct attribute_group *group;
> +	struct attribute **pother;
> +	ssize_t ret = 0;
> +	u32 reasons;
> +
> +	reasons = xe_gt_throttle_get_limit_reasons(gt);
> +	group = get_platform_throttle_group(xe);
> +
> +	for (pother = group->attrs; *pother; pother++) {
> +		struct kobj_attribute *kattr = container_of(*pother, struct kobj_attribute, attr);
> +		struct throttle_attribute *other_ta = kobj_attribute_to_throttle(kattr);
> +
> +		if (other_ta->mask != U32_MAX && reasons & other_ta->mask)
> +			ret += sysfs_emit_at(buff, ret, "%s\n", (*pother)->name);

perhaps a space instead of the \n to keep only a single line?

> +	}
> +
> +	return ret;
> +}
> +
>  #define THROTTLE_ATTR_RO(name, _mask)				\
>  	struct throttle_attribute attr_##name =	{		\
>  		.attr = __ATTR(name, 0444, reason_show, NULL),	\
>  		.mask = _mask,					\
>  	}
>  
> +#define THROTTLE_ATTR_RO_FUNC(name, _mask, _show)		\
> +	struct throttle_attribute attr_##name =	{		\
> +		.attr = __ATTR(name, 0444, _show, NULL),	\
> +		.mask = _mask,					\
> +	}
> +
> +static THROTTLE_ATTR_RO_FUNC(status_reasons, 0, status_reasons_show);
>  static THROTTLE_ATTR_RO(status, U32_MAX);
>  static THROTTLE_ATTR_RO(reason_pl1, POWER_LIMIT_1_MASK);
>  static THROTTLE_ATTR_RO(reason_pl2, POWER_LIMIT_2_MASK);
> @@ -128,6 +168,7 @@ static THROTTLE_ATTR_RO(reason_vr_thermalert, VR_THERMALERT_MASK);
>  static THROTTLE_ATTR_RO(reason_vr_tdc, VR_TDC_MASK);
>  
>  static struct attribute *throttle_attrs[] = {
> +	&attr_status_reasons.attr.attr,
>  	&attr_status.attr.attr,
>  	&attr_reason_pl1.attr.attr,
>  	&attr_reason_pl2.attr.attr,
> @@ -153,6 +194,7 @@ static THROTTLE_ATTR_RO(reason_psys_crit, PSYS_CRIT_MASK);
>  
>  static struct attribute *cri_throttle_attrs[] = {
>  	/* Common */
> +	&attr_status_reasons.attr.attr,
>  	&attr_status.attr.attr,
>  	&attr_reason_pl1.attr.attr,
>  	&attr_reason_pl2.attr.attr,
> 
> -- 
> 2.51.0
> 

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
  2025-10-28 14:02   ` Rodrigo Vivi
@ 2025-10-28 16:04     ` Lucas De Marchi
  2025-10-29 20:24       ` Rodrigo Vivi
  0 siblings, 1 reply; 23+ messages in thread
From: Lucas De Marchi @ 2025-10-28 16:04 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-xe, Raag Jadav

On Tue, Oct 28, 2025 at 10:02:45AM -0400, Rodrigo Vivi wrote:
>On Sun, Oct 26, 2025 at 10:57:20PM -0700, Lucas De Marchi wrote:
>> It's currently not possible to safely monitor if there's throttling
>> happening and what are the reasons. The approach of reading the status
>> and then reading the reasons is not reliable as by the time sysadmin
>> reads the reason, the throttling could not be happening anymore.
>>
>> Previous tentative to fix that[1] was breaking the ABI and potentially
>> sysadmin's scripts. This takes a different approach of adding and
>> documenting the additional attribute. It's still valuable, though
>> redundant, to provide the simpler 0/1 interface.
>>
>> In order to avoid userspace knowledge on the bitmask meaning and to be
>> able to maintain the kernel side in sync with possible changes in
>> future, just walk the attribute group and check what are the masks that
>> match the value read.
>>
>> [1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/
>>
>> Cc: Raag Jadav <raag.jadav@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>>  drivers/gpu/drm/xe/xe_gt_throttle.c | 46 +++++++++++++++++++++++++++++++++++--
>>  1 file changed, 44 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
>> index fa7068aac3344..fd2988dacbbb6 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_throttle.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
>> @@ -22,9 +22,15 @@
>>   * Their availability depend on the platform and some may not be visible if that
>>   * reason is not available.
>>   *
>> + * The ``status_reasons`` attribute can be used by sysadmin monitoring all
>> + * possible reasons for throttling and reporting them. It's preferred over
>> + * monitoring ``status`` and then reading the reason both for simplicity and to
>> + * avoid TOCTOU.
>
>Perhaps add something like: TOCTOU (time-of-check to time-of-use).
>

ok... just to be clear, this is not about any security issue that
sometimes the TOCTOU abbreviation is associated with, it's just a
"normal bug/race" in the interface.

>> + *
>>   * The following attributes are available on Crescent Island platform:
>>   *
>> - * - ``status``: Overall throttle status
>> + * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
>> + * - ``status_reasons``: All reasons causing throttling separated by newline.
>>   * - ``reason_pl1``: package PL1
>>   * - ``reason_pl2``: package PL2
>>   * - ``reason_pl4``: package PL4
>> @@ -43,7 +49,8 @@
>>   *
>>   * Other platforms support the following reasons:
>>   *
>> - * - ``status``: Overall status
>> + * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
>> + * - ``status_reasons``: All reasons causing throttling separated by newline.
>>   * - ``reason_pl1``: package PL1
>>   * - ``reason_pl2``: package PL2
>>   * - ``reason_pl4``: package PL4, Iccmax etc.
>> @@ -111,12 +118,45 @@ static ssize_t reason_show(struct kobject *kobj,
>>  	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ta->mask));
>>  }
>>
>> +static const struct attribute_group *get_platform_throttle_group(struct xe_device *xe);
>> +
>> +static ssize_t status_reasons_show(struct kobject *kobj,
>> +				   struct kobj_attribute *attr, char *buff)
>> +{
>> +	struct xe_gt *gt = throttle_to_gt(kobj);
>> +	struct xe_device *xe = gt_to_xe(gt);
>> +	const struct attribute_group *group;
>> +	struct attribute **pother;
>> +	ssize_t ret = 0;
>> +	u32 reasons;
>> +
>> +	reasons = xe_gt_throttle_get_limit_reasons(gt);
>> +	group = get_platform_throttle_group(xe);
>> +
>> +	for (pother = group->attrs; *pother; pother++) {
>> +		struct kobj_attribute *kattr = container_of(*pother, struct kobj_attribute, attr);
>> +		struct throttle_attribute *other_ta = kobj_attribute_to_throttle(kattr);
>> +
>> +		if (other_ta->mask != U32_MAX && reasons & other_ta->mask)
>> +			ret += sysfs_emit_at(buff, ret, "%s\n", (*pother)->name);
>
>perhaps a space instead of the \n to keep only a single line?

I'm lazy and I don't like the additional space that the lazy approach
would cause in the last entry :-/. For printing arrays to sysfs
doesn't seem there's a uniform approach. Some use \n and some use
space.

do we care about the extra space? if not, then it would be:

	ret += sysfs_emit_at(buff, ret, "%s ", (*pother)->name);

if we do, then:

	ret += sysfs_emit_at(buff, ret, "%s%s", ret ? " " : "", (*pother)->name);
or
	ret += sysfs_emit_at(buff, ret, "%.*s%s", !!ret, " ", (*pother)->name);

thanks
Lucas De Marchi

>
>> +	}
>> +
>> +	return ret;
>> +}
>> +
>>  #define THROTTLE_ATTR_RO(name, _mask)				\
>>  	struct throttle_attribute attr_##name =	{		\
>>  		.attr = __ATTR(name, 0444, reason_show, NULL),	\
>>  		.mask = _mask,					\
>>  	}
>>
>> +#define THROTTLE_ATTR_RO_FUNC(name, _mask, _show)		\
>> +	struct throttle_attribute attr_##name =	{		\
>> +		.attr = __ATTR(name, 0444, _show, NULL),	\
>> +		.mask = _mask,					\
>> +	}
>> +
>> +static THROTTLE_ATTR_RO_FUNC(status_reasons, 0, status_reasons_show);
>>  static THROTTLE_ATTR_RO(status, U32_MAX);
>>  static THROTTLE_ATTR_RO(reason_pl1, POWER_LIMIT_1_MASK);
>>  static THROTTLE_ATTR_RO(reason_pl2, POWER_LIMIT_2_MASK);
>> @@ -128,6 +168,7 @@ static THROTTLE_ATTR_RO(reason_vr_thermalert, VR_THERMALERT_MASK);
>>  static THROTTLE_ATTR_RO(reason_vr_tdc, VR_TDC_MASK);
>>
>>  static struct attribute *throttle_attrs[] = {
>> +	&attr_status_reasons.attr.attr,
>>  	&attr_status.attr.attr,
>>  	&attr_reason_pl1.attr.attr,
>>  	&attr_reason_pl2.attr.attr,
>> @@ -153,6 +194,7 @@ static THROTTLE_ATTR_RO(reason_psys_crit, PSYS_CRIT_MASK);
>>
>>  static struct attribute *cri_throttle_attrs[] = {
>>  	/* Common */
>> +	&attr_status_reasons.attr.attr,
>>  	&attr_status.attr.attr,
>>  	&attr_reason_pl1.attr.attr,
>>  	&attr_reason_pl2.attr.attr,
>>
>> --
>> 2.51.0
>>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons
  2025-10-28 16:04     ` Lucas De Marchi
@ 2025-10-29 20:24       ` Rodrigo Vivi
  0 siblings, 0 replies; 23+ messages in thread
From: Rodrigo Vivi @ 2025-10-29 20:24 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe, Raag Jadav

On Tue, Oct 28, 2025 at 11:04:56AM -0500, Lucas De Marchi wrote:
> On Tue, Oct 28, 2025 at 10:02:45AM -0400, Rodrigo Vivi wrote:
> > On Sun, Oct 26, 2025 at 10:57:20PM -0700, Lucas De Marchi wrote:
> > > It's currently not possible to safely monitor if there's throttling
> > > happening and what are the reasons. The approach of reading the status
> > > and then reading the reasons is not reliable as by the time sysadmin
> > > reads the reason, the throttling could not be happening anymore.
> > > 
> > > Previous tentative to fix that[1] was breaking the ABI and potentially
> > > sysadmin's scripts. This takes a different approach of adding and
> > > documenting the additional attribute. It's still valuable, though
> > > redundant, to provide the simpler 0/1 interface.
> > > 
> > > In order to avoid userspace knowledge on the bitmask meaning and to be
> > > able to maintain the kernel side in sync with possible changes in
> > > future, just walk the attribute group and check what are the masks that
> > > match the value read.
> > > 
> > > [1] https://lore.kernel.org/intel-xe/20241025092238.167042-1-raag.jadav@intel.com/
> > > 
> > > Cc: Raag Jadav <raag.jadav@intel.com>
> > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> > > ---
> > >  drivers/gpu/drm/xe/xe_gt_throttle.c | 46 +++++++++++++++++++++++++++++++++++--
> > >  1 file changed, 44 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/xe/xe_gt_throttle.c b/drivers/gpu/drm/xe/xe_gt_throttle.c
> > > index fa7068aac3344..fd2988dacbbb6 100644
> > > --- a/drivers/gpu/drm/xe/xe_gt_throttle.c
> > > +++ b/drivers/gpu/drm/xe/xe_gt_throttle.c
> > > @@ -22,9 +22,15 @@
> > >   * Their availability depend on the platform and some may not be visible if that
> > >   * reason is not available.
> > >   *
> > > + * The ``status_reasons`` attribute can be used by sysadmin monitoring all
> > > + * possible reasons for throttling and reporting them. It's preferred over
> > > + * monitoring ``status`` and then reading the reason both for simplicity and to
> > > + * avoid TOCTOU.
> > 
> > Perhaps add something like: TOCTOU (time-of-check to time-of-use).
> > 
> 
> ok... just to be clear, this is not about any security issue that
> sometimes the TOCTOU abbreviation is associated with, it's just a
> "normal bug/race" in the interface.
> 
> > > + *
> > >   * The following attributes are available on Crescent Island platform:
> > >   *
> > > - * - ``status``: Overall throttle status
> > > + * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
> > > + * - ``status_reasons``: All reasons causing throttling separated by newline.
> > >   * - ``reason_pl1``: package PL1
> > >   * - ``reason_pl2``: package PL2
> > >   * - ``reason_pl4``: package PL4
> > > @@ -43,7 +49,8 @@
> > >   *
> > >   * Other platforms support the following reasons:
> > >   *
> > > - * - ``status``: Overall status
> > > + * - ``status``: Overall throttle status (0: no throttling, 1: throttling)
> > > + * - ``status_reasons``: All reasons causing throttling separated by newline.
> > >   * - ``reason_pl1``: package PL1
> > >   * - ``reason_pl2``: package PL2
> > >   * - ``reason_pl4``: package PL4, Iccmax etc.
> > > @@ -111,12 +118,45 @@ static ssize_t reason_show(struct kobject *kobj,
> > >  	return sysfs_emit(buff, "%u\n", is_throttled_by(gt, ta->mask));
> > >  }
> > > 
> > > +static const struct attribute_group *get_platform_throttle_group(struct xe_device *xe);
> > > +
> > > +static ssize_t status_reasons_show(struct kobject *kobj,
> > > +				   struct kobj_attribute *attr, char *buff)
> > > +{
> > > +	struct xe_gt *gt = throttle_to_gt(kobj);
> > > +	struct xe_device *xe = gt_to_xe(gt);
> > > +	const struct attribute_group *group;
> > > +	struct attribute **pother;
> > > +	ssize_t ret = 0;
> > > +	u32 reasons;
> > > +
> > > +	reasons = xe_gt_throttle_get_limit_reasons(gt);
> > > +	group = get_platform_throttle_group(xe);
> > > +
> > > +	for (pother = group->attrs; *pother; pother++) {
> > > +		struct kobj_attribute *kattr = container_of(*pother, struct kobj_attribute, attr);
> > > +		struct throttle_attribute *other_ta = kobj_attribute_to_throttle(kattr);
> > > +
> > > +		if (other_ta->mask != U32_MAX && reasons & other_ta->mask)
> > > +			ret += sysfs_emit_at(buff, ret, "%s\n", (*pother)->name);
> > 
> > perhaps a space instead of the \n to keep only a single line?
> 
> I'm lazy and I don't like the additional space that the lazy approach
> would cause in the last entry :-/. For printing arrays to sysfs
> doesn't seem there's a uniform approach. Some use \n and some use
> space.
> 
> do we care about the extra space? if not, then it would be:
> 
> 	ret += sysfs_emit_at(buff, ret, "%s ", (*pother)->name);

For the simplicity (lazyness?!) I believe we should go like this
and then an extra \n after like done in
show_scaling_available_governors() at drivers/cpufreq/cpufreq.c

> 
> if we do, then:
> 
> 	ret += sysfs_emit_at(buff, ret, "%s%s", ret ? " " : "", (*pother)->name);
> or
> 	ret += sysfs_emit_at(buff, ret, "%.*s%s", !!ret, " ", (*pother)->name);
> 
> thanks
> Lucas De Marchi
> 
> > 
> > > +	}
> > > +
> > > +	return ret;
> > > +}
> > > +
> > >  #define THROTTLE_ATTR_RO(name, _mask)				\
> > >  	struct throttle_attribute attr_##name =	{		\
> > >  		.attr = __ATTR(name, 0444, reason_show, NULL),	\
> > >  		.mask = _mask,					\
> > >  	}
> > > 
> > > +#define THROTTLE_ATTR_RO_FUNC(name, _mask, _show)		\
> > > +	struct throttle_attribute attr_##name =	{		\
> > > +		.attr = __ATTR(name, 0444, _show, NULL),	\
> > > +		.mask = _mask,					\
> > > +	}
> > > +
> > > +static THROTTLE_ATTR_RO_FUNC(status_reasons, 0, status_reasons_show);
> > >  static THROTTLE_ATTR_RO(status, U32_MAX);
> > >  static THROTTLE_ATTR_RO(reason_pl1, POWER_LIMIT_1_MASK);
> > >  static THROTTLE_ATTR_RO(reason_pl2, POWER_LIMIT_2_MASK);
> > > @@ -128,6 +168,7 @@ static THROTTLE_ATTR_RO(reason_vr_thermalert, VR_THERMALERT_MASK);
> > >  static THROTTLE_ATTR_RO(reason_vr_tdc, VR_TDC_MASK);
> > > 
> > >  static struct attribute *throttle_attrs[] = {
> > > +	&attr_status_reasons.attr.attr,
> > >  	&attr_status.attr.attr,
> > >  	&attr_reason_pl1.attr.attr,
> > >  	&attr_reason_pl2.attr.attr,
> > > @@ -153,6 +194,7 @@ static THROTTLE_ATTR_RO(reason_psys_crit, PSYS_CRIT_MASK);
> > > 
> > >  static struct attribute *cri_throttle_attrs[] = {
> > >  	/* Common */
> > > +	&attr_status_reasons.attr.attr,
> > >  	&attr_status.attr.attr,
> > >  	&attr_reason_pl1.attr.attr,
> > >  	&attr_reason_pl2.attr.attr,
> > > 
> > > --
> > > 2.51.0
> > > 

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2025-10-29 20:24 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-27  5:57 [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Lucas De Marchi
2025-10-27  5:57 ` [PATCH v2 1/8] drm/xe/cri: Add new performance limit reasons bits Lucas De Marchi
2025-10-27  5:57 ` [PATCH v2 2/8] drm/xe/gt_throttle: Tidy up perf reasons reading Lucas De Marchi
2025-10-27  5:57 ` [PATCH v2 3/8] drm/xe/gt_throttle: Always read and mask Lucas De Marchi
2025-10-27  5:57 ` [PATCH v2 4/8] drm/xe/gt_throttle: Add throttle_to_gt() Lucas De Marchi
2025-10-27  5:57 ` [PATCH v2 5/8] drm/xe/gt_throttle: Tidy up attribute definition Lucas De Marchi
2025-10-27 11:38   ` Raag Jadav
2025-10-27  5:57 ` [PATCH v2 6/8] drm/xe: Improve freq and throttle documentation Lucas De Marchi
2025-10-27 11:43   ` Raag Jadav
2025-10-27  5:57 ` [PATCH v2 7/8] drm/xe/gt_throttle: Drop individual show functions Lucas De Marchi
2025-10-27 12:15   ` Raag Jadav
2025-10-27  5:57 ` [PATCH v2 8/8] drm/xe/gt_throttle: Avoid TOCTOU when monitoring reasons Lucas De Marchi
2025-10-27 11:50   ` Raag Jadav
2025-10-27 13:26     ` Lucas De Marchi
2025-10-28  5:24       ` Raag Jadav
2025-10-28 14:02   ` Rodrigo Vivi
2025-10-28 16:04     ` Lucas De Marchi
2025-10-29 20:24       ` Rodrigo Vivi
2025-10-27  6:04 ` ✗ CI.checkpatch: warning for drm/xe: CRI support in gt_throttle + refactors (rev2) Patchwork
2025-10-27  6:05 ` ✓ CI.KUnit: success " Patchwork
2025-10-27  6:51 ` ✓ Xe.CI.BAT: " Patchwork
2025-10-27  8:25 ` ✗ Xe.CI.Full: failure " Patchwork
2025-10-27 11:38 ` [PATCH v2 0/8] drm/xe: CRI support in gt_throttle + refactors Raag Jadav

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox