* [PATCH] drm/i915/pmu: Drop custom hotplug code
@ 2025-01-16 22:24 Lucas De Marchi
2025-01-17 3:01 ` ✗ Fi.CI.SPARSE: warning for " Patchwork
` (6 more replies)
0 siblings, 7 replies; 25+ messages in thread
From: Lucas De Marchi @ 2025-01-16 22:24 UTC (permalink / raw)
To: intel-gfx
Cc: Lucas De Marchi, Kan Liang, Peter Zijlstra (Intel),
Vinay Belgaumkar
Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with
a scope"), there's generic support for system-wide counters and
integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
instead of all the boilerplate code for handling hotplug.
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/i915/i915_module.c | 2 -
drivers/gpu/drm/i915/i915_pmu.c | 114 +----------------------------
drivers/gpu/drm/i915/i915_pmu.h | 11 ---
3 files changed, 1 insertion(+), 126 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/i915/i915_module.c
index 7ed6d70389af9..7affe07f84f45 100644
--- a/drivers/gpu/drm/i915/i915_module.c
+++ b/drivers/gpu/drm/i915/i915_module.c
@@ -71,8 +71,6 @@ static const struct {
{ .init = i915_vma_resource_module_init,
.exit = i915_vma_resource_module_exit },
{ .init = i915_mock_selftests },
- { .init = i915_pmu_init,
- .exit = i915_pmu_exit },
{ .init = i915_pci_register_driver,
.exit = i915_pci_unregister_driver },
{ .init = i915_perf_sysctl_register,
diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index e55db036be1bb..652964ef0643c 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -28,9 +28,6 @@
BIT(I915_SAMPLE_WAIT) | \
BIT(I915_SAMPLE_SEMA))
-static cpumask_t i915_pmu_cpumask;
-static unsigned int i915_pmu_target_cpu = -1;
-
static struct i915_pmu *event_to_pmu(struct perf_event *event)
{
return container_of(event->pmu, struct i915_pmu, base);
@@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct perf_event *event)
if (event->cpu < 0)
return -EINVAL;
- /* only allow running on one cpu at a time */
- if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
- return -EINVAL;
-
if (is_engine_event(event))
ret = engine_event_init(event);
else
@@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct device *dev,
return sprintf(buf, "config=0x%lx\n", eattr->val);
}
-static ssize_t cpumask_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
-}
-
-static DEVICE_ATTR_RO(cpumask);
-
-static struct attribute *i915_cpumask_attrs[] = {
- &dev_attr_cpumask.attr,
- NULL,
-};
-
-static const struct attribute_group i915_pmu_cpumask_attr_group = {
- .attrs = i915_cpumask_attrs,
-};
-
#define __event(__counter, __name, __unit) \
{ \
.counter = (__counter), \
@@ -1173,92 +1149,12 @@ static void free_event_attributes(struct i915_pmu *pmu)
pmu->pmu_attr = NULL;
}
-static int i915_pmu_cpu_online(unsigned int cpu, struct hlist_node *node)
-{
- struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
-
- /* Select the first online CPU as a designated reader. */
- if (cpumask_empty(&i915_pmu_cpumask))
- cpumask_set_cpu(cpu, &i915_pmu_cpumask);
-
- return 0;
-}
-
-static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node *node)
-{
- struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
- unsigned int target = i915_pmu_target_cpu;
-
- /*
- * Unregistering an instance generates a CPU offline event which we must
- * ignore to avoid incorrectly modifying the shared i915_pmu_cpumask.
- */
- if (!pmu->registered)
- return 0;
-
- if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
- target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
-
- /* Migrate events if there is a valid target */
- if (target < nr_cpu_ids) {
- cpumask_set_cpu(target, &i915_pmu_cpumask);
- i915_pmu_target_cpu = target;
- }
- }
-
- if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
- perf_pmu_migrate_context(&pmu->base, cpu, target);
- pmu->cpuhp.cpu = target;
- }
-
- return 0;
-}
-
-static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
-
-int i915_pmu_init(void)
-{
- int ret;
-
- ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
- "perf/x86/intel/i915:online",
- i915_pmu_cpu_online,
- i915_pmu_cpu_offline);
- if (ret < 0)
- pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
- ret);
- else
- cpuhp_state = ret;
-
- return 0;
-}
-
-void i915_pmu_exit(void)
-{
- if (cpuhp_state != CPUHP_INVALID)
- cpuhp_remove_multi_state(cpuhp_state);
-}
-
-static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
-{
- if (cpuhp_state == CPUHP_INVALID)
- return -EINVAL;
-
- return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
-}
-
-static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
-{
- cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
-}
-
void i915_pmu_register(struct drm_i915_private *i915)
{
struct i915_pmu *pmu = &i915->pmu;
const struct attribute_group *attr_groups[] = {
&i915_pmu_format_attr_group,
&pmu->events_attr_group,
- &i915_pmu_cpumask_attr_group,
NULL
};
int ret = -ENOMEM;
@@ -1266,7 +1162,6 @@ void i915_pmu_register(struct drm_i915_private *i915)
spin_lock_init(&pmu->lock);
hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
pmu->timer.function = i915_sample;
- pmu->cpuhp.cpu = -1;
init_rc6(pmu);
if (IS_DGFX(i915)) {
@@ -1295,6 +1190,7 @@ void i915_pmu_register(struct drm_i915_private *i915)
pmu->base.module = THIS_MODULE;
pmu->base.task_ctx_nr = perf_invalid_context;
+ pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
pmu->base.event_init = i915_pmu_event_init;
pmu->base.add = i915_pmu_event_add;
pmu->base.del = i915_pmu_event_del;
@@ -1307,16 +1203,10 @@ void i915_pmu_register(struct drm_i915_private *i915)
if (ret)
goto err_groups;
- ret = i915_pmu_register_cpuhp_state(pmu);
- if (ret)
- goto err_unreg;
-
pmu->registered = true;
return;
-err_unreg:
- perf_pmu_unregister(&pmu->base);
err_groups:
kfree(pmu->base.attr_groups);
err_attr:
@@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct drm_i915_private *i915)
hrtimer_cancel(&pmu->timer);
- i915_pmu_unregister_cpuhp_state(pmu);
-
perf_pmu_unregister(&pmu->base);
kfree(pmu->base.attr_groups);
if (IS_DGFX(i915))
diff --git a/drivers/gpu/drm/i915/i915_pmu.h b/drivers/gpu/drm/i915/i915_pmu.h
index 8e66d63d0c9f9..53bce3d8bfbaf 100644
--- a/drivers/gpu/drm/i915/i915_pmu.h
+++ b/drivers/gpu/drm/i915/i915_pmu.h
@@ -56,13 +56,6 @@ struct i915_pmu_sample {
};
struct i915_pmu {
- /**
- * @cpuhp: Struct used for CPU hotplug handling.
- */
- struct {
- struct hlist_node node;
- unsigned int cpu;
- } cpuhp;
/**
* @base: PMU base.
*/
@@ -155,15 +148,11 @@ struct i915_pmu {
};
#ifdef CONFIG_PERF_EVENTS
-int i915_pmu_init(void);
-void i915_pmu_exit(void);
void i915_pmu_register(struct drm_i915_private *i915);
void i915_pmu_unregister(struct drm_i915_private *i915);
void i915_pmu_gt_parked(struct intel_gt *gt);
void i915_pmu_gt_unparked(struct intel_gt *gt);
#else
-static inline int i915_pmu_init(void) { return 0; }
-static inline void i915_pmu_exit(void) {}
static inline void i915_pmu_register(struct drm_i915_private *i915) {}
static inline void i915_pmu_unregister(struct drm_i915_private *i915) {}
static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
--
2.48.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915/pmu: Drop custom hotplug code
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
@ 2025-01-17 3:01 ` Patchwork
2025-01-17 3:15 ` ✗ i915.CI.BAT: failure " Patchwork
` (5 subsequent siblings)
6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2025-01-17 3:01 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/pmu: Drop custom hotplug code
URL : https://patchwork.freedesktop.org/series/143636/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ i915.CI.BAT: failure for drm/i915/pmu: Drop custom hotplug code
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
2025-01-17 3:01 ` ✗ Fi.CI.SPARSE: warning for " Patchwork
@ 2025-01-17 3:15 ` Patchwork
2025-01-20 15:08 ` [PATCH] " Liang, Kan
` (4 subsequent siblings)
6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2025-01-17 3:15 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 7811 bytes --]
== Series Details ==
Series: drm/i915/pmu: Drop custom hotplug code
URL : https://patchwork.freedesktop.org/series/143636/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_15971 -> Patchwork_143636v1
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_143636v1 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_143636v1, 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.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/index.html
Participating hosts (41 -> 41)
------------------------------
Additional (1): bat-adlp-6
Missing (1): fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_143636v1:
### IGT changes ###
#### Possible regressions ####
* igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24:
- fi-cfl-8109u: [PASS][1] -> [DMESG-WARN][2] +2 other tests dmesg-warn
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/fi-cfl-8109u/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/fi-cfl-8109u/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24.html
Known issues
------------
Here are the changes found in Patchwork_143636v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@debugfs_test@basic-hwmon:
- bat-adlp-6: NOTRUN -> [SKIP][3] ([i915#9318])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@debugfs_test@basic-hwmon.html
* igt@gem_lmem_swapping@random-engines:
- bat-adlp-6: NOTRUN -> [SKIP][4] ([i915#4613]) +3 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@gem_lmem_swapping@random-engines.html
* igt@gem_tiled_pread_basic:
- bat-adlp-6: NOTRUN -> [SKIP][5] ([i915#3282])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@gem_tiled_pread_basic.html
* igt@i915_pm_rpm@module-reload:
- bat-adls-6: [PASS][6] -> [FAIL][7] ([i915#13401])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/bat-adls-6/igt@i915_pm_rpm@module-reload.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adls-6/igt@i915_pm_rpm@module-reload.html
* igt@i915_pm_rps@basic-api:
- bat-adlp-6: NOTRUN -> [SKIP][8] ([i915#6621])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@i915_pm_rps@basic-api.html
* igt@i915_selftest@live:
- bat-arlh-2: [PASS][9] -> [DMESG-FAIL][10] ([i915#12061] / [i915#12435])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/bat-arlh-2/igt@i915_selftest@live.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-arlh-2/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- bat-arlh-2: [PASS][11] -> [DMESG-FAIL][12] ([i915#12061])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/bat-arlh-2/igt@i915_selftest@live@workarounds.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-arlh-2/igt@i915_selftest@live@workarounds.html
- bat-mtlp-6: [PASS][13] -> [DMESG-FAIL][14] ([i915#12061]) +1 other test dmesg-fail
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- bat-adlp-6: NOTRUN -> [SKIP][15] ([i915#4103]) +1 other test skip
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_dsc@dsc-basic:
- bat-adlp-6: NOTRUN -> [SKIP][16] ([i915#3555] / [i915#3840])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@kms_dsc@dsc-basic.html
* igt@kms_force_connector_basic@force-load-detect:
- bat-adlp-6: NOTRUN -> [SKIP][17]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
- bat-dg2-11: [PASS][18] -> [SKIP][19] ([i915#9197]) +1 other test skip
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
* igt@kms_setmode@basic-clone-single-crtc:
- bat-adlp-6: NOTRUN -> [SKIP][20] ([i915#3555])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@kms_setmode@basic-clone-single-crtc.html
* igt@prime_vgem@basic-write:
- bat-adlp-6: NOTRUN -> [SKIP][21] ([i915#3291] / [i915#3708]) +2 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-adlp-6/igt@prime_vgem@basic-write.html
#### Possible fixes ####
* igt@i915_selftest@live@workarounds:
- {bat-mtlp-9}: [DMESG-FAIL][22] ([i915#12061]) -> [PASS][23]
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
#### Warnings ####
* igt@gem_exec_gttfill@basic:
- fi-pnv-d510: [SKIP][24] -> [ABORT][25] ([i915#13169])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15971/fi-pnv-d510/igt@gem_exec_gttfill@basic.html
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/fi-pnv-d510/igt@gem_exec_gttfill@basic.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12435
[i915#13169]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13169
[i915#13401]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13401
[i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
[i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621
[i915#9197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9197
[i915#9318]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9318
Build changes
-------------
* Linux: CI_DRM_15971 -> Patchwork_143636v1
CI-20190529: 20190529
CI_DRM_15971: 58078c97cb752a5ea9ae2f2e3ab898945153d39e @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8195: 8195
Patchwork_143636v1: 58078c97cb752a5ea9ae2f2e3ab898945153d39e @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v1/index.html
[-- Attachment #2: Type: text/html, Size: 9124 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
2025-01-17 3:01 ` ✗ Fi.CI.SPARSE: warning for " Patchwork
2025-01-17 3:15 ` ✗ i915.CI.BAT: failure " Patchwork
@ 2025-01-20 15:08 ` Liang, Kan
2025-01-20 22:57 ` Lucas De Marchi
2025-01-23 6:37 ` ✗ Fi.CI.SPARSE: warning for drm/i915/pmu: Drop custom hotplug code (rev2) Patchwork
` (3 subsequent siblings)
6 siblings, 1 reply; 25+ messages in thread
From: Liang, Kan @ 2025-01-20 15:08 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx; +Cc: Peter Zijlstra (Intel), Vinay Belgaumkar
On 2025-01-16 5:24 p.m., Lucas De Marchi wrote:
> Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with
> a scope"), there's generic support for system-wide counters and
> integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
> instead of all the boilerplate code for handling hotplug.
>
> Cc: Kan Liang <kan.liang@linux.intel.com>
> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
> Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_module.c | 2 -
> drivers/gpu/drm/i915/i915_pmu.c | 114 +----------------------------
> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
> 3 files changed, 1 insertion(+), 126 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/i915/i915_module.c
> index 7ed6d70389af9..7affe07f84f45 100644
> --- a/drivers/gpu/drm/i915/i915_module.c
> +++ b/drivers/gpu/drm/i915/i915_module.c
> @@ -71,8 +71,6 @@ static const struct {
> { .init = i915_vma_resource_module_init,
> .exit = i915_vma_resource_module_exit },
> { .init = i915_mock_selftests },
> - { .init = i915_pmu_init,
> - .exit = i915_pmu_exit },
> { .init = i915_pci_register_driver,
> .exit = i915_pci_unregister_driver },
> { .init = i915_perf_sysctl_register,
> diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
> index e55db036be1bb..652964ef0643c 100644
> --- a/drivers/gpu/drm/i915/i915_pmu.c
> +++ b/drivers/gpu/drm/i915/i915_pmu.c
> @@ -28,9 +28,6 @@
> BIT(I915_SAMPLE_WAIT) | \
> BIT(I915_SAMPLE_SEMA))
>
> -static cpumask_t i915_pmu_cpumask;
> -static unsigned int i915_pmu_target_cpu = -1;
> -
> static struct i915_pmu *event_to_pmu(struct perf_event *event)
> {
> return container_of(event->pmu, struct i915_pmu, base);
> @@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct perf_event *event)
> if (event->cpu < 0)
> return -EINVAL;
>
> - /* only allow running on one cpu at a time */
> - if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
> - return -EINVAL;
> -
> if (is_engine_event(event))
> ret = engine_event_init(event);
> else
> @@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct device *dev,
> return sprintf(buf, "config=0x%lx\n", eattr->val);
> }
>
> -static ssize_t cpumask_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
> -}
> -
> -static DEVICE_ATTR_RO(cpumask);
> -
> -static struct attribute *i915_cpumask_attrs[] = {
> - &dev_attr_cpumask.attr,
> - NULL,
> -};
> -
> -static const struct attribute_group i915_pmu_cpumask_attr_group = {
> - .attrs = i915_cpumask_attrs,
> -};
> -
> #define __event(__counter, __name, __unit) \
> { \
> .counter = (__counter), \
> @@ -1173,92 +1149,12 @@ static void free_event_attributes(struct i915_pmu *pmu)
> pmu->pmu_attr = NULL;
> }
>
> -static int i915_pmu_cpu_online(unsigned int cpu, struct hlist_node *node)
> -{
> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
> -
> - /* Select the first online CPU as a designated reader. */
> - if (cpumask_empty(&i915_pmu_cpumask))
> - cpumask_set_cpu(cpu, &i915_pmu_cpumask);
> -
> - return 0;
> -}
> -
> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node *node)
> -{
> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
> - unsigned int target = i915_pmu_target_cpu;
> -
> - /*
> - * Unregistering an instance generates a CPU offline event which we must
> - * ignore to avoid incorrectly modifying the shared i915_pmu_cpumask.
> - */
> - if (!pmu->registered)
> - return 0;
> -
> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
> -
I'm not familar with the i915 PMU, but it seems suggest a core scope
PMU, not a system-wide scope.
Thanks,
Kan
> - /* Migrate events if there is a valid target */
> - if (target < nr_cpu_ids) {
> - cpumask_set_cpu(target, &i915_pmu_cpumask);
> - i915_pmu_target_cpu = target;
> - }
> - }
> -
> - if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
> - perf_pmu_migrate_context(&pmu->base, cpu, target);
> - pmu->cpuhp.cpu = target;
> - }
> -
> - return 0;
> -}
> -
> -static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
> -
> -int i915_pmu_init(void)
> -{
> - int ret;
> -
> - ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
> - "perf/x86/intel/i915:online",
> - i915_pmu_cpu_online,
> - i915_pmu_cpu_offline);
> - if (ret < 0)
> - pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
> - ret);
> - else
> - cpuhp_state = ret;
> -
> - return 0;
> -}
> -
> -void i915_pmu_exit(void)
> -{
> - if (cpuhp_state != CPUHP_INVALID)
> - cpuhp_remove_multi_state(cpuhp_state);
> -}
> -
> -static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
> -{
> - if (cpuhp_state == CPUHP_INVALID)
> - return -EINVAL;
> -
> - return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
> -}
> -
> -static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
> -{
> - cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
> -}
> -
> void i915_pmu_register(struct drm_i915_private *i915)
> {
> struct i915_pmu *pmu = &i915->pmu;
> const struct attribute_group *attr_groups[] = {
> &i915_pmu_format_attr_group,
> &pmu->events_attr_group,
> - &i915_pmu_cpumask_attr_group,
> NULL
> };
> int ret = -ENOMEM;
> @@ -1266,7 +1162,6 @@ void i915_pmu_register(struct drm_i915_private *i915)
> spin_lock_init(&pmu->lock);
> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> pmu->timer.function = i915_sample;
> - pmu->cpuhp.cpu = -1;
> init_rc6(pmu);
>
> if (IS_DGFX(i915)) {
> @@ -1295,6 +1190,7 @@ void i915_pmu_register(struct drm_i915_private *i915)
>
> pmu->base.module = THIS_MODULE;
> pmu->base.task_ctx_nr = perf_invalid_context;
> + pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
> pmu->base.event_init = i915_pmu_event_init;
> pmu->base.add = i915_pmu_event_add;
> pmu->base.del = i915_pmu_event_del;
> @@ -1307,16 +1203,10 @@ void i915_pmu_register(struct drm_i915_private *i915)
> if (ret)
> goto err_groups;
>
> - ret = i915_pmu_register_cpuhp_state(pmu);
> - if (ret)
> - goto err_unreg;
> -
> pmu->registered = true;
>
> return;
>
> -err_unreg:
> - perf_pmu_unregister(&pmu->base);
> err_groups:
> kfree(pmu->base.attr_groups);
> err_attr:
> @@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct drm_i915_private *i915)
>
> hrtimer_cancel(&pmu->timer);
>
> - i915_pmu_unregister_cpuhp_state(pmu);
> -
> perf_pmu_unregister(&pmu->base);
> kfree(pmu->base.attr_groups);
> if (IS_DGFX(i915))
> diff --git a/drivers/gpu/drm/i915/i915_pmu.h b/drivers/gpu/drm/i915/i915_pmu.h
> index 8e66d63d0c9f9..53bce3d8bfbaf 100644
> --- a/drivers/gpu/drm/i915/i915_pmu.h
> +++ b/drivers/gpu/drm/i915/i915_pmu.h
> @@ -56,13 +56,6 @@ struct i915_pmu_sample {
> };
>
> struct i915_pmu {
> - /**
> - * @cpuhp: Struct used for CPU hotplug handling.
> - */
> - struct {
> - struct hlist_node node;
> - unsigned int cpu;
> - } cpuhp;
> /**
> * @base: PMU base.
> */
> @@ -155,15 +148,11 @@ struct i915_pmu {
> };
>
> #ifdef CONFIG_PERF_EVENTS
> -int i915_pmu_init(void);
> -void i915_pmu_exit(void);
> void i915_pmu_register(struct drm_i915_private *i915);
> void i915_pmu_unregister(struct drm_i915_private *i915);
> void i915_pmu_gt_parked(struct intel_gt *gt);
> void i915_pmu_gt_unparked(struct intel_gt *gt);
> #else
> -static inline int i915_pmu_init(void) { return 0; }
> -static inline void i915_pmu_exit(void) {}
> static inline void i915_pmu_register(struct drm_i915_private *i915) {}
> static inline void i915_pmu_unregister(struct drm_i915_private *i915) {}
> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-20 15:08 ` [PATCH] " Liang, Kan
@ 2025-01-20 22:57 ` Lucas De Marchi
2025-01-21 1:42 ` Liang, Kan
2025-01-23 9:43 ` Tvrtko Ursulin
0 siblings, 2 replies; 25+ messages in thread
From: Lucas De Marchi @ 2025-01-20 22:57 UTC (permalink / raw)
To: Liang, Kan; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Mon, Jan 20, 2025 at 10:08:39AM -0500, Liang, Kan wrote:
>
>
>On 2025-01-16 5:24 p.m., Lucas De Marchi wrote:
>> Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with
>> a scope"), there's generic support for system-wide counters and
>> integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
>> instead of all the boilerplate code for handling hotplug.
>>
>> Cc: Kan Liang <kan.liang@linux.intel.com>
>> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>> Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> drivers/gpu/drm/i915/i915_module.c | 2 -
>> drivers/gpu/drm/i915/i915_pmu.c | 114 +----------------------------
>> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
>> 3 files changed, 1 insertion(+), 126 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/i915/i915_module.c
>> index 7ed6d70389af9..7affe07f84f45 100644
>> --- a/drivers/gpu/drm/i915/i915_module.c
>> +++ b/drivers/gpu/drm/i915/i915_module.c
>> @@ -71,8 +71,6 @@ static const struct {
>> { .init = i915_vma_resource_module_init,
>> .exit = i915_vma_resource_module_exit },
>> { .init = i915_mock_selftests },
>> - { .init = i915_pmu_init,
>> - .exit = i915_pmu_exit },
>> { .init = i915_pci_register_driver,
>> .exit = i915_pci_unregister_driver },
>> { .init = i915_perf_sysctl_register,
>> diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
>> index e55db036be1bb..652964ef0643c 100644
>> --- a/drivers/gpu/drm/i915/i915_pmu.c
>> +++ b/drivers/gpu/drm/i915/i915_pmu.c
>> @@ -28,9 +28,6 @@
>> BIT(I915_SAMPLE_WAIT) | \
>> BIT(I915_SAMPLE_SEMA))
>>
>> -static cpumask_t i915_pmu_cpumask;
>> -static unsigned int i915_pmu_target_cpu = -1;
>> -
>> static struct i915_pmu *event_to_pmu(struct perf_event *event)
>> {
>> return container_of(event->pmu, struct i915_pmu, base);
>> @@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct perf_event *event)
>> if (event->cpu < 0)
>> return -EINVAL;
>>
>> - /* only allow running on one cpu at a time */
>> - if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>> - return -EINVAL;
>> -
>> if (is_engine_event(event))
>> ret = engine_event_init(event);
>> else
>> @@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct device *dev,
>> return sprintf(buf, "config=0x%lx\n", eattr->val);
>> }
>>
>> -static ssize_t cpumask_show(struct device *dev,
>> - struct device_attribute *attr, char *buf)
>> -{
>> - return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
>> -}
>> -
>> -static DEVICE_ATTR_RO(cpumask);
>> -
>> -static struct attribute *i915_cpumask_attrs[] = {
>> - &dev_attr_cpumask.attr,
>> - NULL,
>> -};
>> -
>> -static const struct attribute_group i915_pmu_cpumask_attr_group = {
>> - .attrs = i915_cpumask_attrs,
>> -};
>> -
>> #define __event(__counter, __name, __unit) \
>> { \
>> .counter = (__counter), \
>> @@ -1173,92 +1149,12 @@ static void free_event_attributes(struct i915_pmu *pmu)
>> pmu->pmu_attr = NULL;
>> }
>>
>> -static int i915_pmu_cpu_online(unsigned int cpu, struct hlist_node *node)
>> -{
>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
>> -
>> - /* Select the first online CPU as a designated reader. */
>> - if (cpumask_empty(&i915_pmu_cpumask))
>> - cpumask_set_cpu(cpu, &i915_pmu_cpumask);
>> -
>> - return 0;
>> -}
>> -
>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node *node)
>> -{
>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
>> - unsigned int target = i915_pmu_target_cpu;
>> -
>> - /*
>> - * Unregistering an instance generates a CPU offline event which we must
>> - * ignore to avoid incorrectly modifying the shared i915_pmu_cpumask.
>> - */
>> - if (!pmu->registered)
>> - return 0;
>> -
>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>> -
>
>I'm not familar with the i915 PMU, but it seems suggest a core scope
>PMU, not a system-wide scope.
counter is in a complete separate device - it doesn't depend on core or
die or pkg - not sure why it cared about topology_sibling_cpumask here.
Also, in my tests it always chose cpu0 that is the boot cpu and can't be
offlined. Looking at our CI it seems this entire code is not tested at
all: the only test that in theory would exercise this just skips since
cpu0 can't go offline - https://intel-gfx-ci.01.org/tree/drm-tip/shards-all.html?testfilter=hotplug
Lucas De Marchi
>
>Thanks,
>Kan
>
>> - /* Migrate events if there is a valid target */
>> - if (target < nr_cpu_ids) {
>> - cpumask_set_cpu(target, &i915_pmu_cpumask);
>> - i915_pmu_target_cpu = target;
>> - }
>> - }
>> -
>> - if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
>> - perf_pmu_migrate_context(&pmu->base, cpu, target);
>> - pmu->cpuhp.cpu = target;
>> - }
>> -
>> - return 0;
>> -}
>> -
>> -static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
>> -
>> -int i915_pmu_init(void)
>> -{
>> - int ret;
>> -
>> - ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
>> - "perf/x86/intel/i915:online",
>> - i915_pmu_cpu_online,
>> - i915_pmu_cpu_offline);
>> - if (ret < 0)
>> - pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
>> - ret);
>> - else
>> - cpuhp_state = ret;
>> -
>> - return 0;
>> -}
>> -
>> -void i915_pmu_exit(void)
>> -{
>> - if (cpuhp_state != CPUHP_INVALID)
>> - cpuhp_remove_multi_state(cpuhp_state);
>> -}
>> -
>> -static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
>> -{
>> - if (cpuhp_state == CPUHP_INVALID)
>> - return -EINVAL;
>> -
>> - return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
>> -}
>> -
>> -static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
>> -{
>> - cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
>> -}
>> -
>> void i915_pmu_register(struct drm_i915_private *i915)
>> {
>> struct i915_pmu *pmu = &i915->pmu;
>> const struct attribute_group *attr_groups[] = {
>> &i915_pmu_format_attr_group,
>> &pmu->events_attr_group,
>> - &i915_pmu_cpumask_attr_group,
>> NULL
>> };
>> int ret = -ENOMEM;
>> @@ -1266,7 +1162,6 @@ void i915_pmu_register(struct drm_i915_private *i915)
>> spin_lock_init(&pmu->lock);
>> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
>> pmu->timer.function = i915_sample;
>> - pmu->cpuhp.cpu = -1;
>> init_rc6(pmu);
>>
>> if (IS_DGFX(i915)) {
>> @@ -1295,6 +1190,7 @@ void i915_pmu_register(struct drm_i915_private *i915)
>>
>> pmu->base.module = THIS_MODULE;
>> pmu->base.task_ctx_nr = perf_invalid_context;
>> + pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
>> pmu->base.event_init = i915_pmu_event_init;
>> pmu->base.add = i915_pmu_event_add;
>> pmu->base.del = i915_pmu_event_del;
>> @@ -1307,16 +1203,10 @@ void i915_pmu_register(struct drm_i915_private *i915)
>> if (ret)
>> goto err_groups;
>>
>> - ret = i915_pmu_register_cpuhp_state(pmu);
>> - if (ret)
>> - goto err_unreg;
>> -
>> pmu->registered = true;
>>
>> return;
>>
>> -err_unreg:
>> - perf_pmu_unregister(&pmu->base);
>> err_groups:
>> kfree(pmu->base.attr_groups);
>> err_attr:
>> @@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct drm_i915_private *i915)
>>
>> hrtimer_cancel(&pmu->timer);
>>
>> - i915_pmu_unregister_cpuhp_state(pmu);
>> -
>> perf_pmu_unregister(&pmu->base);
>> kfree(pmu->base.attr_groups);
>> if (IS_DGFX(i915))
>> diff --git a/drivers/gpu/drm/i915/i915_pmu.h b/drivers/gpu/drm/i915/i915_pmu.h
>> index 8e66d63d0c9f9..53bce3d8bfbaf 100644
>> --- a/drivers/gpu/drm/i915/i915_pmu.h
>> +++ b/drivers/gpu/drm/i915/i915_pmu.h
>> @@ -56,13 +56,6 @@ struct i915_pmu_sample {
>> };
>>
>> struct i915_pmu {
>> - /**
>> - * @cpuhp: Struct used for CPU hotplug handling.
>> - */
>> - struct {
>> - struct hlist_node node;
>> - unsigned int cpu;
>> - } cpuhp;
>> /**
>> * @base: PMU base.
>> */
>> @@ -155,15 +148,11 @@ struct i915_pmu {
>> };
>>
>> #ifdef CONFIG_PERF_EVENTS
>> -int i915_pmu_init(void);
>> -void i915_pmu_exit(void);
>> void i915_pmu_register(struct drm_i915_private *i915);
>> void i915_pmu_unregister(struct drm_i915_private *i915);
>> void i915_pmu_gt_parked(struct intel_gt *gt);
>> void i915_pmu_gt_unparked(struct intel_gt *gt);
>> #else
>> -static inline int i915_pmu_init(void) { return 0; }
>> -static inline void i915_pmu_exit(void) {}
>> static inline void i915_pmu_register(struct drm_i915_private *i915) {}
>> static inline void i915_pmu_unregister(struct drm_i915_private *i915) {}
>> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-20 22:57 ` Lucas De Marchi
@ 2025-01-21 1:42 ` Liang, Kan
2025-01-21 14:29 ` Lucas De Marchi
2025-01-23 9:43 ` Tvrtko Ursulin
1 sibling, 1 reply; 25+ messages in thread
From: Liang, Kan @ 2025-01-21 1:42 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 2025-01-20 5:57 p.m., Lucas De Marchi wrote:
> On Mon, Jan 20, 2025 at 10:08:39AM -0500, Liang, Kan wrote:
>>
>>
>> On 2025-01-16 5:24 p.m., Lucas De Marchi wrote:
>>> Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with
>>> a scope"), there's generic support for system-wide counters and
>>> integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
>>> instead of all the boilerplate code for handling hotplug.
>>>
>>> Cc: Kan Liang <kan.liang@linux.intel.com>
>>> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>>> Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
>>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>> ---
>>> drivers/gpu/drm/i915/i915_module.c | 2 -
>>> drivers/gpu/drm/i915/i915_pmu.c | 114 +----------------------------
>>> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
>>> 3 files changed, 1 insertion(+), 126 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/
>>> i915/i915_module.c
>>> index 7ed6d70389af9..7affe07f84f45 100644
>>> --- a/drivers/gpu/drm/i915/i915_module.c
>>> +++ b/drivers/gpu/drm/i915/i915_module.c
>>> @@ -71,8 +71,6 @@ static const struct {
>>> { .init = i915_vma_resource_module_init,
>>> .exit = i915_vma_resource_module_exit },
>>> { .init = i915_mock_selftests },
>>> - { .init = i915_pmu_init,
>>> - .exit = i915_pmu_exit },
>>> { .init = i915_pci_register_driver,
>>> .exit = i915_pci_unregister_driver },
>>> { .init = i915_perf_sysctl_register,
>>> diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/
>>> i915_pmu.c
>>> index e55db036be1bb..652964ef0643c 100644
>>> --- a/drivers/gpu/drm/i915/i915_pmu.c
>>> +++ b/drivers/gpu/drm/i915/i915_pmu.c
>>> @@ -28,9 +28,6 @@
>>> BIT(I915_SAMPLE_WAIT) | \
>>> BIT(I915_SAMPLE_SEMA))
>>>
>>> -static cpumask_t i915_pmu_cpumask;
>>> -static unsigned int i915_pmu_target_cpu = -1;
>>> -
>>> static struct i915_pmu *event_to_pmu(struct perf_event *event)
>>> {
>>> return container_of(event->pmu, struct i915_pmu, base);
>>> @@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct perf_event
>>> *event)
>>> if (event->cpu < 0)
>>> return -EINVAL;
>>>
>>> - /* only allow running on one cpu at a time */
>>> - if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>> - return -EINVAL;
>>> -
>>> if (is_engine_event(event))
>>> ret = engine_event_init(event);
>>> else
>>> @@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct device
>>> *dev,
>>> return sprintf(buf, "config=0x%lx\n", eattr->val);
>>> }
>>>
>>> -static ssize_t cpumask_show(struct device *dev,
>>> - struct device_attribute *attr, char *buf)
>>> -{
>>> - return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
>>> -}
>>> -
>>> -static DEVICE_ATTR_RO(cpumask);
>>> -
>>> -static struct attribute *i915_cpumask_attrs[] = {
>>> - &dev_attr_cpumask.attr,
>>> - NULL,
>>> -};
>>> -
>>> -static const struct attribute_group i915_pmu_cpumask_attr_group = {
>>> - .attrs = i915_cpumask_attrs,
>>> -};
>>> -
>>> #define __event(__counter, __name, __unit) \
>>> { \
>>> .counter = (__counter), \
>>> @@ -1173,92 +1149,12 @@ static void free_event_attributes(struct
>>> i915_pmu *pmu)
>>> pmu->pmu_attr = NULL;
>>> }
>>>
>>> -static int i915_pmu_cpu_online(unsigned int cpu, struct hlist_node
>>> *node)
>>> -{
>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>> cpuhp.node);
>>> -
>>> - /* Select the first online CPU as a designated reader. */
>>> - if (cpumask_empty(&i915_pmu_cpumask))
>>> - cpumask_set_cpu(cpu, &i915_pmu_cpumask);
>>> -
>>> - return 0;
>>> -}
>>> -
>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>> *node)
>>> -{
>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>> cpuhp.node);
>>> - unsigned int target = i915_pmu_target_cpu;
>>> -
>>> - /*
>>> - * Unregistering an instance generates a CPU offline event which
>>> we must
>>> - * ignore to avoid incorrectly modifying the shared
>>> i915_pmu_cpumask.
>>> - */
>>> - if (!pmu->registered)
>>> - return 0;
>>> -
>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>> -
>>
>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>> PMU, not a system-wide scope.
>
> counter is in a complete separate device - it doesn't depend on core or
> die or pkg - not sure why it cared about topology_sibling_cpumask here.
OK. But it's still a behavior change. Please make it clear in the
description that the patch also changes/fixes the scope from core scope
to system-wide.
Other than that, the patch looks good to me.
Thanks,
Kan
>
> Also, in my tests it always chose cpu0 that is the boot cpu and can't be
> offlined. Looking at our CI it seems this entire code is not tested at
> all: the only test that in theory would exercise this just skips since
> cpu0 can't go offline - https://intel-gfx-ci.01.org/tree/drm-tip/shards-
> all.html?testfilter=hotplug
>
> Lucas De Marchi
>
>>
>> Thanks,
>> Kan
>>
>>> - /* Migrate events if there is a valid target */
>>> - if (target < nr_cpu_ids) {
>>> - cpumask_set_cpu(target, &i915_pmu_cpumask);
>>> - i915_pmu_target_cpu = target;
>>> - }
>>> - }
>>> -
>>> - if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
>>> - perf_pmu_migrate_context(&pmu->base, cpu, target);
>>> - pmu->cpuhp.cpu = target;
>>> - }
>>> -
>>> - return 0;
>>> -}
>>> -
>>> -static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
>>> -
>>> -int i915_pmu_init(void)
>>> -{
>>> - int ret;
>>> -
>>> - ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
>>> - "perf/x86/intel/i915:online",
>>> - i915_pmu_cpu_online,
>>> - i915_pmu_cpu_offline);
>>> - if (ret < 0)
>>> - pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
>>> - ret);
>>> - else
>>> - cpuhp_state = ret;
>>> -
>>> - return 0;
>>> -}
>>> -
>>> -void i915_pmu_exit(void)
>>> -{
>>> - if (cpuhp_state != CPUHP_INVALID)
>>> - cpuhp_remove_multi_state(cpuhp_state);
>>> -}
>>> -
>>> -static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
>>> -{
>>> - if (cpuhp_state == CPUHP_INVALID)
>>> - return -EINVAL;
>>> -
>>> - return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
>>> -}
>>> -
>>> -static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
>>> -{
>>> - cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
>>> -}
>>> -
>>> void i915_pmu_register(struct drm_i915_private *i915)
>>> {
>>> struct i915_pmu *pmu = &i915->pmu;
>>> const struct attribute_group *attr_groups[] = {
>>> &i915_pmu_format_attr_group,
>>> &pmu->events_attr_group,
>>> - &i915_pmu_cpumask_attr_group,
>>> NULL
>>> };
>>> int ret = -ENOMEM;
>>> @@ -1266,7 +1162,6 @@ void i915_pmu_register(struct drm_i915_private
>>> *i915)
>>> spin_lock_init(&pmu->lock);
>>> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
>>> pmu->timer.function = i915_sample;
>>> - pmu->cpuhp.cpu = -1;
>>> init_rc6(pmu);
>>>
>>> if (IS_DGFX(i915)) {
>>> @@ -1295,6 +1190,7 @@ void i915_pmu_register(struct drm_i915_private
>>> *i915)
>>>
>>> pmu->base.module = THIS_MODULE;
>>> pmu->base.task_ctx_nr = perf_invalid_context;
>>> + pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
>>> pmu->base.event_init = i915_pmu_event_init;
>>> pmu->base.add = i915_pmu_event_add;
>>> pmu->base.del = i915_pmu_event_del;
>>> @@ -1307,16 +1203,10 @@ void i915_pmu_register(struct
>>> drm_i915_private *i915)
>>> if (ret)
>>> goto err_groups;
>>>
>>> - ret = i915_pmu_register_cpuhp_state(pmu);
>>> - if (ret)
>>> - goto err_unreg;
>>> -
>>> pmu->registered = true;
>>>
>>> return;
>>>
>>> -err_unreg:
>>> - perf_pmu_unregister(&pmu->base);
>>> err_groups:
>>> kfree(pmu->base.attr_groups);
>>> err_attr:
>>> @@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct
>>> drm_i915_private *i915)
>>>
>>> hrtimer_cancel(&pmu->timer);
>>>
>>> - i915_pmu_unregister_cpuhp_state(pmu);
>>> -
>>> perf_pmu_unregister(&pmu->base);
>>> kfree(pmu->base.attr_groups);
>>> if (IS_DGFX(i915))
>>> diff --git a/drivers/gpu/drm/i915/i915_pmu.h b/drivers/gpu/drm/i915/
>>> i915_pmu.h
>>> index 8e66d63d0c9f9..53bce3d8bfbaf 100644
>>> --- a/drivers/gpu/drm/i915/i915_pmu.h
>>> +++ b/drivers/gpu/drm/i915/i915_pmu.h
>>> @@ -56,13 +56,6 @@ struct i915_pmu_sample {
>>> };
>>>
>>> struct i915_pmu {
>>> - /**
>>> - * @cpuhp: Struct used for CPU hotplug handling.
>>> - */
>>> - struct {
>>> - struct hlist_node node;
>>> - unsigned int cpu;
>>> - } cpuhp;
>>> /**
>>> * @base: PMU base.
>>> */
>>> @@ -155,15 +148,11 @@ struct i915_pmu {
>>> };
>>>
>>> #ifdef CONFIG_PERF_EVENTS
>>> -int i915_pmu_init(void);
>>> -void i915_pmu_exit(void);
>>> void i915_pmu_register(struct drm_i915_private *i915);
>>> void i915_pmu_unregister(struct drm_i915_private *i915);
>>> void i915_pmu_gt_parked(struct intel_gt *gt);
>>> void i915_pmu_gt_unparked(struct intel_gt *gt);
>>> #else
>>> -static inline int i915_pmu_init(void) { return 0; }
>>> -static inline void i915_pmu_exit(void) {}
>>> static inline void i915_pmu_register(struct drm_i915_private *i915) {}
>>> static inline void i915_pmu_unregister(struct drm_i915_private
>>> *i915) {}
>>> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-21 1:42 ` Liang, Kan
@ 2025-01-21 14:29 ` Lucas De Marchi
2025-01-21 15:53 ` Liang, Kan
0 siblings, 1 reply; 25+ messages in thread
From: Lucas De Marchi @ 2025-01-21 14:29 UTC (permalink / raw)
To: Liang, Kan; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>> *node)
>>>> -{
>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>> cpuhp.node);
>>>> - unsigned int target = i915_pmu_target_cpu;
>>>> -
>>>> - /*
>>>> - * Unregistering an instance generates a CPU offline event which
>>>> we must
>>>> - * ignore to avoid incorrectly modifying the shared
>>>> i915_pmu_cpumask.
>>>> - */
>>>> - if (!pmu->registered)
>>>> - return 0;
>>>> -
>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>> -
>>>
>>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>>> PMU, not a system-wide scope.
>>
>> counter is in a complete separate device - it doesn't depend on core or
>> die or pkg - not sure why it cared about topology_sibling_cpumask here.
>
>OK. But it's still a behavior change. Please make it clear in the
>description that the patch also changes/fixes the scope from core scope
>to system-wide.
sure... do you have a suggestion how to test the hotplug? For testing
purposes, can I force the perf cpu assigned to be something other than
the cpu0?
thanks
Lucas De Marchi
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-21 14:29 ` Lucas De Marchi
@ 2025-01-21 15:53 ` Liang, Kan
2025-01-21 16:59 ` Lucas De Marchi
0 siblings, 1 reply; 25+ messages in thread
From: Liang, Kan @ 2025-01-21 15:53 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>>> *node)
>>>>> -{
>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>> cpuhp.node);
>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>> -
>>>>> - /*
>>>>> - * Unregistering an instance generates a CPU offline event which
>>>>> we must
>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>> i915_pmu_cpumask.
>>>>> - */
>>>>> - if (!pmu->registered)
>>>>> - return 0;
>>>>> -
>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>> -
>>>>
>>>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>> PMU, not a system-wide scope.
>>>
>>> counter is in a complete separate device - it doesn't depend on core or
>>> die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>
>> OK. But it's still a behavior change. Please make it clear in the
>> description that the patch also changes/fixes the scope from core scope
>> to system-wide.
>
> sure... do you have a suggestion how to test the hotplug? For testing
> purposes, can I force the perf cpu assigned to be something other than
> the cpu0?
Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
CPU0. I don't know a way to force another CPU without changing the code.
You may have to instrument the code for the test.
Another test you may want to do is the perf system-wide test, e.g., perf
stat -a -e i915/actual-frequency/ sleep 1.
The existing code assumes the counter is core scope. So the result
should be huge, since perf will read the counter on each core and add
them up.
But this patch claims that the counter is system-wide. With the patch,
the same perf command should only read the counter on the assigned CPU.
Please also post the test results in the changelog. That's the reason
why the scope has to be changed.
Thanks,
Kan
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-21 15:53 ` Liang, Kan
@ 2025-01-21 16:59 ` Lucas De Marchi
2025-01-21 17:19 ` Liang, Kan
2025-01-25 0:46 ` Umesh Nerlige Ramappa
0 siblings, 2 replies; 25+ messages in thread
From: Lucas De Marchi @ 2025-01-21 16:59 UTC (permalink / raw)
To: Liang, Kan; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>
>
>On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>>>> *node)
>>>>>> -{
>>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>> cpuhp.node);
>>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>>> -
>>>>>> - /*
>>>>>> - * Unregistering an instance generates a CPU offline event which
>>>>>> we must
>>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>>> i915_pmu_cpumask.
>>>>>> - */
>>>>>> - if (!pmu->registered)
>>>>>> - return 0;
>>>>>> -
>>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>>> -
>>>>>
>>>>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>>> PMU, not a system-wide scope.
>>>>
>>>> counter is in a complete separate device - it doesn't depend on core or
>>>> die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>>
>>> OK. But it's still a behavior change. Please make it clear in the
>>> description that the patch also changes/fixes the scope from core scope
>>> to system-wide.
>>
>> sure... do you have a suggestion how to test the hotplug? For testing
>> purposes, can I force the perf cpu assigned to be something other than
>> the cpu0?
>
>Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>CPU0. I don't know a way to force another CPU without changing the code.
>You may have to instrument the code for the test.
>
>Another test you may want to do is the perf system-wide test, e.g., perf
>stat -a -e i915/actual-frequency/ sleep 1.
>
>The existing code assumes the counter is core scope. So the result
>should be huge, since perf will read the counter on each core and add
>them up.
that is not allowed and it simply fails to init the counter:
static int i915_pmu_event_init(struct perf_event *event)
...
if (event->cpu < 0)
return -EINVAL;
if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
return -EINVAL;
...
}
event only succeeds the initialization in the assigned cpu. I see no
differences in results (using i915/interrupts/ since freq is harder to
compare):
$ sudo perf stat -e i915/interrupts/ sleep 1
Performance counter stats for 'system wide':
253 i915/interrupts/
1.002215175 seconds time elapsed
$ sudo perf stat -a -e i915/interrupts/ sleep 1
Performance counter stats for 'system wide':
251 i915/interrupts/
1.000900818 seconds time elapsed
Note that our cpumask attr already returns just the assigned cpu and
perf-stat only tries to open on that cpu:
$ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/interrupts/ sleep 1
[pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0, sample_type=PERF_SAMPLE_IDENTIFIER, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /* arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1, PERF_FLAG_FD_CLOEXEC) = 3
Lucas De Marchi
>But this patch claims that the counter is system-wide. With the patch,
>the same perf command should only read the counter on the assigned CPU.
>
>Please also post the test results in the changelog. That's the reason
>why the scope has to be changed.
it seems that migration code is simply wrong, not that we are changing
the scope here - it was already considered system-wide. I can add a
paragraph in the commit message explaining it.
thanks
Lucas De Marchi
>
>Thanks,
>Kan
>
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-21 16:59 ` Lucas De Marchi
@ 2025-01-21 17:19 ` Liang, Kan
2025-02-13 4:13 ` Lucas De Marchi
2025-01-25 0:46 ` Umesh Nerlige Ramappa
1 sibling, 1 reply; 25+ messages in thread
From: Liang, Kan @ 2025-01-21 17:19 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 2025-01-21 11:59 a.m., Lucas De Marchi wrote:
> On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>
>>
>> On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>>>>> *node)
>>>>>>> -{
>>>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>> cpuhp.node);
>>>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>>>> -
>>>>>>> - /*
>>>>>>> - * Unregistering an instance generates a CPU offline event
>>>>>>> which
>>>>>>> we must
>>>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>>>> i915_pmu_cpumask.
>>>>>>> - */
>>>>>>> - if (!pmu->registered)
>>>>>>> - return 0;
>>>>>>> -
>>>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu),
>>>>>>> cpu);
>>>>>>> -
>>>>>>
>>>>>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>>>> PMU, not a system-wide scope.
>>>>>
>>>>> counter is in a complete separate device - it doesn't depend on
>>>>> core or
>>>>> die or pkg - not sure why it cared about topology_sibling_cpumask
>>>>> here.
>>>>
>>>> OK. But it's still a behavior change. Please make it clear in the
>>>> description that the patch also changes/fixes the scope from core scope
>>>> to system-wide.
>>>
>>> sure... do you have a suggestion how to test the hotplug? For testing
>>> purposes, can I force the perf cpu assigned to be something other than
>>> the cpu0?
>>
>> Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>> CPU0. I don't know a way to force another CPU without changing the code.
>> You may have to instrument the code for the test.
>>
>> Another test you may want to do is the perf system-wide test, e.g., perf
>> stat -a -e i915/actual-frequency/ sleep 1.
>>
>> The existing code assumes the counter is core scope. So the result
>> should be huge, since perf will read the counter on each core and add
>> them up.
>
> that is not allowed and it simply fails to init the counter:
>
> static int i915_pmu_event_init(struct perf_event *event)
> ...
> if (event->cpu < 0)
> return -EINVAL;
> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
> return -EINVAL;
> ...
> }
>
> event only succeeds the initialization in the assigned cpu. I see no
> differences in results (using i915/interrupts/ since freq is harder to
> compare):
>
> $ sudo perf stat -e i915/interrupts/ sleep 1
>
> Performance counter stats for 'system wide':
>
> 253 i915/
> interrupts/
> 1.002215175 seconds time elapsed
>
> $ sudo perf stat -a -e i915/interrupts/ sleep 1
>
> Performance counter stats for 'system wide':
>
> 251 i915/
> interrupts/
> 1.000900818 seconds time elapsed
>
> Note that our cpumask attr already returns just the assigned cpu and
> perf-stat only tries to open on that cpu:
>
> $ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/
> interrupts/ sleep 1
>
> [pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /*
> PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0,
> sample_type=PERF_SAMPLE_IDENTIFIER,
> read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|
> PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /*
> arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1,
> PERF_FLAG_FD_CLOEXEC) = 3
>
I see. The behavior is not changed with the patch. It should be just the
topology_sibling_cpumask() which implies a misleading message.
Thanks for the confirmation.
> Lucas De Marchi
>
>> But this patch claims that the counter is system-wide. With the patch,
>> the same perf command should only read the counter on the assigned CPU.
>>
>> Please also post the test results in the changelog. That's the reason
>> why the scope has to be changed.
>
> it seems that migration code is simply wrong, not that we are changing
> the scope here - it was already considered system-wide. I can add a
> paragraph in the commit message explaining it.
>
Yes, please.
Thanks,
Kan
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915/pmu: Drop custom hotplug code (rev2)
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
` (2 preceding siblings ...)
2025-01-20 15:08 ` [PATCH] " Liang, Kan
@ 2025-01-23 6:37 ` Patchwork
2025-01-23 6:56 ` ✓ i915.CI.BAT: success " Patchwork
` (2 subsequent siblings)
6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2025-01-23 6:37 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/pmu: Drop custom hotplug code (rev2)
URL : https://patchwork.freedesktop.org/series/143636/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✓ i915.CI.BAT: success for drm/i915/pmu: Drop custom hotplug code (rev2)
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
` (3 preceding siblings ...)
2025-01-23 6:37 ` ✗ Fi.CI.SPARSE: warning for drm/i915/pmu: Drop custom hotplug code (rev2) Patchwork
@ 2025-01-23 6:56 ` Patchwork
2025-01-24 0:27 ` ✗ i915.CI.Full: failure " Patchwork
2025-01-29 8:37 ` [PATCH] drm/i915/pmu: Drop custom hotplug code Tvrtko Ursulin
6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2025-01-23 6:56 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 4159 bytes --]
== Series Details ==
Series: drm/i915/pmu: Drop custom hotplug code (rev2)
URL : https://patchwork.freedesktop.org/series/143636/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_16004 -> Patchwork_143636v2
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/index.html
Participating hosts (42 -> 42)
------------------------------
Additional (1): fi-pnv-d510
Missing (1): fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_143636v2 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_module_load@load:
- fi-pnv-d510: NOTRUN -> [ABORT][1] ([i915#13203])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/fi-pnv-d510/igt@i915_module_load@load.html
* igt@i915_selftest@live:
- bat-mtlp-8: [PASS][2] -> [DMESG-FAIL][3] ([i915#12061]) +1 other test dmesg-fail
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/bat-mtlp-8/igt@i915_selftest@live.html
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/bat-mtlp-8/igt@i915_selftest@live.html
- bat-jsl-1: [PASS][4] -> [DMESG-FAIL][5] ([i915#13132]) +1 other test dmesg-fail
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/bat-jsl-1/igt@i915_selftest@live.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/bat-jsl-1/igt@i915_selftest@live.html
- bat-twl-1: NOTRUN -> [ABORT][6] ([i915#12919] / [i915#13503])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/bat-twl-1/igt@i915_selftest@live.html
- bat-adlp-6: [PASS][7] -> [ABORT][8] ([i915#12435] / [i915#13399])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/bat-adlp-6/igt@i915_selftest@live.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/bat-adlp-6/igt@i915_selftest@live.html
* igt@i915_selftest@live@gt_pm:
- bat-twl-1: NOTRUN -> [ABORT][9] ([i915#12919])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/bat-twl-1/igt@i915_selftest@live@gt_pm.html
* igt@i915_selftest@live@guc:
- bat-adlp-6: [PASS][10] -> [ABORT][11] ([i915#13399])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/bat-adlp-6/igt@i915_selftest@live@guc.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/bat-adlp-6/igt@i915_selftest@live@guc.html
#### Possible fixes ####
* igt@i915_selftest@live@workarounds:
- {bat-arls-6}: [DMESG-FAIL][12] ([i915#12061]) -> [PASS][13] +1 other test pass
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/bat-arls-6/igt@i915_selftest@live@workarounds.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/bat-arls-6/igt@i915_selftest@live@workarounds.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12435
[i915#12919]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12919
[i915#13132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13132
[i915#13203]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13203
[i915#13399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13399
[i915#13503]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13503
Build changes
-------------
* Linux: CI_DRM_16004 -> Patchwork_143636v2
CI-20190529: 20190529
CI_DRM_16004: cb1c4020e51585b89363590a56869836e1466b75 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8207: 9f36f9f9e8825a67b762630c2b31628ddcda5c10 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_143636v2: cb1c4020e51585b89363590a56869836e1466b75 @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/index.html
[-- Attachment #2: Type: text/html, Size: 5105 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-20 22:57 ` Lucas De Marchi
2025-01-21 1:42 ` Liang, Kan
@ 2025-01-23 9:43 ` Tvrtko Ursulin
2025-01-23 16:27 ` Lucas De Marchi
1 sibling, 1 reply; 25+ messages in thread
From: Tvrtko Ursulin @ 2025-01-23 9:43 UTC (permalink / raw)
To: Lucas De Marchi, Liang, Kan
Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 20/01/2025 22:57, Lucas De Marchi wrote:
> On Mon, Jan 20, 2025 at 10:08:39AM -0500, Liang, Kan wrote:
>>
>>
>> On 2025-01-16 5:24 p.m., Lucas De Marchi wrote:
>>> Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with
>>> a scope"), there's generic support for system-wide counters and
>>> integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
>>> instead of all the boilerplate code for handling hotplug.
>>>
>>> Cc: Kan Liang <kan.liang@linux.intel.com>
>>> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>>> Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
>>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>> ---
>>> drivers/gpu/drm/i915/i915_module.c | 2 -
>>> drivers/gpu/drm/i915/i915_pmu.c | 114 +----------------------------
>>> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
>>> 3 files changed, 1 insertion(+), 126 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_module.c
>>> b/drivers/gpu/drm/i915/i915_module.c
>>> index 7ed6d70389af9..7affe07f84f45 100644
>>> --- a/drivers/gpu/drm/i915/i915_module.c
>>> +++ b/drivers/gpu/drm/i915/i915_module.c
>>> @@ -71,8 +71,6 @@ static const struct {
>>> { .init = i915_vma_resource_module_init,
>>> .exit = i915_vma_resource_module_exit },
>>> { .init = i915_mock_selftests },
>>> - { .init = i915_pmu_init,
>>> - .exit = i915_pmu_exit },
>>> { .init = i915_pci_register_driver,
>>> .exit = i915_pci_unregister_driver },
>>> { .init = i915_perf_sysctl_register,
>>> diff --git a/drivers/gpu/drm/i915/i915_pmu.c
>>> b/drivers/gpu/drm/i915/i915_pmu.c
>>> index e55db036be1bb..652964ef0643c 100644
>>> --- a/drivers/gpu/drm/i915/i915_pmu.c
>>> +++ b/drivers/gpu/drm/i915/i915_pmu.c
>>> @@ -28,9 +28,6 @@
>>> BIT(I915_SAMPLE_WAIT) | \
>>> BIT(I915_SAMPLE_SEMA))
>>>
>>> -static cpumask_t i915_pmu_cpumask;
>>> -static unsigned int i915_pmu_target_cpu = -1;
>>> -
>>> static struct i915_pmu *event_to_pmu(struct perf_event *event)
>>> {
>>> return container_of(event->pmu, struct i915_pmu, base);
>>> @@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct perf_event
>>> *event)
>>> if (event->cpu < 0)
>>> return -EINVAL;
>>>
>>> - /* only allow running on one cpu at a time */
>>> - if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>> - return -EINVAL;
>>> -
>>> if (is_engine_event(event))
>>> ret = engine_event_init(event);
>>> else
>>> @@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct device
>>> *dev,
>>> return sprintf(buf, "config=0x%lx\n", eattr->val);
>>> }
>>>
>>> -static ssize_t cpumask_show(struct device *dev,
>>> - struct device_attribute *attr, char *buf)
>>> -{
>>> - return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
>>> -}
>>> -
>>> -static DEVICE_ATTR_RO(cpumask);
>>> -
>>> -static struct attribute *i915_cpumask_attrs[] = {
>>> - &dev_attr_cpumask.attr,
>>> - NULL,
>>> -};
>>> -
>>> -static const struct attribute_group i915_pmu_cpumask_attr_group = {
>>> - .attrs = i915_cpumask_attrs,
>>> -};
>>> -
>>> #define __event(__counter, __name, __unit) \
>>> { \
>>> .counter = (__counter), \
>>> @@ -1173,92 +1149,12 @@ static void free_event_attributes(struct
>>> i915_pmu *pmu)
>>> pmu->pmu_attr = NULL;
>>> }
>>>
>>> -static int i915_pmu_cpu_online(unsigned int cpu, struct hlist_node
>>> *node)
>>> -{
>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>> cpuhp.node);
>>> -
>>> - /* Select the first online CPU as a designated reader. */
>>> - if (cpumask_empty(&i915_pmu_cpumask))
>>> - cpumask_set_cpu(cpu, &i915_pmu_cpumask);
>>> -
>>> - return 0;
>>> -}
>>> -
>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>> *node)
>>> -{
>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>> cpuhp.node);
>>> - unsigned int target = i915_pmu_target_cpu;
>>> -
>>> - /*
>>> - * Unregistering an instance generates a CPU offline event which
>>> we must
>>> - * ignore to avoid incorrectly modifying the shared
>>> i915_pmu_cpumask.
>>> - */
>>> - if (!pmu->registered)
>>> - return 0;
>>> -
>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>> -
>>
>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>> PMU, not a system-wide scope.
>
> counter is in a complete separate device - it doesn't depend on core or
> die or pkg - not sure why it cared about topology_sibling_cpumask here.
>
> Also, in my tests it always chose cpu0 that is the boot cpu and can't be
> offlined. Looking at our CI it seems this entire code is not tested at
> all: the only test that in theory would exercise this just skips since
> cpu0 can't go offline -
> https://intel-gfx-ci.01.org/tree/drm-tip/shards-all.html?testfilter=hotplug
s/not tested at all/not currently tested/
commit e59e74dc48a309cb848ffc3d76a0d61aa6803c05
Author: Thomas Gleixner <tglx@linutronix.de>
Date: Fri May 12 23:07:04 2023 +0200
x86/topology: Remove CPU0 hotplug option
So test worked for ~6 years and then transitioned to skip. :shrug:
Regards,
Tvrtko
>>
>>> - /* Migrate events if there is a valid target */
>>> - if (target < nr_cpu_ids) {
>>> - cpumask_set_cpu(target, &i915_pmu_cpumask);
>>> - i915_pmu_target_cpu = target;
>>> - }
>>> - }
>>> -
>>> - if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
>>> - perf_pmu_migrate_context(&pmu->base, cpu, target);
>>> - pmu->cpuhp.cpu = target;
>>> - }
>>> -
>>> - return 0;
>>> -}
>>> -
>>> -static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
>>> -
>>> -int i915_pmu_init(void)
>>> -{
>>> - int ret;
>>> -
>>> - ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
>>> - "perf/x86/intel/i915:online",
>>> - i915_pmu_cpu_online,
>>> - i915_pmu_cpu_offline);
>>> - if (ret < 0)
>>> - pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
>>> - ret);
>>> - else
>>> - cpuhp_state = ret;
>>> -
>>> - return 0;
>>> -}
>>> -
>>> -void i915_pmu_exit(void)
>>> -{
>>> - if (cpuhp_state != CPUHP_INVALID)
>>> - cpuhp_remove_multi_state(cpuhp_state);
>>> -}
>>> -
>>> -static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
>>> -{
>>> - if (cpuhp_state == CPUHP_INVALID)
>>> - return -EINVAL;
>>> -
>>> - return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
>>> -}
>>> -
>>> -static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
>>> -{
>>> - cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
>>> -}
>>> -
>>> void i915_pmu_register(struct drm_i915_private *i915)
>>> {
>>> struct i915_pmu *pmu = &i915->pmu;
>>> const struct attribute_group *attr_groups[] = {
>>> &i915_pmu_format_attr_group,
>>> &pmu->events_attr_group,
>>> - &i915_pmu_cpumask_attr_group,
>>> NULL
>>> };
>>> int ret = -ENOMEM;
>>> @@ -1266,7 +1162,6 @@ void i915_pmu_register(struct drm_i915_private
>>> *i915)
>>> spin_lock_init(&pmu->lock);
>>> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
>>> pmu->timer.function = i915_sample;
>>> - pmu->cpuhp.cpu = -1;
>>> init_rc6(pmu);
>>>
>>> if (IS_DGFX(i915)) {
>>> @@ -1295,6 +1190,7 @@ void i915_pmu_register(struct drm_i915_private
>>> *i915)
>>>
>>> pmu->base.module = THIS_MODULE;
>>> pmu->base.task_ctx_nr = perf_invalid_context;
>>> + pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
>>> pmu->base.event_init = i915_pmu_event_init;
>>> pmu->base.add = i915_pmu_event_add;
>>> pmu->base.del = i915_pmu_event_del;
>>> @@ -1307,16 +1203,10 @@ void i915_pmu_register(struct
>>> drm_i915_private *i915)
>>> if (ret)
>>> goto err_groups;
>>>
>>> - ret = i915_pmu_register_cpuhp_state(pmu);
>>> - if (ret)
>>> - goto err_unreg;
>>> -
>>> pmu->registered = true;
>>>
>>> return;
>>>
>>> -err_unreg:
>>> - perf_pmu_unregister(&pmu->base);
>>> err_groups:
>>> kfree(pmu->base.attr_groups);
>>> err_attr:
>>> @@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct
>>> drm_i915_private *i915)
>>>
>>> hrtimer_cancel(&pmu->timer);
>>>
>>> - i915_pmu_unregister_cpuhp_state(pmu);
>>> -
>>> perf_pmu_unregister(&pmu->base);
>>> kfree(pmu->base.attr_groups);
>>> if (IS_DGFX(i915))
>>> diff --git a/drivers/gpu/drm/i915/i915_pmu.h
>>> b/drivers/gpu/drm/i915/i915_pmu.h
>>> index 8e66d63d0c9f9..53bce3d8bfbaf 100644
>>> --- a/drivers/gpu/drm/i915/i915_pmu.h
>>> +++ b/drivers/gpu/drm/i915/i915_pmu.h
>>> @@ -56,13 +56,6 @@ struct i915_pmu_sample {
>>> };
>>>
>>> struct i915_pmu {
>>> - /**
>>> - * @cpuhp: Struct used for CPU hotplug handling.
>>> - */
>>> - struct {
>>> - struct hlist_node node;
>>> - unsigned int cpu;
>>> - } cpuhp;
>>> /**
>>> * @base: PMU base.
>>> */
>>> @@ -155,15 +148,11 @@ struct i915_pmu {
>>> };
>>>
>>> #ifdef CONFIG_PERF_EVENTS
>>> -int i915_pmu_init(void);
>>> -void i915_pmu_exit(void);
>>> void i915_pmu_register(struct drm_i915_private *i915);
>>> void i915_pmu_unregister(struct drm_i915_private *i915);
>>> void i915_pmu_gt_parked(struct intel_gt *gt);
>>> void i915_pmu_gt_unparked(struct intel_gt *gt);
>>> #else
>>> -static inline int i915_pmu_init(void) { return 0; }
>>> -static inline void i915_pmu_exit(void) {}
>>> static inline void i915_pmu_register(struct drm_i915_private *i915) {}
>>> static inline void i915_pmu_unregister(struct drm_i915_private
>>> *i915) {}
>>> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-23 9:43 ` Tvrtko Ursulin
@ 2025-01-23 16:27 ` Lucas De Marchi
2025-01-23 18:06 ` Tvrtko Ursulin
0 siblings, 1 reply; 25+ messages in thread
From: Lucas De Marchi @ 2025-01-23 16:27 UTC (permalink / raw)
To: Tvrtko Ursulin
Cc: Liang, Kan, intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Thu, Jan 23, 2025 at 09:43:35AM +0000, Tvrtko Ursulin wrote:
>
>On 20/01/2025 22:57, Lucas De Marchi wrote:
>>On Mon, Jan 20, 2025 at 10:08:39AM -0500, Liang, Kan wrote:
>>>
>>>
>>>On 2025-01-16 5:24 p.m., Lucas De Marchi wrote:
>>>>Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with
>>>>a scope"), there's generic support for system-wide counters and
>>>>integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
>>>>instead of all the boilerplate code for handling hotplug.
>>>>
>>>>Cc: Kan Liang <kan.liang@linux.intel.com>
>>>>Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>>>>Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
>>>>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>---
>>>> drivers/gpu/drm/i915/i915_module.c | 2 -
>>>> drivers/gpu/drm/i915/i915_pmu.c | 114 +----------------------------
>>>> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
>>>> 3 files changed, 1 insertion(+), 126 deletions(-)
>>>>
>>>>diff --git a/drivers/gpu/drm/i915/i915_module.c
>>>>b/drivers/gpu/drm/i915/i915_module.c
>>>>index 7ed6d70389af9..7affe07f84f45 100644
>>>>--- a/drivers/gpu/drm/i915/i915_module.c
>>>>+++ b/drivers/gpu/drm/i915/i915_module.c
>>>>@@ -71,8 +71,6 @@ static const struct {
>>>> { .init = i915_vma_resource_module_init,
>>>> .exit = i915_vma_resource_module_exit },
>>>> { .init = i915_mock_selftests },
>>>>- { .init = i915_pmu_init,
>>>>- .exit = i915_pmu_exit },
>>>> { .init = i915_pci_register_driver,
>>>> .exit = i915_pci_unregister_driver },
>>>> { .init = i915_perf_sysctl_register,
>>>>diff --git a/drivers/gpu/drm/i915/i915_pmu.c
>>>>b/drivers/gpu/drm/i915/i915_pmu.c
>>>>index e55db036be1bb..652964ef0643c 100644
>>>>--- a/drivers/gpu/drm/i915/i915_pmu.c
>>>>+++ b/drivers/gpu/drm/i915/i915_pmu.c
>>>>@@ -28,9 +28,6 @@
>>>> BIT(I915_SAMPLE_WAIT) | \
>>>> BIT(I915_SAMPLE_SEMA))
>>>>
>>>>-static cpumask_t i915_pmu_cpumask;
>>>>-static unsigned int i915_pmu_target_cpu = -1;
>>>>-
>>>> static struct i915_pmu *event_to_pmu(struct perf_event *event)
>>>> {
>>>> return container_of(event->pmu, struct i915_pmu, base);
>>>>@@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct
>>>>perf_event *event)
>>>> if (event->cpu < 0)
>>>> return -EINVAL;
>>>>
>>>>- /* only allow running on one cpu at a time */
>>>>- if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>>>- return -EINVAL;
>>>>-
>>>> if (is_engine_event(event))
>>>> ret = engine_event_init(event);
>>>> else
>>>>@@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct
>>>>device *dev,
>>>> return sprintf(buf, "config=0x%lx\n", eattr->val);
>>>> }
>>>>
>>>>-static ssize_t cpumask_show(struct device *dev,
>>>>- struct device_attribute *attr, char *buf)
>>>>-{
>>>>- return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
>>>>-}
>>>>-
>>>>-static DEVICE_ATTR_RO(cpumask);
>>>>-
>>>>-static struct attribute *i915_cpumask_attrs[] = {
>>>>- &dev_attr_cpumask.attr,
>>>>- NULL,
>>>>-};
>>>>-
>>>>-static const struct attribute_group i915_pmu_cpumask_attr_group = {
>>>>- .attrs = i915_cpumask_attrs,
>>>>-};
>>>>-
>>>> #define __event(__counter, __name, __unit) \
>>>> { \
>>>> .counter = (__counter), \
>>>>@@ -1173,92 +1149,12 @@ static void free_event_attributes(struct
>>>>i915_pmu *pmu)
>>>> pmu->pmu_attr = NULL;
>>>> }
>>>>
>>>>-static int i915_pmu_cpu_online(unsigned int cpu, struct
>>>>hlist_node *node)
>>>>-{
>>>>- struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>cpuhp.node);
>>>>-
>>>>- /* Select the first online CPU as a designated reader. */
>>>>- if (cpumask_empty(&i915_pmu_cpumask))
>>>>- cpumask_set_cpu(cpu, &i915_pmu_cpumask);
>>>>-
>>>>- return 0;
>>>>-}
>>>>-
>>>>-static int i915_pmu_cpu_offline(unsigned int cpu, struct
>>>>hlist_node *node)
>>>>-{
>>>>- struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>cpuhp.node);
>>>>- unsigned int target = i915_pmu_target_cpu;
>>>>-
>>>>- /*
>>>>- * Unregistering an instance generates a CPU offline event
>>>>which we must
>>>>- * ignore to avoid incorrectly modifying the shared
>>>>i915_pmu_cpumask.
>>>>- */
>>>>- if (!pmu->registered)
>>>>- return 0;
>>>>-
>>>>- if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>- target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>-
>>>
>>>I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>PMU, not a system-wide scope.
>>
>>counter is in a complete separate device - it doesn't depend on core or
>>die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>
>>Also, in my tests it always chose cpu0 that is the boot cpu and can't be
>>offlined. Looking at our CI it seems this entire code is not tested at
>>all: the only test that in theory would exercise this just skips since
>>cpu0 can't go offline - https://intel-gfx-ci.01.org/tree/drm-tip/shards-all.html?testfilter=hotplug
>
>s/not tested at all/not currently tested/
>
>commit e59e74dc48a309cb848ffc3d76a0d61aa6803c05
>Author: Thomas Gleixner <tglx@linutronix.de>
>Date: Fri May 12 23:07:04 2023 +0200
>
> x86/topology: Remove CPU0 hotplug option
>
>So test worked for ~6 years and then transitioned to skip. :shrug:
right, indeed looking at the CI repo I see it there:
$ git grep CONFIG_BOOTPARAM_HOTPLUG_CPU0
kconfig/debug:CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
kconfig/debug-kasan:CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
$ git log --oneline -G CONFIG_BOOTPARAM_HOTPLUG_CPU0 kconfig/debug
3553bf4 kconfig: Dump current kconfigs used by CI
I sent this to igt yesterday:
https://patchwork.freedesktop.org/patch/633357/?series=143874&rev=1
I will reword that commit message to note that it was actually tested
before that kernel commit. The test worked because it only tried to toggle the
cpu0 and thus a migration succeeded to a sibling cpu, right?
For the kernel commit message I can add a comment about the counter
being indeed a system one and the use of topology_sibling_cpumask()
being wrong here. With that, can you review this patch?
thanks
Lucas De Marchi
>
>Regards,
>
>Tvrtko
>
>>>
>>>>- /* Migrate events if there is a valid target */
>>>>- if (target < nr_cpu_ids) {
>>>>- cpumask_set_cpu(target, &i915_pmu_cpumask);
>>>>- i915_pmu_target_cpu = target;
>>>>- }
>>>>- }
>>>>-
>>>>- if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
>>>>- perf_pmu_migrate_context(&pmu->base, cpu, target);
>>>>- pmu->cpuhp.cpu = target;
>>>>- }
>>>>-
>>>>- return 0;
>>>>-}
>>>>-
>>>>-static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
>>>>-
>>>>-int i915_pmu_init(void)
>>>>-{
>>>>- int ret;
>>>>-
>>>>- ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
>>>>- "perf/x86/intel/i915:online",
>>>>- i915_pmu_cpu_online,
>>>>- i915_pmu_cpu_offline);
>>>>- if (ret < 0)
>>>>- pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
>>>>- ret);
>>>>- else
>>>>- cpuhp_state = ret;
>>>>-
>>>>- return 0;
>>>>-}
>>>>-
>>>>-void i915_pmu_exit(void)
>>>>-{
>>>>- if (cpuhp_state != CPUHP_INVALID)
>>>>- cpuhp_remove_multi_state(cpuhp_state);
>>>>-}
>>>>-
>>>>-static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
>>>>-{
>>>>- if (cpuhp_state == CPUHP_INVALID)
>>>>- return -EINVAL;
>>>>-
>>>>- return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
>>>>-}
>>>>-
>>>>-static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
>>>>-{
>>>>- cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
>>>>-}
>>>>-
>>>> void i915_pmu_register(struct drm_i915_private *i915)
>>>> {
>>>> struct i915_pmu *pmu = &i915->pmu;
>>>> const struct attribute_group *attr_groups[] = {
>>>> &i915_pmu_format_attr_group,
>>>> &pmu->events_attr_group,
>>>>- &i915_pmu_cpumask_attr_group,
>>>> NULL
>>>> };
>>>> int ret = -ENOMEM;
>>>>@@ -1266,7 +1162,6 @@ void i915_pmu_register(struct
>>>>drm_i915_private *i915)
>>>> spin_lock_init(&pmu->lock);
>>>> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
>>>> pmu->timer.function = i915_sample;
>>>>- pmu->cpuhp.cpu = -1;
>>>> init_rc6(pmu);
>>>>
>>>> if (IS_DGFX(i915)) {
>>>>@@ -1295,6 +1190,7 @@ void i915_pmu_register(struct
>>>>drm_i915_private *i915)
>>>>
>>>> pmu->base.module = THIS_MODULE;
>>>> pmu->base.task_ctx_nr = perf_invalid_context;
>>>>+ pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
>>>> pmu->base.event_init = i915_pmu_event_init;
>>>> pmu->base.add = i915_pmu_event_add;
>>>> pmu->base.del = i915_pmu_event_del;
>>>>@@ -1307,16 +1203,10 @@ void i915_pmu_register(struct
>>>>drm_i915_private *i915)
>>>> if (ret)
>>>> goto err_groups;
>>>>
>>>>- ret = i915_pmu_register_cpuhp_state(pmu);
>>>>- if (ret)
>>>>- goto err_unreg;
>>>>-
>>>> pmu->registered = true;
>>>>
>>>> return;
>>>>
>>>>-err_unreg:
>>>>- perf_pmu_unregister(&pmu->base);
>>>> err_groups:
>>>> kfree(pmu->base.attr_groups);
>>>> err_attr:
>>>>@@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct
>>>>drm_i915_private *i915)
>>>>
>>>> hrtimer_cancel(&pmu->timer);
>>>>
>>>>- i915_pmu_unregister_cpuhp_state(pmu);
>>>>-
>>>> perf_pmu_unregister(&pmu->base);
>>>> kfree(pmu->base.attr_groups);
>>>> if (IS_DGFX(i915))
>>>>diff --git a/drivers/gpu/drm/i915/i915_pmu.h
>>>>b/drivers/gpu/drm/i915/i915_pmu.h
>>>>index 8e66d63d0c9f9..53bce3d8bfbaf 100644
>>>>--- a/drivers/gpu/drm/i915/i915_pmu.h
>>>>+++ b/drivers/gpu/drm/i915/i915_pmu.h
>>>>@@ -56,13 +56,6 @@ struct i915_pmu_sample {
>>>> };
>>>>
>>>> struct i915_pmu {
>>>>- /**
>>>>- * @cpuhp: Struct used for CPU hotplug handling.
>>>>- */
>>>>- struct {
>>>>- struct hlist_node node;
>>>>- unsigned int cpu;
>>>>- } cpuhp;
>>>> /**
>>>> * @base: PMU base.
>>>> */
>>>>@@ -155,15 +148,11 @@ struct i915_pmu {
>>>> };
>>>>
>>>> #ifdef CONFIG_PERF_EVENTS
>>>>-int i915_pmu_init(void);
>>>>-void i915_pmu_exit(void);
>>>> void i915_pmu_register(struct drm_i915_private *i915);
>>>> void i915_pmu_unregister(struct drm_i915_private *i915);
>>>> void i915_pmu_gt_parked(struct intel_gt *gt);
>>>> void i915_pmu_gt_unparked(struct intel_gt *gt);
>>>> #else
>>>>-static inline int i915_pmu_init(void) { return 0; }
>>>>-static inline void i915_pmu_exit(void) {}
>>>> static inline void i915_pmu_register(struct drm_i915_private *i915) {}
>>>> static inline void i915_pmu_unregister(struct drm_i915_private
>>>>*i915) {}
>>>> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
>>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-23 16:27 ` Lucas De Marchi
@ 2025-01-23 18:06 ` Tvrtko Ursulin
2025-01-23 19:26 ` Lucas De Marchi
0 siblings, 1 reply; 25+ messages in thread
From: Tvrtko Ursulin @ 2025-01-23 18:06 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Liang, Kan, intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 23/01/2025 16:27, Lucas De Marchi wrote:
> On Thu, Jan 23, 2025 at 09:43:35AM +0000, Tvrtko Ursulin wrote:
>>
>> On 20/01/2025 22:57, Lucas De Marchi wrote:
>>> On Mon, Jan 20, 2025 at 10:08:39AM -0500, Liang, Kan wrote:
>>>>
>>>>
>>>> On 2025-01-16 5:24 p.m., Lucas De Marchi wrote:
>>>>> Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU
>>>>> with
>>>>> a scope"), there's generic support for system-wide counters and
>>>>> integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
>>>>> instead of all the boilerplate code for handling hotplug.
>>>>>
>>>>> Cc: Kan Liang <kan.liang@linux.intel.com>
>>>>> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>>>>> Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
>>>>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>> ---
>>>>> drivers/gpu/drm/i915/i915_module.c | 2 -
>>>>> drivers/gpu/drm/i915/i915_pmu.c | 114
>>>>> +----------------------------
>>>>> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
>>>>> 3 files changed, 1 insertion(+), 126 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/i915/i915_module.c
>>>>> b/drivers/gpu/drm/i915/i915_module.c
>>>>> index 7ed6d70389af9..7affe07f84f45 100644
>>>>> --- a/drivers/gpu/drm/i915/i915_module.c
>>>>> +++ b/drivers/gpu/drm/i915/i915_module.c
>>>>> @@ -71,8 +71,6 @@ static const struct {
>>>>> { .init = i915_vma_resource_module_init,
>>>>> .exit = i915_vma_resource_module_exit },
>>>>> { .init = i915_mock_selftests },
>>>>> - { .init = i915_pmu_init,
>>>>> - .exit = i915_pmu_exit },
>>>>> { .init = i915_pci_register_driver,
>>>>> .exit = i915_pci_unregister_driver },
>>>>> { .init = i915_perf_sysctl_register,
>>>>> diff --git a/drivers/gpu/drm/i915/i915_pmu.c
>>>>> b/drivers/gpu/drm/i915/i915_pmu.c
>>>>> index e55db036be1bb..652964ef0643c 100644
>>>>> --- a/drivers/gpu/drm/i915/i915_pmu.c
>>>>> +++ b/drivers/gpu/drm/i915/i915_pmu.c
>>>>> @@ -28,9 +28,6 @@
>>>>> BIT(I915_SAMPLE_WAIT) | \
>>>>> BIT(I915_SAMPLE_SEMA))
>>>>>
>>>>> -static cpumask_t i915_pmu_cpumask;
>>>>> -static unsigned int i915_pmu_target_cpu = -1;
>>>>> -
>>>>> static struct i915_pmu *event_to_pmu(struct perf_event *event)
>>>>> {
>>>>> return container_of(event->pmu, struct i915_pmu, base);
>>>>> @@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct
>>>>> perf_event *event)
>>>>> if (event->cpu < 0)
>>>>> return -EINVAL;
>>>>>
>>>>> - /* only allow running on one cpu at a time */
>>>>> - if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>>>> - return -EINVAL;
>>>>> -
>>>>> if (is_engine_event(event))
>>>>> ret = engine_event_init(event);
>>>>> else
>>>>> @@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct
>>>>> device *dev,
>>>>> return sprintf(buf, "config=0x%lx\n", eattr->val);
>>>>> }
>>>>>
>>>>> -static ssize_t cpumask_show(struct device *dev,
>>>>> - struct device_attribute *attr, char *buf)
>>>>> -{
>>>>> - return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
>>>>> -}
>>>>> -
>>>>> -static DEVICE_ATTR_RO(cpumask);
>>>>> -
>>>>> -static struct attribute *i915_cpumask_attrs[] = {
>>>>> - &dev_attr_cpumask.attr,
>>>>> - NULL,
>>>>> -};
>>>>> -
>>>>> -static const struct attribute_group i915_pmu_cpumask_attr_group = {
>>>>> - .attrs = i915_cpumask_attrs,
>>>>> -};
>>>>> -
>>>>> #define __event(__counter, __name, __unit) \
>>>>> { \
>>>>> .counter = (__counter), \
>>>>> @@ -1173,92 +1149,12 @@ static void free_event_attributes(struct
>>>>> i915_pmu *pmu)
>>>>> pmu->pmu_attr = NULL;
>>>>> }
>>>>>
>>>>> -static int i915_pmu_cpu_online(unsigned int cpu, struct hlist_node
>>>>> *node)
>>>>> -{
>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>> cpuhp.node);
>>>>> -
>>>>> - /* Select the first online CPU as a designated reader. */
>>>>> - if (cpumask_empty(&i915_pmu_cpumask))
>>>>> - cpumask_set_cpu(cpu, &i915_pmu_cpumask);
>>>>> -
>>>>> - return 0;
>>>>> -}
>>>>> -
>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct
>>>>> hlist_node *node)
>>>>> -{
>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>> cpuhp.node);
>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>> -
>>>>> - /*
>>>>> - * Unregistering an instance generates a CPU offline event
>>>>> which we must
>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>> i915_pmu_cpumask.
>>>>> - */
>>>>> - if (!pmu->registered)
>>>>> - return 0;
>>>>> -
>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>> -
>>>>
>>>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>> PMU, not a system-wide scope.
>>>
>>> counter is in a complete separate device - it doesn't depend on core or
>>> die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>>
>>> Also, in my tests it always chose cpu0 that is the boot cpu and can't be
>>> offlined. Looking at our CI it seems this entire code is not tested at
>>> all: the only test that in theory would exercise this just skips since
>>> cpu0 can't go offline -
>>> https://intel-gfx-ci.01.org/tree/drm-tip/shards-all.html?testfilter=hotplug
>>
>> s/not tested at all/not currently tested/
>>
>> commit e59e74dc48a309cb848ffc3d76a0d61aa6803c05
>> Author: Thomas Gleixner <tglx@linutronix.de>
>> Date: Fri May 12 23:07:04 2023 +0200
>>
>> x86/topology: Remove CPU0 hotplug option
>>
>> So test worked for ~6 years and then transitioned to skip. :shrug:
>
> right, indeed looking at the CI repo I see it there:
>
> $ git grep CONFIG_BOOTPARAM_HOTPLUG_CPU0
> kconfig/debug:CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
> kconfig/debug-kasan:CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
>
> $ git log --oneline -G CONFIG_BOOTPARAM_HOTPLUG_CPU0 kconfig/debug
> 3553bf4 kconfig: Dump current kconfigs used by CI
>
>
> I sent this to igt yesterday:
> https://patchwork.freedesktop.org/patch/633357/?series=143874&rev=1
>
> I will reword that commit message to note that it was actually tested
> before that kernel commit. The test worked because it only tried to
> toggle the
> cpu0 and thus a migration succeeded to a sibling cpu, right?
No, it was off-lining all CPUs one by one.
If topology_sibling_cpumask is not right then maybe that did not show
because of the one by one nature? I mean if the test was trying to
offline multiple CPUs ie. leave multiple off lines, maybe then it would
break?
> For the kernel commit message I can add a comment about the counter
> being indeed a system one and the use of topology_sibling_cpumask()
> being wrong here. With that, can you review this patch?
I don't know about this new system wide vs something else stuff. It will
not interfere with the fact there can be multiple instances of the same
PMU driver, one per device?
I can review but cannot promise it will be quick.
Regards,
Tvrtko
>>
>> Regards,
>>
>> Tvrtko
>>
>>>>
>>>>> - /* Migrate events if there is a valid target */
>>>>> - if (target < nr_cpu_ids) {
>>>>> - cpumask_set_cpu(target, &i915_pmu_cpumask);
>>>>> - i915_pmu_target_cpu = target;
>>>>> - }
>>>>> - }
>>>>> -
>>>>> - if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
>>>>> - perf_pmu_migrate_context(&pmu->base, cpu, target);
>>>>> - pmu->cpuhp.cpu = target;
>>>>> - }
>>>>> -
>>>>> - return 0;
>>>>> -}
>>>>> -
>>>>> -static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
>>>>> -
>>>>> -int i915_pmu_init(void)
>>>>> -{
>>>>> - int ret;
>>>>> -
>>>>> - ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
>>>>> - "perf/x86/intel/i915:online",
>>>>> - i915_pmu_cpu_online,
>>>>> - i915_pmu_cpu_offline);
>>>>> - if (ret < 0)
>>>>> - pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
>>>>> - ret);
>>>>> - else
>>>>> - cpuhp_state = ret;
>>>>> -
>>>>> - return 0;
>>>>> -}
>>>>> -
>>>>> -void i915_pmu_exit(void)
>>>>> -{
>>>>> - if (cpuhp_state != CPUHP_INVALID)
>>>>> - cpuhp_remove_multi_state(cpuhp_state);
>>>>> -}
>>>>> -
>>>>> -static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
>>>>> -{
>>>>> - if (cpuhp_state == CPUHP_INVALID)
>>>>> - return -EINVAL;
>>>>> -
>>>>> - return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
>>>>> -}
>>>>> -
>>>>> -static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
>>>>> -{
>>>>> - cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
>>>>> -}
>>>>> -
>>>>> void i915_pmu_register(struct drm_i915_private *i915)
>>>>> {
>>>>> struct i915_pmu *pmu = &i915->pmu;
>>>>> const struct attribute_group *attr_groups[] = {
>>>>> &i915_pmu_format_attr_group,
>>>>> &pmu->events_attr_group,
>>>>> - &i915_pmu_cpumask_attr_group,
>>>>> NULL
>>>>> };
>>>>> int ret = -ENOMEM;
>>>>> @@ -1266,7 +1162,6 @@ void i915_pmu_register(struct
>>>>> drm_i915_private *i915)
>>>>> spin_lock_init(&pmu->lock);
>>>>> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
>>>>> pmu->timer.function = i915_sample;
>>>>> - pmu->cpuhp.cpu = -1;
>>>>> init_rc6(pmu);
>>>>>
>>>>> if (IS_DGFX(i915)) {
>>>>> @@ -1295,6 +1190,7 @@ void i915_pmu_register(struct
>>>>> drm_i915_private *i915)
>>>>>
>>>>> pmu->base.module = THIS_MODULE;
>>>>> pmu->base.task_ctx_nr = perf_invalid_context;
>>>>> + pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
>>>>> pmu->base.event_init = i915_pmu_event_init;
>>>>> pmu->base.add = i915_pmu_event_add;
>>>>> pmu->base.del = i915_pmu_event_del;
>>>>> @@ -1307,16 +1203,10 @@ void i915_pmu_register(struct
>>>>> drm_i915_private *i915)
>>>>> if (ret)
>>>>> goto err_groups;
>>>>>
>>>>> - ret = i915_pmu_register_cpuhp_state(pmu);
>>>>> - if (ret)
>>>>> - goto err_unreg;
>>>>> -
>>>>> pmu->registered = true;
>>>>>
>>>>> return;
>>>>>
>>>>> -err_unreg:
>>>>> - perf_pmu_unregister(&pmu->base);
>>>>> err_groups:
>>>>> kfree(pmu->base.attr_groups);
>>>>> err_attr:
>>>>> @@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct
>>>>> drm_i915_private *i915)
>>>>>
>>>>> hrtimer_cancel(&pmu->timer);
>>>>>
>>>>> - i915_pmu_unregister_cpuhp_state(pmu);
>>>>> -
>>>>> perf_pmu_unregister(&pmu->base);
>>>>> kfree(pmu->base.attr_groups);
>>>>> if (IS_DGFX(i915))
>>>>> diff --git a/drivers/gpu/drm/i915/i915_pmu.h
>>>>> b/drivers/gpu/drm/i915/i915_pmu.h
>>>>> index 8e66d63d0c9f9..53bce3d8bfbaf 100644
>>>>> --- a/drivers/gpu/drm/i915/i915_pmu.h
>>>>> +++ b/drivers/gpu/drm/i915/i915_pmu.h
>>>>> @@ -56,13 +56,6 @@ struct i915_pmu_sample {
>>>>> };
>>>>>
>>>>> struct i915_pmu {
>>>>> - /**
>>>>> - * @cpuhp: Struct used for CPU hotplug handling.
>>>>> - */
>>>>> - struct {
>>>>> - struct hlist_node node;
>>>>> - unsigned int cpu;
>>>>> - } cpuhp;
>>>>> /**
>>>>> * @base: PMU base.
>>>>> */
>>>>> @@ -155,15 +148,11 @@ struct i915_pmu {
>>>>> };
>>>>>
>>>>> #ifdef CONFIG_PERF_EVENTS
>>>>> -int i915_pmu_init(void);
>>>>> -void i915_pmu_exit(void);
>>>>> void i915_pmu_register(struct drm_i915_private *i915);
>>>>> void i915_pmu_unregister(struct drm_i915_private *i915);
>>>>> void i915_pmu_gt_parked(struct intel_gt *gt);
>>>>> void i915_pmu_gt_unparked(struct intel_gt *gt);
>>>>> #else
>>>>> -static inline int i915_pmu_init(void) { return 0; }
>>>>> -static inline void i915_pmu_exit(void) {}
>>>>> static inline void i915_pmu_register(struct drm_i915_private
>>>>> *i915) {}
>>>>> static inline void i915_pmu_unregister(struct drm_i915_private
>>>>> *i915) {}
>>>>> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
>>>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-23 18:06 ` Tvrtko Ursulin
@ 2025-01-23 19:26 ` Lucas De Marchi
0 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2025-01-23 19:26 UTC (permalink / raw)
To: Tvrtko Ursulin
Cc: Liang, Kan, intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Thu, Jan 23, 2025 at 06:06:29PM +0000, Tvrtko Ursulin wrote:
>
>On 23/01/2025 16:27, Lucas De Marchi wrote:
>>On Thu, Jan 23, 2025 at 09:43:35AM +0000, Tvrtko Ursulin wrote:
>>>
>>>On 20/01/2025 22:57, Lucas De Marchi wrote:
>>>>On Mon, Jan 20, 2025 at 10:08:39AM -0500, Liang, Kan wrote:
>>>>>
>>>>>
>>>>>On 2025-01-16 5:24 p.m., Lucas De Marchi wrote:
>>>>>>Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support
>>>>>>for a PMU with
>>>>>>a scope"), there's generic support for system-wide counters and
>>>>>>integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
>>>>>>instead of all the boilerplate code for handling hotplug.
>>>>>>
>>>>>>Cc: Kan Liang <kan.liang@linux.intel.com>
>>>>>>Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>>>>>>Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
>>>>>>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>>>---
>>>>>> drivers/gpu/drm/i915/i915_module.c | 2 -
>>>>>> drivers/gpu/drm/i915/i915_pmu.c | 114
>>>>>>+----------------------------
>>>>>> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
>>>>>> 3 files changed, 1 insertion(+), 126 deletions(-)
>>>>>>
>>>>>>diff --git a/drivers/gpu/drm/i915/i915_module.c
>>>>>>b/drivers/gpu/drm/i915/i915_module.c
>>>>>>index 7ed6d70389af9..7affe07f84f45 100644
>>>>>>--- a/drivers/gpu/drm/i915/i915_module.c
>>>>>>+++ b/drivers/gpu/drm/i915/i915_module.c
>>>>>>@@ -71,8 +71,6 @@ static const struct {
>>>>>> { .init = i915_vma_resource_module_init,
>>>>>> .exit = i915_vma_resource_module_exit },
>>>>>> { .init = i915_mock_selftests },
>>>>>>- { .init = i915_pmu_init,
>>>>>>- .exit = i915_pmu_exit },
>>>>>> { .init = i915_pci_register_driver,
>>>>>> .exit = i915_pci_unregister_driver },
>>>>>> { .init = i915_perf_sysctl_register,
>>>>>>diff --git a/drivers/gpu/drm/i915/i915_pmu.c
>>>>>>b/drivers/gpu/drm/i915/i915_pmu.c
>>>>>>index e55db036be1bb..652964ef0643c 100644
>>>>>>--- a/drivers/gpu/drm/i915/i915_pmu.c
>>>>>>+++ b/drivers/gpu/drm/i915/i915_pmu.c
>>>>>>@@ -28,9 +28,6 @@
>>>>>> BIT(I915_SAMPLE_WAIT) | \
>>>>>> BIT(I915_SAMPLE_SEMA))
>>>>>>
>>>>>>-static cpumask_t i915_pmu_cpumask;
>>>>>>-static unsigned int i915_pmu_target_cpu = -1;
>>>>>>-
>>>>>> static struct i915_pmu *event_to_pmu(struct perf_event *event)
>>>>>> {
>>>>>> return container_of(event->pmu, struct i915_pmu, base);
>>>>>>@@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct
>>>>>>perf_event *event)
>>>>>> if (event->cpu < 0)
>>>>>> return -EINVAL;
>>>>>>
>>>>>>- /* only allow running on one cpu at a time */
>>>>>>- if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>>>>>- return -EINVAL;
>>>>>>-
>>>>>> if (is_engine_event(event))
>>>>>> ret = engine_event_init(event);
>>>>>> else
>>>>>>@@ -940,23 +933,6 @@ static ssize_t
>>>>>>i915_pmu_event_show(struct device *dev,
>>>>>> return sprintf(buf, "config=0x%lx\n", eattr->val);
>>>>>> }
>>>>>>
>>>>>>-static ssize_t cpumask_show(struct device *dev,
>>>>>>- struct device_attribute *attr, char *buf)
>>>>>>-{
>>>>>>- return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
>>>>>>-}
>>>>>>-
>>>>>>-static DEVICE_ATTR_RO(cpumask);
>>>>>>-
>>>>>>-static struct attribute *i915_cpumask_attrs[] = {
>>>>>>- &dev_attr_cpumask.attr,
>>>>>>- NULL,
>>>>>>-};
>>>>>>-
>>>>>>-static const struct attribute_group i915_pmu_cpumask_attr_group = {
>>>>>>- .attrs = i915_cpumask_attrs,
>>>>>>-};
>>>>>>-
>>>>>> #define __event(__counter, __name, __unit) \
>>>>>> { \
>>>>>> .counter = (__counter), \
>>>>>>@@ -1173,92 +1149,12 @@ static void
>>>>>>free_event_attributes(struct i915_pmu *pmu)
>>>>>> pmu->pmu_attr = NULL;
>>>>>> }
>>>>>>
>>>>>>-static int i915_pmu_cpu_online(unsigned int cpu, struct
>>>>>>hlist_node *node)
>>>>>>-{
>>>>>>- struct i915_pmu *pmu = hlist_entry_safe(node,
>>>>>>typeof(*pmu), cpuhp.node);
>>>>>>-
>>>>>>- /* Select the first online CPU as a designated reader. */
>>>>>>- if (cpumask_empty(&i915_pmu_cpumask))
>>>>>>- cpumask_set_cpu(cpu, &i915_pmu_cpumask);
>>>>>>-
>>>>>>- return 0;
>>>>>>-}
>>>>>>-
>>>>>>-static int i915_pmu_cpu_offline(unsigned int cpu, struct
>>>>>>hlist_node *node)
>>>>>>-{
>>>>>>- struct i915_pmu *pmu = hlist_entry_safe(node,
>>>>>>typeof(*pmu), cpuhp.node);
>>>>>>- unsigned int target = i915_pmu_target_cpu;
>>>>>>-
>>>>>>- /*
>>>>>>- * Unregistering an instance generates a CPU offline
>>>>>>event which we must
>>>>>>- * ignore to avoid incorrectly modifying the shared
>>>>>>i915_pmu_cpumask.
>>>>>>- */
>>>>>>- if (!pmu->registered)
>>>>>>- return 0;
>>>>>>-
>>>>>>- if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>- target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>>>-
>>>>>
>>>>>I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>>>PMU, not a system-wide scope.
>>>>
>>>>counter is in a complete separate device - it doesn't depend on core or
>>>>die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>>>
>>>>Also, in my tests it always chose cpu0 that is the boot cpu and can't be
>>>>offlined. Looking at our CI it seems this entire code is not tested at
>>>>all: the only test that in theory would exercise this just skips since
>>>>cpu0 can't go offline - https://intel-gfx-ci.01.org/tree/drm-tip/shards-all.html?testfilter=hotplug
>>>
>>>s/not tested at all/not currently tested/
>>>
>>>commit e59e74dc48a309cb848ffc3d76a0d61aa6803c05
>>>Author: Thomas Gleixner <tglx@linutronix.de>
>>>Date: Fri May 12 23:07:04 2023 +0200
>>>
>>> x86/topology: Remove CPU0 hotplug option
>>>
>>>So test worked for ~6 years and then transitioned to skip. :shrug:
>>
>>right, indeed looking at the CI repo I see it there:
>>
>>$ git grep CONFIG_BOOTPARAM_HOTPLUG_CPU0
>>kconfig/debug:CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
>>kconfig/debug-kasan:CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
>>
>>$ git log --oneline -G CONFIG_BOOTPARAM_HOTPLUG_CPU0 kconfig/debug
>>3553bf4 kconfig: Dump current kconfigs used by CI
>>
>>
>>I sent this to igt yesterday:
>>https://patchwork.freedesktop.org/patch/633357/?series=143874&rev=1
>>
>>I will reword that commit message to note that it was actually tested
>>before that kernel commit. The test worked because it only tried to
>>toggle the
>>cpu0 and thus a migration succeeded to a sibling cpu, right?
>
>No, it was off-lining all CPUs one by one.
right, I missed the cpu++ at the end
>
>If topology_sibling_cpumask is not right then maybe that did not show
>because of the one by one nature? I mean if the test was trying to
>offline multiple CPUs ie. leave multiple off lines, maybe then it
>would break?
yes, I guess so.
>
>>For the kernel commit message I can add a comment about the counter
>>being indeed a system one and the use of topology_sibling_cpumask()
>>being wrong here. With that, can you review this patch?
>
>I don't know about this new system wide vs something else stuff. It
>will not interfere with the fact there can be multiple instances of
>the same PMU driver, one per device?
no. Each of them will do a separate call to perf_pmu_register() with a
different name. The cpumask attr is created on each of them and hotplug
handled individually (from the perf_pmu pov they are separate pmu
drivers).
Lucas De Marchi
>
>I can review but cannot promise it will be quick.
>
>Regards,
>
>Tvrtko
>
>>>
>>>Regards,
>>>
>>>Tvrtko
>>>
>>>>>
>>>>>>- /* Migrate events if there is a valid target */
>>>>>>- if (target < nr_cpu_ids) {
>>>>>>- cpumask_set_cpu(target, &i915_pmu_cpumask);
>>>>>>- i915_pmu_target_cpu = target;
>>>>>>- }
>>>>>>- }
>>>>>>-
>>>>>>- if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
>>>>>>- perf_pmu_migrate_context(&pmu->base, cpu, target);
>>>>>>- pmu->cpuhp.cpu = target;
>>>>>>- }
>>>>>>-
>>>>>>- return 0;
>>>>>>-}
>>>>>>-
>>>>>>-static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
>>>>>>-
>>>>>>-int i915_pmu_init(void)
>>>>>>-{
>>>>>>- int ret;
>>>>>>-
>>>>>>- ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
>>>>>>- "perf/x86/intel/i915:online",
>>>>>>- i915_pmu_cpu_online,
>>>>>>- i915_pmu_cpu_offline);
>>>>>>- if (ret < 0)
>>>>>>- pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
>>>>>>- ret);
>>>>>>- else
>>>>>>- cpuhp_state = ret;
>>>>>>-
>>>>>>- return 0;
>>>>>>-}
>>>>>>-
>>>>>>-void i915_pmu_exit(void)
>>>>>>-{
>>>>>>- if (cpuhp_state != CPUHP_INVALID)
>>>>>>- cpuhp_remove_multi_state(cpuhp_state);
>>>>>>-}
>>>>>>-
>>>>>>-static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
>>>>>>-{
>>>>>>- if (cpuhp_state == CPUHP_INVALID)
>>>>>>- return -EINVAL;
>>>>>>-
>>>>>>- return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
>>>>>>-}
>>>>>>-
>>>>>>-static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
>>>>>>-{
>>>>>>- cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
>>>>>>-}
>>>>>>-
>>>>>> void i915_pmu_register(struct drm_i915_private *i915)
>>>>>> {
>>>>>> struct i915_pmu *pmu = &i915->pmu;
>>>>>> const struct attribute_group *attr_groups[] = {
>>>>>> &i915_pmu_format_attr_group,
>>>>>> &pmu->events_attr_group,
>>>>>>- &i915_pmu_cpumask_attr_group,
>>>>>> NULL
>>>>>> };
>>>>>> int ret = -ENOMEM;
>>>>>>@@ -1266,7 +1162,6 @@ void i915_pmu_register(struct
>>>>>>drm_i915_private *i915)
>>>>>> spin_lock_init(&pmu->lock);
>>>>>> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
>>>>>> pmu->timer.function = i915_sample;
>>>>>>- pmu->cpuhp.cpu = -1;
>>>>>> init_rc6(pmu);
>>>>>>
>>>>>> if (IS_DGFX(i915)) {
>>>>>>@@ -1295,6 +1190,7 @@ void i915_pmu_register(struct
>>>>>>drm_i915_private *i915)
>>>>>>
>>>>>> pmu->base.module = THIS_MODULE;
>>>>>> pmu->base.task_ctx_nr = perf_invalid_context;
>>>>>>+ pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
>>>>>> pmu->base.event_init = i915_pmu_event_init;
>>>>>> pmu->base.add = i915_pmu_event_add;
>>>>>> pmu->base.del = i915_pmu_event_del;
>>>>>>@@ -1307,16 +1203,10 @@ void i915_pmu_register(struct
>>>>>>drm_i915_private *i915)
>>>>>> if (ret)
>>>>>> goto err_groups;
>>>>>>
>>>>>>- ret = i915_pmu_register_cpuhp_state(pmu);
>>>>>>- if (ret)
>>>>>>- goto err_unreg;
>>>>>>-
>>>>>> pmu->registered = true;
>>>>>>
>>>>>> return;
>>>>>>
>>>>>>-err_unreg:
>>>>>>- perf_pmu_unregister(&pmu->base);
>>>>>> err_groups:
>>>>>> kfree(pmu->base.attr_groups);
>>>>>> err_attr:
>>>>>>@@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct
>>>>>>drm_i915_private *i915)
>>>>>>
>>>>>> hrtimer_cancel(&pmu->timer);
>>>>>>
>>>>>>- i915_pmu_unregister_cpuhp_state(pmu);
>>>>>>-
>>>>>> perf_pmu_unregister(&pmu->base);
>>>>>> kfree(pmu->base.attr_groups);
>>>>>> if (IS_DGFX(i915))
>>>>>>diff --git a/drivers/gpu/drm/i915/i915_pmu.h
>>>>>>b/drivers/gpu/drm/i915/i915_pmu.h
>>>>>>index 8e66d63d0c9f9..53bce3d8bfbaf 100644
>>>>>>--- a/drivers/gpu/drm/i915/i915_pmu.h
>>>>>>+++ b/drivers/gpu/drm/i915/i915_pmu.h
>>>>>>@@ -56,13 +56,6 @@ struct i915_pmu_sample {
>>>>>> };
>>>>>>
>>>>>> struct i915_pmu {
>>>>>>- /**
>>>>>>- * @cpuhp: Struct used for CPU hotplug handling.
>>>>>>- */
>>>>>>- struct {
>>>>>>- struct hlist_node node;
>>>>>>- unsigned int cpu;
>>>>>>- } cpuhp;
>>>>>> /**
>>>>>> * @base: PMU base.
>>>>>> */
>>>>>>@@ -155,15 +148,11 @@ struct i915_pmu {
>>>>>> };
>>>>>>
>>>>>> #ifdef CONFIG_PERF_EVENTS
>>>>>>-int i915_pmu_init(void);
>>>>>>-void i915_pmu_exit(void);
>>>>>> void i915_pmu_register(struct drm_i915_private *i915);
>>>>>> void i915_pmu_unregister(struct drm_i915_private *i915);
>>>>>> void i915_pmu_gt_parked(struct intel_gt *gt);
>>>>>> void i915_pmu_gt_unparked(struct intel_gt *gt);
>>>>>> #else
>>>>>>-static inline int i915_pmu_init(void) { return 0; }
>>>>>>-static inline void i915_pmu_exit(void) {}
>>>>>> static inline void i915_pmu_register(struct
>>>>>>drm_i915_private *i915) {}
>>>>>> static inline void i915_pmu_unregister(struct
>>>>>>drm_i915_private *i915) {}
>>>>>> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
>>>>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* ✗ i915.CI.Full: failure for drm/i915/pmu: Drop custom hotplug code (rev2)
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
` (4 preceding siblings ...)
2025-01-23 6:56 ` ✓ i915.CI.BAT: success " Patchwork
@ 2025-01-24 0:27 ` Patchwork
2025-01-29 8:37 ` [PATCH] drm/i915/pmu: Drop custom hotplug code Tvrtko Ursulin
6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2025-01-24 0:27 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 79673 bytes --]
== Series Details ==
Series: drm/i915/pmu: Drop custom hotplug code (rev2)
URL : https://patchwork.freedesktop.org/series/143636/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_16004_full -> Patchwork_143636v2_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_143636v2_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_143636v2_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 (11 -> 11)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_143636v2_full:
### IGT changes ###
#### Possible regressions ####
* igt@perf_pmu@invalid-init:
- shard-dg2: [PASS][1] -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-3/igt@perf_pmu@invalid-init.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@perf_pmu@invalid-init.html
- shard-tglu-1: NOTRUN -> [FAIL][3]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@perf_pmu@invalid-init.html
- shard-dg1: [PASS][4] -> [FAIL][5]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg1-14/igt@perf_pmu@invalid-init.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-17/igt@perf_pmu@invalid-init.html
- shard-mtlp: [PASS][6] -> [FAIL][7]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-mtlp-3/igt@perf_pmu@invalid-init.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-8/igt@perf_pmu@invalid-init.html
Known issues
------------
Here are the changes found in Patchwork_143636v2_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@device_reset@cold-reset-bound:
- shard-tglu: NOTRUN -> [SKIP][8] ([i915#11078])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@device_reset@cold-reset-bound.html
* igt@device_reset@unbind-reset-rebind:
- shard-tglu: [PASS][9] -> [ABORT][10] ([i915#12817] / [i915#5507])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-tglu-5/igt@device_reset@unbind-reset-rebind.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-2/igt@device_reset@unbind-reset-rebind.html
* igt@drm_fdinfo@busy-idle@bcs0:
- shard-dg2: NOTRUN -> [SKIP][11] ([i915#8414]) +7 other tests skip
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@drm_fdinfo@busy-idle@bcs0.html
* igt@drm_fdinfo@busy-idle@vcs1:
- shard-dg1: NOTRUN -> [SKIP][12] ([i915#8414]) +5 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@drm_fdinfo@busy-idle@vcs1.html
* igt@gem_bad_reloc@negative-reloc-lut:
- shard-dg1: NOTRUN -> [SKIP][13] ([i915#3281]) +3 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@gem_bad_reloc@negative-reloc-lut.html
* igt@gem_basic@multigpu-create-close:
- shard-rkl: NOTRUN -> [SKIP][14] ([i915#7697])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@gem_basic@multigpu-create-close.html
* igt@gem_ccs@suspend-resume:
- shard-dg2: [PASS][15] -> [INCOMPLETE][16] ([i915#7297])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-5/igt@gem_ccs@suspend-resume.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-1/igt@gem_ccs@suspend-resume.html
- shard-tglu: NOTRUN -> [SKIP][17] ([i915#9323])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@gem_ccs@suspend-resume.html
* igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-smem-lmem0:
- shard-dg2: [PASS][18] -> [INCOMPLETE][19] ([i915#12392] / [i915#7297])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-5/igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-smem-lmem0.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-1/igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-smem-lmem0.html
* igt@gem_ctx_exec@basic-norecovery:
- shard-mtlp: NOTRUN -> [ABORT][20] ([i915#13193])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@gem_ctx_exec@basic-norecovery.html
* igt@gem_ctx_persistence@engines-mixed-process:
- shard-snb: NOTRUN -> [SKIP][21] ([i915#1099]) +4 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-snb2/igt@gem_ctx_persistence@engines-mixed-process.html
* igt@gem_ctx_sseu@mmap-args:
- shard-tglu-1: NOTRUN -> [SKIP][22] ([i915#280])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@gem_ctx_sseu@mmap-args.html
* igt@gem_eio@kms:
- shard-dg1: [PASS][23] -> [FAIL][24] ([i915#5784])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg1-12/igt@gem_eio@kms.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-12/igt@gem_eio@kms.html
* igt@gem_exec_balancer@parallel-bb-first:
- shard-tglu: NOTRUN -> [SKIP][25] ([i915#4525]) +1 other test skip
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@gem_exec_balancer@parallel-bb-first.html
* igt@gem_exec_flush@basic-uc-ro-default:
- shard-dg2: NOTRUN -> [SKIP][26] ([i915#3539] / [i915#4852]) +1 other test skip
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@gem_exec_flush@basic-uc-ro-default.html
* igt@gem_exec_flush@basic-wb-rw-before-default:
- shard-dg1: NOTRUN -> [SKIP][27] ([i915#3539] / [i915#4852]) +1 other test skip
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@gem_exec_flush@basic-wb-rw-before-default.html
* igt@gem_exec_reloc@basic-cpu-gtt-noreloc:
- shard-dg2: NOTRUN -> [SKIP][28] ([i915#3281]) +6 other tests skip
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@gem_exec_reloc@basic-cpu-gtt-noreloc.html
- shard-mtlp: NOTRUN -> [SKIP][29] ([i915#3281]) +1 other test skip
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@gem_exec_reloc@basic-cpu-gtt-noreloc.html
* igt@gem_exec_reloc@basic-write-cpu:
- shard-rkl: NOTRUN -> [SKIP][30] ([i915#3281])
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@gem_exec_reloc@basic-write-cpu.html
* igt@gem_exec_suspend@basic-s4-devices:
- shard-rkl: NOTRUN -> [ABORT][31] ([i915#7975] / [i915#8213]) +1 other test abort
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-3/igt@gem_exec_suspend@basic-s4-devices.html
* igt@gem_exec_suspend@basic-s4-devices@lmem0:
- shard-dg1: NOTRUN -> [ABORT][32] ([i915#7975] / [i915#8213]) +1 other test abort
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@gem_exec_suspend@basic-s4-devices@lmem0.html
* igt@gem_huc_copy@huc-copy:
- shard-rkl: NOTRUN -> [SKIP][33] ([i915#2190])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@gem_huc_copy@huc-copy.html
* igt@gem_lmem_swapping@basic:
- shard-tglu-1: NOTRUN -> [SKIP][34] ([i915#4613]) +1 other test skip
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@gem_lmem_swapping@basic.html
* igt@gem_lmem_swapping@parallel-multi:
- shard-tglu: NOTRUN -> [SKIP][35] ([i915#4613]) +1 other test skip
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@gem_lmem_swapping@parallel-multi.html
* igt@gem_lmem_swapping@smem-oom@lmem0:
- shard-dg2: [PASS][36] -> [TIMEOUT][37] ([i915#5493]) +1 other test timeout
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-10/igt@gem_lmem_swapping@smem-oom@lmem0.html
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-10/igt@gem_lmem_swapping@smem-oom@lmem0.html
* igt@gem_mmap_gtt@flink-race:
- shard-dg1: NOTRUN -> [SKIP][38] ([i915#4077]) +2 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@gem_mmap_gtt@flink-race.html
- shard-mtlp: NOTRUN -> [SKIP][39] ([i915#4077]) +1 other test skip
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@gem_mmap_gtt@flink-race.html
* igt@gem_mmap_gtt@hang:
- shard-dg2: NOTRUN -> [SKIP][40] ([i915#4077]) +5 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@gem_mmap_gtt@hang.html
* igt@gem_mmap_wc@read:
- shard-dg1: NOTRUN -> [SKIP][41] ([i915#4083])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@gem_mmap_wc@read.html
- shard-mtlp: NOTRUN -> [SKIP][42] ([i915#4083])
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@gem_mmap_wc@read.html
- shard-dg2: NOTRUN -> [SKIP][43] ([i915#4083])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@gem_mmap_wc@read.html
* igt@gem_partial_pwrite_pread@write:
- shard-rkl: NOTRUN -> [SKIP][44] ([i915#3282])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@gem_partial_pwrite_pread@write.html
* igt@gem_pwrite@basic-exhaustion:
- shard-tglu: NOTRUN -> [WARN][45] ([i915#2658])
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@gem_pwrite@basic-exhaustion.html
* igt@gem_pxp@verify-pxp-execution-after-suspend-resume:
- shard-dg2: NOTRUN -> [SKIP][46] ([i915#4270])
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html
* igt@gem_render_copy@y-tiled-mc-ccs-to-vebox-yf-tiled:
- shard-dg2: NOTRUN -> [SKIP][47] ([i915#5190] / [i915#8428]) +1 other test skip
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@gem_render_copy@y-tiled-mc-ccs-to-vebox-yf-tiled.html
* igt@gem_tiled_swapping@non-threaded:
- shard-tglu: [PASS][48] -> [FAIL][49] ([i915#13557])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-tglu-3/igt@gem_tiled_swapping@non-threaded.html
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-6/igt@gem_tiled_swapping@non-threaded.html
* igt@gem_userptr_blits@sd-probe:
- shard-dg2: NOTRUN -> [SKIP][50] ([i915#3297] / [i915#4958])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@gem_userptr_blits@sd-probe.html
* igt@gem_userptr_blits@unsync-overlap:
- shard-dg2: NOTRUN -> [SKIP][51] ([i915#3297])
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@gem_userptr_blits@unsync-overlap.html
- shard-dg1: NOTRUN -> [SKIP][52] ([i915#3297])
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@gem_userptr_blits@unsync-overlap.html
* igt@gem_userptr_blits@unsync-unmap-cycles:
- shard-tglu: NOTRUN -> [SKIP][53] ([i915#3297]) +2 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@gem_userptr_blits@unsync-unmap-cycles.html
* igt@gen9_exec_parse@basic-rejected-ctx-param:
- shard-snb: NOTRUN -> [SKIP][54] +293 other tests skip
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-snb7/igt@gen9_exec_parse@basic-rejected-ctx-param.html
* igt@gen9_exec_parse@bb-chained:
- shard-dg1: NOTRUN -> [SKIP][55] ([i915#2527])
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@gen9_exec_parse@bb-chained.html
- shard-dg2: NOTRUN -> [SKIP][56] ([i915#2856])
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@gen9_exec_parse@bb-chained.html
* igt@gen9_exec_parse@bb-secure:
- shard-tglu: NOTRUN -> [SKIP][57] ([i915#2527] / [i915#2856]) +1 other test skip
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@gen9_exec_parse@bb-secure.html
* igt@gen9_exec_parse@bb-start-out:
- shard-rkl: NOTRUN -> [SKIP][58] ([i915#2527])
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@gen9_exec_parse@bb-start-out.html
* igt@gen9_exec_parse@valid-registers:
- shard-tglu-1: NOTRUN -> [SKIP][59] ([i915#2527] / [i915#2856]) +1 other test skip
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@gen9_exec_parse@valid-registers.html
* igt@i915_module_load@load:
- shard-glk: ([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], [PASS][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], [DMESG-WARN][102], [PASS][103], [PASS][104], [PASS][105]) ([i915#118])
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk5/igt@i915_module_load@load.html
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk7/igt@i915_module_load@load.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk9/igt@i915_module_load@load.html
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk1/igt@i915_module_load@load.html
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk3/igt@i915_module_load@load.html
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk2/igt@i915_module_load@load.html
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk3/igt@i915_module_load@load.html
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk8/igt@i915_module_load@load.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk1/igt@i915_module_load@load.html
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk6/igt@i915_module_load@load.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk5/igt@i915_module_load@load.html
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk1/igt@i915_module_load@load.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk4/igt@i915_module_load@load.html
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk6/igt@i915_module_load@load.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk2/igt@i915_module_load@load.html
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk4/igt@i915_module_load@load.html
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk8/igt@i915_module_load@load.html
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk6/igt@i915_module_load@load.html
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk3/igt@i915_module_load@load.html
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk2/igt@i915_module_load@load.html
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk8/igt@i915_module_load@load.html
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk3/igt@i915_module_load@load.html
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk7/igt@i915_module_load@load.html
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk2/igt@i915_module_load@load.html
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk3/igt@i915_module_load@load.html
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk4/igt@i915_module_load@load.html
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk9/igt@i915_module_load@load.html
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk7/igt@i915_module_load@load.html
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk8/igt@i915_module_load@load.html
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk4/igt@i915_module_load@load.html
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk5/igt@i915_module_load@load.html
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk3/igt@i915_module_load@load.html
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk1/igt@i915_module_load@load.html
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk8/igt@i915_module_load@load.html
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk6/igt@i915_module_load@load.html
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk4/igt@i915_module_load@load.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk9/igt@i915_module_load@load.html
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk6/igt@i915_module_load@load.html
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk7/igt@i915_module_load@load.html
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk1/igt@i915_module_load@load.html
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk6/igt@i915_module_load@load.html
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk4/igt@i915_module_load@load.html
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk5/igt@i915_module_load@load.html
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk5/igt@i915_module_load@load.html
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk2/igt@i915_module_load@load.html
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk8/igt@i915_module_load@load.html
* igt@i915_module_load@reload-no-display:
- shard-tglu-1: NOTRUN -> [DMESG-WARN][106] ([i915#13029])
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@i915_module_load@reload-no-display.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-dg2: NOTRUN -> [ABORT][107] ([i915#10887] / [i915#9820])
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_pipe_stress@stress-xrgb8888-ytiled:
- shard-dg2: NOTRUN -> [SKIP][108] ([i915#7091])
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@i915_pipe_stress@stress-xrgb8888-ytiled.html
* igt@i915_pm_freq_api@freq-suspend@gt0:
- shard-dg2: [PASS][109] -> [INCOMPLETE][110] ([i915#12455]) +1 other test incomplete
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-10/igt@i915_pm_freq_api@freq-suspend@gt0.html
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-10/igt@i915_pm_freq_api@freq-suspend@gt0.html
* igt@i915_pm_sseu@full-enable:
- shard-mtlp: NOTRUN -> [SKIP][111] ([i915#8437])
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-4/igt@i915_pm_sseu@full-enable.html
* igt@i915_query@query-topology-unsupported:
- shard-rkl: NOTRUN -> [SKIP][112] +3 other tests skip
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@i915_query@query-topology-unsupported.html
* igt@i915_suspend@basic-s3-without-i915:
- shard-tglu-1: NOTRUN -> [INCOMPLETE][113] ([i915#7443])
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@i915_suspend@basic-s3-without-i915.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-3-y-rc-ccs-cc:
- shard-dg1: NOTRUN -> [SKIP][114] ([i915#8709]) +3 other tests skip
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-13/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-3-y-rc-ccs-cc.html
* igt@kms_atomic_transition@modeset-transition:
- shard-glk: [PASS][115] -> [FAIL][116] ([i915#12238])
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk9/igt@kms_atomic_transition@modeset-transition.html
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk8/igt@kms_atomic_transition@modeset-transition.html
* igt@kms_atomic_transition@modeset-transition@2x-outputs:
- shard-glk: [PASS][117] -> [FAIL][118] ([i915#11859])
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk9/igt@kms_atomic_transition@modeset-transition@2x-outputs.html
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk8/igt@kms_atomic_transition@modeset-transition@2x-outputs.html
* igt@kms_big_fb@4-tiled-addfb-size-offset-overflow:
- shard-tglu: NOTRUN -> [SKIP][119] ([i915#5286]) +3 other tests skip
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_big_fb@4-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-dg1: NOTRUN -> [SKIP][120] ([i915#4538] / [i915#5286]) +2 other tests skip
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-rkl: NOTRUN -> [SKIP][121] ([i915#5286]) +1 other test skip
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-3/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
- shard-tglu-1: NOTRUN -> [SKIP][122] ([i915#5286]) +1 other test skip
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-90:
- shard-rkl: NOTRUN -> [SKIP][123] ([i915#3638])
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-32bpp-rotate-270:
- shard-dg2: NOTRUN -> [SKIP][124] +6 other tests skip
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
- shard-dg1: NOTRUN -> [SKIP][125] ([i915#3638]) +1 other test skip
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-addfb-size-overflow:
- shard-dg2: NOTRUN -> [SKIP][126] ([i915#5190])
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-0:
- shard-dg2: NOTRUN -> [SKIP][127] ([i915#4538] / [i915#5190]) +1 other test skip
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_big_fb@yf-tiled-16bpp-rotate-0.html
- shard-dg1: NOTRUN -> [SKIP][128] ([i915#4538]) +1 other test skip
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_big_fb@yf-tiled-16bpp-rotate-0.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
- shard-mtlp: NOTRUN -> [SKIP][129] +1 other test skip
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html
* igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4:
- shard-dg1: NOTRUN -> [SKIP][130] ([i915#6095]) +88 other tests skip
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4.html
* igt@kms_ccs@crc-primary-basic-yf-tiled-ccs@pipe-c-hdmi-a-1:
- shard-tglu: NOTRUN -> [SKIP][131] ([i915#6095]) +44 other tests skip
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_ccs@crc-primary-basic-yf-tiled-ccs@pipe-c-hdmi-a-1.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs:
- shard-tglu-1: NOTRUN -> [SKIP][132] ([i915#12313]) +1 other test skip
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][133] ([i915#6095]) +71 other tests skip
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-2.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1:
- shard-tglu-1: NOTRUN -> [SKIP][134] ([i915#6095]) +34 other tests skip
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][135] ([i915#6095]) +7 other tests skip
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-3.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][136] ([i915#10307] / [i915#6095]) +112 other tests skip
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3.html
* igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][137] ([i915#10307] / [i915#10434] / [i915#6095]) +2 other tests skip
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-hdmi-a-1.html
* igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
- shard-tglu: NOTRUN -> [SKIP][138] ([i915#12313])
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-c-edp-1:
- shard-mtlp: NOTRUN -> [SKIP][139] ([i915#6095]) +4 other tests skip
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-c-edp-1.html
* igt@kms_cdclk@mode-transition:
- shard-rkl: NOTRUN -> [SKIP][140] ([i915#3742])
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_cdclk@mode-transition.html
* igt@kms_cdclk@plane-scaling:
- shard-tglu: NOTRUN -> [SKIP][141] ([i915#3742])
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_cdclk@plane-scaling.html
* igt@kms_chamelium_audio@hdmi-audio:
- shard-tglu-1: NOTRUN -> [SKIP][142] ([i915#11151] / [i915#7828]) +4 other tests skip
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_chamelium_audio@hdmi-audio.html
* igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
- shard-dg1: NOTRUN -> [SKIP][143] ([i915#11151] / [i915#7828]) +1 other test skip
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html
* igt@kms_chamelium_edid@vga-edid-read:
- shard-tglu: NOTRUN -> [SKIP][144] ([i915#11151] / [i915#7828]) +3 other tests skip
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_chamelium_edid@vga-edid-read.html
* igt@kms_chamelium_hpd@dp-hpd-fast:
- shard-dg2: NOTRUN -> [SKIP][145] ([i915#11151] / [i915#7828]) +2 other tests skip
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_chamelium_hpd@dp-hpd-fast.html
* igt@kms_chamelium_hpd@hdmi-hpd-enable-disable-mode:
- shard-rkl: NOTRUN -> [SKIP][146] ([i915#11151] / [i915#7828]) +2 other tests skip
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_chamelium_hpd@hdmi-hpd-enable-disable-mode.html
* igt@kms_color@deep-color:
- shard-dg2: NOTRUN -> [SKIP][147] ([i915#3555]) +1 other test skip
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_color@deep-color.html
- shard-dg1: NOTRUN -> [SKIP][148] ([i915#3555]) +2 other tests skip
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_color@deep-color.html
* igt@kms_content_protection@atomic:
- shard-tglu: NOTRUN -> [SKIP][149] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424]) +1 other test skip
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_content_protection@atomic.html
* igt@kms_content_protection@content-type-change:
- shard-tglu: NOTRUN -> [SKIP][150] ([i915#6944] / [i915#9424])
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_content_protection@content-type-change.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-tglu-1: NOTRUN -> [SKIP][151] ([i915#3116] / [i915#3299])
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_cursor_crc@cursor-offscreen-512x170:
- shard-tglu: NOTRUN -> [SKIP][152] ([i915#13049])
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_cursor_crc@cursor-offscreen-512x170.html
* igt@kms_cursor_crc@cursor-random-32x32:
- shard-tglu-1: NOTRUN -> [SKIP][153] ([i915#3555]) +2 other tests skip
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_cursor_crc@cursor-random-32x32.html
* igt@kms_cursor_crc@cursor-random-512x512:
- shard-tglu-1: NOTRUN -> [SKIP][154] ([i915#13049])
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_cursor_crc@cursor-random-512x512.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x170:
- shard-dg2: NOTRUN -> [SKIP][155] ([i915#13049])
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x512:
- shard-rkl: NOTRUN -> [SKIP][156] ([i915#13049])
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
- shard-dg2: NOTRUN -> [SKIP][157] ([i915#4103] / [i915#4213]) +1 other test skip
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- shard-dg1: NOTRUN -> [SKIP][158] ([i915#4103] / [i915#4213]) +1 other test skip
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions:
- shard-dg2: NOTRUN -> [SKIP][159] ([i915#13046] / [i915#5354]) +2 other tests skip
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions.html
* igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
- shard-rkl: NOTRUN -> [SKIP][160] ([i915#9067])
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
- shard-tglu: NOTRUN -> [SKIP][161] ([i915#4103])
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
* igt@kms_display_modes@mst-extended-mode-negative:
- shard-tglu: NOTRUN -> [SKIP][162] ([i915#8588])
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_display_modes@mst-extended-mode-negative.html
* igt@kms_dp_aux_dev:
- shard-dg2: NOTRUN -> [SKIP][163] ([i915#1257])
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_dp_aux_dev.html
- shard-dg1: NOTRUN -> [SKIP][164] ([i915#1257])
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_dp_aux_dev.html
* igt@kms_dsc@dsc-with-output-formats-with-bpc:
- shard-rkl: NOTRUN -> [SKIP][165] ([i915#3840] / [i915#9053])
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_dsc@dsc-with-output-formats-with-bpc.html
* igt@kms_fbcon_fbt@psr:
- shard-tglu: NOTRUN -> [SKIP][166] ([i915#3469])
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_fbcon_fbt@psr.html
* igt@kms_feature_discovery@chamelium:
- shard-tglu-1: NOTRUN -> [SKIP][167] ([i915#2065] / [i915#4854])
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_feature_discovery@chamelium.html
* igt@kms_feature_discovery@dp-mst:
- shard-tglu: NOTRUN -> [SKIP][168] ([i915#9337])
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_feature_discovery@dp-mst.html
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
- shard-tglu: NOTRUN -> [SKIP][169] ([i915#3637]) +1 other test skip
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html
* igt@kms_flip@2x-flip-vs-blocking-wf-vblank:
- shard-dg1: NOTRUN -> [SKIP][170] ([i915#9934]) +2 other tests skip
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_flip@2x-flip-vs-blocking-wf-vblank.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
- shard-mtlp: NOTRUN -> [SKIP][171] ([i915#3637]) +1 other test skip
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@2x-flip-vs-fences:
- shard-tglu-1: NOTRUN -> [SKIP][172] ([i915#3637]) +4 other tests skip
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_flip@2x-flip-vs-fences.html
* igt@kms_flip@2x-flip-vs-modeset-vs-hang:
- shard-dg2: NOTRUN -> [SKIP][173] ([i915#9934]) +5 other tests skip
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_flip@2x-flip-vs-modeset-vs-hang.html
* igt@kms_flip@flip-vs-blocking-wf-vblank@a-edp1:
- shard-mtlp: [PASS][174] -> [FAIL][175] ([i915#11989]) +1 other test fail
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-mtlp-5/igt@kms_flip@flip-vs-blocking-wf-vblank@a-edp1.html
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-3/igt@kms_flip@flip-vs-blocking-wf-vblank@a-edp1.html
* igt@kms_flip@flip-vs-blocking-wf-vblank@a-hdmi-a1:
- shard-tglu: NOTRUN -> [FAIL][176] ([i915#11989]) +1 other test fail
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_flip@flip-vs-blocking-wf-vblank@a-hdmi-a1.html
* igt@kms_flip@plain-flip-ts-check-interruptible:
- shard-tglu: [PASS][177] -> [FAIL][178] ([i915#11989]) +1 other test fail
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-tglu-3/igt@kms_flip@plain-flip-ts-check-interruptible.html
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_flip@plain-flip-ts-check-interruptible.html
- shard-rkl: [PASS][179] -> [FAIL][180] ([i915#11989]) +1 other test fail
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-5/igt@kms_flip@plain-flip-ts-check-interruptible.html
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-1/igt@kms_flip@plain-flip-ts-check-interruptible.html
* igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-valid-mode:
- shard-tglu: NOTRUN -> [SKIP][181] ([i915#2587] / [i915#2672]) +2 other tests skip
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling:
- shard-dg2: NOTRUN -> [SKIP][182] ([i915#2672] / [i915#3555])
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html
- shard-dg1: NOTRUN -> [SKIP][183] ([i915#2672] / [i915#3555])
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode:
- shard-dg1: NOTRUN -> [SKIP][184] ([i915#2587] / [i915#2672])
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html
- shard-dg2: NOTRUN -> [SKIP][185] ([i915#2672])
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling:
- shard-tglu-1: NOTRUN -> [SKIP][186] ([i915#2672] / [i915#3555])
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode:
- shard-tglu-1: NOTRUN -> [SKIP][187] ([i915#2587] / [i915#2672])
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling:
- shard-rkl: NOTRUN -> [SKIP][188] ([i915#2672] / [i915#3555])
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode:
- shard-rkl: NOTRUN -> [SKIP][189] ([i915#2672])
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
- shard-tglu: NOTRUN -> [SKIP][190] ([i915#2672] / [i915#3555]) +2 other tests skip
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
- shard-dg2: [PASS][191] -> [FAIL][192] ([i915#6880])
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu.html
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-rkl: NOTRUN -> [SKIP][193] ([i915#1825]) +9 other tests skip
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
- shard-dg2: NOTRUN -> [SKIP][194] ([i915#5354]) +7 other tests skip
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-pgflip-blt:
- shard-mtlp: NOTRUN -> [SKIP][195] ([i915#1825]) +1 other test skip
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-wc:
- shard-dg2: NOTRUN -> [SKIP][196] ([i915#8708]) +7 other tests skip
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt:
- shard-rkl: NOTRUN -> [SKIP][197] ([i915#3023]) +6 other tests skip
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-blt:
- shard-dg2: NOTRUN -> [SKIP][198] ([i915#3458]) +4 other tests skip
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move:
- shard-tglu: NOTRUN -> [SKIP][199] +48 other tests skip
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-msflip-blt:
- shard-dg1: NOTRUN -> [SKIP][200] +12 other tests skip
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt:
- shard-tglu-1: NOTRUN -> [SKIP][201] +35 other tests skip
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
- shard-dg1: NOTRUN -> [SKIP][202] ([i915#8708]) +5 other tests skip
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-cpu:
- shard-dg1: NOTRUN -> [SKIP][203] ([i915#3458]) +3 other tests skip
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-cpu.html
* igt@kms_hdr@bpc-switch-dpms:
- shard-tglu: NOTRUN -> [SKIP][204] ([i915#3555] / [i915#8228]) +2 other tests skip
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_hdr@bpc-switch-dpms.html
* igt@kms_hdr@bpc-switch-suspend:
- shard-dg2: NOTRUN -> [SKIP][205] ([i915#3555] / [i915#8228])
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_hdr@bpc-switch-suspend.html
- shard-dg1: NOTRUN -> [SKIP][206] ([i915#3555] / [i915#8228])
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_hdr@bpc-switch-suspend.html
* igt@kms_hdr@brightness-with-hdr:
- shard-rkl: NOTRUN -> [SKIP][207] ([i915#1187] / [i915#12713])
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-3/igt@kms_hdr@brightness-with-hdr.html
- shard-dg1: NOTRUN -> [SKIP][208] ([i915#12713])
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_hdr@static-swap:
- shard-rkl: NOTRUN -> [SKIP][209] ([i915#3555] / [i915#8228])
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_hdr@static-swap.html
* igt@kms_hdr@static-toggle-suspend:
- shard-dg2: [PASS][210] -> [SKIP][211] ([i915#3555] / [i915#8228])
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-10/igt@kms_hdr@static-toggle-suspend.html
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_hdr@static-toggle-suspend.html
* igt@kms_joiner@basic-big-joiner:
- shard-tglu: NOTRUN -> [SKIP][212] ([i915#10656])
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_joiner@basic-big-joiner.html
* igt@kms_joiner@basic-force-ultra-joiner:
- shard-tglu-1: NOTRUN -> [SKIP][213] ([i915#12394] / [i915#13522])
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_joiner@basic-force-ultra-joiner.html
* igt@kms_pipe_crc_basic@bad-source:
- shard-rkl: [PASS][214] -> [DMESG-WARN][215] ([i915#12964]) +4 other tests dmesg-warn
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-3/igt@kms_pipe_crc_basic@bad-source.html
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-4/igt@kms_pipe_crc_basic@bad-source.html
* igt@kms_plane_lowres@tiling-4:
- shard-mtlp: NOTRUN -> [SKIP][216] ([i915#10226] / [i915#11614] / [i915#3555] / [i915#8821])
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_plane_lowres@tiling-4.html
* igt@kms_plane_lowres@tiling-4@pipe-b-edp-1:
- shard-mtlp: NOTRUN -> [SKIP][217] ([i915#11614] / [i915#3582]) +3 other tests skip
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_plane_lowres@tiling-4@pipe-b-edp-1.html
* igt@kms_plane_scaling@intel-max-src-size:
- shard-tglu-1: NOTRUN -> [SKIP][218] ([i915#6953])
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_plane_scaling@intel-max-src-size.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format:
- shard-tglu-1: NOTRUN -> [SKIP][219] ([i915#12247]) +8 other tests skip
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html
* igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a:
- shard-rkl: NOTRUN -> [SKIP][220] ([i915#12247]) +2 other tests skip
[220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a.html
* igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b:
- shard-tglu: NOTRUN -> [SKIP][221] ([i915#12247]) +4 other tests skip
[221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25:
- shard-tglu-1: NOTRUN -> [SKIP][222] ([i915#12247] / [i915#6953])
[222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25.html
* igt@kms_pm_backlight@brightness-with-dpms:
- shard-tglu: NOTRUN -> [SKIP][223] ([i915#12343])
[223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_pm_backlight@brightness-with-dpms.html
* igt@kms_pm_dc@dc5-retention-flops:
- shard-rkl: NOTRUN -> [SKIP][224] ([i915#3828])
[224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-3/igt@kms_pm_dc@dc5-retention-flops.html
- shard-dg1: NOTRUN -> [SKIP][225] ([i915#3828])
[225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_pm_dc@dc5-retention-flops.html
* igt@kms_pm_dc@dc6-psr:
- shard-rkl: NOTRUN -> [SKIP][226] ([i915#9685])
[226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_pm_dc@dc6-psr.html
* igt@kms_pm_rpm@dpms-mode-unset-lpsp:
- shard-rkl: [PASS][227] -> [SKIP][228] ([i915#9519])
[227]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-4/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
[228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-5/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
* igt@kms_pm_rpm@dpms-non-lpsp:
- shard-mtlp: NOTRUN -> [SKIP][229] ([i915#9519])
[229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-4/igt@kms_pm_rpm@dpms-non-lpsp.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-tglu: NOTRUN -> [SKIP][230] ([i915#9519]) +1 other test skip
[230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf:
- shard-tglu: NOTRUN -> [SKIP][231] ([i915#11520]) +5 other tests skip
[231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
- shard-mtlp: NOTRUN -> [SKIP][232] ([i915#12316]) +2 other tests skip
[232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf:
- shard-rkl: NOTRUN -> [SKIP][233] ([i915#11520]) +1 other test skip
[233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
- shard-snb: NOTRUN -> [SKIP][234] ([i915#11520]) +6 other tests skip
[234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-snb7/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area:
- shard-dg1: NOTRUN -> [SKIP][235] ([i915#11520]) +3 other tests skip
[235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area@pipe-a-edp-1:
- shard-mtlp: NOTRUN -> [SKIP][236] ([i915#9808])
[236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area@pipe-a-edp-1.html
* igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
- shard-tglu-1: NOTRUN -> [SKIP][237] ([i915#11520]) +1 other test skip
[237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area:
- shard-dg2: NOTRUN -> [SKIP][238] ([i915#11520]) +2 other tests skip
[238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area.html
* igt@kms_psr2_su@frontbuffer-xrgb8888:
- shard-dg2: NOTRUN -> [SKIP][239] ([i915#9683])
[239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_psr2_su@frontbuffer-xrgb8888.html
* igt@kms_psr@fbc-psr-cursor-mmap-cpu:
- shard-rkl: NOTRUN -> [SKIP][240] ([i915#1072] / [i915#9732]) +6 other tests skip
[240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_psr@fbc-psr-cursor-mmap-cpu.html
* igt@kms_psr@fbc-psr-cursor-plane-move:
- shard-dg2: NOTRUN -> [SKIP][241] ([i915#1072] / [i915#9732]) +6 other tests skip
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_psr@fbc-psr-cursor-plane-move.html
- shard-dg1: NOTRUN -> [SKIP][242] ([i915#1072] / [i915#9732]) +4 other tests skip
[242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_psr@fbc-psr-cursor-plane-move.html
* igt@kms_psr@fbc-psr-cursor-plane-move@edp-1:
- shard-mtlp: NOTRUN -> [SKIP][243] ([i915#9688]) +1 other test skip
[243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_psr@fbc-psr-cursor-plane-move@edp-1.html
* igt@kms_psr@fbc-psr2-cursor-mmap-cpu:
- shard-tglu: NOTRUN -> [SKIP][244] ([i915#9732]) +10 other tests skip
[244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_psr@fbc-psr2-cursor-mmap-cpu.html
* igt@kms_psr@pr-suspend:
- shard-tglu-1: NOTRUN -> [SKIP][245] ([i915#9732]) +9 other tests skip
[245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@kms_psr@pr-suspend.html
* igt@kms_rotation_crc@primary-4-tiled-reflect-x-0:
- shard-dg1: NOTRUN -> [SKIP][246] ([i915#5289])
[246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_rotation_crc@primary-4-tiled-reflect-x-0.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
- shard-tglu: NOTRUN -> [SKIP][247] ([i915#5289])
[247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
* igt@kms_scaling_modes@scaling-mode-full-aspect:
- shard-rkl: NOTRUN -> [SKIP][248] ([i915#3555])
[248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_scaling_modes@scaling-mode-full-aspect.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-dg2: NOTRUN -> [SKIP][249] ([i915#8623])
[249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@kms_universal_plane@cursor-fb-leak:
- shard-mtlp: [PASS][250] -> [FAIL][251] ([i915#9196]) +1 other test fail
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-mtlp-3/igt@kms_universal_plane@cursor-fb-leak.html
[251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-8/igt@kms_universal_plane@cursor-fb-leak.html
* igt@kms_universal_plane@universal-plane-functional@pipe-b-hdmi-a-1:
- shard-rkl: NOTRUN -> [DMESG-WARN][252] ([i915#12964]) +2 other tests dmesg-warn
[252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_universal_plane@universal-plane-functional@pipe-b-hdmi-a-1.html
* igt@kms_vrr@flip-basic-fastset:
- shard-tglu: NOTRUN -> [SKIP][253] ([i915#9906])
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-8/igt@kms_vrr@flip-basic-fastset.html
* igt@kms_vrr@negative-basic:
- shard-dg2: NOTRUN -> [SKIP][254] ([i915#3555] / [i915#9906])
[254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_vrr@negative-basic.html
* igt@kms_vrr@seamless-rr-switch-vrr:
- shard-dg2: NOTRUN -> [SKIP][255] ([i915#9906])
[255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@kms_vrr@seamless-rr-switch-vrr.html
- shard-dg1: NOTRUN -> [SKIP][256] ([i915#9906])
[256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-14/igt@kms_vrr@seamless-rr-switch-vrr.html
- shard-mtlp: NOTRUN -> [SKIP][257] ([i915#8808] / [i915#9906])
[257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@kms_vrr@seamless-rr-switch-vrr.html
* igt@kms_writeback@writeback-check-output:
- shard-rkl: NOTRUN -> [SKIP][258] ([i915#2437])
[258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_writeback@writeback-check-output.html
* igt@perf@mi-rpc:
- shard-rkl: NOTRUN -> [SKIP][259] ([i915#2434])
[259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@perf@mi-rpc.html
* igt@perf_pmu@module-unload:
- shard-dg2: NOTRUN -> [FAIL][260] ([i915#11823])
[260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-7/igt@perf_pmu@module-unload.html
* igt@perf_pmu@rc6@other-idle-gt0:
- shard-tglu-1: NOTRUN -> [SKIP][261] ([i915#8516])
[261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-1/igt@perf_pmu@rc6@other-idle-gt0.html
* igt@sriov_basic@bind-unbind-vf:
- shard-rkl: NOTRUN -> [SKIP][262] ([i915#9917])
[262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@sriov_basic@bind-unbind-vf.html
* igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-6:
- shard-tglu: NOTRUN -> [FAIL][263] ([i915#12910]) +9 other tests fail
[263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-6.html
#### Possible fixes ####
* igt@gem_eio@reset-stress:
- shard-mtlp: [ABORT][264] -> [PASS][265]
[264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-mtlp-7/igt@gem_eio@reset-stress.html
[265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-4/igt@gem_eio@reset-stress.html
* igt@gem_mmap_offset@clear-via-pagefault:
- shard-mtlp: [ABORT][266] ([i915#10729]) -> [PASS][267] +1 other test pass
[266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-mtlp-1/igt@gem_mmap_offset@clear-via-pagefault.html
[267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-7/igt@gem_mmap_offset@clear-via-pagefault.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic:
- shard-tglu: [FAIL][268] ([i915#10991] / [i915#13320]) -> [PASS][269]
[268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-tglu-2/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
[269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-4/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1:
- shard-tglu: [FAIL][270] ([i915#13320]) -> [PASS][271]
[270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-tglu-2/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1.html
[271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-4/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1.html
* igt@kms_async_flips@test-cursor-atomic:
- shard-rkl: [DMESG-WARN][272] ([i915#12964]) -> [PASS][273] +6 other tests pass
[272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-4/igt@kms_async_flips@test-cursor-atomic.html
[273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-5/igt@kms_async_flips@test-cursor-atomic.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-mtlp: [FAIL][274] ([i915#5138]) -> [PASS][275]
[274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-mtlp-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
[275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_cursor_crc@cursor-random-64x21:
- shard-rkl: [FAIL][276] ([i915#13566]) -> [PASS][277] +1 other test pass
[276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-3/igt@kms_cursor_crc@cursor-random-64x21.html
[277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-4/igt@kms_cursor_crc@cursor-random-64x21.html
* igt@kms_cursor_crc@cursor-sliding-128x42:
- shard-tglu: [FAIL][278] -> [PASS][279] +11 other tests pass
[278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-tglu-5/igt@kms_cursor_crc@cursor-sliding-128x42.html
[279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-2/igt@kms_cursor_crc@cursor-sliding-128x42.html
* igt@kms_flip@flip-vs-suspend-interruptible:
- shard-dg1: [DMESG-WARN][280] ([i915#4423]) -> [PASS][281] +2 other tests pass
[280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg1-18/igt@kms_flip@flip-vs-suspend-interruptible.html
[281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-17/igt@kms_flip@flip-vs-suspend-interruptible.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite:
- shard-dg2: [FAIL][282] ([i915#6880]) -> [PASS][283]
[282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html
[283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-8/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html
* igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
- shard-dg2: [SKIP][284] ([i915#9519]) -> [PASS][285] +1 other test pass
[284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-6/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
[285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-4/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
- shard-rkl: [SKIP][286] ([i915#9519]) -> [PASS][287]
[286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-1/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
[287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-7/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
* igt@perf_pmu@most-busy-check-all@vcs1:
- shard-mtlp: [FAIL][288] ([i915#11943]) -> [PASS][289]
[288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-mtlp-4/igt@perf_pmu@most-busy-check-all@vcs1.html
[289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-mtlp-6/igt@perf_pmu@most-busy-check-all@vcs1.html
#### Warnings ####
* igt@gem_eio@in-flight-suspend:
- shard-glk: [INCOMPLETE][290] ([i915#13197] / [i915#13390]) -> [INCOMPLETE][291] ([i915#13390])
[290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk6/igt@gem_eio@in-flight-suspend.html
[291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk9/igt@gem_eio@in-flight-suspend.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-rkl: [DMESG-WARN][292] ([i915#12964]) -> [ABORT][293] ([i915#9820])
[292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-5/igt@i915_module_load@reload-with-fault-injection.html
[293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-1/igt@i915_module_load@reload-with-fault-injection.html
- shard-tglu: [ABORT][294] ([i915#12817] / [i915#9820]) -> [DMESG-WARN][295] ([i915#13475])
[294]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-tglu-3/igt@i915_module_load@reload-with-fault-injection.html
[295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-tglu-7/igt@i915_module_load@reload-with-fault-injection.html
* igt@kms_cursor_crc@cursor-onscreen-64x21:
- shard-rkl: [DMESG-FAIL][296] ([i915#12964]) -> [DMESG-WARN][297] ([i915#12917] / [i915#12964])
[296]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-7/igt@kms_cursor_crc@cursor-onscreen-64x21.html
[297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-4/igt@kms_cursor_crc@cursor-onscreen-64x21.html
* igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1:
- shard-rkl: [FAIL][298] ([i915#13566]) -> [DMESG-WARN][299] ([i915#12917] / [i915#12964])
[298]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-rkl-7/igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1.html
[299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-rkl-4/igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1.html
* igt@kms_flip@flip-vs-suspend:
- shard-glk: [INCOMPLETE][300] ([i915#12745] / [i915#1982] / [i915#4839]) -> [INCOMPLETE][301] ([i915#12745] / [i915#4839])
[300]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk1/igt@kms_flip@flip-vs-suspend.html
[301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk9/igt@kms_flip@flip-vs-suspend.html
* igt@kms_flip@flip-vs-suspend@a-hdmi-a1:
- shard-glk: [INCOMPLETE][302] ([i915#12745] / [i915#1982]) -> [INCOMPLETE][303] ([i915#12745])
[302]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-glk1/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html
[303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-glk9/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu:
- shard-dg2: [SKIP][304] ([i915#10433] / [i915#3458]) -> [SKIP][305] ([i915#3458])
[304]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu.html
[305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite:
- shard-dg2: [SKIP][306] ([i915#3458]) -> [SKIP][307] ([i915#10433] / [i915#3458]) +4 other tests skip
[306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite.html
[307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite.html
* igt@kms_joiner@basic-ultra-joiner:
- shard-dg1: [SKIP][308] ([i915#12339]) -> [SKIP][309] ([i915#12339] / [i915#4423])
[308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16004/shard-dg1-17/igt@kms_joiner@basic-ultra-joiner.html
[309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/shard-dg1-13/igt@kms_joiner@basic-ultra-joiner.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[i915#10226]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10226
[i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
[i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
[i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
[i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#10729]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10729
[i915#10887]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10887
[i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
[i915#10991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10991
[i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
[i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
[i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
[i915#11614]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11614
[i915#118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/118
[i915#11823]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11823
[i915#11859]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11859
[i915#1187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1187
[i915#11943]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11943
[i915#11989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11989
[i915#12238]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12238
[i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247
[i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
[i915#12316]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12316
[i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339
[i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
[i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392
[i915#12394]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12394
[i915#12455]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12455
[i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
[i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
[i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
[i915#12817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12817
[i915#12910]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12910
[i915#12917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12917
[i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
[i915#13029]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13029
[i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
[i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
[i915#13193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13193
[i915#13197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13197
[i915#13320]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13320
[i915#13390]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13390
[i915#13475]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13475
[i915#13522]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13522
[i915#13557]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13557
[i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
[i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
[i915#1982]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1982
[i915#2065]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2065
[i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
[i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
[i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437
[i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
[i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587
[i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
[i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
[i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
[i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
[i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
[i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
[i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
[i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
[i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
[i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469
[i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3582
[i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
[i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
[i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
[i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
[i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
[i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
[i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
[i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
[i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
[i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
[i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
[i915#4854]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4854
[i915#4958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4958
[i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138
[i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
[i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#5493]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493
[i915#5507]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5507
[i915#5784]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5784
[i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
[i915#6880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6880
[i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
[i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
[i915#7091]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7091
[i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
[i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
[i915#7297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7297
[i915#7443]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7443
[i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
[i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
[i915#7975]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7975
[i915#8213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8213
[i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
[i915#8414]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8414
[i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
[i915#8437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8437
[i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
[i915#8588]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8588
[i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623
[i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
[i915#8709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8709
[i915#8808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8808
[i915#8821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8821
[i915#9053]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9053
[i915#9067]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9067
[i915#9196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9196
[i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
[i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337
[i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
[i915#9519]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9519
[i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
[i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
[i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
[i915#9808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9808
[i915#9820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9820
[i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
[i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
[i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934
Build changes
-------------
* Linux: CI_DRM_16004 -> Patchwork_143636v2
CI-20190529: 20190529
CI_DRM_16004: cb1c4020e51585b89363590a56869836e1466b75 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8207: 9f36f9f9e8825a67b762630c2b31628ddcda5c10 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_143636v2: cb1c4020e51585b89363590a56869836e1466b75 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143636v2/index.html
[-- Attachment #2: Type: text/html, Size: 97392 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-21 16:59 ` Lucas De Marchi
2025-01-21 17:19 ` Liang, Kan
@ 2025-01-25 0:46 ` Umesh Nerlige Ramappa
2025-01-25 16:32 ` Lucas De Marchi
1 sibling, 1 reply; 25+ messages in thread
From: Umesh Nerlige Ramappa @ 2025-01-25 0:46 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Liang, Kan, intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
Hi Lucas,
Mostly a bunch of questions since I think I am missing something.
On Tue, Jan 21, 2025 at 10:59:08AM -0600, Lucas De Marchi wrote:
>On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>
>>
>>On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>-static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>>>>>*node)
>>>>>>>-{
>>>>>>>- struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>cpuhp.node);
>>>>>>>- unsigned int target = i915_pmu_target_cpu;
>>>>>>>-
>>>>>>>- /*
>>>>>>>- * Unregistering an instance generates a CPU offline event which
>>>>>>>we must
>>>>>>>- * ignore to avoid incorrectly modifying the shared
>>>>>>>i915_pmu_cpumask.
>>>>>>>- */
>>>>>>>- if (!pmu->registered)
>>>>>>>- return 0;
>>>>>>>-
>>>>>>>- if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>- target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>>>>-
>>>>>>
>>>>>>I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>>>>PMU, not a system-wide scope.
>>>>>
>>>>>counter is in a complete separate device - it doesn't depend on core or
>>>>>die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>>>
>>>>OK. But it's still a behavior change. Please make it clear in the
>>>>description that the patch also changes/fixes the scope from core scope
>>>>to system-wide.
>>>
>>>sure... do you have a suggestion how to test the hotplug? For testing
>>>purposes, can I force the perf cpu assigned to be something other than
>>>the cpu0?
>>
>>Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>CPU0. I don't know a way to force another CPU without changing the code.
>>You may have to instrument the code for the test.
>>
>>Another test you may want to do is the perf system-wide test, e.g., perf
>>stat -a -e i915/actual-frequency/ sleep 1.
>>
>>The existing code assumes the counter is core scope. So the result
>>should be huge, since perf will read the counter on each core and add
>>them up.
>
>that is not allowed and it simply fails to init the counter:
>
>static int i915_pmu_event_init(struct perf_event *event)
> ...
> if (event->cpu < 0)
> return -EINVAL;
> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
> return -EINVAL;
> ...
>}
>
>event only succeeds the initialization in the assigned cpu. I see no
Confused here - The above code check (cpumask_test_cpu) is removed in
this patch. Are you explaining how it was behaving before this patch?
>differences in results (using i915/interrupts/ since freq is harder to
>compare):
>
>$ sudo perf stat -e i915/interrupts/ sleep 1
>
> Performance counter stats for 'system wide':
>
> 253 i915/interrupts/
>
> 1.002215175 seconds time elapsed
>
>$ sudo perf stat -a -e i915/interrupts/ sleep 1
>
> Performance counter stats for 'system wide':
>
> 251 i915/interrupts/
>
> 1.000900818 seconds time elapsed
>
>Note that our cpumask attr already returns just the assigned cpu and
I don't see the cpumask attr anymore since this patch remove that, so
still confused on this part.
>perf-stat only tries to open on that cpu:
>
>$ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/interrupts/ sleep 1
>
>[pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0, sample_type=PERF_SAMPLE_IDENTIFIER, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /* arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1, PERF_FLAG_FD_CLOEXEC) = 3
>
>Lucas De Marchi
>
>>But this patch claims that the counter is system-wide. With the patch,
>>the same perf command should only read the counter on the assigned CPU.
>>
>>Please also post the test results in the changelog. That's the reason
>>why the scope has to be changed.
>
>it seems that migration code is simply wrong, not that we are changing
>the scope here - it was already considered system-wide. I can add a
>paragraph in the commit message explaining it.
The prior code was enforcing one CPU assignment to all the i915 events.
If the event was read from some other CPU it would fail (based on this
check in event initialization).
if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
return -EINVAL;
That's not the case anymore. Right? If yes, how do counters read from
different CPUs get reported to the user? Sum of all counts on different
CPUs?
Thanks,
Umesh
>
>thanks
>Lucas De Marchi
>
>>
>>Thanks,
>>Kan
>>
>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-25 0:46 ` Umesh Nerlige Ramappa
@ 2025-01-25 16:32 ` Lucas De Marchi
2025-01-27 23:32 ` Umesh Nerlige Ramappa
0 siblings, 1 reply; 25+ messages in thread
From: Lucas De Marchi @ 2025-01-25 16:32 UTC (permalink / raw)
To: Umesh Nerlige Ramappa
Cc: Liang, Kan, intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Fri, Jan 24, 2025 at 04:46:21PM -0800, Umesh Nerlige Ramappa wrote:
>Hi Lucas,
>
>Mostly a bunch of questions since I think I am missing something.
>
>On Tue, Jan 21, 2025 at 10:59:08AM -0600, Lucas De Marchi wrote:
>>On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>>
>>>
>>>On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>>On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>>-static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>>>>>>*node)
>>>>>>>>-{
>>>>>>>>- struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>>cpuhp.node);
>>>>>>>>- unsigned int target = i915_pmu_target_cpu;
>>>>>>>>-
>>>>>>>>- /*
>>>>>>>>- * Unregistering an instance generates a CPU offline event which
>>>>>>>>we must
>>>>>>>>- * ignore to avoid incorrectly modifying the shared
>>>>>>>>i915_pmu_cpumask.
>>>>>>>>- */
>>>>>>>>- if (!pmu->registered)
>>>>>>>>- return 0;
>>>>>>>>-
>>>>>>>>- if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>>- target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>>>>>-
>>>>>>>
>>>>>>>I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>>>>>PMU, not a system-wide scope.
>>>>>>
>>>>>>counter is in a complete separate device - it doesn't depend on core or
>>>>>>die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>>>>
>>>>>OK. But it's still a behavior change. Please make it clear in the
>>>>>description that the patch also changes/fixes the scope from core scope
>>>>>to system-wide.
>>>>
>>>>sure... do you have a suggestion how to test the hotplug? For testing
>>>>purposes, can I force the perf cpu assigned to be something other than
>>>>the cpu0?
>>>
>>>Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>>CPU0. I don't know a way to force another CPU without changing the code.
>>>You may have to instrument the code for the test.
>>>
>>>Another test you may want to do is the perf system-wide test, e.g., perf
>>>stat -a -e i915/actual-frequency/ sleep 1.
>>>
>>>The existing code assumes the counter is core scope. So the result
>>>should be huge, since perf will read the counter on each core and add
>>>them up.
>>
>>that is not allowed and it simply fails to init the counter:
>>
>>static int i915_pmu_event_init(struct perf_event *event)
>> ...
>> if (event->cpu < 0)
>> return -EINVAL;
>> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>> return -EINVAL;
>> ...
>>}
>>
>>event only succeeds the initialization in the assigned cpu. I see no
>
>Confused here - The above code check (cpumask_test_cpu) is removed in
>this patch. Are you explaining how it was behaving before this patch?
yes. This is to explain that the scope is system-wide and not core-wide.
The confusion came because our hotplug handling in i915 is using the
wrong mask to migrate the event, which led to the question "is this
counter really system-wide if it's doing that on migration?"
>
>>differences in results (using i915/interrupts/ since freq is harder to
>>compare):
>>
>>$ sudo perf stat -e i915/interrupts/ sleep 1
>>
>>Performance counter stats for 'system wide':
>>
>> 253 i915/interrupts/
>>
>> 1.002215175 seconds time elapsed
>>
>>$ sudo perf stat -a -e i915/interrupts/ sleep 1
>>
>>Performance counter stats for 'system wide':
>>
>> 251 i915/interrupts/
>>
>> 1.000900818 seconds time elapsed
>>
>>Note that our cpumask attr already returns just the assigned cpu and
>
>I don't see the cpumask attr anymore since this patch remove that, so
>still confused on this part.
cpumask attr is now added by core perf infra. See how pmu_dev_attrs
is handled in kernel/events/core.c. If you load the driver with this
patch you will still have a cpumask attr in sysfs and the value depends
on what scope you give it.
The validation when creating and event (with perf_event_open) also moves
to core: it calls pmu->event_init() and then validates the cpu:
kernel/events/core.c:
perf_try_init_event() {
ret = pmu->event_init(event);
...
if (pmu->scope != PERF_PMU_SCOPE_NONE && event->cpu >= 0) {
// check if the cpu matches to mask for that
// scope
}
}
>
>>perf-stat only tries to open on that cpu:
>>
>>$ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/interrupts/ sleep 1
>>
>>[pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0, sample_type=PERF_SAMPLE_IDENTIFIER, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /* arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1, PERF_FLAG_FD_CLOEXEC) = 3
>>
>>Lucas De Marchi
>>
>>>But this patch claims that the counter is system-wide. With the patch,
>>>the same perf command should only read the counter on the assigned CPU.
>>>
>>>Please also post the test results in the changelog. That's the reason
>>>why the scope has to be changed.
>>
>>it seems that migration code is simply wrong, not that we are changing
>>the scope here - it was already considered system-wide. I can add a
>>paragraph in the commit message explaining it.
>
>The prior code was enforcing one CPU assignment to all the i915
>events. If the event was read from some other CPU it would fail
>(based on this check in event initialization).
>
> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
> return -EINVAL;
>
>That's not the case anymore. Right? If yes, how do counters read from
see above, the validation moved to perf core, after the event_init. If
it doesn't match, we cget a call to event->destroy() and it returns
-ENODEV to userspace
>different CPUs get reported to the user? Sum of all counts on
>different CPUs?
value is still the same. There's still only one valid CPU and that CPU
is always cpu 0 in our x86 case.
I hope this clarifies.
Lucas De Marchi
>
>Thanks,
>Umesh
>
>>
>>thanks
>>Lucas De Marchi
>>
>>>
>>>Thanks,
>>>Kan
>>>
>>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-25 16:32 ` Lucas De Marchi
@ 2025-01-27 23:32 ` Umesh Nerlige Ramappa
0 siblings, 0 replies; 25+ messages in thread
From: Umesh Nerlige Ramappa @ 2025-01-27 23:32 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Liang, Kan, intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Sat, Jan 25, 2025 at 10:32:11AM -0600, Lucas De Marchi wrote:
>On Fri, Jan 24, 2025 at 04:46:21PM -0800, Umesh Nerlige Ramappa wrote:
>>Hi Lucas,
>>
>>Mostly a bunch of questions since I think I am missing something.
>>
>>On Tue, Jan 21, 2025 at 10:59:08AM -0600, Lucas De Marchi wrote:
>>>On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>>>
>>>>
>>>>On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>>>On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>>>-static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>>>>>>>*node)
>>>>>>>>>-{
>>>>>>>>>- struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>>>cpuhp.node);
>>>>>>>>>- unsigned int target = i915_pmu_target_cpu;
>>>>>>>>>-
>>>>>>>>>- /*
>>>>>>>>>- * Unregistering an instance generates a CPU offline event which
>>>>>>>>>we must
>>>>>>>>>- * ignore to avoid incorrectly modifying the shared
>>>>>>>>>i915_pmu_cpumask.
>>>>>>>>>- */
>>>>>>>>>- if (!pmu->registered)
>>>>>>>>>- return 0;
>>>>>>>>>-
>>>>>>>>>- if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>>>- target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
>>>>>>>>>-
>>>>>>>>
>>>>>>>>I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>>>>>>PMU, not a system-wide scope.
>>>>>>>
>>>>>>>counter is in a complete separate device - it doesn't depend on core or
>>>>>>>die or pkg - not sure why it cared about topology_sibling_cpumask here.
>>>>>>
>>>>>>OK. But it's still a behavior change. Please make it clear in the
>>>>>>description that the patch also changes/fixes the scope from core scope
>>>>>>to system-wide.
>>>>>
>>>>>sure... do you have a suggestion how to test the hotplug? For testing
>>>>>purposes, can I force the perf cpu assigned to be something other than
>>>>>the cpu0?
>>>>
>>>>Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>>>CPU0. I don't know a way to force another CPU without changing the code.
>>>>You may have to instrument the code for the test.
>>>>
>>>>Another test you may want to do is the perf system-wide test, e.g., perf
>>>>stat -a -e i915/actual-frequency/ sleep 1.
>>>>
>>>>The existing code assumes the counter is core scope. So the result
>>>>should be huge, since perf will read the counter on each core and add
>>>>them up.
>>>
>>>that is not allowed and it simply fails to init the counter:
>>>
>>>static int i915_pmu_event_init(struct perf_event *event)
>>> ...
>>> if (event->cpu < 0)
>>> return -EINVAL;
>>> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>> return -EINVAL;
>>> ...
>>>}
>>>
>>>event only succeeds the initialization in the assigned cpu. I see no
>>
>>Confused here - The above code check (cpumask_test_cpu) is removed
>>in this patch. Are you explaining how it was behaving before this
>>patch?
>
>yes. This is to explain that the scope is system-wide and not core-wide.
>The confusion came because our hotplug handling in i915 is using the
>wrong mask to migrate the event, which led to the question "is this
>counter really system-wide if it's doing that on migration?"
>
>>
>>>differences in results (using i915/interrupts/ since freq is harder to
>>>compare):
>>>
>>>$ sudo perf stat -e i915/interrupts/ sleep 1
>>>
>>>Performance counter stats for 'system wide':
>>>
>>> 253 i915/interrupts/
>>>
>>> 1.002215175 seconds time elapsed
>>>
>>>$ sudo perf stat -a -e i915/interrupts/ sleep 1
>>>
>>>Performance counter stats for 'system wide':
>>>
>>> 251 i915/interrupts/
>>>
>>> 1.000900818 seconds time elapsed
>>>
>>>Note that our cpumask attr already returns just the assigned cpu and
>>
>>I don't see the cpumask attr anymore since this patch remove that,
>>so still confused on this part.
>
>cpumask attr is now added by core perf infra. See how pmu_dev_attrs
>is handled in kernel/events/core.c. If you load the driver with this
>patch you will still have a cpumask attr in sysfs and the value depends
>on what scope you give it.
>
>The validation when creating and event (with perf_event_open) also moves
>to core: it calls pmu->event_init() and then validates the cpu:
>
>kernel/events/core.c:
> perf_try_init_event() {
> ret = pmu->event_init(event);
> ...
>
> if (pmu->scope != PERF_PMU_SCOPE_NONE && event->cpu >= 0) {
> // check if the cpu matches to mask for that
> // scope
> }
> }
>
>>
>>>perf-stat only tries to open on that cpu:
>>>
>>>$ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/interrupts/ sleep 1
>>>
>>>[pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /* PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0, sample_type=PERF_SAMPLE_IDENTIFIER, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /* arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1, PERF_FLAG_FD_CLOEXEC) = 3
>>>
>>>Lucas De Marchi
>>>
>>>>But this patch claims that the counter is system-wide. With the patch,
>>>>the same perf command should only read the counter on the assigned CPU.
>>>>
>>>>Please also post the test results in the changelog. That's the reason
>>>>why the scope has to be changed.
>>>
>>>it seems that migration code is simply wrong, not that we are changing
>>>the scope here - it was already considered system-wide. I can add a
>>>paragraph in the commit message explaining it.
>>
>>The prior code was enforcing one CPU assignment to all the i915
>>events. If the event was read from some other CPU it would fail
>>(based on this check in event initialization).
>>
>> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>> return -EINVAL;
>>
>>That's not the case anymore. Right? If yes, how do counters read
>>from
>
>see above, the validation moved to perf core, after the event_init. If
>it doesn't match, we cget a call to event->destroy() and it returns
>-ENODEV to userspace
>
>>different CPUs get reported to the user? Sum of all counts on
>>different CPUs?
>
>value is still the same. There's still only one valid CPU and that CPU
>is always cpu 0 in our x86 case.
>
>I hope this clarifies.
Yes, it does now. Thanks
I don't see a difference in behavior as in the events are still linked
to just CPU0, so this looks good to me. Some of these clarifications can
be added to the commit message though.
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Regards,
Umesh
>
>Lucas De Marchi
>
>>
>>Thanks,
>>Umesh
>>
>>>
>>>thanks
>>>Lucas De Marchi
>>>
>>>>
>>>>Thanks,
>>>>Kan
>>>>
>>>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
` (5 preceding siblings ...)
2025-01-24 0:27 ` ✗ i915.CI.Full: failure " Patchwork
@ 2025-01-29 8:37 ` Tvrtko Ursulin
6 siblings, 0 replies; 25+ messages in thread
From: Tvrtko Ursulin @ 2025-01-29 8:37 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx
Cc: Kan Liang, Peter Zijlstra (Intel), Vinay Belgaumkar
On 16/01/2025 22:24, Lucas De Marchi wrote:
> Since commit 4ba4f1afb6a9 ("perf: Generic hotplug support for a PMU with
> a scope"), there's generic support for system-wide counters and
> integration with cpu hotplug. Set our scope to PERF_PMU_SCOPE_SYS_WIDE
> instead of all the boilerplate code for handling hotplug.
Code removal looks fine to me.
One thing I am unsure of relates to the perf core. Where currently the
implementation would force userspace to open all events from the same
PMU provider on the same CPU (so cpu0 after its hotplug capability got
removed), with PERF_PMU_SCOPE_SYS_WIDE it looks like userspace could
open events on any online CPU. Do I follow the core code correctly and
would that cause a problem? Would it cause an inefficiency with grouped
events?
Regards,
Tvrtko
> Cc: Kan Liang <kan.liang@linux.intel.com>
> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
> Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_module.c | 2 -
> drivers/gpu/drm/i915/i915_pmu.c | 114 +----------------------------
> drivers/gpu/drm/i915/i915_pmu.h | 11 ---
> 3 files changed, 1 insertion(+), 126 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/i915/i915_module.c
> index 7ed6d70389af9..7affe07f84f45 100644
> --- a/drivers/gpu/drm/i915/i915_module.c
> +++ b/drivers/gpu/drm/i915/i915_module.c
> @@ -71,8 +71,6 @@ static const struct {
> { .init = i915_vma_resource_module_init,
> .exit = i915_vma_resource_module_exit },
> { .init = i915_mock_selftests },
> - { .init = i915_pmu_init,
> - .exit = i915_pmu_exit },
> { .init = i915_pci_register_driver,
> .exit = i915_pci_unregister_driver },
> { .init = i915_perf_sysctl_register,
> diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
> index e55db036be1bb..652964ef0643c 100644
> --- a/drivers/gpu/drm/i915/i915_pmu.c
> +++ b/drivers/gpu/drm/i915/i915_pmu.c
> @@ -28,9 +28,6 @@
> BIT(I915_SAMPLE_WAIT) | \
> BIT(I915_SAMPLE_SEMA))
>
> -static cpumask_t i915_pmu_cpumask;
> -static unsigned int i915_pmu_target_cpu = -1;
> -
> static struct i915_pmu *event_to_pmu(struct perf_event *event)
> {
> return container_of(event->pmu, struct i915_pmu, base);
> @@ -642,10 +639,6 @@ static int i915_pmu_event_init(struct perf_event *event)
> if (event->cpu < 0)
> return -EINVAL;
>
> - /* only allow running on one cpu at a time */
> - if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
> - return -EINVAL;
> -
> if (is_engine_event(event))
> ret = engine_event_init(event);
> else
> @@ -940,23 +933,6 @@ static ssize_t i915_pmu_event_show(struct device *dev,
> return sprintf(buf, "config=0x%lx\n", eattr->val);
> }
>
> -static ssize_t cpumask_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - return cpumap_print_to_pagebuf(true, buf, &i915_pmu_cpumask);
> -}
> -
> -static DEVICE_ATTR_RO(cpumask);
> -
> -static struct attribute *i915_cpumask_attrs[] = {
> - &dev_attr_cpumask.attr,
> - NULL,
> -};
> -
> -static const struct attribute_group i915_pmu_cpumask_attr_group = {
> - .attrs = i915_cpumask_attrs,
> -};
> -
> #define __event(__counter, __name, __unit) \
> { \
> .counter = (__counter), \
> @@ -1173,92 +1149,12 @@ static void free_event_attributes(struct i915_pmu *pmu)
> pmu->pmu_attr = NULL;
> }
>
> -static int i915_pmu_cpu_online(unsigned int cpu, struct hlist_node *node)
> -{
> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
> -
> - /* Select the first online CPU as a designated reader. */
> - if (cpumask_empty(&i915_pmu_cpumask))
> - cpumask_set_cpu(cpu, &i915_pmu_cpumask);
> -
> - return 0;
> -}
> -
> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node *node)
> -{
> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
> - unsigned int target = i915_pmu_target_cpu;
> -
> - /*
> - * Unregistering an instance generates a CPU offline event which we must
> - * ignore to avoid incorrectly modifying the shared i915_pmu_cpumask.
> - */
> - if (!pmu->registered)
> - return 0;
> -
> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
> - target = cpumask_any_but(topology_sibling_cpumask(cpu), cpu);
> -
> - /* Migrate events if there is a valid target */
> - if (target < nr_cpu_ids) {
> - cpumask_set_cpu(target, &i915_pmu_cpumask);
> - i915_pmu_target_cpu = target;
> - }
> - }
> -
> - if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) {
> - perf_pmu_migrate_context(&pmu->base, cpu, target);
> - pmu->cpuhp.cpu = target;
> - }
> -
> - return 0;
> -}
> -
> -static enum cpuhp_state cpuhp_state = CPUHP_INVALID;
> -
> -int i915_pmu_init(void)
> -{
> - int ret;
> -
> - ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
> - "perf/x86/intel/i915:online",
> - i915_pmu_cpu_online,
> - i915_pmu_cpu_offline);
> - if (ret < 0)
> - pr_notice("Failed to setup cpuhp state for i915 PMU! (%d)\n",
> - ret);
> - else
> - cpuhp_state = ret;
> -
> - return 0;
> -}
> -
> -void i915_pmu_exit(void)
> -{
> - if (cpuhp_state != CPUHP_INVALID)
> - cpuhp_remove_multi_state(cpuhp_state);
> -}
> -
> -static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)
> -{
> - if (cpuhp_state == CPUHP_INVALID)
> - return -EINVAL;
> -
> - return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node);
> -}
> -
> -static void i915_pmu_unregister_cpuhp_state(struct i915_pmu *pmu)
> -{
> - cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node);
> -}
> -
> void i915_pmu_register(struct drm_i915_private *i915)
> {
> struct i915_pmu *pmu = &i915->pmu;
> const struct attribute_group *attr_groups[] = {
> &i915_pmu_format_attr_group,
> &pmu->events_attr_group,
> - &i915_pmu_cpumask_attr_group,
> NULL
> };
> int ret = -ENOMEM;
> @@ -1266,7 +1162,6 @@ void i915_pmu_register(struct drm_i915_private *i915)
> spin_lock_init(&pmu->lock);
> hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> pmu->timer.function = i915_sample;
> - pmu->cpuhp.cpu = -1;
> init_rc6(pmu);
>
> if (IS_DGFX(i915)) {
> @@ -1295,6 +1190,7 @@ void i915_pmu_register(struct drm_i915_private *i915)
>
> pmu->base.module = THIS_MODULE;
> pmu->base.task_ctx_nr = perf_invalid_context;
> + pmu->base.scope = PERF_PMU_SCOPE_SYS_WIDE;
> pmu->base.event_init = i915_pmu_event_init;
> pmu->base.add = i915_pmu_event_add;
> pmu->base.del = i915_pmu_event_del;
> @@ -1307,16 +1203,10 @@ void i915_pmu_register(struct drm_i915_private *i915)
> if (ret)
> goto err_groups;
>
> - ret = i915_pmu_register_cpuhp_state(pmu);
> - if (ret)
> - goto err_unreg;
> -
> pmu->registered = true;
>
> return;
>
> -err_unreg:
> - perf_pmu_unregister(&pmu->base);
> err_groups:
> kfree(pmu->base.attr_groups);
> err_attr:
> @@ -1340,8 +1230,6 @@ void i915_pmu_unregister(struct drm_i915_private *i915)
>
> hrtimer_cancel(&pmu->timer);
>
> - i915_pmu_unregister_cpuhp_state(pmu);
> -
> perf_pmu_unregister(&pmu->base);
> kfree(pmu->base.attr_groups);
> if (IS_DGFX(i915))
> diff --git a/drivers/gpu/drm/i915/i915_pmu.h b/drivers/gpu/drm/i915/i915_pmu.h
> index 8e66d63d0c9f9..53bce3d8bfbaf 100644
> --- a/drivers/gpu/drm/i915/i915_pmu.h
> +++ b/drivers/gpu/drm/i915/i915_pmu.h
> @@ -56,13 +56,6 @@ struct i915_pmu_sample {
> };
>
> struct i915_pmu {
> - /**
> - * @cpuhp: Struct used for CPU hotplug handling.
> - */
> - struct {
> - struct hlist_node node;
> - unsigned int cpu;
> - } cpuhp;
> /**
> * @base: PMU base.
> */
> @@ -155,15 +148,11 @@ struct i915_pmu {
> };
>
> #ifdef CONFIG_PERF_EVENTS
> -int i915_pmu_init(void);
> -void i915_pmu_exit(void);
> void i915_pmu_register(struct drm_i915_private *i915);
> void i915_pmu_unregister(struct drm_i915_private *i915);
> void i915_pmu_gt_parked(struct intel_gt *gt);
> void i915_pmu_gt_unparked(struct intel_gt *gt);
> #else
> -static inline int i915_pmu_init(void) { return 0; }
> -static inline void i915_pmu_exit(void) {}
> static inline void i915_pmu_register(struct drm_i915_private *i915) {}
> static inline void i915_pmu_unregister(struct drm_i915_private *i915) {}
> static inline void i915_pmu_gt_parked(struct intel_gt *gt) {}
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-01-21 17:19 ` Liang, Kan
@ 2025-02-13 4:13 ` Lucas De Marchi
2025-02-13 13:36 ` Liang, Kan
0 siblings, 1 reply; 25+ messages in thread
From: Lucas De Marchi @ 2025-02-13 4:13 UTC (permalink / raw)
To: Liang, Kan; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On Tue, Jan 21, 2025 at 12:19:15PM -0500, Liang, Kan wrote:
>
>
>On 2025-01-21 11:59 a.m., Lucas De Marchi wrote:
>> On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>>
>>>
>>> On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct hlist_node
>>>>>>>> *node)
>>>>>>>> -{
>>>>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>> cpuhp.node);
>>>>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>>>>> -
>>>>>>>> - /*
>>>>>>>> - * Unregistering an instance generates a CPU offline event
>>>>>>>> which
>>>>>>>> we must
>>>>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>>>>> i915_pmu_cpumask.
>>>>>>>> - */
>>>>>>>> - if (!pmu->registered)
>>>>>>>> - return 0;
>>>>>>>> -
>>>>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu),
>>>>>>>> cpu);
>>>>>>>> -
>>>>>>>
>>>>>>> I'm not familar with the i915 PMU, but it seems suggest a core scope
>>>>>>> PMU, not a system-wide scope.
>>>>>>
>>>>>> counter is in a complete separate device - it doesn't depend on
>>>>>> core or
>>>>>> die or pkg - not sure why it cared about topology_sibling_cpumask
>>>>>> here.
>>>>>
>>>>> OK. But it's still a behavior change. Please make it clear in the
>>>>> description that the patch also changes/fixes the scope from core scope
>>>>> to system-wide.
>>>>
>>>> sure... do you have a suggestion how to test the hotplug? For testing
>>>> purposes, can I force the perf cpu assigned to be something other than
>>>> the cpu0?
>>>
>>> Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>> CPU0. I don't know a way to force another CPU without changing the code.
>>> You may have to instrument the code for the test.
>>>
>>> Another test you may want to do is the perf system-wide test, e.g., perf
>>> stat -a -e i915/actual-frequency/ sleep 1.
>>>
>>> The existing code assumes the counter is core scope. So the result
>>> should be huge, since perf will read the counter on each core and add
>>> them up.
>>
>> that is not allowed and it simply fails to init the counter:
>>
>> static int i915_pmu_event_init(struct perf_event *event)
>> ...
>> if (event->cpu < 0)
>> return -EINVAL;
>> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>> return -EINVAL;
>> ...
>> }
>>
>> event only succeeds the initialization in the assigned cpu. I see no
>> differences in results (using i915/interrupts/ since freq is harder to
>> compare):
>>
>> $ sudo perf stat -e i915/interrupts/ sleep 1
>>
>> Performance counter stats for 'system wide':
>>
>> 253 i915/
>> interrupts/
>> 1.002215175 seconds time elapsed
>>
>> $ sudo perf stat -a -e i915/interrupts/ sleep 1
>>
>> Performance counter stats for 'system wide':
>>
>> 251 i915/
>> interrupts/
>> 1.000900818 seconds time elapsed
>>
>> Note that our cpumask attr already returns just the assigned cpu and
>> perf-stat only tries to open on that cpu:
>>
>> $ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/
>> interrupts/ sleep 1
>>
>> [pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /*
>> PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0,
>> sample_type=PERF_SAMPLE_IDENTIFIER,
>> read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|
>> PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /*
>> arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1,
>> PERF_FLAG_FD_CLOEXEC) = 3
>>
>
>I see. The behavior is not changed with the patch. It should be just the
humn... the behavior doesn't change when using perf because perf will
read the cpumask and use it accordingly. However apparently now it's not
working anymore to reject calls to perf_event_open() that have a cpu
that doesn't match the cpumask.
Just like before I have this output:
$ sudo cat /sys/devices/i915/cpumask
0
However if perf_event_open() is called with cpu == 1, it succeeds.
Example:
attr_init(&attr);
perf_event_open(&attr, -1, 1, -1, 0);
I was expecting it to fail and set errno to ENODEV, but that is not the
case. For this particular system I'm seeing these values in
perf_try_init_event():
event->cpu == 1
cpumask=0-19
pmu_cpumask=0
Re-reading this: it will accept any (online) cpu of the system. Same
behavior occurs with other scopes: any cpu of that scope is accepted and
event->cpu will still keep what the user passed in (rather than the
calculated by perf_try_init_event(). Is that expected?
Lucas De Marchi
>topology_sibling_cpumask() which implies a misleading message.
>Thanks for the confirmation.
>
>
>> Lucas De Marchi
>>
>>> But this patch claims that the counter is system-wide. With the patch,
>>> the same perf command should only read the counter on the assigned CPU.
>>>
>>> Please also post the test results in the changelog. That's the reason
>>> why the scope has to be changed.
>>
>> it seems that migration code is simply wrong, not that we are changing
>> the scope here - it was already considered system-wide. I can add a
>> paragraph in the commit message explaining it.
>>
>
>Yes, please.
>
>Thanks,
>Kan
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-02-13 4:13 ` Lucas De Marchi
@ 2025-02-13 13:36 ` Liang, Kan
2025-02-13 14:28 ` Tvrtko Ursulin
0 siblings, 1 reply; 25+ messages in thread
From: Liang, Kan @ 2025-02-13 13:36 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 2025-02-12 11:13 p.m., Lucas De Marchi wrote:
> On Tue, Jan 21, 2025 at 12:19:15PM -0500, Liang, Kan wrote:
>>
>>
>> On 2025-01-21 11:59 a.m., Lucas De Marchi wrote:
>>> On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>>>
>>>>
>>>> On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>>> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct
>>>>>>>>> hlist_node
>>>>>>>>> *node)
>>>>>>>>> -{
>>>>>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>>> cpuhp.node);
>>>>>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>>>>>> -
>>>>>>>>> - /*
>>>>>>>>> - * Unregistering an instance generates a CPU offline event
>>>>>>>>> which
>>>>>>>>> we must
>>>>>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>>>>>> i915_pmu_cpumask.
>>>>>>>>> - */
>>>>>>>>> - if (!pmu->registered)
>>>>>>>>> - return 0;
>>>>>>>>> -
>>>>>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu),
>>>>>>>>> cpu);
>>>>>>>>> -
>>>>>>>>
>>>>>>>> I'm not familar with the i915 PMU, but it seems suggest a core
>>>>>>>> scope
>>>>>>>> PMU, not a system-wide scope.
>>>>>>>
>>>>>>> counter is in a complete separate device - it doesn't depend on
>>>>>>> core or
>>>>>>> die or pkg - not sure why it cared about topology_sibling_cpumask
>>>>>>> here.
>>>>>>
>>>>>> OK. But it's still a behavior change. Please make it clear in the
>>>>>> description that the patch also changes/fixes the scope from core
>>>>>> scope
>>>>>> to system-wide.
>>>>>
>>>>> sure... do you have a suggestion how to test the hotplug? For testing
>>>>> purposes, can I force the perf cpu assigned to be something other than
>>>>> the cpu0?
>>>>
>>>> Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>>> CPU0. I don't know a way to force another CPU without changing the
>>>> code.
>>>> You may have to instrument the code for the test.
>>>>
>>>> Another test you may want to do is the perf system-wide test, e.g.,
>>>> perf
>>>> stat -a -e i915/actual-frequency/ sleep 1.
>>>>
>>>> The existing code assumes the counter is core scope. So the result
>>>> should be huge, since perf will read the counter on each core and add
>>>> them up.
>>>
>>> that is not allowed and it simply fails to init the counter:
>>>
>>> static int i915_pmu_event_init(struct perf_event *event)
>>> ...
>>> if (event->cpu < 0)
>>> return -EINVAL;
>>> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>> return -EINVAL;
>>> ...
>>> }
>>>
>>> event only succeeds the initialization in the assigned cpu. I see no
>>> differences in results (using i915/interrupts/ since freq is harder to
>>> compare):
>>>
>>> $ sudo perf stat -e i915/interrupts/ sleep 1
>>>
>>> Performance counter stats for 'system wide':
>>>
>>> 253 i915/
>>> interrupts/
>>> 1.002215175 seconds time elapsed
>>>
>>> $ sudo perf stat -a -e i915/interrupts/ sleep 1
>>>
>>> Performance counter stats for 'system wide':
>>>
>>> 251 i915/
>>> interrupts/
>>> 1.000900818 seconds time elapsed
>>>
>>> Note that our cpumask attr already returns just the assigned cpu and
>>> perf-stat only tries to open on that cpu:
>>>
>>> $ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/
>>> interrupts/ sleep 1
>>>
>>> [pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /*
>>> PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0,
>>> sample_type=PERF_SAMPLE_IDENTIFIER,
>>> read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|
>>> PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /*
>>> arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1,
>>> PERF_FLAG_FD_CLOEXEC) = 3
>>>
>>
>> I see. The behavior is not changed with the patch. It should be just the
>
> humn... the behavior doesn't change when using perf because perf will
> read the cpumask and use it accordingly. However apparently now it's not
> working anymore to reject calls to perf_event_open() that have a cpu
> that doesn't match the cpumask.
>
> Just like before I have this output:
>
> $ sudo cat /sys/devices/i915/cpumask 0
>
> However if perf_event_open() is called with cpu == 1, it succeeds.
> Example:
>
> attr_init(&attr);
> perf_event_open(&attr, -1, 1, -1, 0);
>
> I was expecting it to fail and set errno to ENODEV, but that is not the
> case. For this particular system I'm seeing these values in
> perf_try_init_event():
>
> event->cpu == 1
> cpumask=0-19
> pmu_cpumask=0
>
> Re-reading this: it will accept any (online) cpu of the system. Same
> behavior occurs with other scopes: any cpu of that scope is accepted and
> event->cpu will still keep what the user passed in (rather than the
> calculated by perf_try_init_event(). Is that expected?
Yes, for a system-wide event, it can be read from any CPU. The CPU mask
in the sysfs only tells the perf tool that only 1 CPU is required to get
system-wide information. It doesn't have to be the advised CPU. It can
be any CPU in the scope.
https://lore.kernel.org/all/20240802151643.1691631-3-kan.liang@linux.intel.com/
Thanks,
Kan
>
> Lucas De Marchi
>
>> topology_sibling_cpumask() which implies a misleading message.
>> Thanks for the confirmation.
>>
>>
>>> Lucas De Marchi
>>>
>>>> But this patch claims that the counter is system-wide. With the patch,
>>>> the same perf command should only read the counter on the assigned CPU.
>>>>
>>>> Please also post the test results in the changelog. That's the reason
>>>> why the scope has to be changed.
>>>
>>> it seems that migration code is simply wrong, not that we are changing
>>> the scope here - it was already considered system-wide. I can add a
>>> paragraph in the commit message explaining it.
>>>
>>
>> Yes, please.
>>
>> Thanks,
>> Kan
>>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-02-13 13:36 ` Liang, Kan
@ 2025-02-13 14:28 ` Tvrtko Ursulin
2025-02-13 15:27 ` Liang, Kan
0 siblings, 1 reply; 25+ messages in thread
From: Tvrtko Ursulin @ 2025-02-13 14:28 UTC (permalink / raw)
To: Liang, Kan, Lucas De Marchi
Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 13/02/2025 13:36, Liang, Kan wrote:
> On 2025-02-12 11:13 p.m., Lucas De Marchi wrote:
>> On Tue, Jan 21, 2025 at 12:19:15PM -0500, Liang, Kan wrote:
>>>
>>>
>>> On 2025-01-21 11:59 a.m., Lucas De Marchi wrote:
>>>> On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>>>>
>>>>>
>>>>> On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>>>> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct
>>>>>>>>>> hlist_node
>>>>>>>>>> *node)
>>>>>>>>>> -{
>>>>>>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>>>> cpuhp.node);
>>>>>>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>>>>>>> -
>>>>>>>>>> - /*
>>>>>>>>>> - * Unregistering an instance generates a CPU offline event
>>>>>>>>>> which
>>>>>>>>>> we must
>>>>>>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>>>>>>> i915_pmu_cpumask.
>>>>>>>>>> - */
>>>>>>>>>> - if (!pmu->registered)
>>>>>>>>>> - return 0;
>>>>>>>>>> -
>>>>>>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu),
>>>>>>>>>> cpu);
>>>>>>>>>> -
>>>>>>>>>
>>>>>>>>> I'm not familar with the i915 PMU, but it seems suggest a core
>>>>>>>>> scope
>>>>>>>>> PMU, not a system-wide scope.
>>>>>>>>
>>>>>>>> counter is in a complete separate device - it doesn't depend on
>>>>>>>> core or
>>>>>>>> die or pkg - not sure why it cared about topology_sibling_cpumask
>>>>>>>> here.
>>>>>>>
>>>>>>> OK. But it's still a behavior change. Please make it clear in the
>>>>>>> description that the patch also changes/fixes the scope from core
>>>>>>> scope
>>>>>>> to system-wide.
>>>>>>
>>>>>> sure... do you have a suggestion how to test the hotplug? For testing
>>>>>> purposes, can I force the perf cpu assigned to be something other than
>>>>>> the cpu0?
>>>>>
>>>>> Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>>>> CPU0. I don't know a way to force another CPU without changing the
>>>>> code.
>>>>> You may have to instrument the code for the test.
>>>>>
>>>>> Another test you may want to do is the perf system-wide test, e.g.,
>>>>> perf
>>>>> stat -a -e i915/actual-frequency/ sleep 1.
>>>>>
>>>>> The existing code assumes the counter is core scope. So the result
>>>>> should be huge, since perf will read the counter on each core and add
>>>>> them up.
>>>>
>>>> that is not allowed and it simply fails to init the counter:
>>>>
>>>> static int i915_pmu_event_init(struct perf_event *event)
>>>> ...
>>>> if (event->cpu < 0)
>>>> return -EINVAL;
>>>> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>>> return -EINVAL;
>>>> ...
>>>> }
>>>>
>>>> event only succeeds the initialization in the assigned cpu. I see no
>>>> differences in results (using i915/interrupts/ since freq is harder to
>>>> compare):
>>>>
>>>> $ sudo perf stat -e i915/interrupts/ sleep 1
>>>>
>>>> Performance counter stats for 'system wide':
>>>>
>>>> 253 i915/
>>>> interrupts/
>>>> 1.002215175 seconds time elapsed
>>>>
>>>> $ sudo perf stat -a -e i915/interrupts/ sleep 1
>>>>
>>>> Performance counter stats for 'system wide':
>>>>
>>>> 251 i915/
>>>> interrupts/
>>>> 1.000900818 seconds time elapsed
>>>>
>>>> Note that our cpumask attr already returns just the assigned cpu and
>>>> perf-stat only tries to open on that cpu:
>>>>
>>>> $ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e i915/
>>>> interrupts/ sleep 1
>>>>
>>>> [pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */, size=0x88 /*
>>>> PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0,
>>>> sample_type=PERF_SAMPLE_IDENTIFIER,
>>>> read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|
>>>> PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /*
>>>> arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1,
>>>> PERF_FLAG_FD_CLOEXEC) = 3
>>>>
>>>
>>> I see. The behavior is not changed with the patch. It should be just the
>>
>> humn... the behavior doesn't change when using perf because perf will
>> read the cpumask and use it accordingly. However apparently now it's not
>> working anymore to reject calls to perf_event_open() that have a cpu
>> that doesn't match the cpumask.
>>
>> Just like before I have this output:
>>
>> $ sudo cat /sys/devices/i915/cpumask 0
>>
>> However if perf_event_open() is called with cpu == 1, it succeeds.
>> Example:
>>
>> attr_init(&attr);
>> perf_event_open(&attr, -1, 1, -1, 0);
>>
>> I was expecting it to fail and set errno to ENODEV, but that is not the
>> case. For this particular system I'm seeing these values in
>> perf_try_init_event():
>>
>> event->cpu == 1
>> cpumask=0-19
>> pmu_cpumask=0
>>
>> Re-reading this: it will accept any (online) cpu of the system. Same
>> behavior occurs with other scopes: any cpu of that scope is accepted and
>> event->cpu will still keep what the user passed in (rather than the
>> calculated by perf_try_init_event(). Is that expected?
>
> Yes, for a system-wide event, it can be read from any CPU. The CPU mask
> in the sysfs only tells the perf tool that only 1 CPU is required to get
> system-wide information. It doesn't have to be the advised CPU. It can
> be any CPU in the scope.
>
> https://lore.kernel.org/all/20240802151643.1691631-3-kan.liang@linux.intel.com/
I was asking about this during review - will it also allow for group
reads to mix cpus and if yes are there any downsides etc?
Regards,
Tvrtko
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] drm/i915/pmu: Drop custom hotplug code
2025-02-13 14:28 ` Tvrtko Ursulin
@ 2025-02-13 15:27 ` Liang, Kan
0 siblings, 0 replies; 25+ messages in thread
From: Liang, Kan @ 2025-02-13 15:27 UTC (permalink / raw)
To: Tvrtko Ursulin, Lucas De Marchi
Cc: intel-gfx, Peter Zijlstra (Intel), Vinay Belgaumkar
On 2025-02-13 9:28 a.m., Tvrtko Ursulin wrote:
>
> On 13/02/2025 13:36, Liang, Kan wrote:
>> On 2025-02-12 11:13 p.m., Lucas De Marchi wrote:
>>> On Tue, Jan 21, 2025 at 12:19:15PM -0500, Liang, Kan wrote:
>>>>
>>>>
>>>> On 2025-01-21 11:59 a.m., Lucas De Marchi wrote:
>>>>> On Tue, Jan 21, 2025 at 10:53:31AM -0500, Liang, Kan wrote:
>>>>>>
>>>>>>
>>>>>> On 2025-01-21 9:29 a.m., Lucas De Marchi wrote:
>>>>>>> On Mon, Jan 20, 2025 at 08:42:41PM -0500, Liang, Kan wrote:
>>>>>>>>>>> -static int i915_pmu_cpu_offline(unsigned int cpu, struct
>>>>>>>>>>> hlist_node
>>>>>>>>>>> *node)
>>>>>>>>>>> -{
>>>>>>>>>>> - struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu),
>>>>>>>>>>> cpuhp.node);
>>>>>>>>>>> - unsigned int target = i915_pmu_target_cpu;
>>>>>>>>>>> -
>>>>>>>>>>> - /*
>>>>>>>>>>> - * Unregistering an instance generates a CPU offline event
>>>>>>>>>>> which
>>>>>>>>>>> we must
>>>>>>>>>>> - * ignore to avoid incorrectly modifying the shared
>>>>>>>>>>> i915_pmu_cpumask.
>>>>>>>>>>> - */
>>>>>>>>>>> - if (!pmu->registered)
>>>>>>>>>>> - return 0;
>>>>>>>>>>> -
>>>>>>>>>>> - if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
>>>>>>>>>>> - target = cpumask_any_but(topology_sibling_cpumask(cpu),
>>>>>>>>>>> cpu);
>>>>>>>>>>> -
>>>>>>>>>>
>>>>>>>>>> I'm not familar with the i915 PMU, but it seems suggest a core
>>>>>>>>>> scope
>>>>>>>>>> PMU, not a system-wide scope.
>>>>>>>>>
>>>>>>>>> counter is in a complete separate device - it doesn't depend on
>>>>>>>>> core or
>>>>>>>>> die or pkg - not sure why it cared about topology_sibling_cpumask
>>>>>>>>> here.
>>>>>>>>
>>>>>>>> OK. But it's still a behavior change. Please make it clear in the
>>>>>>>> description that the patch also changes/fixes the scope from core
>>>>>>>> scope
>>>>>>>> to system-wide.
>>>>>>>
>>>>>>> sure... do you have a suggestion how to test the hotplug? For
>>>>>>> testing
>>>>>>> purposes, can I force the perf cpu assigned to be something other
>>>>>>> than
>>>>>>> the cpu0?
>>>>>>
>>>>>> Yes, it's a bit tricky to verify the hotplug if the assigned CPU is
>>>>>> CPU0. I don't know a way to force another CPU without changing the
>>>>>> code.
>>>>>> You may have to instrument the code for the test.
>>>>>>
>>>>>> Another test you may want to do is the perf system-wide test, e.g.,
>>>>>> perf
>>>>>> stat -a -e i915/actual-frequency/ sleep 1.
>>>>>>
>>>>>> The existing code assumes the counter is core scope. So the result
>>>>>> should be huge, since perf will read the counter on each core and add
>>>>>> them up.
>>>>>
>>>>> that is not allowed and it simply fails to init the counter:
>>>>>
>>>>> static int i915_pmu_event_init(struct perf_event *event)
>>>>> ...
>>>>> if (event->cpu < 0)
>>>>> return -EINVAL;
>>>>> if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask))
>>>>> return -EINVAL;
>>>>> ...
>>>>> }
>>>>>
>>>>> event only succeeds the initialization in the assigned cpu. I see no
>>>>> differences in results (using i915/interrupts/ since freq is harder to
>>>>> compare):
>>>>>
>>>>> $ sudo perf stat -e i915/interrupts/ sleep 1
>>>>>
>>>>> Performance counter stats for 'system wide':
>>>>>
>>>>> 253 i915/
>>>>> interrupts/
>>>>> 1.002215175 seconds time elapsed
>>>>>
>>>>> $ sudo perf stat -a -e i915/interrupts/ sleep 1
>>>>>
>>>>> Performance counter stats for 'system wide':
>>>>>
>>>>> 251 i915/
>>>>> interrupts/
>>>>> 1.000900818 seconds time elapsed
>>>>>
>>>>> Note that our cpumask attr already returns just the assigned cpu and
>>>>> perf-stat only tries to open on that cpu:
>>>>>
>>>>> $ strace --follow -s 1024 -e perf_event_open -- perf stat -a -e
>>>>> i915/
>>>>> interrupts/ sleep 1
>>>>>
>>>>> [pid 55777] perf_event_open({type=0x24 /* PERF_TYPE_??? */,
>>>>> size=0x88 /*
>>>>> PERF_ATTR_SIZE_??? */, config=0x100002, sample_period=0,
>>>>> sample_type=PERF_SAMPLE_IDENTIFIER,
>>>>> read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|
>>>>> PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, precise_ip=0 /*
>>>>> arbitrary skid */, exclude_guest=1, ...}, -1, 0, -1,
>>>>> PERF_FLAG_FD_CLOEXEC) = 3
>>>>>
>>>>
>>>> I see. The behavior is not changed with the patch. It should be just
>>>> the
>>>
>>> humn... the behavior doesn't change when using perf because perf will
>>> read the cpumask and use it accordingly. However apparently now it's not
>>> working anymore to reject calls to perf_event_open() that have a cpu
>>> that doesn't match the cpumask.
>>>
>>> Just like before I have this output:
>>>
>>> $ sudo cat /sys/devices/i915/cpumask 0
>>>
>>> However if perf_event_open() is called with cpu == 1, it succeeds.
>>> Example:
>>>
>>> attr_init(&attr);
>>> perf_event_open(&attr, -1, 1, -1, 0);
>>>
>>> I was expecting it to fail and set errno to ENODEV, but that is not the
>>> case. For this particular system I'm seeing these values in
>>> perf_try_init_event():
>>>
>>> event->cpu == 1
>>> cpumask=0-19
>>> pmu_cpumask=0
>>>
>>> Re-reading this: it will accept any (online) cpu of the system. Same
>>> behavior occurs with other scopes: any cpu of that scope is accepted and
>>> event->cpu will still keep what the user passed in (rather than the
>>> calculated by perf_try_init_event(). Is that expected?
>>
>> Yes, for a system-wide event, it can be read from any CPU. The CPU mask
>> in the sysfs only tells the perf tool that only 1 CPU is required to get
>> system-wide information. It doesn't have to be the advised CPU. It can
>> be any CPU in the scope.
>>
>> https://lore.kernel.org/all/20240802151643.1691631-3-
>> kan.liang@linux.intel.com/
>
> I was asking about this during review - will it also allow for group
> reads to mix cpus and if yes are there any downsides etc?
>
The original idea was from the below patch. It's to avoid the IPIs when
reading an event from a CPU that is not advertised but in the same scope.
https://lore.kernel.org/all/tip-d6a2f9035bfc27d0e9d78b13635dda9fb017ac01@git.kernel.org/
Usually, a group is read together from the same CPU. But, in theory, it
doesn't prevent the read requests from different CPUs. If so, for a
system-wide event group like here, it reads the counters from the CPU
sending the request separately. Some members may be read from CPU A.
Other members may be read from CPU B. The only downside I can imagine is
that the counter value could be a little bit off, since you cannot
guarantee the read from different CPUs occur at the exact same time, right?
Thanks,
Kan
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2025-02-13 15:27 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-16 22:24 [PATCH] drm/i915/pmu: Drop custom hotplug code Lucas De Marchi
2025-01-17 3:01 ` ✗ Fi.CI.SPARSE: warning for " Patchwork
2025-01-17 3:15 ` ✗ i915.CI.BAT: failure " Patchwork
2025-01-20 15:08 ` [PATCH] " Liang, Kan
2025-01-20 22:57 ` Lucas De Marchi
2025-01-21 1:42 ` Liang, Kan
2025-01-21 14:29 ` Lucas De Marchi
2025-01-21 15:53 ` Liang, Kan
2025-01-21 16:59 ` Lucas De Marchi
2025-01-21 17:19 ` Liang, Kan
2025-02-13 4:13 ` Lucas De Marchi
2025-02-13 13:36 ` Liang, Kan
2025-02-13 14:28 ` Tvrtko Ursulin
2025-02-13 15:27 ` Liang, Kan
2025-01-25 0:46 ` Umesh Nerlige Ramappa
2025-01-25 16:32 ` Lucas De Marchi
2025-01-27 23:32 ` Umesh Nerlige Ramappa
2025-01-23 9:43 ` Tvrtko Ursulin
2025-01-23 16:27 ` Lucas De Marchi
2025-01-23 18:06 ` Tvrtko Ursulin
2025-01-23 19:26 ` Lucas De Marchi
2025-01-23 6:37 ` ✗ Fi.CI.SPARSE: warning for drm/i915/pmu: Drop custom hotplug code (rev2) Patchwork
2025-01-23 6:56 ` ✓ i915.CI.BAT: success " Patchwork
2025-01-24 0:27 ` ✗ i915.CI.Full: failure " Patchwork
2025-01-29 8:37 ` [PATCH] drm/i915/pmu: Drop custom hotplug code Tvrtko Ursulin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox