* [PATCH 0/5] Relax VF/PF version negotiation
@ 2025-06-24 20:09 Michal Wajdeczko
2025-06-24 20:09 ` [PATCH 1/5] drm/xe: Combine PF and VF device data into union Michal Wajdeczko
` (8 more replies)
0 siblings, 9 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2025-06-24 20:09 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko
It was clarified by the arch team that initial version negotiation
can be done by the VF just once, by using any available GuC/GT.
Michal Wajdeczko (5):
drm/xe: Combine PF and VF device data into union
drm/xe: Move PF and VF device types to separate headers
drm/xe/pf: Expose basic info about VFs in debugfs
drm/xe/pf: Stop requiring VF/PF version negotiation on every GT
drm/xe/vf: Store negotiated VF/PF ABI version at device level
drivers/gpu/drm/xe/Makefile | 3 +-
.../xe/tests/xe_gt_sriov_pf_service_test.c | 232 ------------------
.../drm/xe/tests/xe_sriov_pf_service_kunit.c | 227 +++++++++++++++++
drivers/gpu/drm/xe/xe_debugfs.c | 4 +
drivers/gpu/drm/xe/xe_device_types.h | 12 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c | 6 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c | 5 -
drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c | 164 +------------
drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h | 2 -
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 30 ++-
drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h | 12 -
drivers/gpu/drm/xe/xe_sriov_pf.c | 64 ++++-
drivers/gpu/drm/xe/xe_sriov_pf.h | 6 +
drivers/gpu/drm/xe/xe_sriov_pf_service.c | 213 ++++++++++++++++
drivers/gpu/drm/xe/xe_sriov_pf_service.h | 23 ++
.../gpu/drm/xe/xe_sriov_pf_service_types.h | 36 +++
drivers/gpu/drm/xe/xe_sriov_pf_types.h | 45 ++++
drivers/gpu/drm/xe/xe_sriov_types.h | 36 ---
drivers/gpu/drm/xe/xe_sriov_vf_types.h | 41 ++++
19 files changed, 696 insertions(+), 465 deletions(-)
delete mode 100644 drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c
create mode 100644 drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c
create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service.c
create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service.h
create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service_types.h
create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_types.h
create mode 100644 drivers/gpu/drm/xe/xe_sriov_vf_types.h
--
2.47.1
^ permalink raw reply [flat|nested] 15+ messages in thread* [PATCH 1/5] drm/xe: Combine PF and VF device data into union 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko @ 2025-06-24 20:09 ` Michal Wajdeczko 2025-06-25 15:04 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 2/5] drm/xe: Move PF and VF device types to separate headers Michal Wajdeczko ` (7 subsequent siblings) 8 siblings, 1 reply; 15+ messages in thread From: Michal Wajdeczko @ 2025-06-24 20:09 UTC (permalink / raw) To: intel-xe; +Cc: Michal Wajdeczko There is no need to keep PF and VF data fields fully separate since we can be only in one mode at the time. Move them into a anonymous union to save few bytes. Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> --- drivers/gpu/drm/xe/xe_device_types.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h index 6aca4b1a2824..962acd451734 100644 --- a/drivers/gpu/drm/xe/xe_device_types.h +++ b/drivers/gpu/drm/xe/xe_device_types.h @@ -406,10 +406,12 @@ struct xe_device { /** @sriov.__mode: SR-IOV mode (Don't access directly!) */ enum xe_sriov_mode __mode; - /** @sriov.pf: PF specific data */ - struct xe_device_pf pf; - /** @sriov.vf: VF specific data */ - struct xe_device_vf vf; + union { + /** @sriov.pf: PF specific data */ + struct xe_device_pf pf; + /** @sriov.vf: VF specific data */ + struct xe_device_vf vf; + }; /** @sriov.wq: workqueue used by the virtualization workers */ struct workqueue_struct *wq; -- 2.47.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/5] drm/xe: Combine PF and VF device data into union 2025-06-24 20:09 ` [PATCH 1/5] drm/xe: Combine PF and VF device data into union Michal Wajdeczko @ 2025-06-25 15:04 ` Piotr Piórkowski 0 siblings, 0 replies; 15+ messages in thread From: Piotr Piórkowski @ 2025-06-25 15:04 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on wto [2025-cze-24 22:09:19 +0200]: > There is no need to keep PF and VF data fields fully separate > since we can be only in one mode at the time. Move them into > a anonymous union to save few bytes. > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> > --- > drivers/gpu/drm/xe/xe_device_types.h | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h > index 6aca4b1a2824..962acd451734 100644 > --- a/drivers/gpu/drm/xe/xe_device_types.h > +++ b/drivers/gpu/drm/xe/xe_device_types.h > @@ -406,10 +406,12 @@ struct xe_device { > /** @sriov.__mode: SR-IOV mode (Don't access directly!) */ > enum xe_sriov_mode __mode; > > - /** @sriov.pf: PF specific data */ > - struct xe_device_pf pf; > - /** @sriov.vf: VF specific data */ > - struct xe_device_vf vf; > + union { > + /** @sriov.pf: PF specific data */ > + struct xe_device_pf pf; > + /** @sriov.vf: VF specific data */ > + struct xe_device_vf vf; > + }; > LGTM: Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> > /** @sriov.wq: workqueue used by the virtualization workers */ > struct workqueue_struct *wq; > -- > 2.47.1 > -- ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/5] drm/xe: Move PF and VF device types to separate headers 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko 2025-06-24 20:09 ` [PATCH 1/5] drm/xe: Combine PF and VF device data into union Michal Wajdeczko @ 2025-06-24 20:09 ` Michal Wajdeczko 2025-06-25 15:17 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 3/5] drm/xe/pf: Expose basic info about VFs in debugfs Michal Wajdeczko ` (6 subsequent siblings) 8 siblings, 1 reply; 15+ messages in thread From: Michal Wajdeczko @ 2025-06-24 20:09 UTC (permalink / raw) To: intel-xe; +Cc: Michal Wajdeczko We plan to add more PF and VF types and mixing them in a single file is not desired. Move them out to new dedicated files. Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> --- drivers/gpu/drm/xe/xe_device_types.h | 2 ++ drivers/gpu/drm/xe/xe_sriov_pf_types.h | 29 +++++++++++++++++++++ drivers/gpu/drm/xe/xe_sriov_types.h | 36 -------------------------- drivers/gpu/drm/xe/xe_sriov_vf_types.h | 27 +++++++++++++++++++ 4 files changed, 58 insertions(+), 36 deletions(-) create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_types.h create mode 100644 drivers/gpu/drm/xe/xe_sriov_vf_types.h diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h index 962acd451734..64a7e4c52a11 100644 --- a/drivers/gpu/drm/xe/xe_device_types.h +++ b/drivers/gpu/drm/xe/xe_device_types.h @@ -21,7 +21,9 @@ #include "xe_platform_types.h" #include "xe_pmu_types.h" #include "xe_pt_types.h" +#include "xe_sriov_pf_types.h" #include "xe_sriov_types.h" +#include "xe_sriov_vf_types.h" #include "xe_step_types.h" #include "xe_survivability_mode_types.h" #include "xe_ttm_vram_mgr_types.h" diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_types.h b/drivers/gpu/drm/xe/xe_sriov_pf_types.h new file mode 100644 index 000000000000..918dc089eb1d --- /dev/null +++ b/drivers/gpu/drm/xe/xe_sriov_pf_types.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023-2025 Intel Corporation + */ + +#ifndef _XE_SRIOV_PF_TYPES_H_ +#define _XE_SRIOV_PF_TYPES_H_ + +#include <linux/mutex.h> +#include <linux/types.h> + +/** + * struct xe_device_pf - Xe PF related data + * + * The data in this structure is valid only if driver is running in the + * @XE_SRIOV_MODE_PF mode. + */ +struct xe_device_pf { + /** @device_total_vfs: Maximum number of VFs supported by the device. */ + u16 device_total_vfs; + + /** @driver_max_vfs: Maximum number of VFs supported by the driver. */ + u16 driver_max_vfs; + + /** @master_lock: protects all VFs configurations across GTs */ + struct mutex master_lock; +}; + +#endif diff --git a/drivers/gpu/drm/xe/xe_sriov_types.h b/drivers/gpu/drm/xe/xe_sriov_types.h index ca94382a721e..1a138108d139 100644 --- a/drivers/gpu/drm/xe/xe_sriov_types.h +++ b/drivers/gpu/drm/xe/xe_sriov_types.h @@ -7,9 +7,6 @@ #define _XE_SRIOV_TYPES_H_ #include <linux/build_bug.h> -#include <linux/mutex.h> -#include <linux/types.h> -#include <linux/workqueue_types.h> /** * VFID - Virtual Function Identifier @@ -40,37 +37,4 @@ enum xe_sriov_mode { }; static_assert(XE_SRIOV_MODE_NONE); -/** - * struct xe_device_pf - Xe PF related data - * - * The data in this structure is valid only if driver is running in the - * @XE_SRIOV_MODE_PF mode. - */ -struct xe_device_pf { - /** @device_total_vfs: Maximum number of VFs supported by the device. */ - u16 device_total_vfs; - - /** @driver_max_vfs: Maximum number of VFs supported by the driver. */ - u16 driver_max_vfs; - - /** @master_lock: protects all VFs configurations across GTs */ - struct mutex master_lock; -}; - -/** - * struct xe_device_vf - Xe Virtual Function related data - * - * The data in this structure is valid only if driver is running in the - * @XE_SRIOV_MODE_VF mode. - */ -struct xe_device_vf { - /** @migration: VF Migration state data */ - struct { - /** @migration.worker: VF migration recovery worker */ - struct work_struct worker; - /** @migration.gt_flags: Per-GT request flags for VF migration recovery */ - unsigned long gt_flags; - } migration; -}; - #endif diff --git a/drivers/gpu/drm/xe/xe_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_sriov_vf_types.h new file mode 100644 index 000000000000..55c2421d4b2e --- /dev/null +++ b/drivers/gpu/drm/xe/xe_sriov_vf_types.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023-2025 Intel Corporation + */ + +#ifndef _XE_SRIOV_VF_TYPES_H_ +#define _XE_SRIOV_VF_TYPES_H_ + +#include <linux/workqueue_types.h> + +/** + * struct xe_device_vf - Xe Virtual Function related data + * + * The data in this structure is valid only if driver is running in the + * @XE_SRIOV_MODE_VF mode. + */ +struct xe_device_vf { + /** @migration: VF Migration state data */ + struct { + /** @migration.worker: VF migration recovery worker */ + struct work_struct worker; + /** @migration.gt_flags: Per-GT request flags for VF migration recovery */ + unsigned long gt_flags; + } migration; +}; + +#endif -- 2.47.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 2/5] drm/xe: Move PF and VF device types to separate headers 2025-06-24 20:09 ` [PATCH 2/5] drm/xe: Move PF and VF device types to separate headers Michal Wajdeczko @ 2025-06-25 15:17 ` Piotr Piórkowski 0 siblings, 0 replies; 15+ messages in thread From: Piotr Piórkowski @ 2025-06-25 15:17 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on wto [2025-cze-24 22:09:20 +0200]: > We plan to add more PF and VF types and mixing them in a single > file is not desired. Move them out to new dedicated files. > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> > --- > drivers/gpu/drm/xe/xe_device_types.h | 2 ++ > drivers/gpu/drm/xe/xe_sriov_pf_types.h | 29 +++++++++++++++++++++ > drivers/gpu/drm/xe/xe_sriov_types.h | 36 -------------------------- > drivers/gpu/drm/xe/xe_sriov_vf_types.h | 27 +++++++++++++++++++ > 4 files changed, 58 insertions(+), 36 deletions(-) > create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_types.h > create mode 100644 drivers/gpu/drm/xe/xe_sriov_vf_types.h > > diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h > index 962acd451734..64a7e4c52a11 100644 > --- a/drivers/gpu/drm/xe/xe_device_types.h > +++ b/drivers/gpu/drm/xe/xe_device_types.h > @@ -21,7 +21,9 @@ > #include "xe_platform_types.h" > #include "xe_pmu_types.h" > #include "xe_pt_types.h" > +#include "xe_sriov_pf_types.h" > #include "xe_sriov_types.h" > +#include "xe_sriov_vf_types.h" > #include "xe_step_types.h" > #include "xe_survivability_mode_types.h" > #include "xe_ttm_vram_mgr_types.h" > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_types.h b/drivers/gpu/drm/xe/xe_sriov_pf_types.h > new file mode 100644 > index 000000000000..918dc089eb1d > --- /dev/null > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_types.h > @@ -0,0 +1,29 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2023-2025 Intel Corporation > + */ > + > +#ifndef _XE_SRIOV_PF_TYPES_H_ > +#define _XE_SRIOV_PF_TYPES_H_ > + > +#include <linux/mutex.h> > +#include <linux/types.h> > + > +/** > + * struct xe_device_pf - Xe PF related data > + * > + * The data in this structure is valid only if driver is running in the > + * @XE_SRIOV_MODE_PF mode. > + */ > +struct xe_device_pf { > + /** @device_total_vfs: Maximum number of VFs supported by the device. */ > + u16 device_total_vfs; > + > + /** @driver_max_vfs: Maximum number of VFs supported by the driver. */ > + u16 driver_max_vfs; > + > + /** @master_lock: protects all VFs configurations across GTs */ > + struct mutex master_lock; > +}; > + > +#endif > diff --git a/drivers/gpu/drm/xe/xe_sriov_types.h b/drivers/gpu/drm/xe/xe_sriov_types.h > index ca94382a721e..1a138108d139 100644 > --- a/drivers/gpu/drm/xe/xe_sriov_types.h > +++ b/drivers/gpu/drm/xe/xe_sriov_types.h > @@ -7,9 +7,6 @@ > #define _XE_SRIOV_TYPES_H_ > > #include <linux/build_bug.h> > -#include <linux/mutex.h> > -#include <linux/types.h> > -#include <linux/workqueue_types.h> > > /** > * VFID - Virtual Function Identifier > @@ -40,37 +37,4 @@ enum xe_sriov_mode { > }; > static_assert(XE_SRIOV_MODE_NONE); > > -/** > - * struct xe_device_pf - Xe PF related data > - * > - * The data in this structure is valid only if driver is running in the > - * @XE_SRIOV_MODE_PF mode. > - */ > -struct xe_device_pf { > - /** @device_total_vfs: Maximum number of VFs supported by the device. */ > - u16 device_total_vfs; > - > - /** @driver_max_vfs: Maximum number of VFs supported by the driver. */ > - u16 driver_max_vfs; > - > - /** @master_lock: protects all VFs configurations across GTs */ > - struct mutex master_lock; > -}; > - > -/** > - * struct xe_device_vf - Xe Virtual Function related data > - * > - * The data in this structure is valid only if driver is running in the > - * @XE_SRIOV_MODE_VF mode. > - */ > -struct xe_device_vf { > - /** @migration: VF Migration state data */ > - struct { > - /** @migration.worker: VF migration recovery worker */ > - struct work_struct worker; > - /** @migration.gt_flags: Per-GT request flags for VF migration recovery */ > - unsigned long gt_flags; > - } migration; > -}; > - > #endif > diff --git a/drivers/gpu/drm/xe/xe_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_sriov_vf_types.h > new file mode 100644 > index 000000000000..55c2421d4b2e > --- /dev/null > +++ b/drivers/gpu/drm/xe/xe_sriov_vf_types.h > @@ -0,0 +1,27 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2023-2025 Intel Corporation > + */ > + > +#ifndef _XE_SRIOV_VF_TYPES_H_ > +#define _XE_SRIOV_VF_TYPES_H_ > + > +#include <linux/workqueue_types.h> > + > +/** > + * struct xe_device_vf - Xe Virtual Function related data > + * > + * The data in this structure is valid only if driver is running in the > + * @XE_SRIOV_MODE_VF mode. > + */ > +struct xe_device_vf { > + /** @migration: VF Migration state data */ > + struct { > + /** @migration.worker: VF migration recovery worker */ > + struct work_struct worker; > + /** @migration.gt_flags: Per-GT request flags for VF migration recovery */ > + unsigned long gt_flags; > + } migration; > +}; > + > +#endif LGTM: Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> > -- > 2.47.1 > -- ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/5] drm/xe/pf: Expose basic info about VFs in debugfs 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko 2025-06-24 20:09 ` [PATCH 1/5] drm/xe: Combine PF and VF device data into union Michal Wajdeczko 2025-06-24 20:09 ` [PATCH 2/5] drm/xe: Move PF and VF device types to separate headers Michal Wajdeczko @ 2025-06-24 20:09 ` Michal Wajdeczko 2025-06-25 16:07 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 4/5] drm/xe/pf: Stop requiring VF/PF version negotiation on every GT Michal Wajdeczko ` (5 subsequent siblings) 8 siblings, 1 reply; 15+ messages in thread From: Michal Wajdeczko @ 2025-06-24 20:09 UTC (permalink / raw) To: intel-xe; +Cc: Michal Wajdeczko We already have function to print summary about VFs, but we missed to add debugfs attribute to make it visible. Do it now. Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> --- drivers/gpu/drm/xe/xe_debugfs.c | 4 +++ drivers/gpu/drm/xe/xe_sriov_pf.c | 46 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/xe/xe_sriov_pf.h | 6 +++++ 3 files changed, 56 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c index d83cd6ed3fa8..24a5f99ed52f 100644 --- a/drivers/gpu/drm/xe/xe_debugfs.c +++ b/drivers/gpu/drm/xe/xe_debugfs.c @@ -20,6 +20,7 @@ #include "xe_pm.h" #include "xe_pxp_debugfs.h" #include "xe_sriov.h" +#include "xe_sriov_pf.h" #include "xe_step.h" #ifdef CONFIG_DRM_XE_DEBUG @@ -273,4 +274,7 @@ void xe_debugfs_register(struct xe_device *xe) xe_pxp_debugfs_register(xe->pxp); fault_create_debugfs_attr("fail_gt_reset", root, >_reset_failure); + + if (IS_SRIOV_PF(xe)) + xe_sriov_pf_debugfs_register(xe, root); } diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c b/drivers/gpu/drm/xe/xe_sriov_pf.c index 0f721ae17b26..32788b83b8bd 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf.c +++ b/drivers/gpu/drm/xe/xe_sriov_pf.c @@ -3,6 +3,8 @@ * Copyright © 2023-2024 Intel Corporation */ +#include <linux/debugfs.h> +#include <drm/drm_debugfs.h> #include <drm/drm_managed.h> #include "xe_assert.h" @@ -102,3 +104,47 @@ void xe_sriov_pf_print_vfs_summary(struct xe_device *xe, struct drm_printer *p) drm_printf(p, "supported: %u\n", xe->sriov.pf.driver_max_vfs); drm_printf(p, "enabled: %u\n", pci_num_vf(pdev)); } + +static int simple_show(struct seq_file *m, void *data) +{ + struct drm_printer p = drm_seq_file_printer(m); + struct drm_info_node *node = m->private; + struct dentry *parent = node->dent->d_parent; + struct xe_device *xe = parent->d_inode->i_private; + void (*print)(struct xe_device *, struct drm_printer *) = node->info_ent->data; + + if (WARN_ON(!print)) + return -EINVAL; + + print(xe, &p); + return 0; +} + +static const struct drm_info_list debugfs_list[] = { + { .name = "vfs", .show = simple_show, .data = xe_sriov_pf_print_vfs_summary }, +}; + +/** + * xe_sriov_pf_debugfs_register - Register PF debugfs attributes. + * @xe: the &xe_device + * @root: the root &dentry + * + * Prepare debugfs attributes exposed by the PF. + */ +void xe_sriov_pf_debugfs_register(struct xe_device *xe, struct dentry *root) +{ + struct drm_minor *minor = xe->drm.primary; + struct dentry *parent; + + /* + * /sys/kernel/debug/dri/0/ + * ├── pf + * │ ├── ... + */ + parent = debugfs_create_dir("pf", root); + if (IS_ERR(parent)) + return; + parent->d_inode->i_private = xe; + + drm_debugfs_create_files(debugfs_list, ARRAY_SIZE(debugfs_list), parent, minor); +} diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.h b/drivers/gpu/drm/xe/xe_sriov_pf.h index d1220e70e1c0..c392c3fcf085 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf.h +++ b/drivers/gpu/drm/xe/xe_sriov_pf.h @@ -8,12 +8,14 @@ #include <linux/types.h> +struct dentry; struct drm_printer; struct xe_device; #ifdef CONFIG_PCI_IOV bool xe_sriov_pf_readiness(struct xe_device *xe); int xe_sriov_pf_init_early(struct xe_device *xe); +void xe_sriov_pf_debugfs_register(struct xe_device *xe, struct dentry *root); void xe_sriov_pf_print_vfs_summary(struct xe_device *xe, struct drm_printer *p); #else static inline bool xe_sriov_pf_readiness(struct xe_device *xe) @@ -25,6 +27,10 @@ static inline int xe_sriov_pf_init_early(struct xe_device *xe) { return 0; } + +static inline void xe_sriov_pf_debugfs_register(struct xe_device *xe, struct dentry *root) +{ +} #endif #endif -- 2.47.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 3/5] drm/xe/pf: Expose basic info about VFs in debugfs 2025-06-24 20:09 ` [PATCH 3/5] drm/xe/pf: Expose basic info about VFs in debugfs Michal Wajdeczko @ 2025-06-25 16:07 ` Piotr Piórkowski 0 siblings, 0 replies; 15+ messages in thread From: Piotr Piórkowski @ 2025-06-25 16:07 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on wto [2025-cze-24 22:09:21 +0200]: > We already have function to print summary about VFs, but we missed > to add debugfs attribute to make it visible. Do it now. > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> > --- > drivers/gpu/drm/xe/xe_debugfs.c | 4 +++ > drivers/gpu/drm/xe/xe_sriov_pf.c | 46 ++++++++++++++++++++++++++++++++ > drivers/gpu/drm/xe/xe_sriov_pf.h | 6 +++++ > 3 files changed, 56 insertions(+) > > diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c > index d83cd6ed3fa8..24a5f99ed52f 100644 > --- a/drivers/gpu/drm/xe/xe_debugfs.c > +++ b/drivers/gpu/drm/xe/xe_debugfs.c > @@ -20,6 +20,7 @@ > #include "xe_pm.h" > #include "xe_pxp_debugfs.h" > #include "xe_sriov.h" > +#include "xe_sriov_pf.h" > #include "xe_step.h" > > #ifdef CONFIG_DRM_XE_DEBUG > @@ -273,4 +274,7 @@ void xe_debugfs_register(struct xe_device *xe) > xe_pxp_debugfs_register(xe->pxp); > > fault_create_debugfs_attr("fail_gt_reset", root, >_reset_failure); > + > + if (IS_SRIOV_PF(xe)) > + xe_sriov_pf_debugfs_register(xe, root); > } > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c b/drivers/gpu/drm/xe/xe_sriov_pf.c > index 0f721ae17b26..32788b83b8bd 100644 > --- a/drivers/gpu/drm/xe/xe_sriov_pf.c > +++ b/drivers/gpu/drm/xe/xe_sriov_pf.c > @@ -3,6 +3,8 @@ > * Copyright © 2023-2024 Intel Corporation > */ > > +#include <linux/debugfs.h> > +#include <drm/drm_debugfs.h> > #include <drm/drm_managed.h> > > #include "xe_assert.h" > @@ -102,3 +104,47 @@ void xe_sriov_pf_print_vfs_summary(struct xe_device *xe, struct drm_printer *p) > drm_printf(p, "supported: %u\n", xe->sriov.pf.driver_max_vfs); > drm_printf(p, "enabled: %u\n", pci_num_vf(pdev)); > } > + > +static int simple_show(struct seq_file *m, void *data) > +{ > + struct drm_printer p = drm_seq_file_printer(m); > + struct drm_info_node *node = m->private; > + struct dentry *parent = node->dent->d_parent; > + struct xe_device *xe = parent->d_inode->i_private; > + void (*print)(struct xe_device *, struct drm_printer *) = node->info_ent->data; > + > + if (WARN_ON(!print)) > + return -EINVAL; NIT: In my opinion, checking for null pointer dereference is unnecessary, and returning the error to userspace can be omitted in this case. > + > + print(xe, &p); > + return 0; > +} > + > +static const struct drm_info_list debugfs_list[] = { > + { .name = "vfs", .show = simple_show, .data = xe_sriov_pf_print_vfs_summary }, > +}; > + > +/** > + * xe_sriov_pf_debugfs_register - Register PF debugfs attributes. > + * @xe: the &xe_device > + * @root: the root &dentry > + * > + * Prepare debugfs attributes exposed by the PF. > + */ > +void xe_sriov_pf_debugfs_register(struct xe_device *xe, struct dentry *root) > +{ > + struct drm_minor *minor = xe->drm.primary; > + struct dentry *parent; > + > + /* > + * /sys/kernel/debug/dri/0/ > + * ├── pf > + * │ ├── ... > + */ > + parent = debugfs_create_dir("pf", root); > + if (IS_ERR(parent)) > + return; > + parent->d_inode->i_private = xe; > + > + drm_debugfs_create_files(debugfs_list, ARRAY_SIZE(debugfs_list), parent, minor); > +} > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.h b/drivers/gpu/drm/xe/xe_sriov_pf.h > index d1220e70e1c0..c392c3fcf085 100644 > --- a/drivers/gpu/drm/xe/xe_sriov_pf.h > +++ b/drivers/gpu/drm/xe/xe_sriov_pf.h > @@ -8,12 +8,14 @@ > > #include <linux/types.h> > > +struct dentry; > struct drm_printer; > struct xe_device; > > #ifdef CONFIG_PCI_IOV > bool xe_sriov_pf_readiness(struct xe_device *xe); > int xe_sriov_pf_init_early(struct xe_device *xe); > +void xe_sriov_pf_debugfs_register(struct xe_device *xe, struct dentry *root); > void xe_sriov_pf_print_vfs_summary(struct xe_device *xe, struct drm_printer *p); > #else > static inline bool xe_sriov_pf_readiness(struct xe_device *xe) > @@ -25,6 +27,10 @@ static inline int xe_sriov_pf_init_early(struct xe_device *xe) > { > return 0; > } > + > +static inline void xe_sriov_pf_debugfs_register(struct xe_device *xe, struct dentry *root) > +{ > +} One minor comment above. Besides that, LGTM Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> > #endif > > #endif > -- > 2.47.1 > -- ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 4/5] drm/xe/pf: Stop requiring VF/PF version negotiation on every GT 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko ` (2 preceding siblings ...) 2025-06-24 20:09 ` [PATCH 3/5] drm/xe/pf: Expose basic info about VFs in debugfs Michal Wajdeczko @ 2025-06-24 20:09 ` Michal Wajdeczko 2025-06-26 7:42 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 5/5] drm/xe/vf: Store negotiated VF/PF ABI version at device level Michal Wajdeczko ` (4 subsequent siblings) 8 siblings, 1 reply; 15+ messages in thread From: Michal Wajdeczko @ 2025-06-24 20:09 UTC (permalink / raw) To: intel-xe; +Cc: Michal Wajdeczko While some VF/PF relay actions must be handled on the GT level, like query for runtime registers, it was clarified by the arch team that initial version negotiation can be done by the VF just once, by using any available GuC/GT. Move handling of the VF/PF ABI version negotiation on the PF side from the GT level functions to the device level functions. Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> --- drivers/gpu/drm/xe/Makefile | 3 +- .../xe/tests/xe_gt_sriov_pf_service_test.c | 232 ------------------ .../drm/xe/tests/xe_sriov_pf_service_kunit.c | 227 +++++++++++++++++ drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c | 6 +- drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c | 5 - drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c | 164 +------------ drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h | 2 - drivers/gpu/drm/xe/xe_sriov_pf.c | 18 +- drivers/gpu/drm/xe/xe_sriov_pf_service.c | 213 ++++++++++++++++ drivers/gpu/drm/xe/xe_sriov_pf_service.h | 23 ++ .../gpu/drm/xe/xe_sriov_pf_service_types.h | 36 +++ drivers/gpu/drm/xe/xe_sriov_pf_types.h | 16 ++ 12 files changed, 545 insertions(+), 400 deletions(-) delete mode 100644 drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c create mode 100644 drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service.c create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service.h create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service_types.h diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile index eee6bac01a00..9634605a4590 100644 --- a/drivers/gpu/drm/xe/Makefile +++ b/drivers/gpu/drm/xe/Makefile @@ -155,7 +155,8 @@ xe-$(CONFIG_PCI_IOV) += \ xe_lmtt_2l.o \ xe_lmtt_ml.o \ xe_pci_sriov.o \ - xe_sriov_pf.o + xe_sriov_pf.o \ + xe_sriov_pf_service.o # include helpers for tests even when XE is built-in ifdef CONFIG_DRM_XE_KUNIT_TEST diff --git a/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c b/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c deleted file mode 100644 index b683585db852..000000000000 --- a/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c +++ /dev/null @@ -1,232 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 AND MIT -/* - * Copyright © 2024 Intel Corporation - */ - -#include <kunit/test.h> - -#include "xe_device.h" -#include "xe_kunit_helpers.h" -#include "xe_pci_test.h" - -static int pf_service_test_init(struct kunit *test) -{ - struct xe_pci_fake_data fake = { - .sriov_mode = XE_SRIOV_MODE_PF, - .platform = XE_TIGERLAKE, /* some random platform */ - .subplatform = XE_SUBPLATFORM_NONE, - }; - struct xe_device *xe; - struct xe_gt *gt; - - test->priv = &fake; - xe_kunit_helper_xe_device_test_init(test); - - xe = test->priv; - KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0); - - gt = xe_device_get_gt(xe, 0); - pf_init_versions(gt); - - /* - * sanity check: - * - all supported platforms VF/PF ABI versions must be defined - * - base version can't be newer than latest - */ - KUNIT_ASSERT_NE(test, 0, gt->sriov.pf.service.version.base.major); - KUNIT_ASSERT_NE(test, 0, gt->sriov.pf.service.version.latest.major); - KUNIT_ASSERT_LE(test, gt->sriov.pf.service.version.base.major, - gt->sriov.pf.service.version.latest.major); - if (gt->sriov.pf.service.version.base.major == gt->sriov.pf.service.version.latest.major) - KUNIT_ASSERT_LE(test, gt->sriov.pf.service.version.base.minor, - gt->sriov.pf.service.version.latest.minor); - - test->priv = gt; - return 0; -} - -static void pf_negotiate_any(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, VF2PF_HANDSHAKE_MAJOR_ANY, - VF2PF_HANDSHAKE_MINOR_ANY, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); -} - -static void pf_negotiate_base_match(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.base.major, - gt->sriov.pf.service.version.base.minor, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.base.major); - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.base.minor); -} - -static void pf_negotiate_base_newer(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.base.major, - gt->sriov.pf.service.version.base.minor + 1, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.base.major); - KUNIT_ASSERT_GE(test, minor, gt->sriov.pf.service.version.base.minor); - if (gt->sriov.pf.service.version.base.major == gt->sriov.pf.service.version.latest.major) - KUNIT_ASSERT_LE(test, minor, gt->sriov.pf.service.version.latest.minor); - else - KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); -} - -static void pf_negotiate_base_next(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.base.major + 1, 0, - &major, &minor)); - KUNIT_ASSERT_GE(test, major, gt->sriov.pf.service.version.base.major); - KUNIT_ASSERT_LE(test, major, gt->sriov.pf.service.version.latest.major); - if (major == gt->sriov.pf.service.version.latest.major) - KUNIT_ASSERT_LE(test, minor, gt->sriov.pf.service.version.latest.minor); - else - KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); -} - -static void pf_negotiate_base_older(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - if (!gt->sriov.pf.service.version.base.minor) - kunit_skip(test, "no older minor\n"); - - KUNIT_ASSERT_NE(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.base.major, - gt->sriov.pf.service.version.base.minor - 1, - &major, &minor)); -} - -static void pf_negotiate_base_prev(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_NE(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.base.major - 1, 1, - &major, &minor)); -} - -static void pf_negotiate_latest_match(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.latest.major, - gt->sriov.pf.service.version.latest.minor, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); -} - -static void pf_negotiate_latest_newer(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.latest.major, - gt->sriov.pf.service.version.latest.minor + 1, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); -} - -static void pf_negotiate_latest_next(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.latest.major + 1, 0, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); -} - -static void pf_negotiate_latest_older(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - if (!gt->sriov.pf.service.version.latest.minor) - kunit_skip(test, "no older minor\n"); - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.latest.major, - gt->sriov.pf.service.version.latest.minor - 1, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor - 1); -} - -static void pf_negotiate_latest_prev(struct kunit *test) -{ - struct xe_gt *gt = test->priv; - u32 major, minor; - - if (gt->sriov.pf.service.version.base.major == gt->sriov.pf.service.version.latest.major) - kunit_skip(test, "no prev major"); - - KUNIT_ASSERT_EQ(test, 0, - pf_negotiate_version(gt, - gt->sriov.pf.service.version.latest.major - 1, - gt->sriov.pf.service.version.base.minor + 1, - &major, &minor)); - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major - 1); - KUNIT_ASSERT_GE(test, major, gt->sriov.pf.service.version.base.major); -} - -static struct kunit_case pf_service_test_cases[] = { - KUNIT_CASE(pf_negotiate_any), - KUNIT_CASE(pf_negotiate_base_match), - KUNIT_CASE(pf_negotiate_base_newer), - KUNIT_CASE(pf_negotiate_base_next), - KUNIT_CASE(pf_negotiate_base_older), - KUNIT_CASE(pf_negotiate_base_prev), - KUNIT_CASE(pf_negotiate_latest_match), - KUNIT_CASE(pf_negotiate_latest_newer), - KUNIT_CASE(pf_negotiate_latest_next), - KUNIT_CASE(pf_negotiate_latest_older), - KUNIT_CASE(pf_negotiate_latest_prev), - {} -}; - -static struct kunit_suite pf_service_suite = { - .name = "pf_service", - .test_cases = pf_service_test_cases, - .init = pf_service_test_init, -}; - -kunit_test_suite(pf_service_suite); diff --git a/drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c b/drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c new file mode 100644 index 000000000000..ba95e29b597d --- /dev/null +++ b/drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c @@ -0,0 +1,227 @@ +// SPDX-License-Identifier: GPL-2.0 AND MIT +/* + * Copyright © 2024-2025 Intel Corporation + */ + +#include <kunit/test.h> + +#include "xe_device.h" +#include "xe_kunit_helpers.h" +#include "xe_pci_test.h" + +static int pf_service_test_init(struct kunit *test) +{ + struct xe_pci_fake_data fake = { + .sriov_mode = XE_SRIOV_MODE_PF, + .platform = XE_TIGERLAKE, /* some random platform */ + .subplatform = XE_SUBPLATFORM_NONE, + }; + struct xe_device *xe; + + test->priv = &fake; + xe_kunit_helper_xe_device_test_init(test); + + xe = test->priv; + KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0); + + xe_sriov_pf_service_init(xe); + /* + * sanity check: + * - all supported platforms VF/PF ABI versions must be defined + * - base version can't be newer than latest + */ + KUNIT_ASSERT_NE(test, 0, xe->sriov.pf.service.version.base.major); + KUNIT_ASSERT_NE(test, 0, xe->sriov.pf.service.version.latest.major); + KUNIT_ASSERT_LE(test, xe->sriov.pf.service.version.base.major, + xe->sriov.pf.service.version.latest.major); + if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) + KUNIT_ASSERT_LE(test, xe->sriov.pf.service.version.base.minor, + xe->sriov.pf.service.version.latest.minor); + return 0; +} + +static void pf_negotiate_any(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, VF2PF_HANDSHAKE_MAJOR_ANY, + VF2PF_HANDSHAKE_MINOR_ANY, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); +} + +static void pf_negotiate_base_match(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.base.major, + xe->sriov.pf.service.version.base.minor, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.base.major); + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.base.minor); +} + +static void pf_negotiate_base_newer(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.base.major, + xe->sriov.pf.service.version.base.minor + 1, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.base.major); + KUNIT_ASSERT_GE(test, minor, xe->sriov.pf.service.version.base.minor); + if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) + KUNIT_ASSERT_LE(test, minor, xe->sriov.pf.service.version.latest.minor); + else + KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); +} + +static void pf_negotiate_base_next(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.base.major + 1, 0, + &major, &minor)); + KUNIT_ASSERT_GE(test, major, xe->sriov.pf.service.version.base.major); + KUNIT_ASSERT_LE(test, major, xe->sriov.pf.service.version.latest.major); + if (major == xe->sriov.pf.service.version.latest.major) + KUNIT_ASSERT_LE(test, minor, xe->sriov.pf.service.version.latest.minor); + else + KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); +} + +static void pf_negotiate_base_older(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + if (!xe->sriov.pf.service.version.base.minor) + kunit_skip(test, "no older minor\n"); + + KUNIT_ASSERT_NE(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.base.major, + xe->sriov.pf.service.version.base.minor - 1, + &major, &minor)); +} + +static void pf_negotiate_base_prev(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_NE(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.base.major - 1, 1, + &major, &minor)); +} + +static void pf_negotiate_latest_match(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.latest.major, + xe->sriov.pf.service.version.latest.minor, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); +} + +static void pf_negotiate_latest_newer(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.latest.major, + xe->sriov.pf.service.version.latest.minor + 1, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); +} + +static void pf_negotiate_latest_next(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.latest.major + 1, 0, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); +} + +static void pf_negotiate_latest_older(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + if (!xe->sriov.pf.service.version.latest.minor) + kunit_skip(test, "no older minor\n"); + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.latest.major, + xe->sriov.pf.service.version.latest.minor - 1, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor - 1); +} + +static void pf_negotiate_latest_prev(struct kunit *test) +{ + struct xe_device *xe = test->priv; + u32 major, minor; + + if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) + kunit_skip(test, "no prev major"); + + KUNIT_ASSERT_EQ(test, 0, + pf_negotiate_version(xe, + xe->sriov.pf.service.version.latest.major - 1, + xe->sriov.pf.service.version.base.minor + 1, + &major, &minor)); + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major - 1); + KUNIT_ASSERT_GE(test, major, xe->sriov.pf.service.version.base.major); +} + +static struct kunit_case pf_service_test_cases[] = { + KUNIT_CASE(pf_negotiate_any), + KUNIT_CASE(pf_negotiate_base_match), + KUNIT_CASE(pf_negotiate_base_newer), + KUNIT_CASE(pf_negotiate_base_next), + KUNIT_CASE(pf_negotiate_base_older), + KUNIT_CASE(pf_negotiate_base_prev), + KUNIT_CASE(pf_negotiate_latest_match), + KUNIT_CASE(pf_negotiate_latest_newer), + KUNIT_CASE(pf_negotiate_latest_next), + KUNIT_CASE(pf_negotiate_latest_older), + KUNIT_CASE(pf_negotiate_latest_prev), + {} +}; + +static struct kunit_suite pf_service_suite = { + .name = "pf_service", + .test_cases = pf_service_test_cases, + .init = pf_service_test_init, +}; + +kunit_test_suite(pf_service_suite); diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c index 1f50aec3a059..bceebffe8492 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c @@ -15,10 +15,10 @@ #include "xe_gt_sriov_pf_helpers.h" #include "xe_gt_sriov_pf_migration.h" #include "xe_gt_sriov_pf_monitor.h" -#include "xe_gt_sriov_pf_service.h" #include "xe_gt_sriov_printk.h" #include "xe_guc_ct.h" #include "xe_sriov.h" +#include "xe_sriov_pf_service.h" static const char *control_cmd_to_string(u32 cmd) { @@ -1064,7 +1064,9 @@ static bool pf_exit_vf_flr_reset_data(struct xe_gt *gt, unsigned int vfid) if (!pf_exit_vf_state(gt, vfid, XE_GT_SRIOV_STATE_FLR_RESET_DATA)) return false; - xe_gt_sriov_pf_service_reset(gt, vfid); + if (!xe_gt_is_media_type(gt) && !gt->tile->id) + xe_sriov_pf_service_reset_vf(gt_to_xe(gt), vfid); + xe_gt_sriov_pf_monitor_flr(gt, vfid); pf_enter_vf_flr_reset_mmio(gt, vfid); diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c index 13970d5a2867..af6a713ab5b2 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c @@ -77,11 +77,6 @@ static const struct drm_info_list pf_info[] = { .show = xe_gt_debugfs_simple_show, .data = xe_gt_sriov_pf_service_print_runtime, }, - { - "negotiated_versions", - .show = xe_gt_debugfs_simple_show, - .data = xe_gt_sriov_pf_service_print_version, - }, { "adverse_events", .show = xe_gt_debugfs_simple_show, diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c index 821cfcc34e6b..98b9e796ac89 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c @@ -19,91 +19,7 @@ #include "xe_gt_sriov_pf_service_types.h" #include "xe_guc_ct.h" #include "xe_guc_hxg_helpers.h" - -static void pf_init_versions(struct xe_gt *gt) -{ - BUILD_BUG_ON(!GUC_RELAY_VERSION_BASE_MAJOR && !GUC_RELAY_VERSION_BASE_MINOR); - BUILD_BUG_ON(GUC_RELAY_VERSION_BASE_MAJOR > GUC_RELAY_VERSION_LATEST_MAJOR); - - /* base versions may differ between platforms */ - gt->sriov.pf.service.version.base.major = GUC_RELAY_VERSION_BASE_MAJOR; - gt->sriov.pf.service.version.base.minor = GUC_RELAY_VERSION_BASE_MINOR; - - /* latest version is same for all platforms */ - gt->sriov.pf.service.version.latest.major = GUC_RELAY_VERSION_LATEST_MAJOR; - gt->sriov.pf.service.version.latest.minor = GUC_RELAY_VERSION_LATEST_MINOR; -} - -/* Return: 0 on success or a negative error code on failure. */ -static int pf_negotiate_version(struct xe_gt *gt, - u32 wanted_major, u32 wanted_minor, - u32 *major, u32 *minor) -{ - struct xe_gt_sriov_pf_service_version base = gt->sriov.pf.service.version.base; - struct xe_gt_sriov_pf_service_version latest = gt->sriov.pf.service.version.latest; - - xe_gt_assert(gt, base.major); - xe_gt_assert(gt, base.major <= latest.major); - xe_gt_assert(gt, (base.major < latest.major) || (base.minor <= latest.minor)); - - /* VF doesn't care - return our latest */ - if (wanted_major == VF2PF_HANDSHAKE_MAJOR_ANY && - wanted_minor == VF2PF_HANDSHAKE_MINOR_ANY) { - *major = latest.major; - *minor = latest.minor; - return 0; - } - - /* VF wants newer than our - return our latest */ - if (wanted_major > latest.major) { - *major = latest.major; - *minor = latest.minor; - return 0; - } - - /* VF wants older than min required - reject */ - if (wanted_major < base.major || - (wanted_major == base.major && wanted_minor < base.minor)) { - return -EPERM; - } - - /* previous major - return wanted, as we should still support it */ - if (wanted_major < latest.major) { - /* XXX: we are not prepared for multi-versions yet */ - xe_gt_assert(gt, base.major == latest.major); - return -ENOPKG; - } - - /* same major - return common minor */ - *major = wanted_major; - *minor = min_t(u32, latest.minor, wanted_minor); - return 0; -} - -static void pf_connect(struct xe_gt *gt, u32 vfid, u32 major, u32 minor) -{ - xe_gt_sriov_pf_assert_vfid(gt, vfid); - xe_gt_assert(gt, major || minor); - - gt->sriov.pf.vfs[vfid].version.major = major; - gt->sriov.pf.vfs[vfid].version.minor = minor; -} - -static void pf_disconnect(struct xe_gt *gt, u32 vfid) -{ - xe_gt_sriov_pf_assert_vfid(gt, vfid); - - gt->sriov.pf.vfs[vfid].version.major = 0; - gt->sriov.pf.vfs[vfid].version.minor = 0; -} - -static bool pf_is_negotiated(struct xe_gt *gt, u32 vfid, u32 major, u32 minor) -{ - xe_gt_sriov_pf_assert_vfid(gt, vfid); - - return major == gt->sriov.pf.vfs[vfid].version.major && - minor <= gt->sriov.pf.vfs[vfid].version.minor; -} +#include "xe_sriov_pf_service.h" static const struct xe_reg tgl_runtime_regs[] = { RPM_CONFIG0, /* _MMIO(0x0d00) */ @@ -285,8 +201,6 @@ int xe_gt_sriov_pf_service_init(struct xe_gt *gt) { int err; - pf_init_versions(gt); - err = pf_alloc_runtime_info(gt); if (unlikely(err)) goto failed; @@ -311,47 +225,6 @@ void xe_gt_sriov_pf_service_update(struct xe_gt *gt) pf_prepare_runtime_info(gt); } -/** - * xe_gt_sriov_pf_service_reset - Reset a connection with the VF. - * @gt: the &xe_gt - * @vfid: the VF identifier - * - * Reset a VF driver negotiated VF/PF ABI version. - * After that point, the VF driver will have to perform new version handshake - * to continue use of the PF services again. - * - * This function can only be called on PF. - */ -void xe_gt_sriov_pf_service_reset(struct xe_gt *gt, unsigned int vfid) -{ - pf_disconnect(gt, vfid); -} - -/* Return: 0 on success or a negative error code on failure. */ -static int pf_process_handshake(struct xe_gt *gt, u32 vfid, - u32 wanted_major, u32 wanted_minor, - u32 *major, u32 *minor) -{ - int err; - - xe_gt_sriov_dbg_verbose(gt, "VF%u wants ABI version %u.%u\n", - vfid, wanted_major, wanted_minor); - - err = pf_negotiate_version(gt, wanted_major, wanted_minor, major, minor); - - if (err < 0) { - xe_gt_sriov_notice(gt, "VF%u failed to negotiate ABI %u.%u (%pe)\n", - vfid, wanted_major, wanted_minor, ERR_PTR(err)); - pf_disconnect(gt, vfid); - } else { - xe_gt_sriov_dbg(gt, "VF%u negotiated ABI version %u.%u\n", - vfid, *major, *minor); - pf_connect(gt, vfid, *major, *minor); - } - - return 0; -} - /* Return: length of the response message or a negative error code on failure. */ static int pf_process_handshake_msg(struct xe_gt *gt, u32 origin, const u32 *request, u32 len, u32 *response, u32 size) @@ -371,7 +244,8 @@ static int pf_process_handshake_msg(struct xe_gt *gt, u32 origin, wanted_major = FIELD_GET(VF2PF_HANDSHAKE_REQUEST_MSG_1_MAJOR, request[1]); wanted_minor = FIELD_GET(VF2PF_HANDSHAKE_REQUEST_MSG_1_MINOR, request[1]); - err = pf_process_handshake(gt, origin, wanted_major, wanted_minor, &major, &minor); + err = xe_sriov_pf_service_handshake_vf(gt_to_xe(gt), origin, wanted_major, wanted_minor, + &major, &minor); if (err < 0) return err; @@ -430,8 +304,10 @@ static int pf_process_runtime_query_msg(struct xe_gt *gt, u32 origin, u32 remaining = 0; int ret; - if (!pf_is_negotiated(gt, origin, 1, 0)) + /* this action is available from ABI 1.0 */ + if (!xe_sriov_pf_service_is_negotiated(gt_to_xe(gt), origin, 1, 0)) return -EACCES; + if (unlikely(msg_len > VF2PF_QUERY_RUNTIME_REQUEST_MSG_LEN)) return -EMSGSIZE; if (unlikely(msg_len < VF2PF_QUERY_RUNTIME_REQUEST_MSG_LEN)) @@ -529,32 +405,6 @@ int xe_gt_sriov_pf_service_print_runtime(struct xe_gt *gt, struct drm_printer *p return 0; } -/** - * xe_gt_sriov_pf_service_print_version - Print ABI versions negotiated with VFs. - * @gt: the &xe_gt - * @p: the &drm_printer - * - * This function is for PF use only. - */ -int xe_gt_sriov_pf_service_print_version(struct xe_gt *gt, struct drm_printer *p) -{ - struct xe_device *xe = gt_to_xe(gt); - unsigned int n, total_vfs = xe_sriov_pf_get_totalvfs(xe); - struct xe_gt_sriov_pf_service_version *version; - - xe_gt_assert(gt, IS_SRIOV_PF(xe)); - - for (n = 1; n <= total_vfs; n++) { - version = >->sriov.pf.vfs[n].version; - if (!version->major && !version->minor) - continue; - - drm_printf(p, "VF%u:\t%u.%u\n", n, version->major, version->minor); - } - - return 0; -} - #if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST) -#include "tests/xe_gt_sriov_pf_service_test.c" +//#include "tests/xe_gt_sriov_pf_service_test.c" #endif diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h index 56aaadf0360d..10b02c9b651c 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h @@ -14,9 +14,7 @@ struct xe_gt; int xe_gt_sriov_pf_service_init(struct xe_gt *gt); void xe_gt_sriov_pf_service_update(struct xe_gt *gt); -void xe_gt_sriov_pf_service_reset(struct xe_gt *gt, unsigned int vfid); -int xe_gt_sriov_pf_service_print_version(struct xe_gt *gt, struct drm_printer *p); int xe_gt_sriov_pf_service_print_runtime(struct xe_gt *gt, struct drm_printer *p); #ifdef CONFIG_PCI_IOV diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c b/drivers/gpu/drm/xe/xe_sriov_pf.c index 32788b83b8bd..f66b839deeb8 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf.c +++ b/drivers/gpu/drm/xe/xe_sriov_pf.c @@ -12,6 +12,8 @@ #include "xe_module.h" #include "xe_sriov.h" #include "xe_sriov_pf.h" +#include "xe_sriov_pf_helpers.h" +#include "xe_sriov_pf_service.h" #include "xe_sriov_printk.h" static unsigned int wanted_max_vfs(struct xe_device *xe) @@ -82,9 +84,22 @@ bool xe_sriov_pf_readiness(struct xe_device *xe) */ int xe_sriov_pf_init_early(struct xe_device *xe) { + int err; + xe_assert(xe, IS_SRIOV_PF(xe)); - return drmm_mutex_init(&xe->drm, &xe->sriov.pf.master_lock); + xe->sriov.pf.vfs = drmm_kcalloc(&xe->drm, 1 + xe_sriov_pf_get_totalvfs(xe), + sizeof(*xe->sriov.pf.vfs), GFP_KERNEL); + if (!xe->sriov.pf.vfs) + return -ENOMEM; + + err = drmm_mutex_init(&xe->drm, &xe->sriov.pf.master_lock); + if (err) + return err; + + xe_sriov_pf_service_init(xe); + + return 0; } /** @@ -122,6 +137,7 @@ static int simple_show(struct seq_file *m, void *data) static const struct drm_info_list debugfs_list[] = { { .name = "vfs", .show = simple_show, .data = xe_sriov_pf_print_vfs_summary }, + { .name = "versions", .show = simple_show, .data = xe_sriov_pf_service_print_versions }, }; /** diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_service.c b/drivers/gpu/drm/xe/xe_sriov_pf_service.c new file mode 100644 index 000000000000..a8e90e5ac5f8 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_sriov_pf_service.c @@ -0,0 +1,213 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2023-2025 Intel Corporation + */ + +#include "abi/guc_relay_actions_abi.h" + +#include "xe_device_types.h" +#include "xe_sriov.h" +#include "xe_sriov_pf_helpers.h" +#include "xe_sriov_printk.h" + +#include "xe_sriov_pf_service.h" +#include "xe_sriov_pf_service_types.h" + +/** + * xe_sriov_pf_service_init - Early initialization of the SR-IOV PF service. + * @xe: the &xe_device to initialize + * + * Performs early initialization of the SR-IOV PF service. + * + * This function can only be called on PF. + */ +void xe_sriov_pf_service_init(struct xe_device *xe) +{ + BUILD_BUG_ON(!GUC_RELAY_VERSION_BASE_MAJOR && !GUC_RELAY_VERSION_BASE_MINOR); + BUILD_BUG_ON(GUC_RELAY_VERSION_BASE_MAJOR > GUC_RELAY_VERSION_LATEST_MAJOR); + + /* base versions may differ between platforms */ + xe->sriov.pf.service.version.base.major = GUC_RELAY_VERSION_BASE_MAJOR; + xe->sriov.pf.service.version.base.minor = GUC_RELAY_VERSION_BASE_MINOR; + + /* latest version is same for all platforms */ + xe->sriov.pf.service.version.latest.major = GUC_RELAY_VERSION_LATEST_MAJOR; + xe->sriov.pf.service.version.latest.minor = GUC_RELAY_VERSION_LATEST_MINOR; +} + +/* Return: 0 on success or a negative error code on failure. */ +static int pf_negotiate_version(struct xe_device *xe, + u32 wanted_major, u32 wanted_minor, + u32 *major, u32 *minor) +{ + struct xe_sriov_pf_service_version base = xe->sriov.pf.service.version.base; + struct xe_sriov_pf_service_version latest = xe->sriov.pf.service.version.latest; + + xe_assert(xe, base.major); + xe_assert(xe, base.major <= latest.major); + xe_assert(xe, (base.major < latest.major) || (base.minor <= latest.minor)); + + /* VF doesn't care - return our latest */ + if (wanted_major == VF2PF_HANDSHAKE_MAJOR_ANY && + wanted_minor == VF2PF_HANDSHAKE_MINOR_ANY) { + *major = latest.major; + *minor = latest.minor; + return 0; + } + + /* VF wants newer than our - return our latest */ + if (wanted_major > latest.major) { + *major = latest.major; + *minor = latest.minor; + return 0; + } + + /* VF wants older than min required - reject */ + if (wanted_major < base.major || + (wanted_major == base.major && wanted_minor < base.minor)) { + return -EPERM; + } + + /* previous major - return wanted, as we should still support it */ + if (wanted_major < latest.major) { + /* XXX: we are not prepared for multi-versions yet */ + xe_assert(xe, base.major == latest.major); + return -ENOPKG; + } + + /* same major - return common minor */ + *major = wanted_major; + *minor = min_t(u32, latest.minor, wanted_minor); + return 0; +} + +static void pf_connect(struct xe_device *xe, u32 vfid, u32 major, u32 minor) +{ + xe_sriov_pf_assert_vfid(xe, vfid); + xe_assert(xe, major || minor); + + xe->sriov.pf.vfs[vfid].version.major = major; + xe->sriov.pf.vfs[vfid].version.minor = minor; +} + +static void pf_disconnect(struct xe_device *xe, u32 vfid) +{ + xe_sriov_pf_assert_vfid(xe, vfid); + + xe->sriov.pf.vfs[vfid].version.major = 0; + xe->sriov.pf.vfs[vfid].version.minor = 0; +} + +/** + * xe_sriov_pf_service_is_negotiated - Check if VF has negotiated given ABI version. + * @xe: the &xe_device + * @vfid: the VF identifier + * @major: the major version to check + * @minor: the minor version to check + * + * Performs early initialization of the SR-IOV PF service. + * + * This function can only be called on PF. + * + * Returns: true if VF can use given ABI version functionality. + */ +bool xe_sriov_pf_service_is_negotiated(struct xe_device *xe, u32 vfid, u32 major, u32 minor) +{ + xe_sriov_pf_assert_vfid(xe, vfid); + + return major == xe->sriov.pf.vfs[vfid].version.major && + minor <= xe->sriov.pf.vfs[vfid].version.minor; +} + +/** + * xe_sriov_pf_service_handshake_vf - Confirm a connection with the VF. + * @xe: the &xe_device + * @vfid: the VF identifier + * @wanted_major: the major service version expected by the VF + * @wanted_minor: the minor service version expected by the VF + * @major: the major service version to be used by the VF + * @minor: the minor service version to be used by the VF + * + * Negotiate a VF/PF ABI version to allow VF use the PF services. + * + * This function can only be called on PF. + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_pf_service_handshake_vf(struct xe_device *xe, u32 vfid, + u32 wanted_major, u32 wanted_minor, + u32 *major, u32 *minor) +{ + int err; + + xe_sriov_dbg_verbose(xe, "VF%u wants ABI version %u.%u\n", + vfid, wanted_major, wanted_minor); + + err = pf_negotiate_version(xe, wanted_major, wanted_minor, major, minor); + + if (err < 0) { + xe_sriov_notice(xe, "VF%u failed to negotiate ABI %u.%u (%pe)\n", + vfid, wanted_major, wanted_minor, ERR_PTR(err)); + pf_disconnect(xe, vfid); + } else { + xe_sriov_dbg(xe, "VF%u negotiated ABI version %u.%u\n", + vfid, *major, *minor); + pf_connect(xe, vfid, *major, *minor); + } + + return err; +} + +/** + * xe_sriov_pf_service_reset_vf - Reset a connection with the VF. + * @xe: the &xe_device + * @vfid: the VF identifier + * + * Reset a VF driver negotiated VF/PF ABI version. + * + * After that point, the VF driver will have to perform new version handshake + * to continue use of the PF services again. + * + * This function can only be called on PF. + */ +void xe_sriov_pf_service_reset_vf(struct xe_device *xe, unsigned int vfid) +{ + pf_disconnect(xe, vfid); +} + +static void print_pf_version(struct drm_printer *p, const char *name, + const struct xe_sriov_pf_service_version *version) +{ + drm_printf(p, "%s:\t%u.%u\n", name, version->major, version->minor); +} + +/** + * xe_sriov_pf_service_print_versions - Print ABI versions negotiated with VFs. + * @xe: the &xe_device + * @p: the &drm_printer + * + * This function is for PF use only. + */ +void xe_sriov_pf_service_print_versions(struct xe_device *xe, struct drm_printer *p) +{ + unsigned int n, total_vfs = xe_sriov_pf_get_totalvfs(xe); + struct xe_sriov_pf_service_version *version; + char name[8]; + + xe_assert(xe, IS_SRIOV_PF(xe)); + + print_pf_version(p, "base", &xe->sriov.pf.service.version.base); + print_pf_version(p, "latest", &xe->sriov.pf.service.version.latest); + + for (n = 1; n <= total_vfs; n++) { + version = &xe->sriov.pf.vfs[n].version; + if (!version->major && !version->minor) + continue; + + print_pf_version(p, xe_sriov_function_name(n, name, sizeof(name)), version); + } +} + +#if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST) +#include "tests/xe_sriov_pf_service_kunit.c" +#endif diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_service.h b/drivers/gpu/drm/xe/xe_sriov_pf_service.h new file mode 100644 index 000000000000..d38c18f5ed10 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_sriov_pf_service.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2025 Intel Corporation + */ + +#ifndef _XE_SRIOV_PF_SERVICE_H_ +#define _XE_SRIOV_PF_SERVICE_H_ + +#include <linux/types.h> + +struct drm_printer; +struct xe_device; + +void xe_sriov_pf_service_init(struct xe_device *xe); +void xe_sriov_pf_service_print_versions(struct xe_device *xe, struct drm_printer *p); + +int xe_sriov_pf_service_handshake_vf(struct xe_device *xe, u32 vfid, + u32 wanted_major, u32 wanted_minor, + u32 *major, u32 *minor); +bool xe_sriov_pf_service_is_negotiated(struct xe_device *xe, u32 vfid, u32 major, u32 minor); +void xe_sriov_pf_service_reset_vf(struct xe_device *xe, unsigned int vfid); + +#endif diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_service_types.h b/drivers/gpu/drm/xe/xe_sriov_pf_service_types.h new file mode 100644 index 000000000000..0835dde358c1 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_sriov_pf_service_types.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023-2025 Intel Corporation + */ + +#ifndef _XE_SRIOV_PF_SERVICE_TYPES_H_ +#define _XE_SRIOV_PF_SERVICE_TYPES_H_ + +#include <linux/types.h> + +/** + * struct xe_sriov_pf_service_version - VF/PF ABI Version. + * @major: the major version of the VF/PF ABI + * @minor: the minor version of the VF/PF ABI + * + * See `GuC Relay Communication`_. + */ +struct xe_sriov_pf_service_version { + u16 major; + u16 minor; +}; + +/** + * struct xe_sriov_pf_service - Data used by the PF service. + * @version: information about VF/PF ABI versions for current platform. + * @version.base: lowest VF/PF ABI version that could be negotiated with VF. + * @version.latest: latest VF/PF ABI version supported by the PF driver. + */ +struct xe_sriov_pf_service { + struct { + struct xe_sriov_pf_service_version base; + struct xe_sriov_pf_service_version latest; + } version; +}; + +#endif diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_types.h b/drivers/gpu/drm/xe/xe_sriov_pf_types.h index 918dc089eb1d..956a88f9f213 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf_types.h +++ b/drivers/gpu/drm/xe/xe_sriov_pf_types.h @@ -9,6 +9,16 @@ #include <linux/mutex.h> #include <linux/types.h> +#include "xe_sriov_pf_service_types.h" + +/** + * struct xe_sriov_metadata - per-VF device level metadata + */ +struct xe_sriov_metadata { + /** @version: negotiated VF/PF ABI version */ + struct xe_sriov_pf_service_version version; +}; + /** * struct xe_device_pf - Xe PF related data * @@ -24,6 +34,12 @@ struct xe_device_pf { /** @master_lock: protects all VFs configurations across GTs */ struct mutex master_lock; + + /** @service: device level service data. */ + struct xe_sriov_pf_service service; + + /** @vfs: metadata for all VFs. */ + struct xe_sriov_metadata *vfs; }; #endif -- 2.47.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 4/5] drm/xe/pf: Stop requiring VF/PF version negotiation on every GT 2025-06-24 20:09 ` [PATCH 4/5] drm/xe/pf: Stop requiring VF/PF version negotiation on every GT Michal Wajdeczko @ 2025-06-26 7:42 ` Piotr Piórkowski 0 siblings, 0 replies; 15+ messages in thread From: Piotr Piórkowski @ 2025-06-26 7:42 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on wto [2025-cze-24 22:09:22 +0200]: > While some VF/PF relay actions must be handled on the GT level, > like query for runtime registers, it was clarified by the arch > team that initial version negotiation can be done by the VF just > once, by using any available GuC/GT. > > Move handling of the VF/PF ABI version negotiation on the PF side > from the GT level functions to the device level functions. > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> > --- > drivers/gpu/drm/xe/Makefile | 3 +- > .../xe/tests/xe_gt_sriov_pf_service_test.c | 232 ------------------ > .../drm/xe/tests/xe_sriov_pf_service_kunit.c | 227 +++++++++++++++++ > drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c | 6 +- > drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c | 5 - > drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c | 164 +------------ > drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h | 2 - > drivers/gpu/drm/xe/xe_sriov_pf.c | 18 +- > drivers/gpu/drm/xe/xe_sriov_pf_service.c | 213 ++++++++++++++++ > drivers/gpu/drm/xe/xe_sriov_pf_service.h | 23 ++ > .../gpu/drm/xe/xe_sriov_pf_service_types.h | 36 +++ > drivers/gpu/drm/xe/xe_sriov_pf_types.h | 16 ++ > 12 files changed, 545 insertions(+), 400 deletions(-) > delete mode 100644 drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c > create mode 100644 drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c > create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service.c > create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service.h > create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_service_types.h > > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile > index eee6bac01a00..9634605a4590 100644 > --- a/drivers/gpu/drm/xe/Makefile > +++ b/drivers/gpu/drm/xe/Makefile > @@ -155,7 +155,8 @@ xe-$(CONFIG_PCI_IOV) += \ > xe_lmtt_2l.o \ > xe_lmtt_ml.o \ > xe_pci_sriov.o \ > - xe_sriov_pf.o > + xe_sriov_pf.o \ > + xe_sriov_pf_service.o > > # include helpers for tests even when XE is built-in > ifdef CONFIG_DRM_XE_KUNIT_TEST > diff --git a/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c b/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c > deleted file mode 100644 > index b683585db852..000000000000 > --- a/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_service_test.c > +++ /dev/null > @@ -1,232 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 AND MIT > -/* > - * Copyright © 2024 Intel Corporation > - */ > - > -#include <kunit/test.h> > - > -#include "xe_device.h" > -#include "xe_kunit_helpers.h" > -#include "xe_pci_test.h" > - > -static int pf_service_test_init(struct kunit *test) > -{ > - struct xe_pci_fake_data fake = { > - .sriov_mode = XE_SRIOV_MODE_PF, > - .platform = XE_TIGERLAKE, /* some random platform */ > - .subplatform = XE_SUBPLATFORM_NONE, > - }; > - struct xe_device *xe; > - struct xe_gt *gt; > - > - test->priv = &fake; > - xe_kunit_helper_xe_device_test_init(test); > - > - xe = test->priv; > - KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0); > - > - gt = xe_device_get_gt(xe, 0); > - pf_init_versions(gt); > - > - /* > - * sanity check: > - * - all supported platforms VF/PF ABI versions must be defined > - * - base version can't be newer than latest > - */ > - KUNIT_ASSERT_NE(test, 0, gt->sriov.pf.service.version.base.major); > - KUNIT_ASSERT_NE(test, 0, gt->sriov.pf.service.version.latest.major); > - KUNIT_ASSERT_LE(test, gt->sriov.pf.service.version.base.major, > - gt->sriov.pf.service.version.latest.major); > - if (gt->sriov.pf.service.version.base.major == gt->sriov.pf.service.version.latest.major) > - KUNIT_ASSERT_LE(test, gt->sriov.pf.service.version.base.minor, > - gt->sriov.pf.service.version.latest.minor); > - > - test->priv = gt; > - return 0; > -} > - > -static void pf_negotiate_any(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, VF2PF_HANDSHAKE_MAJOR_ANY, > - VF2PF_HANDSHAKE_MINOR_ANY, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); > - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); > -} > - > -static void pf_negotiate_base_match(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.base.major, > - gt->sriov.pf.service.version.base.minor, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.base.major); > - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.base.minor); > -} > - > -static void pf_negotiate_base_newer(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.base.major, > - gt->sriov.pf.service.version.base.minor + 1, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.base.major); > - KUNIT_ASSERT_GE(test, minor, gt->sriov.pf.service.version.base.minor); > - if (gt->sriov.pf.service.version.base.major == gt->sriov.pf.service.version.latest.major) > - KUNIT_ASSERT_LE(test, minor, gt->sriov.pf.service.version.latest.minor); > - else > - KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); > -} > - > -static void pf_negotiate_base_next(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.base.major + 1, 0, > - &major, &minor)); > - KUNIT_ASSERT_GE(test, major, gt->sriov.pf.service.version.base.major); > - KUNIT_ASSERT_LE(test, major, gt->sriov.pf.service.version.latest.major); > - if (major == gt->sriov.pf.service.version.latest.major) > - KUNIT_ASSERT_LE(test, minor, gt->sriov.pf.service.version.latest.minor); > - else > - KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); > -} > - > -static void pf_negotiate_base_older(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - if (!gt->sriov.pf.service.version.base.minor) > - kunit_skip(test, "no older minor\n"); > - > - KUNIT_ASSERT_NE(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.base.major, > - gt->sriov.pf.service.version.base.minor - 1, > - &major, &minor)); > -} > - > -static void pf_negotiate_base_prev(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_NE(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.base.major - 1, 1, > - &major, &minor)); > -} > - > -static void pf_negotiate_latest_match(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.latest.major, > - gt->sriov.pf.service.version.latest.minor, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); > - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); > -} > - > -static void pf_negotiate_latest_newer(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.latest.major, > - gt->sriov.pf.service.version.latest.minor + 1, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); > - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); > -} > - > -static void pf_negotiate_latest_next(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.latest.major + 1, 0, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); > - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor); > -} > - > -static void pf_negotiate_latest_older(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - if (!gt->sriov.pf.service.version.latest.minor) > - kunit_skip(test, "no older minor\n"); > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.latest.major, > - gt->sriov.pf.service.version.latest.minor - 1, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major); > - KUNIT_ASSERT_EQ(test, minor, gt->sriov.pf.service.version.latest.minor - 1); > -} > - > -static void pf_negotiate_latest_prev(struct kunit *test) > -{ > - struct xe_gt *gt = test->priv; > - u32 major, minor; > - > - if (gt->sriov.pf.service.version.base.major == gt->sriov.pf.service.version.latest.major) > - kunit_skip(test, "no prev major"); > - > - KUNIT_ASSERT_EQ(test, 0, > - pf_negotiate_version(gt, > - gt->sriov.pf.service.version.latest.major - 1, > - gt->sriov.pf.service.version.base.minor + 1, > - &major, &minor)); > - KUNIT_ASSERT_EQ(test, major, gt->sriov.pf.service.version.latest.major - 1); > - KUNIT_ASSERT_GE(test, major, gt->sriov.pf.service.version.base.major); > -} > - > -static struct kunit_case pf_service_test_cases[] = { > - KUNIT_CASE(pf_negotiate_any), > - KUNIT_CASE(pf_negotiate_base_match), > - KUNIT_CASE(pf_negotiate_base_newer), > - KUNIT_CASE(pf_negotiate_base_next), > - KUNIT_CASE(pf_negotiate_base_older), > - KUNIT_CASE(pf_negotiate_base_prev), > - KUNIT_CASE(pf_negotiate_latest_match), > - KUNIT_CASE(pf_negotiate_latest_newer), > - KUNIT_CASE(pf_negotiate_latest_next), > - KUNIT_CASE(pf_negotiate_latest_older), > - KUNIT_CASE(pf_negotiate_latest_prev), > - {} > -}; > - > -static struct kunit_suite pf_service_suite = { > - .name = "pf_service", > - .test_cases = pf_service_test_cases, > - .init = pf_service_test_init, > -}; > - > -kunit_test_suite(pf_service_suite); > diff --git a/drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c b/drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c > new file mode 100644 > index 000000000000..ba95e29b597d > --- /dev/null > +++ b/drivers/gpu/drm/xe/tests/xe_sriov_pf_service_kunit.c > @@ -0,0 +1,227 @@ > +// SPDX-License-Identifier: GPL-2.0 AND MIT > +/* > + * Copyright © 2024-2025 Intel Corporation > + */ > + > +#include <kunit/test.h> > + > +#include "xe_device.h" > +#include "xe_kunit_helpers.h" > +#include "xe_pci_test.h" > + > +static int pf_service_test_init(struct kunit *test) > +{ > + struct xe_pci_fake_data fake = { > + .sriov_mode = XE_SRIOV_MODE_PF, > + .platform = XE_TIGERLAKE, /* some random platform */ > + .subplatform = XE_SUBPLATFORM_NONE, > + }; > + struct xe_device *xe; > + > + test->priv = &fake; > + xe_kunit_helper_xe_device_test_init(test); > + > + xe = test->priv; > + KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0); > + > + xe_sriov_pf_service_init(xe); > + /* > + * sanity check: > + * - all supported platforms VF/PF ABI versions must be defined > + * - base version can't be newer than latest > + */ > + KUNIT_ASSERT_NE(test, 0, xe->sriov.pf.service.version.base.major); > + KUNIT_ASSERT_NE(test, 0, xe->sriov.pf.service.version.latest.major); > + KUNIT_ASSERT_LE(test, xe->sriov.pf.service.version.base.major, > + xe->sriov.pf.service.version.latest.major); > + if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) > + KUNIT_ASSERT_LE(test, xe->sriov.pf.service.version.base.minor, > + xe->sriov.pf.service.version.latest.minor); > + return 0; > +} > + > +static void pf_negotiate_any(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, VF2PF_HANDSHAKE_MAJOR_ANY, > + VF2PF_HANDSHAKE_MINOR_ANY, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); > + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); > +} > + > +static void pf_negotiate_base_match(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.base.major, > + xe->sriov.pf.service.version.base.minor, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.base.major); > + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.base.minor); > +} > + > +static void pf_negotiate_base_newer(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.base.major, > + xe->sriov.pf.service.version.base.minor + 1, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.base.major); > + KUNIT_ASSERT_GE(test, minor, xe->sriov.pf.service.version.base.minor); > + if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) > + KUNIT_ASSERT_LE(test, minor, xe->sriov.pf.service.version.latest.minor); > + else > + KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); > +} > + > +static void pf_negotiate_base_next(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.base.major + 1, 0, > + &major, &minor)); > + KUNIT_ASSERT_GE(test, major, xe->sriov.pf.service.version.base.major); > + KUNIT_ASSERT_LE(test, major, xe->sriov.pf.service.version.latest.major); > + if (major == xe->sriov.pf.service.version.latest.major) > + KUNIT_ASSERT_LE(test, minor, xe->sriov.pf.service.version.latest.minor); > + else > + KUNIT_FAIL(test, "FIXME: don't know how to test multi-version yet!\n"); > +} > + > +static void pf_negotiate_base_older(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + if (!xe->sriov.pf.service.version.base.minor) > + kunit_skip(test, "no older minor\n"); > + > + KUNIT_ASSERT_NE(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.base.major, > + xe->sriov.pf.service.version.base.minor - 1, > + &major, &minor)); > +} > + > +static void pf_negotiate_base_prev(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_NE(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.base.major - 1, 1, > + &major, &minor)); > +} > + > +static void pf_negotiate_latest_match(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.latest.major, > + xe->sriov.pf.service.version.latest.minor, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); > + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); > +} > + > +static void pf_negotiate_latest_newer(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.latest.major, > + xe->sriov.pf.service.version.latest.minor + 1, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); > + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); > +} > + > +static void pf_negotiate_latest_next(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.latest.major + 1, 0, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); > + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor); > +} > + > +static void pf_negotiate_latest_older(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + if (!xe->sriov.pf.service.version.latest.minor) > + kunit_skip(test, "no older minor\n"); > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.latest.major, > + xe->sriov.pf.service.version.latest.minor - 1, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major); > + KUNIT_ASSERT_EQ(test, minor, xe->sriov.pf.service.version.latest.minor - 1); > +} > + > +static void pf_negotiate_latest_prev(struct kunit *test) > +{ > + struct xe_device *xe = test->priv; > + u32 major, minor; > + > + if (xe->sriov.pf.service.version.base.major == xe->sriov.pf.service.version.latest.major) > + kunit_skip(test, "no prev major"); > + > + KUNIT_ASSERT_EQ(test, 0, > + pf_negotiate_version(xe, > + xe->sriov.pf.service.version.latest.major - 1, > + xe->sriov.pf.service.version.base.minor + 1, > + &major, &minor)); > + KUNIT_ASSERT_EQ(test, major, xe->sriov.pf.service.version.latest.major - 1); > + KUNIT_ASSERT_GE(test, major, xe->sriov.pf.service.version.base.major); > +} > + > +static struct kunit_case pf_service_test_cases[] = { > + KUNIT_CASE(pf_negotiate_any), > + KUNIT_CASE(pf_negotiate_base_match), > + KUNIT_CASE(pf_negotiate_base_newer), > + KUNIT_CASE(pf_negotiate_base_next), > + KUNIT_CASE(pf_negotiate_base_older), > + KUNIT_CASE(pf_negotiate_base_prev), > + KUNIT_CASE(pf_negotiate_latest_match), > + KUNIT_CASE(pf_negotiate_latest_newer), > + KUNIT_CASE(pf_negotiate_latest_next), > + KUNIT_CASE(pf_negotiate_latest_older), > + KUNIT_CASE(pf_negotiate_latest_prev), > + {} > +}; > + > +static struct kunit_suite pf_service_suite = { > + .name = "pf_service", > + .test_cases = pf_service_test_cases, > + .init = pf_service_test_init, > +}; > + > +kunit_test_suite(pf_service_suite); > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c > index 1f50aec3a059..bceebffe8492 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_control.c > @@ -15,10 +15,10 @@ > #include "xe_gt_sriov_pf_helpers.h" > #include "xe_gt_sriov_pf_migration.h" > #include "xe_gt_sriov_pf_monitor.h" > -#include "xe_gt_sriov_pf_service.h" > #include "xe_gt_sriov_printk.h" > #include "xe_guc_ct.h" > #include "xe_sriov.h" > +#include "xe_sriov_pf_service.h" > > static const char *control_cmd_to_string(u32 cmd) > { > @@ -1064,7 +1064,9 @@ static bool pf_exit_vf_flr_reset_data(struct xe_gt *gt, unsigned int vfid) > if (!pf_exit_vf_state(gt, vfid, XE_GT_SRIOV_STATE_FLR_RESET_DATA)) > return false; > > - xe_gt_sriov_pf_service_reset(gt, vfid); > + if (!xe_gt_is_media_type(gt) && !gt->tile->id) NIT: Maybe we should have a helper like is_root_prime_gt or simillar, To be honest, in my code, which has not yet been made public, I already had cases where something like this would have been useful. > + xe_sriov_pf_service_reset_vf(gt_to_xe(gt), vfid); > + > xe_gt_sriov_pf_monitor_flr(gt, vfid); > > pf_enter_vf_flr_reset_mmio(gt, vfid); > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c > index 13970d5a2867..af6a713ab5b2 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c > @@ -77,11 +77,6 @@ static const struct drm_info_list pf_info[] = { > .show = xe_gt_debugfs_simple_show, > .data = xe_gt_sriov_pf_service_print_runtime, > }, > - { > - "negotiated_versions", > - .show = xe_gt_debugfs_simple_show, > - .data = xe_gt_sriov_pf_service_print_version, > - }, > { > "adverse_events", > .show = xe_gt_debugfs_simple_show, > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c > index 821cfcc34e6b..98b9e796ac89 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c > @@ -19,91 +19,7 @@ > #include "xe_gt_sriov_pf_service_types.h" > #include "xe_guc_ct.h" > #include "xe_guc_hxg_helpers.h" > - > -static void pf_init_versions(struct xe_gt *gt) > -{ > - BUILD_BUG_ON(!GUC_RELAY_VERSION_BASE_MAJOR && !GUC_RELAY_VERSION_BASE_MINOR); > - BUILD_BUG_ON(GUC_RELAY_VERSION_BASE_MAJOR > GUC_RELAY_VERSION_LATEST_MAJOR); > - > - /* base versions may differ between platforms */ > - gt->sriov.pf.service.version.base.major = GUC_RELAY_VERSION_BASE_MAJOR; > - gt->sriov.pf.service.version.base.minor = GUC_RELAY_VERSION_BASE_MINOR; > - > - /* latest version is same for all platforms */ > - gt->sriov.pf.service.version.latest.major = GUC_RELAY_VERSION_LATEST_MAJOR; > - gt->sriov.pf.service.version.latest.minor = GUC_RELAY_VERSION_LATEST_MINOR; > -} > - > -/* Return: 0 on success or a negative error code on failure. */ > -static int pf_negotiate_version(struct xe_gt *gt, > - u32 wanted_major, u32 wanted_minor, > - u32 *major, u32 *minor) > -{ > - struct xe_gt_sriov_pf_service_version base = gt->sriov.pf.service.version.base; > - struct xe_gt_sriov_pf_service_version latest = gt->sriov.pf.service.version.latest; > - > - xe_gt_assert(gt, base.major); > - xe_gt_assert(gt, base.major <= latest.major); > - xe_gt_assert(gt, (base.major < latest.major) || (base.minor <= latest.minor)); > - > - /* VF doesn't care - return our latest */ > - if (wanted_major == VF2PF_HANDSHAKE_MAJOR_ANY && > - wanted_minor == VF2PF_HANDSHAKE_MINOR_ANY) { > - *major = latest.major; > - *minor = latest.minor; > - return 0; > - } > - > - /* VF wants newer than our - return our latest */ > - if (wanted_major > latest.major) { > - *major = latest.major; > - *minor = latest.minor; > - return 0; > - } > - > - /* VF wants older than min required - reject */ > - if (wanted_major < base.major || > - (wanted_major == base.major && wanted_minor < base.minor)) { > - return -EPERM; > - } > - > - /* previous major - return wanted, as we should still support it */ > - if (wanted_major < latest.major) { > - /* XXX: we are not prepared for multi-versions yet */ > - xe_gt_assert(gt, base.major == latest.major); > - return -ENOPKG; > - } > - > - /* same major - return common minor */ > - *major = wanted_major; > - *minor = min_t(u32, latest.minor, wanted_minor); > - return 0; > -} > - > -static void pf_connect(struct xe_gt *gt, u32 vfid, u32 major, u32 minor) > -{ > - xe_gt_sriov_pf_assert_vfid(gt, vfid); > - xe_gt_assert(gt, major || minor); > - > - gt->sriov.pf.vfs[vfid].version.major = major; > - gt->sriov.pf.vfs[vfid].version.minor = minor; > -} > - > -static void pf_disconnect(struct xe_gt *gt, u32 vfid) > -{ > - xe_gt_sriov_pf_assert_vfid(gt, vfid); > - > - gt->sriov.pf.vfs[vfid].version.major = 0; > - gt->sriov.pf.vfs[vfid].version.minor = 0; > -} > - > -static bool pf_is_negotiated(struct xe_gt *gt, u32 vfid, u32 major, u32 minor) > -{ > - xe_gt_sriov_pf_assert_vfid(gt, vfid); > - > - return major == gt->sriov.pf.vfs[vfid].version.major && > - minor <= gt->sriov.pf.vfs[vfid].version.minor; > -} > +#include "xe_sriov_pf_service.h" > > static const struct xe_reg tgl_runtime_regs[] = { > RPM_CONFIG0, /* _MMIO(0x0d00) */ > @@ -285,8 +201,6 @@ int xe_gt_sriov_pf_service_init(struct xe_gt *gt) > { > int err; > > - pf_init_versions(gt); > - > err = pf_alloc_runtime_info(gt); > if (unlikely(err)) > goto failed; > @@ -311,47 +225,6 @@ void xe_gt_sriov_pf_service_update(struct xe_gt *gt) > pf_prepare_runtime_info(gt); > } > > -/** > - * xe_gt_sriov_pf_service_reset - Reset a connection with the VF. > - * @gt: the &xe_gt > - * @vfid: the VF identifier > - * > - * Reset a VF driver negotiated VF/PF ABI version. > - * After that point, the VF driver will have to perform new version handshake > - * to continue use of the PF services again. > - * > - * This function can only be called on PF. > - */ > -void xe_gt_sriov_pf_service_reset(struct xe_gt *gt, unsigned int vfid) > -{ > - pf_disconnect(gt, vfid); > -} > - > -/* Return: 0 on success or a negative error code on failure. */ > -static int pf_process_handshake(struct xe_gt *gt, u32 vfid, > - u32 wanted_major, u32 wanted_minor, > - u32 *major, u32 *minor) > -{ > - int err; > - > - xe_gt_sriov_dbg_verbose(gt, "VF%u wants ABI version %u.%u\n", > - vfid, wanted_major, wanted_minor); > - > - err = pf_negotiate_version(gt, wanted_major, wanted_minor, major, minor); > - > - if (err < 0) { > - xe_gt_sriov_notice(gt, "VF%u failed to negotiate ABI %u.%u (%pe)\n", > - vfid, wanted_major, wanted_minor, ERR_PTR(err)); > - pf_disconnect(gt, vfid); > - } else { > - xe_gt_sriov_dbg(gt, "VF%u negotiated ABI version %u.%u\n", > - vfid, *major, *minor); > - pf_connect(gt, vfid, *major, *minor); > - } > - > - return 0; > -} > - > /* Return: length of the response message or a negative error code on failure. */ > static int pf_process_handshake_msg(struct xe_gt *gt, u32 origin, > const u32 *request, u32 len, u32 *response, u32 size) > @@ -371,7 +244,8 @@ static int pf_process_handshake_msg(struct xe_gt *gt, u32 origin, > wanted_major = FIELD_GET(VF2PF_HANDSHAKE_REQUEST_MSG_1_MAJOR, request[1]); > wanted_minor = FIELD_GET(VF2PF_HANDSHAKE_REQUEST_MSG_1_MINOR, request[1]); > > - err = pf_process_handshake(gt, origin, wanted_major, wanted_minor, &major, &minor); > + err = xe_sriov_pf_service_handshake_vf(gt_to_xe(gt), origin, wanted_major, wanted_minor, > + &major, &minor); > if (err < 0) > return err; > > @@ -430,8 +304,10 @@ static int pf_process_runtime_query_msg(struct xe_gt *gt, u32 origin, > u32 remaining = 0; > int ret; > > - if (!pf_is_negotiated(gt, origin, 1, 0)) > + /* this action is available from ABI 1.0 */ > + if (!xe_sriov_pf_service_is_negotiated(gt_to_xe(gt), origin, 1, 0)) > return -EACCES; > + > if (unlikely(msg_len > VF2PF_QUERY_RUNTIME_REQUEST_MSG_LEN)) > return -EMSGSIZE; > if (unlikely(msg_len < VF2PF_QUERY_RUNTIME_REQUEST_MSG_LEN)) > @@ -529,32 +405,6 @@ int xe_gt_sriov_pf_service_print_runtime(struct xe_gt *gt, struct drm_printer *p > return 0; > } > > -/** > - * xe_gt_sriov_pf_service_print_version - Print ABI versions negotiated with VFs. > - * @gt: the &xe_gt > - * @p: the &drm_printer > - * > - * This function is for PF use only. > - */ > -int xe_gt_sriov_pf_service_print_version(struct xe_gt *gt, struct drm_printer *p) > -{ > - struct xe_device *xe = gt_to_xe(gt); > - unsigned int n, total_vfs = xe_sriov_pf_get_totalvfs(xe); > - struct xe_gt_sriov_pf_service_version *version; > - > - xe_gt_assert(gt, IS_SRIOV_PF(xe)); > - > - for (n = 1; n <= total_vfs; n++) { > - version = >->sriov.pf.vfs[n].version; > - if (!version->major && !version->minor) > - continue; > - > - drm_printf(p, "VF%u:\t%u.%u\n", n, version->major, version->minor); > - } > - > - return 0; > -} > - > #if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST) > -#include "tests/xe_gt_sriov_pf_service_test.c" > +//#include "tests/xe_gt_sriov_pf_service_test.c" > This should probably be removed. #endif > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h > index 56aaadf0360d..10b02c9b651c 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_service.h > @@ -14,9 +14,7 @@ struct xe_gt; > > int xe_gt_sriov_pf_service_init(struct xe_gt *gt); > void xe_gt_sriov_pf_service_update(struct xe_gt *gt); > -void xe_gt_sriov_pf_service_reset(struct xe_gt *gt, unsigned int vfid); > > -int xe_gt_sriov_pf_service_print_version(struct xe_gt *gt, struct drm_printer *p); > int xe_gt_sriov_pf_service_print_runtime(struct xe_gt *gt, struct drm_printer *p); > > #ifdef CONFIG_PCI_IOV > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c b/drivers/gpu/drm/xe/xe_sriov_pf.c > index 32788b83b8bd..f66b839deeb8 100644 > --- a/drivers/gpu/drm/xe/xe_sriov_pf.c > +++ b/drivers/gpu/drm/xe/xe_sriov_pf.c > @@ -12,6 +12,8 @@ > #include "xe_module.h" > #include "xe_sriov.h" > #include "xe_sriov_pf.h" > +#include "xe_sriov_pf_helpers.h" > +#include "xe_sriov_pf_service.h" > #include "xe_sriov_printk.h" > > static unsigned int wanted_max_vfs(struct xe_device *xe) > @@ -82,9 +84,22 @@ bool xe_sriov_pf_readiness(struct xe_device *xe) > */ > int xe_sriov_pf_init_early(struct xe_device *xe) > { > + int err; > + > xe_assert(xe, IS_SRIOV_PF(xe)); > > - return drmm_mutex_init(&xe->drm, &xe->sriov.pf.master_lock); > + xe->sriov.pf.vfs = drmm_kcalloc(&xe->drm, 1 + xe_sriov_pf_get_totalvfs(xe), > + sizeof(*xe->sriov.pf.vfs), GFP_KERNEL); > + if (!xe->sriov.pf.vfs) > + return -ENOMEM; > + > + err = drmm_mutex_init(&xe->drm, &xe->sriov.pf.master_lock); > + if (err) > + return err; > + > + xe_sriov_pf_service_init(xe); > + > + return 0; > } > > /** > @@ -122,6 +137,7 @@ static int simple_show(struct seq_file *m, void *data) > > static const struct drm_info_list debugfs_list[] = { > { .name = "vfs", .show = simple_show, .data = xe_sriov_pf_print_vfs_summary }, > + { .name = "versions", .show = simple_show, .data = xe_sriov_pf_service_print_versions }, > }; > > /** > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_service.c b/drivers/gpu/drm/xe/xe_sriov_pf_service.c > new file mode 100644 > index 000000000000..a8e90e5ac5f8 > --- /dev/null > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_service.c > @@ -0,0 +1,213 @@ > +// SPDX-License-Identifier: MIT > +/* > + * Copyright © 2023-2025 Intel Corporation > + */ > + > +#include "abi/guc_relay_actions_abi.h" > + > +#include "xe_device_types.h" > +#include "xe_sriov.h" > +#include "xe_sriov_pf_helpers.h" > +#include "xe_sriov_printk.h" > + > +#include "xe_sriov_pf_service.h" > +#include "xe_sriov_pf_service_types.h" > + > +/** > + * xe_sriov_pf_service_init - Early initialization of the SR-IOV PF service. > + * @xe: the &xe_device to initialize > + * > + * Performs early initialization of the SR-IOV PF service. > + * > + * This function can only be called on PF. > + */ > +void xe_sriov_pf_service_init(struct xe_device *xe) > +{ > + BUILD_BUG_ON(!GUC_RELAY_VERSION_BASE_MAJOR && !GUC_RELAY_VERSION_BASE_MINOR); > + BUILD_BUG_ON(GUC_RELAY_VERSION_BASE_MAJOR > GUC_RELAY_VERSION_LATEST_MAJOR); > + NIT: IMO, xe_assert IS_SRIOV_PF should be here, especially since you are now using union for PF/VF. > + /* base versions may differ between platforms */ > + xe->sriov.pf.service.version.base.major = GUC_RELAY_VERSION_BASE_MAJOR; > + xe->sriov.pf.service.version.base.minor = GUC_RELAY_VERSION_BASE_MINOR; > + > + /* latest version is same for all platforms */ > + xe->sriov.pf.service.version.latest.major = GUC_RELAY_VERSION_LATEST_MAJOR; > + xe->sriov.pf.service.version.latest.minor = GUC_RELAY_VERSION_LATEST_MINOR; > +} > + > +/* Return: 0 on success or a negative error code on failure. */ > +static int pf_negotiate_version(struct xe_device *xe, > + u32 wanted_major, u32 wanted_minor, > + u32 *major, u32 *minor) > +{ > + struct xe_sriov_pf_service_version base = xe->sriov.pf.service.version.base; > + struct xe_sriov_pf_service_version latest = xe->sriov.pf.service.version.latest; > + > + xe_assert(xe, base.major); > + xe_assert(xe, base.major <= latest.major); > + xe_assert(xe, (base.major < latest.major) || (base.minor <= latest.minor)); > + > + /* VF doesn't care - return our latest */ > + if (wanted_major == VF2PF_HANDSHAKE_MAJOR_ANY && > + wanted_minor == VF2PF_HANDSHAKE_MINOR_ANY) { > + *major = latest.major; > + *minor = latest.minor; > + return 0; > + } > + > + /* VF wants newer than our - return our latest */ > + if (wanted_major > latest.major) { > + *major = latest.major; > + *minor = latest.minor; > + return 0; > + } > + > + /* VF wants older than min required - reject */ > + if (wanted_major < base.major || > + (wanted_major == base.major && wanted_minor < base.minor)) { > + return -EPERM; > + } > + > + /* previous major - return wanted, as we should still support it */ > + if (wanted_major < latest.major) { > + /* XXX: we are not prepared for multi-versions yet */ > + xe_assert(xe, base.major == latest.major); > + return -ENOPKG; > + } > + > + /* same major - return common minor */ > + *major = wanted_major; > + *minor = min_t(u32, latest.minor, wanted_minor); > + return 0; > +} > + > +static void pf_connect(struct xe_device *xe, u32 vfid, u32 major, u32 minor) > +{ > + xe_sriov_pf_assert_vfid(xe, vfid); > + xe_assert(xe, major || minor); > + > + xe->sriov.pf.vfs[vfid].version.major = major; > + xe->sriov.pf.vfs[vfid].version.minor = minor; > +} > + > +static void pf_disconnect(struct xe_device *xe, u32 vfid) > +{ > + xe_sriov_pf_assert_vfid(xe, vfid); > + > + xe->sriov.pf.vfs[vfid].version.major = 0; > + xe->sriov.pf.vfs[vfid].version.minor = 0; > +} > + > +/** > + * xe_sriov_pf_service_is_negotiated - Check if VF has negotiated given ABI version. > + * @xe: the &xe_device > + * @vfid: the VF identifier > + * @major: the major version to check > + * @minor: the minor version to check > + * > + * Performs early initialization of the SR-IOV PF service. > + * > + * This function can only be called on PF. > + * > + * Returns: true if VF can use given ABI version functionality. > + */ > +bool xe_sriov_pf_service_is_negotiated(struct xe_device *xe, u32 vfid, u32 major, u32 minor) > +{ > + xe_sriov_pf_assert_vfid(xe, vfid); > + > + return major == xe->sriov.pf.vfs[vfid].version.major && > + minor <= xe->sriov.pf.vfs[vfid].version.minor; > +} > + > +/** > + * xe_sriov_pf_service_handshake_vf - Confirm a connection with the VF. > + * @xe: the &xe_device > + * @vfid: the VF identifier > + * @wanted_major: the major service version expected by the VF > + * @wanted_minor: the minor service version expected by the VF > + * @major: the major service version to be used by the VF > + * @minor: the minor service version to be used by the VF > + * > + * Negotiate a VF/PF ABI version to allow VF use the PF services. > + * > + * This function can only be called on PF. > + * > + * Return: 0 on success or a negative error code on failure. > + */ > +int xe_sriov_pf_service_handshake_vf(struct xe_device *xe, u32 vfid, > + u32 wanted_major, u32 wanted_minor, > + u32 *major, u32 *minor) > +{ > + int err; > + > + xe_sriov_dbg_verbose(xe, "VF%u wants ABI version %u.%u\n", > + vfid, wanted_major, wanted_minor); > + > + err = pf_negotiate_version(xe, wanted_major, wanted_minor, major, minor); > + > + if (err < 0) { > + xe_sriov_notice(xe, "VF%u failed to negotiate ABI %u.%u (%pe)\n", > + vfid, wanted_major, wanted_minor, ERR_PTR(err)); > + pf_disconnect(xe, vfid); > + } else { > + xe_sriov_dbg(xe, "VF%u negotiated ABI version %u.%u\n", > + vfid, *major, *minor); > + pf_connect(xe, vfid, *major, *minor); > + } > + > + return err; > +} > + > +/** > + * xe_sriov_pf_service_reset_vf - Reset a connection with the VF. > + * @xe: the &xe_device > + * @vfid: the VF identifier > + * > + * Reset a VF driver negotiated VF/PF ABI version. > + * > + * After that point, the VF driver will have to perform new version handshake > + * to continue use of the PF services again. > + * > + * This function can only be called on PF. > + */ > +void xe_sriov_pf_service_reset_vf(struct xe_device *xe, unsigned int vfid) > +{ > + pf_disconnect(xe, vfid); > +} > + > +static void print_pf_version(struct drm_printer *p, const char *name, > + const struct xe_sriov_pf_service_version *version) > +{ > + drm_printf(p, "%s:\t%u.%u\n", name, version->major, version->minor); > +} > + > +/** > + * xe_sriov_pf_service_print_versions - Print ABI versions negotiated with VFs. > + * @xe: the &xe_device > + * @p: the &drm_printer > + * > + * This function is for PF use only. > + */ > +void xe_sriov_pf_service_print_versions(struct xe_device *xe, struct drm_printer *p) > +{ > + unsigned int n, total_vfs = xe_sriov_pf_get_totalvfs(xe); > + struct xe_sriov_pf_service_version *version; > + char name[8]; > + > + xe_assert(xe, IS_SRIOV_PF(xe)); > + > + print_pf_version(p, "base", &xe->sriov.pf.service.version.base); > + print_pf_version(p, "latest", &xe->sriov.pf.service.version.latest); > + > + for (n = 1; n <= total_vfs; n++) { > + version = &xe->sriov.pf.vfs[n].version; > + if (!version->major && !version->minor) > + continue; > + > + print_pf_version(p, xe_sriov_function_name(n, name, sizeof(name)), version); > + } > +} > + > +#if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST) > +#include "tests/xe_sriov_pf_service_kunit.c" > +#endif > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_service.h b/drivers/gpu/drm/xe/xe_sriov_pf_service.h > new file mode 100644 > index 000000000000..d38c18f5ed10 > --- /dev/null > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_service.h > @@ -0,0 +1,23 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2025 Intel Corporation > + */ > + > +#ifndef _XE_SRIOV_PF_SERVICE_H_ > +#define _XE_SRIOV_PF_SERVICE_H_ > + > +#include <linux/types.h> > + > +struct drm_printer; > +struct xe_device; > + > +void xe_sriov_pf_service_init(struct xe_device *xe); > +void xe_sriov_pf_service_print_versions(struct xe_device *xe, struct drm_printer *p); > + > +int xe_sriov_pf_service_handshake_vf(struct xe_device *xe, u32 vfid, > + u32 wanted_major, u32 wanted_minor, > + u32 *major, u32 *minor); > +bool xe_sriov_pf_service_is_negotiated(struct xe_device *xe, u32 vfid, u32 major, u32 minor); > +void xe_sriov_pf_service_reset_vf(struct xe_device *xe, unsigned int vfid); > + > +#endif > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_service_types.h b/drivers/gpu/drm/xe/xe_sriov_pf_service_types.h > new file mode 100644 > index 000000000000..0835dde358c1 > --- /dev/null > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_service_types.h > @@ -0,0 +1,36 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2023-2025 Intel Corporation > + */ > + > +#ifndef _XE_SRIOV_PF_SERVICE_TYPES_H_ > +#define _XE_SRIOV_PF_SERVICE_TYPES_H_ > + > +#include <linux/types.h> > + > +/** > + * struct xe_sriov_pf_service_version - VF/PF ABI Version. > + * @major: the major version of the VF/PF ABI > + * @minor: the minor version of the VF/PF ABI > + * > + * See `GuC Relay Communication`_. > + */ > +struct xe_sriov_pf_service_version { > + u16 major; > + u16 minor; > +}; > + > +/** > + * struct xe_sriov_pf_service - Data used by the PF service. > + * @version: information about VF/PF ABI versions for current platform. > + * @version.base: lowest VF/PF ABI version that could be negotiated with VF. > + * @version.latest: latest VF/PF ABI version supported by the PF driver. > + */ > +struct xe_sriov_pf_service { > + struct { > + struct xe_sriov_pf_service_version base; > + struct xe_sriov_pf_service_version latest; > + } version; > +}; > + > +#endif > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_types.h b/drivers/gpu/drm/xe/xe_sriov_pf_types.h > index 918dc089eb1d..956a88f9f213 100644 > --- a/drivers/gpu/drm/xe/xe_sriov_pf_types.h > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_types.h > @@ -9,6 +9,16 @@ > #include <linux/mutex.h> > #include <linux/types.h> > > +#include "xe_sriov_pf_service_types.h" > + > +/** > + * struct xe_sriov_metadata - per-VF device level metadata > + */ > +struct xe_sriov_metadata { > + /** @version: negotiated VF/PF ABI version */ > + struct xe_sriov_pf_service_version version; > +}; > + > /** > * struct xe_device_pf - Xe PF related data > * > @@ -24,6 +34,12 @@ struct xe_device_pf { > > /** @master_lock: protects all VFs configurations across GTs */ > struct mutex master_lock; > + > + /** @service: device level service data. */ > + struct xe_sriov_pf_service service; > + > + /** @vfs: metadata for all VFs. */ > + struct xe_sriov_metadata *vfs; > }; > The code looks fine and seems to work properly. Above, I have left two suggestions for you to consider, and there is also one pice of the old code that needs to be removed. After removing the unnecessary code: Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> > #endif > -- > 2.47.1 > -- ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 5/5] drm/xe/vf: Store negotiated VF/PF ABI version at device level 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko ` (3 preceding siblings ...) 2025-06-24 20:09 ` [PATCH 4/5] drm/xe/pf: Stop requiring VF/PF version negotiation on every GT Michal Wajdeczko @ 2025-06-24 20:09 ` Michal Wajdeczko 2025-06-26 7:55 ` Piotr Piórkowski 2025-06-24 20:37 ` ✗ CI.checkpatch: warning for Relax VF/PF version negotiation Patchwork ` (3 subsequent siblings) 8 siblings, 1 reply; 15+ messages in thread From: Michal Wajdeczko @ 2025-06-24 20:09 UTC (permalink / raw) To: intel-xe; +Cc: Michal Wajdeczko There is no need to maintain PF ABI version on per-GT level. Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> --- drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 30 +++++++++++++---------- drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h | 12 --------- drivers/gpu/drm/xe/xe_sriov_vf_types.h | 14 +++++++++++ 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c index 9b2fc9db55b8..d168264e63ea 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c @@ -686,21 +686,22 @@ static int relay_action_handshake(struct xe_gt *gt, u32 *major, u32 *minor) return 0; } -static void vf_connect_pf(struct xe_gt *gt, u16 major, u16 minor) +static void vf_connect_pf(struct xe_device *xe, u16 major, u16 minor) { - xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); + xe_assert(xe, IS_SRIOV_VF(xe)); - gt->sriov.vf.pf_version.major = major; - gt->sriov.vf.pf_version.minor = minor; + xe->sriov.vf.pf_version.major = major; + xe->sriov.vf.pf_version.minor = minor; } -static void vf_disconnect_pf(struct xe_gt *gt) +static void vf_disconnect_pf(struct xe_device *xe) { - vf_connect_pf(gt, 0, 0); + vf_connect_pf(xe, 0, 0); } static int vf_handshake_with_pf(struct xe_gt *gt) { + struct xe_device *xe = gt_to_xe(gt); u32 major_wanted = GUC_RELAY_VERSION_LATEST_MAJOR; u32 minor_wanted = GUC_RELAY_VERSION_LATEST_MINOR; u32 major = major_wanted, minor = minor_wanted; @@ -716,13 +717,13 @@ static int vf_handshake_with_pf(struct xe_gt *gt) } xe_gt_sriov_dbg(gt, "using VF/PF ABI %u.%u\n", major, minor); - vf_connect_pf(gt, major, minor); + vf_connect_pf(xe, major, minor); return 0; failed: xe_gt_sriov_err(gt, "Unable to confirm VF/PF ABI version %u.%u (%pe)\n", major, minor, ERR_PTR(err)); - vf_disconnect_pf(gt); + vf_disconnect_pf(xe); return err; } @@ -775,10 +776,12 @@ void xe_gt_sriov_vf_migrated_event_handler(struct xe_gt *gt) static bool vf_is_negotiated(struct xe_gt *gt, u16 major, u16 minor) { - xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); + struct xe_device *xe = gt_to_xe(gt); - return major == gt->sriov.vf.pf_version.major && - minor <= gt->sriov.vf.pf_version.minor; + xe_gt_assert(gt, IS_SRIOV_VF(xe)); + + return major == xe->sriov.vf.pf_version.major && + minor <= xe->sriov.vf.pf_version.minor; } static int vf_prepare_runtime_info(struct xe_gt *gt, unsigned int num_regs) @@ -966,7 +969,7 @@ u32 xe_gt_sriov_vf_read32(struct xe_gt *gt, struct xe_reg reg) struct vf_runtime_reg *rr; xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); - xe_gt_assert(gt, gt->sriov.vf.pf_version.major); + xe_gt_assert(gt, gt_to_xe(gt)->sriov.vf.pf_version.major); xe_gt_assert(gt, !reg.vf); if (reg.addr == GMD_ID.addr) { @@ -1073,9 +1076,10 @@ void xe_gt_sriov_vf_print_runtime(struct xe_gt *gt, struct drm_printer *p) */ void xe_gt_sriov_vf_print_version(struct xe_gt *gt, struct drm_printer *p) { + struct xe_device *xe = gt_to_xe(gt); struct xe_uc_fw_version *guc_version = >->sriov.vf.guc_version; struct xe_uc_fw_version *wanted = >->sriov.vf.wanted_guc_version; - struct xe_gt_sriov_vf_relay_version *pf_version = >->sriov.vf.pf_version; + struct xe_sriov_vf_relay_version *pf_version = &xe->sriov.vf.pf_version; struct xe_uc_fw_version ver; xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h index ef041679e9d4..298dedf4b009 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h @@ -9,16 +9,6 @@ #include <linux/types.h> #include "xe_uc_fw_types.h" -/** - * struct xe_gt_sriov_vf_relay_version - PF ABI version details. - */ -struct xe_gt_sriov_vf_relay_version { - /** @major: major version. */ - u16 major; - /** @minor: minor version. */ - u16 minor; -}; - /** * struct xe_gt_sriov_vf_selfconfig - VF configuration data. */ @@ -66,8 +56,6 @@ struct xe_gt_sriov_vf { struct xe_uc_fw_version guc_version; /** @self_config: resource configurations. */ struct xe_gt_sriov_vf_selfconfig self_config; - /** @pf_version: negotiated VF/PF ABI version. */ - struct xe_gt_sriov_vf_relay_version pf_version; /** @runtime: runtime data retrieved from the PF. */ struct xe_gt_sriov_vf_runtime runtime; }; diff --git a/drivers/gpu/drm/xe/xe_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_sriov_vf_types.h index 55c2421d4b2e..8300416a6226 100644 --- a/drivers/gpu/drm/xe/xe_sriov_vf_types.h +++ b/drivers/gpu/drm/xe/xe_sriov_vf_types.h @@ -6,8 +6,19 @@ #ifndef _XE_SRIOV_VF_TYPES_H_ #define _XE_SRIOV_VF_TYPES_H_ +#include <linux/types.h> #include <linux/workqueue_types.h> +/** + * struct xe_sriov_vf_relay_version - PF ABI version details. + */ +struct xe_sriov_vf_relay_version { + /** @major: major version. */ + u16 major; + /** @minor: minor version. */ + u16 minor; +}; + /** * struct xe_device_vf - Xe Virtual Function related data * @@ -15,6 +26,9 @@ * @XE_SRIOV_MODE_VF mode. */ struct xe_device_vf { + /** @pf_version: negotiated VF/PF ABI version. */ + struct xe_sriov_vf_relay_version pf_version; + /** @migration: VF Migration state data */ struct { /** @migration.worker: VF migration recovery worker */ -- 2.47.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 5/5] drm/xe/vf: Store negotiated VF/PF ABI version at device level 2025-06-24 20:09 ` [PATCH 5/5] drm/xe/vf: Store negotiated VF/PF ABI version at device level Michal Wajdeczko @ 2025-06-26 7:55 ` Piotr Piórkowski 0 siblings, 0 replies; 15+ messages in thread From: Piotr Piórkowski @ 2025-06-26 7:55 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on wto [2025-cze-24 22:09:23 +0200]: > There is no need to maintain PF ABI version on per-GT level. > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> > --- > drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 30 +++++++++++++---------- > drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h | 12 --------- > drivers/gpu/drm/xe/xe_sriov_vf_types.h | 14 +++++++++++ > 3 files changed, 31 insertions(+), 25 deletions(-) > > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c > index 9b2fc9db55b8..d168264e63ea 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c > @@ -686,21 +686,22 @@ static int relay_action_handshake(struct xe_gt *gt, u32 *major, u32 *minor) > return 0; > } > > -static void vf_connect_pf(struct xe_gt *gt, u16 major, u16 minor) > +static void vf_connect_pf(struct xe_device *xe, u16 major, u16 minor) > { > - xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); > + xe_assert(xe, IS_SRIOV_VF(xe)); > > - gt->sriov.vf.pf_version.major = major; > - gt->sriov.vf.pf_version.minor = minor; > + xe->sriov.vf.pf_version.major = major; > + xe->sriov.vf.pf_version.minor = minor; > } > > -static void vf_disconnect_pf(struct xe_gt *gt) > +static void vf_disconnect_pf(struct xe_device *xe) > { > - vf_connect_pf(gt, 0, 0); > + vf_connect_pf(xe, 0, 0); > } > > static int vf_handshake_with_pf(struct xe_gt *gt) > { > + struct xe_device *xe = gt_to_xe(gt); > u32 major_wanted = GUC_RELAY_VERSION_LATEST_MAJOR; > u32 minor_wanted = GUC_RELAY_VERSION_LATEST_MINOR; > u32 major = major_wanted, minor = minor_wanted; > @@ -716,13 +717,13 @@ static int vf_handshake_with_pf(struct xe_gt *gt) > } > > xe_gt_sriov_dbg(gt, "using VF/PF ABI %u.%u\n", major, minor); > - vf_connect_pf(gt, major, minor); > + vf_connect_pf(xe, major, minor); > return 0; > > failed: > xe_gt_sriov_err(gt, "Unable to confirm VF/PF ABI version %u.%u (%pe)\n", > major, minor, ERR_PTR(err)); > - vf_disconnect_pf(gt); > + vf_disconnect_pf(xe); > return err; > } > > @@ -775,10 +776,12 @@ void xe_gt_sriov_vf_migrated_event_handler(struct xe_gt *gt) > > static bool vf_is_negotiated(struct xe_gt *gt, u16 major, u16 minor) > { > - xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); > + struct xe_device *xe = gt_to_xe(gt); > > - return major == gt->sriov.vf.pf_version.major && > - minor <= gt->sriov.vf.pf_version.minor; > + xe_gt_assert(gt, IS_SRIOV_VF(xe)); > + > + return major == xe->sriov.vf.pf_version.major && > + minor <= xe->sriov.vf.pf_version.minor; > } > > static int vf_prepare_runtime_info(struct xe_gt *gt, unsigned int num_regs) > @@ -966,7 +969,7 @@ u32 xe_gt_sriov_vf_read32(struct xe_gt *gt, struct xe_reg reg) > struct vf_runtime_reg *rr; > > xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); > - xe_gt_assert(gt, gt->sriov.vf.pf_version.major); > + xe_gt_assert(gt, gt_to_xe(gt)->sriov.vf.pf_version.major); > xe_gt_assert(gt, !reg.vf); > > if (reg.addr == GMD_ID.addr) { > @@ -1073,9 +1076,10 @@ void xe_gt_sriov_vf_print_runtime(struct xe_gt *gt, struct drm_printer *p) > */ > void xe_gt_sriov_vf_print_version(struct xe_gt *gt, struct drm_printer *p) > { > + struct xe_device *xe = gt_to_xe(gt); > struct xe_uc_fw_version *guc_version = >->sriov.vf.guc_version; > struct xe_uc_fw_version *wanted = >->sriov.vf.wanted_guc_version; > - struct xe_gt_sriov_vf_relay_version *pf_version = >->sriov.vf.pf_version; > + struct xe_sriov_vf_relay_version *pf_version = &xe->sriov.vf.pf_version; > struct xe_uc_fw_version ver; > > xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt))); > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h > index ef041679e9d4..298dedf4b009 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h > @@ -9,16 +9,6 @@ > #include <linux/types.h> > #include "xe_uc_fw_types.h" > > -/** > - * struct xe_gt_sriov_vf_relay_version - PF ABI version details. > - */ > -struct xe_gt_sriov_vf_relay_version { > - /** @major: major version. */ > - u16 major; > - /** @minor: minor version. */ > - u16 minor; > -}; > - > /** > * struct xe_gt_sriov_vf_selfconfig - VF configuration data. > */ > @@ -66,8 +56,6 @@ struct xe_gt_sriov_vf { > struct xe_uc_fw_version guc_version; > /** @self_config: resource configurations. */ > struct xe_gt_sriov_vf_selfconfig self_config; > - /** @pf_version: negotiated VF/PF ABI version. */ > - struct xe_gt_sriov_vf_relay_version pf_version; > /** @runtime: runtime data retrieved from the PF. */ > struct xe_gt_sriov_vf_runtime runtime; > }; > diff --git a/drivers/gpu/drm/xe/xe_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_sriov_vf_types.h > index 55c2421d4b2e..8300416a6226 100644 > --- a/drivers/gpu/drm/xe/xe_sriov_vf_types.h > +++ b/drivers/gpu/drm/xe/xe_sriov_vf_types.h > @@ -6,8 +6,19 @@ > #ifndef _XE_SRIOV_VF_TYPES_H_ > #define _XE_SRIOV_VF_TYPES_H_ > > +#include <linux/types.h> > #include <linux/workqueue_types.h> > > +/** > + * struct xe_sriov_vf_relay_version - PF ABI version details. > + */ > +struct xe_sriov_vf_relay_version { > + /** @major: major version. */ > + u16 major; > + /** @minor: minor version. */ > + u16 minor; > +}; > + > /** > * struct xe_device_vf - Xe Virtual Function related data > * > @@ -15,6 +26,9 @@ > * @XE_SRIOV_MODE_VF mode. > */ > struct xe_device_vf { > + /** @pf_version: negotiated VF/PF ABI version. */ > + struct xe_sriov_vf_relay_version pf_version; > + > /** @migration: VF Migration state data */ > struct { > /** @migration.worker: VF migration recovery worker */ LGTM: Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> > -- > 2.47.1 > -- ^ permalink raw reply [flat|nested] 15+ messages in thread
* ✗ CI.checkpatch: warning for Relax VF/PF version negotiation 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko ` (4 preceding siblings ...) 2025-06-24 20:09 ` [PATCH 5/5] drm/xe/vf: Store negotiated VF/PF ABI version at device level Michal Wajdeczko @ 2025-06-24 20:37 ` Patchwork 2025-06-24 20:38 ` ✓ CI.KUnit: success " Patchwork ` (2 subsequent siblings) 8 siblings, 0 replies; 15+ messages in thread From: Patchwork @ 2025-06-24 20:37 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe == Series Details == Series: Relax VF/PF version negotiation URL : https://patchwork.freedesktop.org/series/150711/ State : warning == Summary == + KERNEL=/kernel + git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt Cloning into 'mt'... warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/ + git -C mt rev-list -n1 origin/master f8ff75ae1d2127635239b134695774ed4045d05b + cd /kernel + git config --global --add safe.directory /kernel + git log -n1 commit 8bc0599f5945870d5e0a1e9c9fc692e8aab76c0d Author: Michal Wajdeczko <michal.wajdeczko@intel.com> Date: Tue Jun 24 22:09:23 2025 +0200 drm/xe/vf: Store negotiated VF/PF ABI version at device level There is no need to maintain PF ABI version on per-GT level. Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> + /mt/dim checkpatch e8efdbd16eab3b11b9500cb343b29878f3349d74 drm-intel 2dcd9c493650 drm/xe: Combine PF and VF device data into union 92f0522913c2 drm/xe: Move PF and VF device types to separate headers -:26: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #26: new file mode 100644 total: 0 errors, 1 warnings, 0 checks, 111 lines checked 447a72dfee28 drm/xe/pf: Expose basic info about VFs in debugfs 4dbc8f0f754a drm/xe/pf: Stop requiring VF/PF version negotiation on every GT -:32: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #32: deleted file mode 100644 total: 0 errors, 1 warnings, 0 checks, 815 lines checked 8bc0599f5945 drm/xe/vf: Store negotiated VF/PF ABI version at device level ^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ CI.KUnit: success for Relax VF/PF version negotiation 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko ` (5 preceding siblings ...) 2025-06-24 20:37 ` ✗ CI.checkpatch: warning for Relax VF/PF version negotiation Patchwork @ 2025-06-24 20:38 ` Patchwork 2025-06-24 21:28 ` ✓ Xe.CI.BAT: " Patchwork 2025-06-25 18:48 ` ✗ Xe.CI.Full: failure " Patchwork 8 siblings, 0 replies; 15+ messages in thread From: Patchwork @ 2025-06-24 20:38 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe == Series Details == Series: Relax VF/PF version negotiation URL : https://patchwork.freedesktop.org/series/150711/ State : success == Summary == + trap cleanup EXIT + /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig [20:37:42] Configuring KUnit Kernel ... Generating .config ... Populating config with: $ make ARCH=um O=.kunit olddefconfig [20:37:46] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [20:38:13] Starting KUnit Kernel (1/1)... [20:38:13] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [20:38:13] ================== guc_buf (11 subtests) =================== [20:38:13] [PASSED] test_smallest [20:38:13] [PASSED] test_largest [20:38:13] [PASSED] test_granular [20:38:13] [PASSED] test_unique [20:38:13] [PASSED] test_overlap [20:38:13] [PASSED] test_reusable [20:38:13] [PASSED] test_too_big [20:38:13] [PASSED] test_flush [20:38:13] [PASSED] test_lookup [20:38:13] [PASSED] test_data [20:38:13] [PASSED] test_class [20:38:13] ===================== [PASSED] guc_buf ===================== [20:38:13] =================== guc_dbm (7 subtests) =================== [20:38:13] [PASSED] test_empty [20:38:13] [PASSED] test_default [20:38:13] ======================== test_size ======================== [20:38:13] [PASSED] 4 [20:38:13] [PASSED] 8 [20:38:13] [PASSED] 32 [20:38:13] [PASSED] 256 [20:38:13] ==================== [PASSED] test_size ==================== [20:38:13] ======================= test_reuse ======================== [20:38:13] [PASSED] 4 [20:38:13] [PASSED] 8 [20:38:13] [PASSED] 32 [20:38:13] [PASSED] 256 [20:38:13] =================== [PASSED] test_reuse ==================== [20:38:13] =================== test_range_overlap ==================== [20:38:13] [PASSED] 4 [20:38:13] [PASSED] 8 [20:38:13] [PASSED] 32 [20:38:13] [PASSED] 256 [20:38:13] =============== [PASSED] test_range_overlap ================ [20:38:13] =================== test_range_compact ==================== [20:38:13] [PASSED] 4 [20:38:13] [PASSED] 8 [20:38:13] [PASSED] 32 [20:38:13] [PASSED] 256 [20:38:13] =============== [PASSED] test_range_compact ================ [20:38:13] ==================== test_range_spare ===================== [20:38:13] [PASSED] 4 [20:38:13] [PASSED] 8 [20:38:13] [PASSED] 32 [20:38:13] [PASSED] 256 [20:38:13] ================ [PASSED] test_range_spare ================= [20:38:13] ===================== [PASSED] guc_dbm ===================== [20:38:13] =================== guc_idm (6 subtests) =================== [20:38:13] [PASSED] bad_init [20:38:13] [PASSED] no_init [20:38:13] [PASSED] init_fini [20:38:13] [PASSED] check_used [20:38:13] [PASSED] check_quota [20:38:13] [PASSED] check_all [20:38:13] ===================== [PASSED] guc_idm ===================== [20:38:13] ================== no_relay (3 subtests) =================== [20:38:13] [PASSED] xe_drops_guc2pf_if_not_ready [20:38:13] [PASSED] xe_drops_guc2vf_if_not_ready [20:38:13] [PASSED] xe_rejects_send_if_not_ready [20:38:13] ==================== [PASSED] no_relay ===================== [20:38:13] ================== pf_relay (14 subtests) ================== [20:38:13] [PASSED] pf_rejects_guc2pf_too_short [20:38:13] [PASSED] pf_rejects_guc2pf_too_long [20:38:13] [PASSED] pf_rejects_guc2pf_no_payload [20:38:13] [PASSED] pf_fails_no_payload [20:38:13] [PASSED] pf_fails_bad_origin [20:38:13] [PASSED] pf_fails_bad_type [20:38:13] [PASSED] pf_txn_reports_error [20:38:13] [PASSED] pf_txn_sends_pf2guc [20:38:13] [PASSED] pf_sends_pf2guc [20:38:13] [SKIPPED] pf_loopback_nop [20:38:13] [SKIPPED] pf_loopback_echo [20:38:13] [SKIPPED] pf_loopback_fail [20:38:13] [SKIPPED] pf_loopback_busy [20:38:13] [SKIPPED] pf_loopback_retry [20:38:13] ==================== [PASSED] pf_relay ===================== [20:38:13] ================== vf_relay (3 subtests) =================== [20:38:13] [PASSED] vf_rejects_guc2vf_too_short [20:38:13] [PASSED] vf_rejects_guc2vf_too_long [20:38:13] [PASSED] vf_rejects_guc2vf_no_payload [20:38:13] ==================== [PASSED] vf_relay ===================== [20:38:13] ===================== lmtt (1 subtest) ===================== [20:38:13] ======================== test_ops ========================= [20:38:13] [PASSED] 2-level [20:38:13] [PASSED] multi-level [20:38:13] ==================== [PASSED] test_ops ===================== [20:38:13] ====================== [PASSED] lmtt ======================= [20:38:13] ================= pf_service (11 subtests) ================= [20:38:13] [PASSED] pf_negotiate_any [20:38:13] [PASSED] pf_negotiate_base_match [20:38:13] [PASSED] pf_negotiate_base_newer [20:38:13] [PASSED] pf_negotiate_base_next [20:38:13] [SKIPPED] pf_negotiate_base_older [20:38:13] [PASSED] pf_negotiate_base_prev [20:38:13] [PASSED] pf_negotiate_latest_match [20:38:13] [PASSED] pf_negotiate_latest_newer [20:38:13] [PASSED] pf_negotiate_latest_next [20:38:13] [SKIPPED] pf_negotiate_latest_older [20:38:13] [SKIPPED] pf_negotiate_latest_prev [20:38:13] =================== [PASSED] pf_service ==================== [20:38:13] =================== xe_mocs (2 subtests) =================== [20:38:13] ================ xe_live_mocs_kernel_kunit ================ [20:38:13] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============ [20:38:13] ================ xe_live_mocs_reset_kunit ================= [20:38:13] ============ [SKIPPED] xe_live_mocs_reset_kunit ============ [20:38:13] ==================== [SKIPPED] xe_mocs ===================== [20:38:13] ================= xe_migrate (2 subtests) ================== [20:38:13] ================= xe_migrate_sanity_kunit ================= [20:38:13] ============ [SKIPPED] xe_migrate_sanity_kunit ============= [20:38:13] ================== xe_validate_ccs_kunit ================== [20:38:13] ============= [SKIPPED] xe_validate_ccs_kunit ============== [20:38:13] =================== [SKIPPED] xe_migrate =================== [20:38:13] ================== xe_dma_buf (1 subtest) ================== [20:38:13] ==================== xe_dma_buf_kunit ===================== [20:38:13] ================ [SKIPPED] xe_dma_buf_kunit ================ [20:38:13] =================== [SKIPPED] xe_dma_buf =================== [20:38:13] ================= xe_bo_shrink (1 subtest) ================= [20:38:13] =================== xe_bo_shrink_kunit ==================== [20:38:13] =============== [SKIPPED] xe_bo_shrink_kunit =============== [20:38:13] ================== [SKIPPED] xe_bo_shrink ================== [20:38:13] ==================== xe_bo (2 subtests) ==================== [20:38:13] ================== xe_ccs_migrate_kunit =================== [20:38:13] ============== [SKIPPED] xe_ccs_migrate_kunit ============== [20:38:13] ==================== xe_bo_evict_kunit ==================== [20:38:13] =============== [SKIPPED] xe_bo_evict_kunit ================ [20:38:13] ===================== [SKIPPED] xe_bo ====================== [20:38:13] ==================== args (11 subtests) ==================== [20:38:13] [PASSED] count_args_test [20:38:13] [PASSED] call_args_example [20:38:13] [PASSED] call_args_test [20:38:13] [PASSED] drop_first_arg_example [20:38:13] [PASSED] drop_first_arg_test [20:38:13] [PASSED] first_arg_example [20:38:13] [PASSED] first_arg_test [20:38:13] [PASSED] last_arg_example [20:38:13] [PASSED] last_arg_test [20:38:13] [PASSED] pick_arg_example [20:38:13] [PASSED] sep_comma_example [20:38:13] ====================== [PASSED] args ======================= [20:38:13] =================== xe_pci (2 subtests) ==================== [20:38:13] ==================== check_graphics_ip ==================== [20:38:13] [PASSED] 12.70 Xe_LPG [20:38:13] [PASSED] 12.71 Xe_LPG [20:38:13] [PASSED] 12.74 Xe_LPG+ [20:38:13] [PASSED] 20.01 Xe2_HPG [20:38:13] [PASSED] 20.02 Xe2_HPG [20:38:13] [PASSED] 20.04 Xe2_LPG [20:38:13] [PASSED] 30.00 Xe3_LPG [20:38:13] [PASSED] 30.01 Xe3_LPG [20:38:13] [PASSED] 30.03 Xe3_LPG [20:38:13] ================ [PASSED] check_graphics_ip ================ [20:38:13] ===================== check_media_ip ====================== [20:38:13] [PASSED] 13.00 Xe_LPM+ [20:38:13] [PASSED] 13.01 Xe2_HPM [20:38:13] [PASSED] 20.00 Xe2_LPM [20:38:13] [PASSED] 30.00 Xe3_LPM [20:38:13] [PASSED] 30.02 Xe3_LPM stty: 'standard input': Inappropriate ioctl for device [20:38:13] ================= [PASSED] check_media_ip ================== [20:38:13] ===================== [PASSED] xe_pci ====================== [20:38:13] =================== xe_rtp (2 subtests) ==================== [20:38:13] =============== xe_rtp_process_to_sr_tests ================ [20:38:13] [PASSED] coalesce-same-reg [20:38:13] [PASSED] no-match-no-add [20:38:13] [PASSED] match-or [20:38:13] [PASSED] match-or-xfail [20:38:13] [PASSED] no-match-no-add-multiple-rules [20:38:13] [PASSED] two-regs-two-entries [20:38:13] [PASSED] clr-one-set-other [20:38:13] [PASSED] set-field [20:38:13] [PASSED] conflict-duplicate [20:38:13] [PASSED] conflict-not-disjoint [20:38:13] [PASSED] conflict-reg-type [20:38:13] =========== [PASSED] xe_rtp_process_to_sr_tests ============ [20:38:13] ================== xe_rtp_process_tests =================== [20:38:13] [PASSED] active1 [20:38:13] [PASSED] active2 [20:38:13] [PASSED] active-inactive [20:38:13] [PASSED] inactive-active [20:38:13] [PASSED] inactive-1st_or_active-inactive [20:38:13] [PASSED] inactive-2nd_or_active-inactive [20:38:13] [PASSED] inactive-last_or_active-inactive [20:38:13] [PASSED] inactive-no_or_active-inactive [20:38:13] ============== [PASSED] xe_rtp_process_tests =============== [20:38:13] ===================== [PASSED] xe_rtp ====================== [20:38:13] ==================== xe_wa (1 subtest) ===================== [20:38:13] ======================== xe_wa_gt ========================= [20:38:13] [PASSED] TIGERLAKE (B0) [20:38:13] [PASSED] DG1 (A0) [20:38:13] [PASSED] DG1 (B0) [20:38:13] [PASSED] ALDERLAKE_S (A0) [20:38:13] [PASSED] ALDERLAKE_S (B0) [20:38:13] [PASSED] ALDERLAKE_S (C0) [20:38:13] [PASSED] ALDERLAKE_S (D0) [20:38:13] [PASSED] ALDERLAKE_P (A0) [20:38:13] [PASSED] ALDERLAKE_P (B0) [20:38:13] [PASSED] ALDERLAKE_P (C0) [20:38:13] [PASSED] ALDERLAKE_S_RPLS (D0) [20:38:13] [PASSED] ALDERLAKE_P_RPLU (E0) [20:38:13] [PASSED] DG2_G10 (C0) [20:38:13] [PASSED] DG2_G11 (B1) [20:38:13] [PASSED] DG2_G12 (A1) [20:38:13] [PASSED] METEORLAKE (g:A0, m:A0) [20:38:13] [PASSED] METEORLAKE (g:A0, m:A0) [20:38:13] [PASSED] METEORLAKE (g:A0, m:A0) [20:38:13] [PASSED] LUNARLAKE (g:A0, m:A0) [20:38:13] [PASSED] LUNARLAKE (g:B0, m:A0) [20:38:13] [PASSED] BATTLEMAGE (g:A0, m:A1) [20:38:13] ==================== [PASSED] xe_wa_gt ===================== [20:38:13] ====================== [PASSED] xe_wa ====================== [20:38:13] ============================================================ [20:38:13] Testing complete. Ran 145 tests: passed: 129, skipped: 16 [20:38:13] Elapsed time: 31.430s total, 4.196s configuring, 26.918s building, 0.297s running + /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig [20:38:13] Configuring KUnit Kernel ... Regenerating .config ... Populating config with: $ make ARCH=um O=.kunit olddefconfig [20:38:15] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [20:38:36] Starting KUnit Kernel (1/1)... [20:38:36] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [20:38:36] == drm_test_atomic_get_connector_for_encoder (1 subtest) === [20:38:36] [PASSED] drm_test_drm_atomic_get_connector_for_encoder [20:38:36] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ==== [20:38:36] =========== drm_validate_clone_mode (2 subtests) =========== [20:38:36] ============== drm_test_check_in_clone_mode =============== [20:38:36] [PASSED] in_clone_mode [20:38:36] [PASSED] not_in_clone_mode [20:38:36] ========== [PASSED] drm_test_check_in_clone_mode =========== [20:38:36] =============== drm_test_check_valid_clones =============== [20:38:36] [PASSED] not_in_clone_mode [20:38:36] [PASSED] valid_clone [20:38:36] [PASSED] invalid_clone [20:38:36] =========== [PASSED] drm_test_check_valid_clones =========== [20:38:36] ============= [PASSED] drm_validate_clone_mode ============= [20:38:36] ============= drm_validate_modeset (1 subtest) ============= [20:38:36] [PASSED] drm_test_check_connector_changed_modeset [20:38:36] ============== [PASSED] drm_validate_modeset =============== [20:38:36] ====== drm_test_bridge_get_current_state (2 subtests) ====== [20:38:36] [PASSED] drm_test_drm_bridge_get_current_state_atomic [20:38:36] [PASSED] drm_test_drm_bridge_get_current_state_legacy [20:38:36] ======== [PASSED] drm_test_bridge_get_current_state ======== [20:38:36] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ====== [20:38:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic [20:38:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled [20:38:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy [20:38:36] ======== [PASSED] drm_test_bridge_helper_reset_crtc ======== [20:38:36] ============== drm_bridge_alloc (2 subtests) =============== [20:38:36] [PASSED] drm_test_drm_bridge_alloc_basic [20:38:36] [PASSED] drm_test_drm_bridge_alloc_get_put [20:38:36] ================ [PASSED] drm_bridge_alloc ================= [20:38:36] ================== drm_buddy (7 subtests) ================== [20:38:36] [PASSED] drm_test_buddy_alloc_limit [20:38:36] [PASSED] drm_test_buddy_alloc_optimistic [20:38:36] [PASSED] drm_test_buddy_alloc_pessimistic [20:38:36] [PASSED] drm_test_buddy_alloc_pathological [20:38:36] [PASSED] drm_test_buddy_alloc_contiguous [20:38:36] [PASSED] drm_test_buddy_alloc_clear [20:38:36] [PASSED] drm_test_buddy_alloc_range_bias [20:38:36] ==================== [PASSED] drm_buddy ==================== [20:38:36] ============= drm_cmdline_parser (40 subtests) ============= [20:38:36] [PASSED] drm_test_cmdline_force_d_only [20:38:36] [PASSED] drm_test_cmdline_force_D_only_dvi [20:38:36] [PASSED] drm_test_cmdline_force_D_only_hdmi [20:38:36] [PASSED] drm_test_cmdline_force_D_only_not_digital [20:38:36] [PASSED] drm_test_cmdline_force_e_only [20:38:36] [PASSED] drm_test_cmdline_res [20:38:36] [PASSED] drm_test_cmdline_res_vesa [20:38:36] [PASSED] drm_test_cmdline_res_vesa_rblank [20:38:36] [PASSED] drm_test_cmdline_res_rblank [20:38:36] [PASSED] drm_test_cmdline_res_bpp [20:38:36] [PASSED] drm_test_cmdline_res_refresh [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh_margins [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital [20:38:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on [20:38:36] [PASSED] drm_test_cmdline_res_margins_force_on [20:38:36] [PASSED] drm_test_cmdline_res_vesa_margins [20:38:36] [PASSED] drm_test_cmdline_name [20:38:36] [PASSED] drm_test_cmdline_name_bpp [20:38:36] [PASSED] drm_test_cmdline_name_option [20:38:36] [PASSED] drm_test_cmdline_name_bpp_option [20:38:36] [PASSED] drm_test_cmdline_rotate_0 [20:38:36] [PASSED] drm_test_cmdline_rotate_90 [20:38:36] [PASSED] drm_test_cmdline_rotate_180 [20:38:36] [PASSED] drm_test_cmdline_rotate_270 [20:38:36] [PASSED] drm_test_cmdline_hmirror [20:38:36] [PASSED] drm_test_cmdline_vmirror [20:38:36] [PASSED] drm_test_cmdline_margin_options [20:38:36] [PASSED] drm_test_cmdline_multiple_options [20:38:36] [PASSED] drm_test_cmdline_bpp_extra_and_option [20:38:36] [PASSED] drm_test_cmdline_extra_and_option [20:38:36] [PASSED] drm_test_cmdline_freestanding_options [20:38:36] [PASSED] drm_test_cmdline_freestanding_force_e_and_options [20:38:36] [PASSED] drm_test_cmdline_panel_orientation [20:38:36] ================ drm_test_cmdline_invalid ================= [20:38:36] [PASSED] margin_only [20:38:36] [PASSED] interlace_only [20:38:36] [PASSED] res_missing_x [20:38:36] [PASSED] res_missing_y [20:38:36] [PASSED] res_bad_y [20:38:36] [PASSED] res_missing_y_bpp [20:38:36] [PASSED] res_bad_bpp [20:38:36] [PASSED] res_bad_refresh [20:38:36] [PASSED] res_bpp_refresh_force_on_off [20:38:36] [PASSED] res_invalid_mode [20:38:36] [PASSED] res_bpp_wrong_place_mode [20:38:36] [PASSED] name_bpp_refresh [20:38:36] [PASSED] name_refresh [20:38:36] [PASSED] name_refresh_wrong_mode [20:38:36] [PASSED] name_refresh_invalid_mode [20:38:36] [PASSED] rotate_multiple [20:38:36] [PASSED] rotate_invalid_val [20:38:36] [PASSED] rotate_truncated [20:38:36] [PASSED] invalid_option [20:38:36] [PASSED] invalid_tv_option [20:38:36] [PASSED] truncated_tv_option [20:38:36] ============ [PASSED] drm_test_cmdline_invalid ============= [20:38:36] =============== drm_test_cmdline_tv_options =============== [20:38:36] [PASSED] NTSC [20:38:36] [PASSED] NTSC_443 [20:38:36] [PASSED] NTSC_J [20:38:36] [PASSED] PAL [20:38:36] [PASSED] PAL_M [20:38:36] [PASSED] PAL_N [20:38:36] [PASSED] SECAM [20:38:36] [PASSED] MONO_525 [20:38:36] [PASSED] MONO_625 [20:38:36] =========== [PASSED] drm_test_cmdline_tv_options =========== [20:38:36] =============== [PASSED] drm_cmdline_parser ================ [20:38:36] ========== drmm_connector_hdmi_init (20 subtests) ========== [20:38:36] [PASSED] drm_test_connector_hdmi_init_valid [20:38:36] [PASSED] drm_test_connector_hdmi_init_bpc_8 [20:38:36] [PASSED] drm_test_connector_hdmi_init_bpc_10 [20:38:36] [PASSED] drm_test_connector_hdmi_init_bpc_12 [20:38:36] [PASSED] drm_test_connector_hdmi_init_bpc_invalid [20:38:36] [PASSED] drm_test_connector_hdmi_init_bpc_null [20:38:36] [PASSED] drm_test_connector_hdmi_init_formats_empty [20:38:36] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb [20:38:36] === drm_test_connector_hdmi_init_formats_yuv420_allowed === [20:38:36] [PASSED] supported_formats=0x9 yuv420_allowed=1 [20:38:36] [PASSED] supported_formats=0x9 yuv420_allowed=0 [20:38:36] [PASSED] supported_formats=0x3 yuv420_allowed=1 [20:38:36] [PASSED] supported_formats=0x3 yuv420_allowed=0 [20:38:36] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed === [20:38:36] [PASSED] drm_test_connector_hdmi_init_null_ddc [20:38:36] [PASSED] drm_test_connector_hdmi_init_null_product [20:38:36] [PASSED] drm_test_connector_hdmi_init_null_vendor [20:38:36] [PASSED] drm_test_connector_hdmi_init_product_length_exact [20:38:36] [PASSED] drm_test_connector_hdmi_init_product_length_too_long [20:38:36] [PASSED] drm_test_connector_hdmi_init_product_valid [20:38:36] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact [20:38:36] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long [20:38:36] [PASSED] drm_test_connector_hdmi_init_vendor_valid [20:38:36] ========= drm_test_connector_hdmi_init_type_valid ========= [20:38:36] [PASSED] HDMI-A [20:38:36] [PASSED] HDMI-B [20:38:36] ===== [PASSED] drm_test_connector_hdmi_init_type_valid ===== [20:38:36] ======== drm_test_connector_hdmi_init_type_invalid ======== [20:38:36] [PASSED] Unknown [20:38:36] [PASSED] VGA [20:38:36] [PASSED] DVI-I [20:38:36] [PASSED] DVI-D [20:38:36] [PASSED] DVI-A [20:38:36] [PASSED] Composite [20:38:36] [PASSED] SVIDEO [20:38:36] [PASSED] LVDS [20:38:36] [PASSED] Component [20:38:36] [PASSED] DIN [20:38:36] [PASSED] DP [20:38:36] [PASSED] TV [20:38:36] [PASSED] eDP [20:38:36] [PASSED] Virtual [20:38:36] [PASSED] DSI [20:38:36] [PASSED] DPI [20:38:36] [PASSED] Writeback [20:38:36] [PASSED] SPI [20:38:36] [PASSED] USB [20:38:36] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ==== [20:38:36] ============ [PASSED] drmm_connector_hdmi_init ============= [20:38:36] ============= drmm_connector_init (3 subtests) ============= [20:38:36] [PASSED] drm_test_drmm_connector_init [20:38:36] [PASSED] drm_test_drmm_connector_init_null_ddc [20:38:36] ========= drm_test_drmm_connector_init_type_valid ========= [20:38:36] [PASSED] Unknown [20:38:36] [PASSED] VGA [20:38:36] [PASSED] DVI-I [20:38:36] [PASSED] DVI-D [20:38:36] [PASSED] DVI-A [20:38:36] [PASSED] Composite [20:38:36] [PASSED] SVIDEO [20:38:36] [PASSED] LVDS [20:38:36] [PASSED] Component [20:38:36] [PASSED] DIN [20:38:36] [PASSED] DP [20:38:36] [PASSED] HDMI-A [20:38:36] [PASSED] HDMI-B [20:38:36] [PASSED] TV [20:38:36] [PASSED] eDP [20:38:36] [PASSED] Virtual [20:38:36] [PASSED] DSI [20:38:36] [PASSED] DPI [20:38:36] [PASSED] Writeback [20:38:36] [PASSED] SPI [20:38:36] [PASSED] USB [20:38:36] ===== [PASSED] drm_test_drmm_connector_init_type_valid ===== [20:38:36] =============== [PASSED] drmm_connector_init =============== [20:38:36] ========= drm_connector_dynamic_init (6 subtests) ========== [20:38:36] [PASSED] drm_test_drm_connector_dynamic_init [20:38:36] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc [20:38:36] [PASSED] drm_test_drm_connector_dynamic_init_not_added [20:38:36] [PASSED] drm_test_drm_connector_dynamic_init_properties [20:38:36] ===== drm_test_drm_connector_dynamic_init_type_valid ====== [20:38:36] [PASSED] Unknown [20:38:36] [PASSED] VGA [20:38:36] [PASSED] DVI-I [20:38:36] [PASSED] DVI-D [20:38:36] [PASSED] DVI-A [20:38:36] [PASSED] Composite [20:38:36] [PASSED] SVIDEO [20:38:36] [PASSED] LVDS [20:38:36] [PASSED] Component [20:38:36] [PASSED] DIN [20:38:36] [PASSED] DP [20:38:36] [PASSED] HDMI-A [20:38:36] [PASSED] HDMI-B [20:38:36] [PASSED] TV [20:38:36] [PASSED] eDP [20:38:36] [PASSED] Virtual [20:38:36] [PASSED] DSI [20:38:36] [PASSED] DPI [20:38:36] [PASSED] Writeback [20:38:36] [PASSED] SPI [20:38:36] [PASSED] USB [20:38:36] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid == [20:38:36] ======== drm_test_drm_connector_dynamic_init_name ========= [20:38:36] [PASSED] Unknown [20:38:36] [PASSED] VGA [20:38:36] [PASSED] DVI-I [20:38:36] [PASSED] DVI-D [20:38:36] [PASSED] DVI-A [20:38:36] [PASSED] Composite [20:38:36] [PASSED] SVIDEO [20:38:36] [PASSED] LVDS [20:38:36] [PASSED] Component [20:38:36] [PASSED] DIN [20:38:36] [PASSED] DP [20:38:36] [PASSED] HDMI-A [20:38:36] [PASSED] HDMI-B [20:38:36] [PASSED] TV [20:38:36] [PASSED] eDP [20:38:36] [PASSED] Virtual [20:38:36] [PASSED] DSI [20:38:36] [PASSED] DPI [20:38:36] [PASSED] Writeback [20:38:36] [PASSED] SPI [20:38:36] [PASSED] USB [20:38:36] ==== [PASSED] drm_test_drm_connector_dynamic_init_name ===== [20:38:36] =========== [PASSED] drm_connector_dynamic_init ============ [20:38:36] ==== drm_connector_dynamic_register_early (4 subtests) ===== [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_early_defer [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object [20:38:36] ====== [PASSED] drm_connector_dynamic_register_early ======= [20:38:36] ======= drm_connector_dynamic_register (7 subtests) ======== [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_on_list [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_no_defer [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_no_init [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_mode_object [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_sysfs [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name [20:38:36] [PASSED] drm_test_drm_connector_dynamic_register_debugfs [20:38:36] ========= [PASSED] drm_connector_dynamic_register ========== [20:38:36] = drm_connector_attach_broadcast_rgb_property (2 subtests) = [20:38:36] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property [20:38:36] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector [20:38:36] === [PASSED] drm_connector_attach_broadcast_rgb_property === [20:38:36] ========== drm_get_tv_mode_from_name (2 subtests) ========== [20:38:36] ========== drm_test_get_tv_mode_from_name_valid =========== [20:38:36] [PASSED] NTSC [20:38:36] [PASSED] NTSC-443 [20:38:36] [PASSED] NTSC-J [20:38:36] [PASSED] PAL [20:38:36] [PASSED] PAL-M [20:38:36] [PASSED] PAL-N [20:38:36] [PASSED] SECAM [20:38:36] [PASSED] Mono [20:38:36] ====== [PASSED] drm_test_get_tv_mode_from_name_valid ======= [20:38:36] [PASSED] drm_test_get_tv_mode_from_name_truncated [20:38:36] ============ [PASSED] drm_get_tv_mode_from_name ============ [20:38:36] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) = [20:38:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb [20:38:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc [20:38:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1 [20:38:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc [20:38:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1 [20:38:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double [20:38:36] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid = [20:38:36] [PASSED] VIC 96 [20:38:36] [PASSED] VIC 97 [20:38:36] [PASSED] VIC 101 [20:38:36] [PASSED] VIC 102 [20:38:36] [PASSED] VIC 106 [20:38:36] [PASSED] VIC 107 [20:38:36] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid === [20:38:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc [20:38:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc [20:38:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc [20:38:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc [20:38:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc [20:38:36] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ==== [20:38:36] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) == [20:38:36] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ==== [20:38:36] [PASSED] Automatic [20:38:36] [PASSED] Full [20:38:36] [PASSED] Limited 16:235 [20:38:36] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name === [20:38:36] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid [20:38:36] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ==== [20:38:36] == drm_hdmi_connector_get_output_format_name (2 subtests) == [20:38:36] === drm_test_drm_hdmi_connector_get_output_format_name ==== [20:38:36] [PASSED] RGB [20:38:36] [PASSED] YUV 4:2:0 [20:38:36] [PASSED] YUV 4:2:2 [20:38:36] [PASSED] YUV 4:4:4 [20:38:36] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name === [20:38:36] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid [20:38:36] ==== [PASSED] drm_hdmi_connector_get_output_format_name ==== [20:38:36] ============= drm_damage_helper (21 subtests) ============== [20:38:36] [PASSED] drm_test_damage_iter_no_damage [20:38:36] [PASSED] drm_test_damage_iter_no_damage_fractional_src [20:38:36] [PASSED] drm_test_damage_iter_no_damage_src_moved [20:38:36] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved [20:38:36] [PASSED] drm_test_damage_iter_no_damage_not_visible [20:38:36] [PASSED] drm_test_damage_iter_no_damage_no_crtc [20:38:36] [PASSED] drm_test_damage_iter_no_damage_no_fb [20:38:36] [PASSED] drm_test_damage_iter_simple_damage [20:38:36] [PASSED] drm_test_damage_iter_single_damage [20:38:36] [PASSED] drm_test_damage_iter_single_damage_intersect_src [20:38:36] [PASSED] drm_test_damage_iter_single_damage_outside_src [20:38:36] [PASSED] drm_test_damage_iter_single_damage_fractional_src [20:38:36] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src [20:38:36] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src [20:38:36] [PASSED] drm_test_damage_iter_single_damage_src_moved [20:38:36] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved [20:38:36] [PASSED] drm_test_damage_iter_damage [20:38:36] [PASSED] drm_test_damage_iter_damage_one_intersect [20:38:36] [PASSED] drm_test_damage_iter_damage_one_outside [20:38:36] [PASSED] drm_test_damage_iter_damage_src_moved [20:38:36] [PASSED] drm_test_damage_iter_damage_not_visible [20:38:36] ================ [PASSED] drm_damage_helper ================ [20:38:36] ============== drm_dp_mst_helper (3 subtests) ============== [20:38:36] ============== drm_test_dp_mst_calc_pbn_mode ============== [20:38:36] [PASSED] Clock 154000 BPP 30 DSC disabled [20:38:36] [PASSED] Clock 234000 BPP 30 DSC disabled [20:38:36] [PASSED] Clock 297000 BPP 24 DSC disabled [20:38:36] [PASSED] Clock 332880 BPP 24 DSC enabled [20:38:36] [PASSED] Clock 324540 BPP 24 DSC enabled [20:38:36] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ========== [20:38:36] ============== drm_test_dp_mst_calc_pbn_div =============== [20:38:36] [PASSED] Link rate 2000000 lane count 4 [20:38:36] [PASSED] Link rate 2000000 lane count 2 [20:38:36] [PASSED] Link rate 2000000 lane count 1 [20:38:36] [PASSED] Link rate 1350000 lane count 4 [20:38:36] [PASSED] Link rate 1350000 lane count 2 [20:38:36] [PASSED] Link rate 1350000 lane count 1 [20:38:36] [PASSED] Link rate 1000000 lane count 4 [20:38:36] [PASSED] Link rate 1000000 lane count 2 [20:38:36] [PASSED] Link rate 1000000 lane count 1 [20:38:36] [PASSED] Link rate 810000 lane count 4 [20:38:36] [PASSED] Link rate 810000 lane count 2 [20:38:36] [PASSED] Link rate 810000 lane count 1 [20:38:36] [PASSED] Link rate 540000 lane count 4 [20:38:36] [PASSED] Link rate 540000 lane count 2 [20:38:36] [PASSED] Link rate 540000 lane count 1 [20:38:36] [PASSED] Link rate 270000 lane count 4 [20:38:36] [PASSED] Link rate 270000 lane count 2 [20:38:36] [PASSED] Link rate 270000 lane count 1 [20:38:36] [PASSED] Link rate 162000 lane count 4 [20:38:36] [PASSED] Link rate 162000 lane count 2 [20:38:36] [PASSED] Link rate 162000 lane count 1 [20:38:36] ========== [PASSED] drm_test_dp_mst_calc_pbn_div =========== [20:38:36] ========= drm_test_dp_mst_sideband_msg_req_decode ========= [20:38:36] [PASSED] DP_ENUM_PATH_RESOURCES with port number [20:38:36] [PASSED] DP_POWER_UP_PHY with port number [20:38:36] [PASSED] DP_POWER_DOWN_PHY with port number [20:38:36] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks [20:38:36] [PASSED] DP_ALLOCATE_PAYLOAD with port number [20:38:36] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI [20:38:36] [PASSED] DP_ALLOCATE_PAYLOAD with PBN [20:38:36] [PASSED] DP_QUERY_PAYLOAD with port number [20:38:36] [PASSED] DP_QUERY_PAYLOAD with VCPI [20:38:36] [PASSED] DP_REMOTE_DPCD_READ with port number [20:38:36] [PASSED] DP_REMOTE_DPCD_READ with DPCD address [20:38:36] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes [20:38:36] [PASSED] DP_REMOTE_DPCD_WRITE with port number [20:38:36] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address [20:38:36] [PASSED] DP_REMOTE_DPCD_WRITE with data array [20:38:36] [PASSED] DP_REMOTE_I2C_READ with port number [20:38:36] [PASSED] DP_REMOTE_I2C_READ with I2C device ID [20:38:36] [PASSED] DP_REMOTE_I2C_READ with transactions array [20:38:36] [PASSED] DP_REMOTE_I2C_WRITE with port number [20:38:36] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID [20:38:36] [PASSED] DP_REMOTE_I2C_WRITE with data array [20:38:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID [20:38:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID [20:38:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event [20:38:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event [20:38:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior [20:38:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior [20:38:36] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode ===== [20:38:36] ================ [PASSED] drm_dp_mst_helper ================ [20:38:36] ================== drm_exec (7 subtests) =================== [20:38:36] [PASSED] sanitycheck [20:38:36] [PASSED] test_lock [20:38:36] [PASSED] test_lock_unlock [20:38:36] [PASSED] test_duplicates [20:38:36] [PASSED] test_prepare [20:38:36] [PASSED] test_prepare_array [20:38:36] [PASSED] test_multiple_loops [20:38:36] ==================== [PASSED] drm_exec ===================== [20:38:36] =========== drm_format_helper_test (17 subtests) =========== [20:38:36] ============== drm_test_fb_xrgb8888_to_gray8 ============== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ========== [20:38:36] ============= drm_test_fb_xrgb8888_to_rgb332 ============== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ========== [20:38:36] ============= drm_test_fb_xrgb8888_to_rgb565 ============== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ========== [20:38:36] ============ drm_test_fb_xrgb8888_to_xrgb1555 ============= [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 ========= [20:38:36] ============ drm_test_fb_xrgb8888_to_argb1555 ============= [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 ========= [20:38:36] ============ drm_test_fb_xrgb8888_to_rgba5551 ============= [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 ========= [20:38:36] ============= drm_test_fb_xrgb8888_to_rgb888 ============== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ========== [20:38:36] ============= drm_test_fb_xrgb8888_to_bgr888 ============== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ========== [20:38:36] ============ drm_test_fb_xrgb8888_to_argb8888 ============= [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 ========= [20:38:36] =========== drm_test_fb_xrgb8888_to_xrgb2101010 =========== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 ======= [20:38:36] =========== drm_test_fb_xrgb8888_to_argb2101010 =========== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 ======= [20:38:36] ============== drm_test_fb_xrgb8888_to_mono =============== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ========== [PASSED] drm_test_fb_xrgb8888_to_mono =========== [20:38:36] ==================== drm_test_fb_swab ===================== [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ================ [PASSED] drm_test_fb_swab ================= [20:38:36] ============ drm_test_fb_xrgb8888_to_xbgr8888 ============= [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 ========= [20:38:36] ============ drm_test_fb_xrgb8888_to_abgr8888 ============= [20:38:36] [PASSED] single_pixel_source_buffer [20:38:36] [PASSED] single_pixel_clip_rectangle [20:38:36] [PASSED] well_known_colors [20:38:36] [PASSED] destination_pitch [20:38:36] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 ========= [20:38:36] ================= drm_test_fb_clip_offset ================= [20:38:36] [PASSED] pass through [20:38:36] [PASSED] horizontal offset [20:38:36] [PASSED] vertical offset [20:38:36] [PASSED] horizontal and vertical offset [20:38:36] [PASSED] horizontal offset (custom pitch) [20:38:36] [PASSED] vertical offset (custom pitch) [20:38:36] [PASSED] horizontal and vertical offset (custom pitch) [20:38:36] ============= [PASSED] drm_test_fb_clip_offset ============= [20:38:36] =================== drm_test_fb_memcpy ==================== [20:38:36] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258) [20:38:36] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258) [20:38:36] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559) [20:38:36] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258) [20:38:36] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258) [20:38:36] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559) [20:38:36] [PASSED] well_known_colors: XB24 little-endian (0x34324258) [20:38:36] [PASSED] well_known_colors: XRA8 little-endian (0x38415258) [20:38:36] [PASSED] well_known_colors: YU24 little-endian (0x34325559) [20:38:36] [PASSED] destination_pitch: XB24 little-endian (0x34324258) [20:38:36] [PASSED] destination_pitch: XRA8 little-endian (0x38415258) [20:38:36] [PASSED] destination_pitch: YU24 little-endian (0x34325559) [20:38:36] =============== [PASSED] drm_test_fb_memcpy ================ [20:38:36] ============= [PASSED] drm_format_helper_test ============== [20:38:36] ================= drm_format (18 subtests) ================= [20:38:36] [PASSED] drm_test_format_block_width_invalid [20:38:36] [PASSED] drm_test_format_block_width_one_plane [20:38:36] [PASSED] drm_test_format_block_width_two_plane [20:38:36] [PASSED] drm_test_format_block_width_three_plane [20:38:36] [PASSED] drm_test_format_block_width_tiled [20:38:36] [PASSED] drm_test_format_block_height_invalid [20:38:36] [PASSED] drm_test_format_block_height_one_plane [20:38:36] [PASSED] drm_test_format_block_height_two_plane [20:38:36] [PASSED] drm_test_format_block_height_three_plane [20:38:36] [PASSED] drm_test_format_block_height_tiled [20:38:36] [PASSED] drm_test_format_min_pitch_invalid [20:38:36] [PASSED] drm_test_format_min_pitch_one_plane_8bpp [20:38:36] [PASSED] drm_test_format_min_pitch_one_plane_16bpp [20:38:36] [PASSED] drm_test_format_min_pitch_one_plane_24bpp [20:38:36] [PASSED] drm_test_format_min_pitch_one_plane_32bpp [20:38:36] [PASSED] drm_test_format_min_pitch_two_plane [20:38:36] [PASSED] drm_test_format_min_pitch_three_plane_8bpp [20:38:36] [PASSED] drm_test_format_min_pitch_tiled [20:38:36] =================== [PASSED] drm_format ==================== [20:38:36] ============== drm_framebuffer (10 subtests) =============== [20:38:36] ========== drm_test_framebuffer_check_src_coords ========== [20:38:36] [PASSED] Success: source fits into fb [20:38:36] [PASSED] Fail: overflowing fb with x-axis coordinate [20:38:36] [PASSED] Fail: overflowing fb with y-axis coordinate [20:38:36] [PASSED] Fail: overflowing fb with source width [20:38:36] [PASSED] Fail: overflowing fb with source height [20:38:36] ====== [PASSED] drm_test_framebuffer_check_src_coords ====== [20:38:36] [PASSED] drm_test_framebuffer_cleanup [20:38:36] =============== drm_test_framebuffer_create =============== [20:38:36] [PASSED] ABGR8888 normal sizes [20:38:36] [PASSED] ABGR8888 max sizes [20:38:36] [PASSED] ABGR8888 pitch greater than min required [20:38:36] [PASSED] ABGR8888 pitch less than min required [20:38:36] [PASSED] ABGR8888 Invalid width [20:38:36] [PASSED] ABGR8888 Invalid buffer handle [20:38:36] [PASSED] No pixel format [20:38:36] [PASSED] ABGR8888 Width 0 [20:38:36] [PASSED] ABGR8888 Height 0 [20:38:36] [PASSED] ABGR8888 Out of bound height * pitch combination [20:38:36] [PASSED] ABGR8888 Large buffer offset [20:38:36] [PASSED] ABGR8888 Buffer offset for inexistent plane [20:38:36] [PASSED] ABGR8888 Invalid flag [20:38:36] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers [20:38:36] [PASSED] ABGR8888 Valid buffer modifier [20:38:36] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE) [20:38:36] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS [20:38:36] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS [20:38:36] [PASSED] NV12 Normal sizes [20:38:36] [PASSED] NV12 Max sizes [20:38:36] [PASSED] NV12 Invalid pitch [20:38:36] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag [20:38:36] [PASSED] NV12 different modifier per-plane [20:38:36] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE [20:38:36] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS [20:38:36] [PASSED] NV12 Modifier for inexistent plane [20:38:36] [PASSED] NV12 Handle for inexistent plane [20:38:36] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS [20:38:36] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier [20:38:36] [PASSED] YVU420 Normal sizes [20:38:36] [PASSED] YVU420 Max sizes [20:38:36] [PASSED] YVU420 Invalid pitch [20:38:36] [PASSED] YVU420 Different pitches [20:38:36] [PASSED] YVU420 Different buffer offsets/pitches [20:38:36] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS [20:38:36] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS [20:38:36] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS [20:38:36] [PASSED] YVU420 Valid modifier [20:38:36] [PASSED] YVU420 Different modifiers per plane [20:38:36] [PASSED] YVU420 Modifier for inexistent plane [20:38:36] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR) [20:38:36] [PASSED] X0L2 Normal sizes [20:38:36] [PASSED] X0L2 Max sizes [20:38:36] [PASSED] X0L2 Invalid pitch [20:38:36] [PASSED] X0L2 Pitch greater than minimum required [20:38:36] [PASSED] X0L2 Handle for inexistent plane [20:38:36] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set [20:38:36] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set [20:38:36] [PASSED] X0L2 Valid modifier [20:38:36] [PASSED] X0L2 Modifier for inexistent plane [20:38:36] =========== [PASSED] drm_test_framebuffer_create =========== [20:38:36] [PASSED] drm_test_framebuffer_free [20:38:36] [PASSED] drm_test_framebuffer_init [20:38:36] [PASSED] drm_test_framebuffer_init_bad_format [20:38:36] [PASSED] drm_test_framebuffer_init_dev_mismatch [20:38:36] [PASSED] drm_test_framebuffer_lookup [20:38:36] [PASSED] drm_test_framebuffer_lookup_inexistent [20:38:36] [PASSED] drm_test_framebuffer_modifiers_not_supported [20:38:36] ================= [PASSED] drm_framebuffer ================= [20:38:36] ================ drm_gem_shmem (8 subtests) ================ [20:38:36] [PASSED] drm_gem_shmem_test_obj_create [20:38:36] [PASSED] drm_gem_shmem_test_obj_create_private [20:38:36] [PASSED] drm_gem_shmem_test_pin_pages [20:38:36] [PASSED] drm_gem_shmem_test_vmap [20:38:36] [PASSED] drm_gem_shmem_test_get_pages_sgt [20:38:36] [PASSED] drm_gem_shmem_test_get_sg_table [20:38:36] [PASSED] drm_gem_shmem_test_madvise [20:38:36] [PASSED] drm_gem_shmem_test_purge [20:38:36] ================== [PASSED] drm_gem_shmem ================== [20:38:36] === drm_atomic_helper_connector_hdmi_check (27 subtests) === [20:38:36] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode [20:38:36] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1 [20:38:36] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode [20:38:36] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1 [20:38:36] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode [20:38:36] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1 [20:38:36] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 ======= [20:38:36] [PASSED] Automatic [20:38:36] [PASSED] Full [20:38:36] [PASSED] Limited 16:235 [20:38:36] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 === [20:38:36] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed [20:38:36] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed [20:38:36] [PASSED] drm_test_check_disable_connector [20:38:36] [PASSED] drm_test_check_hdmi_funcs_reject_rate [20:38:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb [20:38:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420 [20:38:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422 [20:38:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420 [20:38:36] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420 [20:38:36] [PASSED] drm_test_check_output_bpc_crtc_mode_changed [20:38:36] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed [20:38:36] [PASSED] drm_test_check_output_bpc_dvi [20:38:36] [PASSED] drm_test_check_output_bpc_format_vic_1 [20:38:36] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only [20:38:36] [PASSED] drm_test_check_output_bpc_format_display_rgb_only [20:38:36] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only [20:38:36] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only [20:38:36] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc [20:38:36] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc [20:38:36] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc [20:38:36] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ====== [20:38:36] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ==== [20:38:36] [PASSED] drm_test_check_broadcast_rgb_value [20:38:36] [PASSED] drm_test_check_bpc_8_value [20:38:36] [PASSED] drm_test_check_bpc_10_value [20:38:36] [PASSED] drm_test_check_bpc_12_value [20:38:36] [PASSED] drm_test_check_format_value [20:38:36] [PASSED] drm_test_check_tmds_char_value [20:38:36] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ====== [20:38:36] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) = [20:38:36] [PASSED] drm_test_check_mode_valid [20:38:36] [PASSED] drm_test_check_mode_valid_reject [20:38:36] [PASSED] drm_test_check_mode_valid_reject_rate [20:38:36] [PASSED] drm_test_check_mode_valid_reject_max_clock [20:38:36] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid === [20:38:36] ================= drm_managed (2 subtests) ================= [20:38:36] [PASSED] drm_test_managed_release_action [20:38:36] [PASSED] drm_test_managed_run_action [20:38:36] =================== [PASSED] drm_managed =================== [20:38:36] =================== drm_mm (6 subtests) ==================== [20:38:36] [PASSED] drm_test_mm_init [20:38:36] [PASSED] drm_test_mm_debug [20:38:36] [PASSED] drm_test_mm_align32 [20:38:36] [PASSED] drm_test_mm_align64 [20:38:36] [PASSED] drm_test_mm_lowest [20:38:36] [PASSED] drm_test_mm_highest [20:38:36] ===================== [PASSED] drm_mm ====================== [20:38:36] ============= drm_modes_analog_tv (5 subtests) ============= [20:38:36] [PASSED] drm_test_modes_analog_tv_mono_576i [20:38:36] [PASSED] drm_test_modes_analog_tv_ntsc_480i [20:38:36] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined [20:38:36] [PASSED] drm_test_modes_analog_tv_pal_576i [20:38:36] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined [20:38:36] =============== [PASSED] drm_modes_analog_tv =============== [20:38:36] ============== drm_plane_helper (2 subtests) =============== [20:38:36] =============== drm_test_check_plane_state ================ [20:38:36] [PASSED] clipping_simple [20:38:36] [PASSED] clipping_rotate_reflect [20:38:36] [PASSED] positioning_simple [20:38:36] [PASSED] upscaling [20:38:36] [PASSED] downscaling [20:38:36] [PASSED] rounding1 [20:38:36] [PASSED] rounding2 [20:38:36] [PASSED] rounding3 [20:38:36] [PASSED] rounding4 [20:38:36] =========== [PASSED] drm_test_check_plane_state ============ [20:38:36] =========== drm_test_check_invalid_plane_state ============ [20:38:36] [PASSED] positioning_invalid [20:38:36] [PASSED] upscaling_invalid [20:38:36] [PASSED] downscaling_invalid [20:38:36] ======= [PASSED] drm_test_check_invalid_plane_state ======== [20:38:36] ================ [PASSED] drm_plane_helper ================= [20:38:36] ====== drm_connector_helper_tv_get_modes (1 subtest) ======= [20:38:36] ====== drm_test_connector_helper_tv_get_modes_check ======= [20:38:36] [PASSED] None [20:38:36] [PASSED] PAL [20:38:36] [PASSED] NTSC [20:38:36] [PASSED] Both, NTSC Default [20:38:36] [PASSED] Both, PAL Default [20:38:36] [PASSED] Both, NTSC Default, with PAL on command-line [20:38:36] [PASSED] Both, PAL Default, with NTSC on command-line [20:38:36] == [PASSED] drm_test_connector_helper_tv_get_modes_check === [20:38:36] ======== [PASSED] drm_connector_helper_tv_get_modes ======== [20:38:36] ================== drm_rect (9 subtests) =================== [20:38:36] [PASSED] drm_test_rect_clip_scaled_div_by_zero [20:38:36] [PASSED] drm_test_rect_clip_scaled_not_clipped [20:38:36] [PASSED] drm_test_rect_clip_scaled_clipped [20:38:36] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned [20:38:36] ================= drm_test_rect_intersect ================= [20:38:36] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0 [20:38:36] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1 [20:38:36] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0 [20:38:36] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1 [20:38:36] [PASSED] right x left: 2x1+0+0 x 3x1+1+0 [20:38:36] [PASSED] left x right: 3x1+1+0 x 2x1+0+0 [20:38:36] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1 [20:38:36] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0 [20:38:36] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1 [20:38:36] [PASSED] touching side: 1x1+0+0 x 1x1+1+0 [20:38:36] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0 [20:38:36] [PASSED] inside another: 2x2+0+0 x 1x1+1+1 [20:38:36] [PASSED] far away: 1x1+0+0 x 1x1+3+6 [20:38:36] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10 [20:38:36] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10 [20:38:36] ============= [PASSED] drm_test_rect_intersect ============= [20:38:36] ================ drm_test_rect_calc_hscale ================ [20:38:36] [PASSED] normal use [20:38:36] [PASSED] out of max range [20:38:36] [PASSED] out of min range [20:38:36] [PASSED] zero dst [20:38:36] [PASSED] negative src [20:38:36] [PASSED] negative dst [20:38:36] ============ [PASSED] drm_test_rect_calc_hscale ============ [20:38:36] ================ drm_test_rect_calc_vscale ================ [20:38:36] [PASSED] normal use [20:38:36] [PASSED] out of max range [20:38:36] [PASSED] out of min range [20:38:36] [PASSED] zero dst [20:38:36] [PASSED] negative src [20:38:36] [PASSED] negative dst [20:38:36] ============ [PASSED] drm_test_rect_calc_vscale ============ [20:38:36] ================== drm_test_rect_rotate =================== [20:38:36] [PASSED] reflect-x [20:38:36] [PASSED] reflect-y [20:38:36] [PASSED] rotate-0 [20:38:36] [PASSED] rotate-90 [20:38:36] [PASSED] rotate-180 [20:38:36] [PASSED] rotate-270 stty: 'standard input': Inappropriate ioctl for device [20:38:36] ============== [PASSED] drm_test_rect_rotate =============== [20:38:36] ================ drm_test_rect_rotate_inv ================= [20:38:36] [PASSED] reflect-x [20:38:36] [PASSED] reflect-y [20:38:36] [PASSED] rotate-0 [20:38:36] [PASSED] rotate-90 [20:38:36] [PASSED] rotate-180 [20:38:36] [PASSED] rotate-270 [20:38:36] ============ [PASSED] drm_test_rect_rotate_inv ============= [20:38:36] ==================== [PASSED] drm_rect ===================== [20:38:36] ============ drm_sysfb_modeset_test (1 subtest) ============ [20:38:36] ============ drm_test_sysfb_build_fourcc_list ============= [20:38:36] [PASSED] no native formats [20:38:36] [PASSED] XRGB8888 as native format [20:38:36] [PASSED] remove duplicates [20:38:36] [PASSED] convert alpha formats [20:38:36] [PASSED] random formats [20:38:36] ======== [PASSED] drm_test_sysfb_build_fourcc_list ========= [20:38:36] ============= [PASSED] drm_sysfb_modeset_test ============== [20:38:36] ============================================================ [20:38:36] Testing complete. Ran 616 tests: passed: 616 [20:38:36] Elapsed time: 22.972s total, 1.603s configuring, 21.199s building, 0.147s running + /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig [20:38:36] Configuring KUnit Kernel ... Regenerating .config ... Populating config with: $ make ARCH=um O=.kunit olddefconfig [20:38:38] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [20:38:46] Starting KUnit Kernel (1/1)... [20:38:46] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [20:38:46] ================= ttm_device (5 subtests) ================== [20:38:46] [PASSED] ttm_device_init_basic [20:38:46] [PASSED] ttm_device_init_multiple [20:38:46] [PASSED] ttm_device_fini_basic [20:38:46] [PASSED] ttm_device_init_no_vma_man [20:38:46] ================== ttm_device_init_pools ================== [20:38:46] [PASSED] No DMA allocations, no DMA32 required [20:38:46] [PASSED] DMA allocations, DMA32 required [20:38:46] [PASSED] No DMA allocations, DMA32 required [20:38:46] [PASSED] DMA allocations, no DMA32 required [20:38:46] ============== [PASSED] ttm_device_init_pools ============== [20:38:46] =================== [PASSED] ttm_device ==================== [20:38:46] ================== ttm_pool (8 subtests) =================== [20:38:46] ================== ttm_pool_alloc_basic =================== [20:38:46] [PASSED] One page [20:38:46] [PASSED] More than one page [20:38:46] [PASSED] Above the allocation limit [20:38:46] [PASSED] One page, with coherent DMA mappings enabled [20:38:46] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [20:38:46] ============== [PASSED] ttm_pool_alloc_basic =============== [20:38:46] ============== ttm_pool_alloc_basic_dma_addr ============== [20:38:46] [PASSED] One page [20:38:46] [PASSED] More than one page [20:38:46] [PASSED] Above the allocation limit [20:38:46] [PASSED] One page, with coherent DMA mappings enabled [20:38:46] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [20:38:46] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ========== [20:38:46] [PASSED] ttm_pool_alloc_order_caching_match [20:38:46] [PASSED] ttm_pool_alloc_caching_mismatch [20:38:46] [PASSED] ttm_pool_alloc_order_mismatch [20:38:46] [PASSED] ttm_pool_free_dma_alloc [20:38:46] [PASSED] ttm_pool_free_no_dma_alloc [20:38:46] [PASSED] ttm_pool_fini_basic [20:38:46] ==================== [PASSED] ttm_pool ===================== [20:38:46] ================ ttm_resource (8 subtests) ================= [20:38:46] ================= ttm_resource_init_basic ================= [20:38:46] [PASSED] Init resource in TTM_PL_SYSTEM [20:38:46] [PASSED] Init resource in TTM_PL_VRAM [20:38:46] [PASSED] Init resource in a private placement [20:38:46] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags [20:38:46] ============= [PASSED] ttm_resource_init_basic ============= [20:38:46] [PASSED] ttm_resource_init_pinned [20:38:46] [PASSED] ttm_resource_fini_basic [20:38:46] [PASSED] ttm_resource_manager_init_basic [20:38:46] [PASSED] ttm_resource_manager_usage_basic [20:38:46] [PASSED] ttm_resource_manager_set_used_basic [20:38:46] [PASSED] ttm_sys_man_alloc_basic [20:38:46] [PASSED] ttm_sys_man_free_basic [20:38:46] ================== [PASSED] ttm_resource =================== [20:38:46] =================== ttm_tt (15 subtests) =================== [20:38:46] ==================== ttm_tt_init_basic ==================== [20:38:46] [PASSED] Page-aligned size [20:38:46] [PASSED] Extra pages requested [20:38:46] ================ [PASSED] ttm_tt_init_basic ================ [20:38:46] [PASSED] ttm_tt_init_misaligned [20:38:46] [PASSED] ttm_tt_fini_basic [20:38:46] [PASSED] ttm_tt_fini_sg [20:38:46] [PASSED] ttm_tt_fini_shmem [20:38:46] [PASSED] ttm_tt_create_basic [20:38:46] [PASSED] ttm_tt_create_invalid_bo_type [20:38:46] [PASSED] ttm_tt_create_ttm_exists [20:38:46] [PASSED] ttm_tt_create_failed [20:38:46] [PASSED] ttm_tt_destroy_basic [20:38:46] [PASSED] ttm_tt_populate_null_ttm [20:38:46] [PASSED] ttm_tt_populate_populated_ttm [20:38:46] [PASSED] ttm_tt_unpopulate_basic [20:38:46] [PASSED] ttm_tt_unpopulate_empty_ttm [20:38:46] [PASSED] ttm_tt_swapin_basic [20:38:46] ===================== [PASSED] ttm_tt ====================== [20:38:46] =================== ttm_bo (14 subtests) =================== [20:38:46] =========== ttm_bo_reserve_optimistic_no_ticket =========== [20:38:46] [PASSED] Cannot be interrupted and sleeps [20:38:46] [PASSED] Cannot be interrupted, locks straight away [20:38:46] [PASSED] Can be interrupted, sleeps [20:38:46] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket ======= [20:38:46] [PASSED] ttm_bo_reserve_locked_no_sleep [20:38:46] [PASSED] ttm_bo_reserve_no_wait_ticket [20:38:46] [PASSED] ttm_bo_reserve_double_resv [20:38:46] [PASSED] ttm_bo_reserve_interrupted [20:38:46] [PASSED] ttm_bo_reserve_deadlock [20:38:46] [PASSED] ttm_bo_unreserve_basic [20:38:46] [PASSED] ttm_bo_unreserve_pinned [20:38:46] [PASSED] ttm_bo_unreserve_bulk [20:38:46] [PASSED] ttm_bo_put_basic [20:38:46] [PASSED] ttm_bo_put_shared_resv [20:38:46] [PASSED] ttm_bo_pin_basic [20:38:46] [PASSED] ttm_bo_pin_unpin_resource [20:38:46] [PASSED] ttm_bo_multiple_pin_one_unpin [20:38:46] ===================== [PASSED] ttm_bo ====================== [20:38:46] ============== ttm_bo_validate (22 subtests) =============== [20:38:46] ============== ttm_bo_init_reserved_sys_man =============== [20:38:46] [PASSED] Buffer object for userspace [20:38:46] [PASSED] Kernel buffer object [20:38:46] [PASSED] Shared buffer object [20:38:46] ========== [PASSED] ttm_bo_init_reserved_sys_man =========== [20:38:46] ============== ttm_bo_init_reserved_mock_man ============== [20:38:46] [PASSED] Buffer object for userspace [20:38:46] [PASSED] Kernel buffer object [20:38:46] [PASSED] Shared buffer object [20:38:46] ========== [PASSED] ttm_bo_init_reserved_mock_man ========== [20:38:46] [PASSED] ttm_bo_init_reserved_resv [20:38:46] ================== ttm_bo_validate_basic ================== [20:38:46] [PASSED] Buffer object for userspace [20:38:46] [PASSED] Kernel buffer object [20:38:46] [PASSED] Shared buffer object [20:38:46] ============== [PASSED] ttm_bo_validate_basic ============== [20:38:46] [PASSED] ttm_bo_validate_invalid_placement [20:38:46] ============= ttm_bo_validate_same_placement ============== [20:38:46] [PASSED] System manager [20:38:46] [PASSED] VRAM manager [20:38:46] ========= [PASSED] ttm_bo_validate_same_placement ========== [20:38:46] [PASSED] ttm_bo_validate_failed_alloc [20:38:46] [PASSED] ttm_bo_validate_pinned [20:38:46] [PASSED] ttm_bo_validate_busy_placement [20:38:46] ================ ttm_bo_validate_multihop ================= [20:38:46] [PASSED] Buffer object for userspace [20:38:46] [PASSED] Kernel buffer object [20:38:46] [PASSED] Shared buffer object [20:38:46] ============ [PASSED] ttm_bo_validate_multihop ============= [20:38:46] ========== ttm_bo_validate_no_placement_signaled ========== [20:38:46] [PASSED] Buffer object in system domain, no page vector [20:38:46] [PASSED] Buffer object in system domain with an existing page vector [20:38:46] ====== [PASSED] ttm_bo_validate_no_placement_signaled ====== [20:38:46] ======== ttm_bo_validate_no_placement_not_signaled ======== [20:38:46] [PASSED] Buffer object for userspace [20:38:46] [PASSED] Kernel buffer object [20:38:46] [PASSED] Shared buffer object [20:38:46] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ==== [20:38:46] [PASSED] ttm_bo_validate_move_fence_signaled [20:38:46] ========= ttm_bo_validate_move_fence_not_signaled ========= [20:38:46] [PASSED] Waits for GPU [20:38:46] [PASSED] Tries to lock straight away [20:38:46] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled ===== [20:38:46] [PASSED] ttm_bo_validate_swapout [20:38:46] [PASSED] ttm_bo_validate_happy_evict [20:38:46] [PASSED] ttm_bo_validate_all_pinned_evict [20:38:46] [PASSED] ttm_bo_validate_allowed_only_evict [20:38:46] [PASSED] ttm_bo_validate_deleted_evict [20:38:46] [PASSED] ttm_bo_validate_busy_domain_evict [20:38:46] [PASSED] ttm_bo_validate_evict_gutting [20:38:46] [PASSED] ttm_bo_validate_recrusive_evict stty: 'standard input': Inappropriate ioctl for device [20:38:46] ================= [PASSED] ttm_bo_validate ================= [20:38:46] ============================================================ [20:38:46] Testing complete. Ran 102 tests: passed: 102 [20:38:46] Elapsed time: 10.016s total, 1.697s configuring, 7.702s building, 0.520s running + cleanup ++ stat -c %u:%g /kernel + chown -R 1003:1003 /kernel ^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ Xe.CI.BAT: success for Relax VF/PF version negotiation 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko ` (6 preceding siblings ...) 2025-06-24 20:38 ` ✓ CI.KUnit: success " Patchwork @ 2025-06-24 21:28 ` Patchwork 2025-06-25 18:48 ` ✗ Xe.CI.Full: failure " Patchwork 8 siblings, 0 replies; 15+ messages in thread From: Patchwork @ 2025-06-24 21:28 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe [-- Attachment #1: Type: text/plain, Size: 938 bytes --] == Series Details == Series: Relax VF/PF version negotiation URL : https://patchwork.freedesktop.org/series/150711/ State : success == Summary == CI Bug Log - changes from xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682_BAT -> xe-pw-150711v1_BAT ==================================================== Summary ------- **SUCCESS** No regressions found. Participating hosts (9 -> 8) ------------------------------ Missing (1): bat-adlp-vm Changes ------- No changes found Build changes ------------- * Linux: xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682 -> xe-pw-150711v1 IGT_8424: 68588b3c89a1bbe08c54d21c4d3d2e509957c795 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682: 0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682 xe-pw-150711v1: 150711v1 == Logs == For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/index.html [-- Attachment #2: Type: text/html, Size: 1486 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* ✗ Xe.CI.Full: failure for Relax VF/PF version negotiation 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko ` (7 preceding siblings ...) 2025-06-24 21:28 ` ✓ Xe.CI.BAT: " Patchwork @ 2025-06-25 18:48 ` Patchwork 8 siblings, 0 replies; 15+ messages in thread From: Patchwork @ 2025-06-25 18:48 UTC (permalink / raw) To: Michal Wajdeczko; +Cc: intel-xe [-- Attachment #1: Type: text/plain, Size: 60271 bytes --] == Series Details == Series: Relax VF/PF version negotiation URL : https://patchwork.freedesktop.org/series/150711/ State : failure == Summary == CI Bug Log - changes from xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682_FULL -> xe-pw-150711v1_FULL ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with xe-pw-150711v1_FULL absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in xe-pw-150711v1_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them to document this new failure mode, which will reduce false positives in CI. Participating hosts (4 -> 4) ------------------------------ No changes in participating hosts Possible new issues ------------------- Here are the unknown changes that may have been introduced in xe-pw-150711v1_FULL: ### IGT changes ### #### Possible regressions #### * igt@xe_exec_system_allocator@process-many-malloc-bo-unmap-nomemset: - shard-bmg: [PASS][1] -> [FAIL][2] [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@xe_exec_system_allocator@process-many-malloc-bo-unmap-nomemset.html [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@xe_exec_system_allocator@process-many-malloc-bo-unmap-nomemset.html New tests --------- New tests have been introduced between xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682_FULL and xe-pw-150711v1_FULL: ### New IGT tests (2) ### * igt@kms_pipe_crc_basic@disable-crc-after-crtc@pipe-b-dp-2: - Statuses : 1 pass(s) - Exec time: [0.52] s * igt@kms_properties@plane-properties-legacy@pipe-d-hdmi-a-2: - Statuses : 1 pass(s) - Exec time: [0.44] s Known issues ------------ Here are the changes found in xe-pw-150711v1_FULL that come from known issues: ### IGT changes ### #### Issues hit #### * igt@fbdev@read: - shard-adlp: [PASS][3] -> [SKIP][4] ([Intel XE#2134]) [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@fbdev@read.html [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@fbdev@read.html * igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-b-edp-1: - shard-lnl: [PASS][5] -> [FAIL][6] ([Intel XE#911]) [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-lnl-4/igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-b-edp-1.html [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-lnl-8/igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-b-edp-1.html * igt@kms_big_fb@linear-8bpp-rotate-180: - shard-lnl: [PASS][7] -> [ABORT][8] ([Intel XE#4760]) [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-lnl-1/igt@kms_big_fb@linear-8bpp-rotate-180.html [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-lnl-4/igt@kms_big_fb@linear-8bpp-rotate-180.html * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow: - shard-bmg: NOTRUN -> [SKIP][9] ([Intel XE#607]) [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip: - shard-adlp: [PASS][10] -> [DMESG-FAIL][11] ([Intel XE#4543]) +4 other tests dmesg-fail [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip: - shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#1124]) [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html * igt@kms_big_fb@yf-tiled-16bpp-rotate-270: - shard-dg2-set2: NOTRUN -> [SKIP][13] ([Intel XE#1124]) +2 other tests skip [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html * igt@kms_bw@linear-tiling-3-displays-3840x2160p: - shard-dg2-set2: NOTRUN -> [SKIP][14] ([Intel XE#367]) [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_bw@linear-tiling-3-displays-3840x2160p.html * igt@kms_bw@linear-tiling-4-displays-2160x1440p: - shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#367]) [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_bw@linear-tiling-4-displays-2160x1440p.html * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs: - shard-bmg: [PASS][16] -> [INCOMPLETE][17] ([Intel XE#3862]) +1 other test incomplete [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc: - shard-bmg: NOTRUN -> [SKIP][18] ([Intel XE#3432]) [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-2: - shard-dg2-set2: NOTRUN -> [SKIP][19] ([Intel XE#787]) +146 other tests skip [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-2.html * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-dp-4: - shard-dg2-set2: NOTRUN -> [INCOMPLETE][20] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4522]) [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-dp-4.html * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc: - shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#2887]) +2 other tests skip [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-c-dp-4: - shard-dg2-set2: [PASS][22] -> [INCOMPLETE][23] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4522]) +1 other test incomplete [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-435/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-c-dp-4.html [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-433/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-c-dp-4.html * igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs: - shard-dg2-set2: NOTRUN -> [SKIP][24] ([Intel XE#2907]) [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html * igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs@pipe-d-dp-2: - shard-dg2-set2: NOTRUN -> [SKIP][25] ([Intel XE#455] / [Intel XE#787]) +24 other tests skip [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs@pipe-d-dp-2.html * igt@kms_cdclk@mode-transition@pipe-d-dp-4: - shard-dg2-set2: NOTRUN -> [SKIP][26] ([Intel XE#4417]) +3 other tests skip [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_cdclk@mode-transition@pipe-d-dp-4.html * igt@kms_chamelium_color@ctm-blue-to-red: - shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#2325]) [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-7/igt@kms_chamelium_color@ctm-blue-to-red.html * igt@kms_chamelium_color@gamma: - shard-dg2-set2: NOTRUN -> [SKIP][28] ([Intel XE#306]) [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_chamelium_color@gamma.html * igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k: - shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2252]) +1 other test skip [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html * igt@kms_chamelium_frames@dp-crc-multiple: - shard-dg2-set2: NOTRUN -> [SKIP][30] ([Intel XE#373]) [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_chamelium_frames@dp-crc-multiple.html * igt@kms_content_protection@atomic-dpms@pipe-a-dp-4: - shard-dg2-set2: NOTRUN -> [FAIL][31] ([Intel XE#1178]) [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_content_protection@atomic-dpms@pipe-a-dp-4.html * igt@kms_content_protection@srm@pipe-a-dp-2: - shard-bmg: NOTRUN -> [FAIL][32] ([Intel XE#1178]) [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_content_protection@srm@pipe-a-dp-2.html * igt@kms_content_protection@uevent@pipe-a-dp-4: - shard-dg2-set2: NOTRUN -> [FAIL][33] ([Intel XE#1188]) [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_content_protection@uevent@pipe-a-dp-4.html * igt@kms_cursor_crc@cursor-offscreen-32x32: - shard-bmg: NOTRUN -> [SKIP][34] ([Intel XE#2320]) +2 other tests skip [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_cursor_crc@cursor-offscreen-32x32.html * igt@kms_cursor_crc@cursor-offscreen-512x512: - shard-dg2-set2: NOTRUN -> [SKIP][35] ([Intel XE#308]) [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_cursor_crc@cursor-offscreen-512x512.html * igt@kms_cursor_crc@cursor-rapid-movement-64x64: - shard-adlp: [PASS][36] -> [SKIP][37] ([Intel XE#4950]) +10 other tests skip [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_cursor_crc@cursor-rapid-movement-64x64.html [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_cursor_crc@cursor-rapid-movement-64x64.html * igt@kms_cursor_crc@cursor-suspend: - shard-bmg: [PASS][38] -> [INCOMPLETE][39] ([Intel XE#4820]) [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_cursor_crc@cursor-suspend.html [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_cursor_crc@cursor-suspend.html * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-3: - shard-bmg: NOTRUN -> [INCOMPLETE][40] ([Intel XE#4820]) [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-3.html * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy: - shard-bmg: [PASS][41] -> [SKIP][42] ([Intel XE#2291]) +1 other test skip [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size: - shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#2286]) [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-7/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html * igt@kms_feature_discovery@dp-mst: - shard-dg2-set2: NOTRUN -> [SKIP][44] ([Intel XE#1137]) [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_feature_discovery@dp-mst.html * igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a6-dp4: - shard-dg2-set2: NOTRUN -> [FAIL][45] ([Intel XE#301]) +12 other tests fail [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a6-dp4.html * igt@kms_flip@2x-flip-vs-panning-interruptible: - shard-bmg: [PASS][46] -> [SKIP][47] ([Intel XE#2316]) [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_flip@2x-flip-vs-panning-interruptible.html [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_flip@2x-flip-vs-panning-interruptible.html * igt@kms_flip@dpms-vs-vblank-race-interruptible@a-hdmi-a6: - shard-dg2-set2: NOTRUN -> [FAIL][48] ([Intel XE#3098]) [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-436/igt@kms_flip@dpms-vs-vblank-race-interruptible@a-hdmi-a6.html * igt@kms_flip@plain-flip-fb-recreate-interruptible@a-edp1: - shard-lnl: [PASS][49] -> [FAIL][50] ([Intel XE#886]) +4 other tests fail [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-lnl-6/igt@kms_flip@plain-flip-fb-recreate-interruptible@a-edp1.html [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-lnl-3/igt@kms_flip@plain-flip-fb-recreate-interruptible@a-edp1.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling: - shard-bmg: NOTRUN -> [SKIP][51] ([Intel XE#2293] / [Intel XE#2380]) +2 other tests skip [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode: - shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#2293]) +2 other tests skip [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html * igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw: - shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#2311]) +10 other tests skip [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-msflip-blt: - shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#4141]) +4 other tests skip [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-msflip-blt.html * igt@kms_frontbuffer_tracking@fbc-modesetfrombusy: - shard-adlp: [PASS][55] -> [SKIP][56] ([Intel XE#4947]) [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_frontbuffer_tracking@fbc-modesetfrombusy.html [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_frontbuffer_tracking@fbc-modesetfrombusy.html * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-blt: - shard-dg2-set2: NOTRUN -> [SKIP][57] ([Intel XE#651]) +5 other tests skip [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-msflip-blt: - shard-dg2-set2: NOTRUN -> [SKIP][58] ([Intel XE#653]) +10 other tests skip [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-msflip-blt.html * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-fullscreen: - shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#2313]) +7 other tests skip [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-fullscreen.html * igt@kms_hdr@brightness-with-hdr: - shard-dg2-set2: NOTRUN -> [SKIP][60] ([Intel XE#455]) +1 other test skip [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_hdr@brightness-with-hdr.html - shard-bmg: NOTRUN -> [SKIP][61] ([Intel XE#3374] / [Intel XE#3544]) [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_hdr@brightness-with-hdr.html * igt@kms_plane_multiple@2x-tiling-4: - shard-bmg: [PASS][62] -> [SKIP][63] ([Intel XE#4596]) [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_plane_multiple@2x-tiling-4.html [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_plane_multiple@2x-tiling-4.html * igt@kms_pm_backlight@bad-brightness: - shard-dg2-set2: NOTRUN -> [SKIP][64] ([Intel XE#870]) [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_pm_backlight@bad-brightness.html * igt@kms_pm_backlight@brightness-with-dpms: - shard-bmg: NOTRUN -> [SKIP][65] ([Intel XE#2938]) [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_pm_backlight@brightness-with-dpms.html - shard-dg2-set2: NOTRUN -> [SKIP][66] ([Intel XE#2938]) [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_pm_backlight@brightness-with-dpms.html * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait: - shard-bmg: NOTRUN -> [SKIP][67] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#836]) [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf: - shard-dg2-set2: NOTRUN -> [SKIP][68] ([Intel XE#1489]) +1 other test skip [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf.html * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf: - shard-bmg: NOTRUN -> [SKIP][69] ([Intel XE#1489]) [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf.html * igt@kms_psr@fbc-psr-primary-render: - shard-dg2-set2: NOTRUN -> [SKIP][70] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_psr@fbc-psr-primary-render.html * igt@kms_psr@psr2-cursor-plane-move: - shard-bmg: NOTRUN -> [SKIP][71] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_psr@psr2-cursor-plane-move.html * igt@kms_rotation_crc@primary-y-tiled-reflect-x-180: - shard-dg2-set2: NOTRUN -> [SKIP][72] ([Intel XE#1127]) [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_rotation_crc@primary-y-tiled-reflect-x-180.html * igt@kms_rotation_crc@sprite-rotation-270: - shard-dg2-set2: NOTRUN -> [SKIP][73] ([Intel XE#3414]) [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_rotation_crc@sprite-rotation-270.html * igt@kms_setmode@basic: - shard-adlp: [PASS][74] -> [FAIL][75] ([Intel XE#2883]) +2 other tests fail [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-9/igt@kms_setmode@basic.html [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-9/igt@kms_setmode@basic.html * igt@kms_setmode@basic@pipe-b-edp-1: - shard-lnl: [PASS][76] -> [FAIL][77] ([Intel XE#2883]) +2 other tests fail [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-lnl-6/igt@kms_setmode@basic@pipe-b-edp-1.html [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-lnl-3/igt@kms_setmode@basic@pipe-b-edp-1.html * igt@xe_compute_preempt@compute-preempt-many: - shard-dg2-set2: NOTRUN -> [SKIP][78] ([Intel XE#1280] / [Intel XE#455]) +1 other test skip [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_compute_preempt@compute-preempt-many.html * igt@xe_configfs@survivability-mode: - shard-dg2-set2: NOTRUN -> [SKIP][79] ([Intel XE#5249]) [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@xe_configfs@survivability-mode.html * igt@xe_copy_basic@mem-copy-linear-0xfd: - shard-dg2-set2: NOTRUN -> [SKIP][80] ([Intel XE#1123]) [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_copy_basic@mem-copy-linear-0xfd.html * igt@xe_eu_stall@unprivileged-access: - shard-dg2-set2: NOTRUN -> [SKIP][81] ([Intel XE#5308]) [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@xe_eu_stall@unprivileged-access.html * igt@xe_eudebug@attach-debug-metadata: - shard-dg2-set2: NOTRUN -> [SKIP][82] ([Intel XE#4837]) +3 other tests skip [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_eudebug@attach-debug-metadata.html * igt@xe_eudebug@basic-client-th: - shard-bmg: NOTRUN -> [SKIP][83] ([Intel XE#4837]) [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-7/igt@xe_eudebug@basic-client-th.html * igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap: - shard-dg2-set2: [PASS][84] -> [SKIP][85] ([Intel XE#1392]) +7 other tests skip [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-434/igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap.html [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap.html - shard-bmg: NOTRUN -> [SKIP][86] ([Intel XE#2322]) [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap.html * igt@xe_exec_fault_mode@twice-userptr-prefetch: - shard-dg2-set2: NOTRUN -> [SKIP][87] ([Intel XE#288]) +6 other tests skip [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_exec_fault_mode@twice-userptr-prefetch.html * igt@xe_exec_reset@parallel-gt-reset: - shard-bmg: [PASS][88] -> [DMESG-WARN][89] ([Intel XE#3876]) [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-4/igt@xe_exec_reset@parallel-gt-reset.html [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-2/igt@xe_exec_reset@parallel-gt-reset.html * igt@xe_exec_system_allocator@process-many-stride-mmap-new-huge: - shard-bmg: NOTRUN -> [SKIP][90] ([Intel XE#4943]) +2 other tests skip [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@xe_exec_system_allocator@process-many-stride-mmap-new-huge.html * igt@xe_exec_system_allocator@threads-many-free-race-nomemset: - shard-dg2-set2: NOTRUN -> [SKIP][91] ([Intel XE#4915]) +47 other tests skip [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@xe_exec_system_allocator@threads-many-free-race-nomemset.html * igt@xe_exec_system_allocator@threads-shared-vm-many-large-execqueues-new-bo-map-nomemset: - shard-lnl: [PASS][92] -> [FAIL][93] ([Intel XE#5018]) [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-lnl-7/igt@xe_exec_system_allocator@threads-shared-vm-many-large-execqueues-new-bo-map-nomemset.html [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-lnl-5/igt@xe_exec_system_allocator@threads-shared-vm-many-large-execqueues-new-bo-map-nomemset.html * igt@xe_exec_threads@threads-hang-fd-userptr: - shard-adlp: [PASS][94] -> [DMESG-WARN][95] ([Intel XE#2953] / [Intel XE#4173]) +6 other tests dmesg-warn [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_exec_threads@threads-hang-fd-userptr.html [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-8/igt@xe_exec_threads@threads-hang-fd-userptr.html * igt@xe_exec_threads@threads-mixed-fd-userptr-invalidate: - shard-adlp: [PASS][96] -> [SKIP][97] ([Intel XE#4945]) +29 other tests skip [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_exec_threads@threads-mixed-fd-userptr-invalidate.html [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_exec_threads@threads-mixed-fd-userptr-invalidate.html * igt@xe_oa@whitelisted-registers-userspace-config: - shard-dg2-set2: NOTRUN -> [SKIP][98] ([Intel XE#2541] / [Intel XE#3573]) +2 other tests skip [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_oa@whitelisted-registers-userspace-config.html * igt@xe_pat@pat-index-xelpg: - shard-bmg: NOTRUN -> [SKIP][99] ([Intel XE#2236]) [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@xe_pat@pat-index-xelpg.html - shard-dg2-set2: NOTRUN -> [SKIP][100] ([Intel XE#979]) [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_pat@pat-index-xelpg.html * igt@xe_pm@d3cold-mocs: - shard-bmg: NOTRUN -> [SKIP][101] ([Intel XE#2284]) [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@xe_pm@d3cold-mocs.html * igt@xe_query@multigpu-query-engines: - shard-dg2-set2: NOTRUN -> [SKIP][102] ([Intel XE#944]) [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@xe_query@multigpu-query-engines.html * igt@xe_query@multigpu-query-invalid-uc-fw-version-mbz: - shard-bmg: NOTRUN -> [SKIP][103] ([Intel XE#944]) [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@xe_query@multigpu-query-invalid-uc-fw-version-mbz.html * igt@xe_sriov_auto_provisioning@selfconfig-reprovision-increase-numvfs: - shard-bmg: NOTRUN -> [SKIP][104] ([Intel XE#4130]) [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@xe_sriov_auto_provisioning@selfconfig-reprovision-increase-numvfs.html - shard-dg2-set2: NOTRUN -> [SKIP][105] ([Intel XE#4130]) [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@xe_sriov_auto_provisioning@selfconfig-reprovision-increase-numvfs.html #### Possible fixes #### * igt@kms_async_flips@alternate-sync-async-flip: - shard-bmg: [FAIL][106] ([Intel XE#827]) -> [PASS][107] +1 other test pass [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_async_flips@alternate-sync-async-flip.html [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@kms_async_flips@alternate-sync-async-flip.html * igt@kms_async_flips@async-flip-suspend-resume: - shard-dg2-set2: [FAIL][108] ([Intel XE#4427]) -> [PASS][109] [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-434/igt@kms_async_flips@async-flip-suspend-resume.html [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_async_flips@async-flip-suspend-resume.html * igt@kms_async_flips@crc-atomic@pipe-b-hdmi-a-1: - shard-adlp: [DMESG-FAIL][110] ([Intel XE#4543]) -> [PASS][111] [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-1/igt@kms_async_flips@crc-atomic@pipe-b-hdmi-a-1.html [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-8/igt@kms_async_flips@crc-atomic@pipe-b-hdmi-a-1.html * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4: - shard-dg2-set2: [INCOMPLETE][112] ([Intel XE#3862]) -> [PASS][113] +1 other test pass [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-434/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4.html [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4.html * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-6: - shard-dg2-set2: [INCOMPLETE][114] ([Intel XE#1727] / [Intel XE#3113]) -> [PASS][115] [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-6.html [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-6.html * igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-dp2-hdmi-a3: - shard-bmg: [FAIL][116] ([Intel XE#2882] / [Intel XE#5338]) -> [PASS][117] +1 other test pass [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-1/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-dp2-hdmi-a3.html [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-2/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-dp2-hdmi-a3.html * igt@kms_flip@2x-flip-vs-rmfb: - shard-bmg: [SKIP][118] ([Intel XE#2316]) -> [PASS][119] [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-6/igt@kms_flip@2x-flip-vs-rmfb.html [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_flip@2x-flip-vs-rmfb.html * igt@kms_flip@blocking-absolute-wf_vblank-interruptible: - shard-dg2-set2: [FAIL][120] -> [PASS][121] [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-434/igt@kms_flip@blocking-absolute-wf_vblank-interruptible.html [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-432/igt@kms_flip@blocking-absolute-wf_vblank-interruptible.html * igt@kms_flip@flip-vs-suspend-interruptible: - shard-bmg: [INCOMPLETE][122] ([Intel XE#2049] / [Intel XE#2597]) -> [PASS][123] +3 other tests pass [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-6/igt@kms_flip@flip-vs-suspend-interruptible.html [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_flip@flip-vs-suspend-interruptible.html * igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race: - shard-dg2-set2: [SKIP][124] ([Intel XE#1392]) -> [PASS][125] +4 other tests pass [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race.html [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-464/igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race.html * igt@xe_exec_system_allocator@process-many-mmap-new-race-nomemset: - shard-bmg: [INCOMPLETE][126] -> [PASS][127] [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-3/igt@xe_exec_system_allocator@process-many-mmap-new-race-nomemset.html [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-8/igt@xe_exec_system_allocator@process-many-mmap-new-race-nomemset.html * igt@xe_exec_system_allocator@threads-shared-vm-many-large-new-bo-map-nomemset: - shard-lnl: [FAIL][128] ([Intel XE#5018]) -> [PASS][129] [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-lnl-7/igt@xe_exec_system_allocator@threads-shared-vm-many-large-new-bo-map-nomemset.html [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-lnl-5/igt@xe_exec_system_allocator@threads-shared-vm-many-large-new-bo-map-nomemset.html #### Warnings #### * igt@kms_async_flips@crc-atomic@pipe-c-hdmi-a-1: - shard-adlp: [FAIL][130] ([Intel XE#3884]) -> [DMESG-FAIL][131] ([Intel XE#4543]) [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-1/igt@kms_async_flips@crc-atomic@pipe-c-hdmi-a-1.html [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-8/igt@kms_async_flips@crc-atomic@pipe-c-hdmi-a-1.html * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels: - shard-adlp: [SKIP][132] ([Intel XE#455]) -> [SKIP][133] ([Intel XE#4950]) [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html * igt@kms_big_fb@y-tiled-8bpp-rotate-90: - shard-adlp: [SKIP][134] ([Intel XE#316]) -> [SKIP][135] ([Intel XE#4947]) [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html * igt@kms_big_fb@yf-tiled-16bpp-rotate-270: - shard-adlp: [SKIP][136] ([Intel XE#1124]) -> [SKIP][137] ([Intel XE#4947]) +3 other tests skip [136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html [137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html * igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p: - shard-adlp: [SKIP][138] ([Intel XE#2191]) -> [SKIP][139] ([Intel XE#4950]) [138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html [139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs: - shard-adlp: [SKIP][140] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][141] ([Intel XE#4947]) +1 other test skip [140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html [141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs: - shard-dg2-set2: [INCOMPLETE][142] ([Intel XE#1727] / [Intel XE#3113]) -> [INCOMPLETE][143] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4345] / [Intel XE#4522]) [142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html [143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html * igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs: - shard-adlp: [SKIP][144] ([Intel XE#2907]) -> [SKIP][145] ([Intel XE#4947]) [144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html [145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html * igt@kms_cdclk@mode-transition-all-outputs: - shard-adlp: [SKIP][146] ([Intel XE#4418]) -> [SKIP][147] ([Intel XE#2351] / [Intel XE#4947]) [146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_cdclk@mode-transition-all-outputs.html [147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_cdclk@mode-transition-all-outputs.html * igt@kms_chamelium_frames@hdmi-crc-single: - shard-adlp: [SKIP][148] ([Intel XE#373]) -> [SKIP][149] ([Intel XE#4950]) +2 other tests skip [148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_chamelium_frames@hdmi-crc-single.html [149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_chamelium_frames@hdmi-crc-single.html * igt@kms_content_protection@srm: - shard-bmg: [SKIP][150] ([Intel XE#2341]) -> [FAIL][151] ([Intel XE#1178]) [150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-6/igt@kms_content_protection@srm.html [151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_content_protection@srm.html * igt@kms_cursor_crc@cursor-offscreen-512x512: - shard-adlp: [SKIP][152] ([Intel XE#308]) -> [SKIP][153] ([Intel XE#4950]) [152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_cursor_crc@cursor-offscreen-512x512.html [153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_cursor_crc@cursor-offscreen-512x512.html * igt@kms_cursor_legacy@2x-cursor-vs-flip-atomic: - shard-adlp: [SKIP][154] ([Intel XE#309]) -> [SKIP][155] ([Intel XE#4950]) [154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_cursor_legacy@2x-cursor-vs-flip-atomic.html [155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_cursor_legacy@2x-cursor-vs-flip-atomic.html * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions: - shard-adlp: [SKIP][156] ([Intel XE#323]) -> [SKIP][157] ([Intel XE#4950]) [156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html [157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html * igt@kms_dsc@dsc-fractional-bpp: - shard-adlp: [SKIP][158] ([Intel XE#455]) -> [SKIP][159] ([Intel XE#4947]) [158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_dsc@dsc-fractional-bpp.html [159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_dsc@dsc-fractional-bpp.html * igt@kms_feature_discovery@dp-mst: - shard-adlp: [SKIP][160] ([Intel XE#1137]) -> [SKIP][161] ([Intel XE#4950]) [160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_feature_discovery@dp-mst.html [161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_feature_discovery@dp-mst.html * igt@kms_flip@2x-flip-vs-expired-vblank: - shard-adlp: [SKIP][162] ([Intel XE#310]) -> [SKIP][163] ([Intel XE#4950]) [162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_flip@2x-flip-vs-expired-vblank.html [163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_flip@2x-flip-vs-expired-vblank.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling: - shard-adlp: [SKIP][164] ([Intel XE#455]) -> [SKIP][165] ([Intel XE#2351] / [Intel XE#4947]) [164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html [165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen: - shard-adlp: [SKIP][166] ([Intel XE#651]) -> [SKIP][167] ([Intel XE#4947]) +4 other tests skip [166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen.html [167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen.html * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-blt: - shard-bmg: [SKIP][168] ([Intel XE#2311]) -> [SKIP][169] ([Intel XE#2312]) +2 other tests skip [168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-blt.html [169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc: - shard-bmg: [SKIP][170] ([Intel XE#2312]) -> [SKIP][171] ([Intel XE#2311]) +1 other test skip [170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html [171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-msflip-blt: - shard-adlp: [SKIP][172] ([Intel XE#656]) -> [SKIP][173] ([Intel XE#4947]) +4 other tests skip [172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-msflip-blt.html [173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-msflip-blt.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-render: - shard-adlp: [SKIP][174] ([Intel XE#656]) -> [SKIP][175] ([Intel XE#2351] / [Intel XE#4947]) [174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-render.html [175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen: - shard-bmg: [SKIP][176] ([Intel XE#4141]) -> [SKIP][177] ([Intel XE#2312]) [176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen.html [177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-render: - shard-adlp: [SKIP][178] ([Intel XE#653]) -> [SKIP][179] ([Intel XE#4947]) +1 other test skip [178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-render.html [179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-plflip-blt: - shard-bmg: [SKIP][180] ([Intel XE#2313]) -> [SKIP][181] ([Intel XE#2312]) +3 other tests skip [180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-plflip-blt.html [181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-plflip-blt.html * igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff: - shard-bmg: [SKIP][182] ([Intel XE#2312]) -> [SKIP][183] ([Intel XE#2313]) +1 other test skip [182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html [183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-bmg-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html * igt@kms_joiner@basic-big-joiner: - shard-adlp: [SKIP][184] ([Intel XE#346]) -> [SKIP][185] ([Intel XE#4947]) [184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_joiner@basic-big-joiner.html [185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_joiner@basic-big-joiner.html * igt@kms_pm_backlight@bad-brightness: - shard-adlp: [SKIP][186] ([Intel XE#870]) -> [SKIP][187] ([Intel XE#4947]) [186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_pm_backlight@bad-brightness.html [187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_pm_backlight@bad-brightness.html * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf: - shard-adlp: [SKIP][188] ([Intel XE#1489]) -> [SKIP][189] ([Intel XE#4947]) +1 other test skip [188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf.html [189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf.html * igt@kms_psr@fbc-psr2-cursor-blt: - shard-adlp: [SKIP][190] ([Intel XE#2850] / [Intel XE#929]) -> [SKIP][191] ([Intel XE#4947]) +2 other tests skip [190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_psr@fbc-psr2-cursor-blt.html [191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_psr@fbc-psr2-cursor-blt.html * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180: - shard-adlp: [SKIP][192] ([Intel XE#1127]) -> [SKIP][193] ([Intel XE#4950]) [192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html [193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html * igt@kms_vrr@lobf: - shard-adlp: [SKIP][194] ([Intel XE#2168]) -> [SKIP][195] ([Intel XE#4950]) [194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@kms_vrr@lobf.html [195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@kms_vrr@lobf.html * igt@xe_configfs@survivability-mode: - shard-adlp: [SKIP][196] ([Intel XE#5249]) -> [SKIP][197] ([Intel XE#4945]) [196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_configfs@survivability-mode.html [197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_configfs@survivability-mode.html * igt@xe_eu_stall@unprivileged-access: - shard-adlp: [SKIP][198] ([Intel XE#5308]) -> [SKIP][199] ([Intel XE#4945]) [198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_eu_stall@unprivileged-access.html [199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_eu_stall@unprivileged-access.html * igt@xe_eudebug_online@breakpoint-not-in-debug-mode: - shard-adlp: [SKIP][200] ([Intel XE#4837]) -> [SKIP][201] ([Intel XE#4945]) +2 other tests skip [200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_eudebug_online@breakpoint-not-in-debug-mode.html [201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_eudebug_online@breakpoint-not-in-debug-mode.html * igt@xe_evict@evict-beng-small-cm: - shard-adlp: [SKIP][202] ([Intel XE#261] / [Intel XE#688]) -> [SKIP][203] ([Intel XE#4945]) [202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_evict@evict-beng-small-cm.html [203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_evict@evict-beng-small-cm.html * igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race-prefetch: - shard-adlp: [SKIP][204] ([Intel XE#288]) -> [SKIP][205] ([Intel XE#4945]) +3 other tests skip [204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race-prefetch.html [205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race-prefetch.html * igt@xe_exec_system_allocator@once-mmap-file-nomemset: - shard-adlp: [SKIP][206] ([Intel XE#4915]) -> [SKIP][207] ([Intel XE#4945]) +46 other tests skip [206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_exec_system_allocator@once-mmap-file-nomemset.html [207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_exec_system_allocator@once-mmap-file-nomemset.html * igt@xe_oa@blocking: - shard-adlp: [SKIP][208] ([Intel XE#2541] / [Intel XE#3573]) -> [SKIP][209] ([Intel XE#4945]) +1 other test skip [208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_oa@blocking.html [209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_oa@blocking.html * igt@xe_pat@display-vs-wb-transient: - shard-adlp: [SKIP][210] ([Intel XE#1337]) -> [SKIP][211] ([Intel XE#4945]) [210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_pat@display-vs-wb-transient.html [211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_pat@display-vs-wb-transient.html * igt@xe_query@multigpu-query-engines: - shard-adlp: [SKIP][212] ([Intel XE#944]) -> [SKIP][213] ([Intel XE#4945]) [212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682/shard-adlp-2/igt@xe_query@multigpu-query-engines.html [213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/shard-adlp-6/igt@xe_query@multigpu-query-engines.html [Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123 [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124 [Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127 [Intel XE#1137]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1137 [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178 [Intel XE#1188]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1188 [Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280 [Intel XE#1337]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1337 [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392 [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439 [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489 [Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727 [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049 [Intel XE#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134 [Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168 [Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191 [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234 [Intel XE#2236]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2236 [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252 [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284 [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286 [Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291 [Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293 [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311 [Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312 [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313 [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316 [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320 [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322 [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325 [Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341 [Intel XE#2351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2351 [Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380 [Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541 [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597 [Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261 [Intel XE#2705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2705 [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850 [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288 [Intel XE#2882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2882 [Intel XE#2883]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2883 [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887 [Intel XE#2907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2907 [Intel XE#2938]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2938 [Intel XE#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953 [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301 [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306 [Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308 [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309 [Intel XE#3098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3098 [Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310 [Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113 [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141 [Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316 [Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323 [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374 [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414 [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432 [Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346 [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544 [Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573 [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367 [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373 [Intel XE#3862]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3862 [Intel XE#3876]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3876 [Intel XE#3884]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3884 [Intel XE#4130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4130 [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141 [Intel XE#4173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4173 [Intel XE#4212]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4212 [Intel XE#4345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4345 [Intel XE#4417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4417 [Intel XE#4418]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4418 [Intel XE#4427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4427 [Intel XE#4522]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4522 [Intel XE#4543]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4543 [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455 [Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596 [Intel XE#4760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4760 [Intel XE#4820]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4820 [Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837 [Intel XE#4915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4915 [Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943 [Intel XE#4945]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4945 [Intel XE#4947]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4947 [Intel XE#4950]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4950 [Intel XE#5018]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5018 [Intel XE#5249]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5249 [Intel XE#5308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5308 [Intel XE#5338]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5338 [Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607 [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651 [Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653 [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656 [Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688 [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787 [Intel XE#827]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/827 [Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836 [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870 [Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886 [Intel XE#911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/911 [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929 [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944 [Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979 Build changes ------------- * Linux: xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682 -> xe-pw-150711v1 IGT_8424: 68588b3c89a1bbe08c54d21c4d3d2e509957c795 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git xe-3300-0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682: 0db5cf46e2c4fd232179cd9d5d127ab8c4aa0682 xe-pw-150711v1: 150711v1 == Logs == For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150711v1/index.html [-- Attachment #2: Type: text/html, Size: 72052 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-06-26 7:55 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-06-24 20:09 [PATCH 0/5] Relax VF/PF version negotiation Michal Wajdeczko 2025-06-24 20:09 ` [PATCH 1/5] drm/xe: Combine PF and VF device data into union Michal Wajdeczko 2025-06-25 15:04 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 2/5] drm/xe: Move PF and VF device types to separate headers Michal Wajdeczko 2025-06-25 15:17 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 3/5] drm/xe/pf: Expose basic info about VFs in debugfs Michal Wajdeczko 2025-06-25 16:07 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 4/5] drm/xe/pf: Stop requiring VF/PF version negotiation on every GT Michal Wajdeczko 2025-06-26 7:42 ` Piotr Piórkowski 2025-06-24 20:09 ` [PATCH 5/5] drm/xe/vf: Store negotiated VF/PF ABI version at device level Michal Wajdeczko 2025-06-26 7:55 ` Piotr Piórkowski 2025-06-24 20:37 ` ✗ CI.checkpatch: warning for Relax VF/PF version negotiation Patchwork 2025-06-24 20:38 ` ✓ CI.KUnit: success " Patchwork 2025-06-24 21:28 ` ✓ Xe.CI.BAT: " Patchwork 2025-06-25 18:48 ` ✗ Xe.CI.Full: failure " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox