[PATCH 5/5] drm/xe/vf: Store negotiated VF/PF ABI version at device level
Piotr Piórkowski
piotr.piorkowski at intel.com
Thu Jun 26 07:55:15 UTC 2025
Michal Wajdeczko <michal.wajdeczko at 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 at 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 at intel.com>
> --
> 2.47.1
>
--
More information about the Intel-xe
mailing list