All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Wajdeczko <michal.wajdeczko@intel.com>
To: "Piotr Piórkowski" <piotr.piorkowski@intel.com>
Cc: <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH 1/4] drm/xe/pf: Promote VFs provisioning helpers
Date: Thu, 16 Oct 2025 13:33:24 +0200	[thread overview]
Message-ID: <d264b175-76ea-4336-92a0-e377dd7e5b0e@intel.com> (raw)
In-Reply-To: <20251015130033.fsiaela2k64kicm6@intel.com>



On 10/15/2025 3:00 PM, Piotr Piórkowski wrote:
> Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on śro [2025-paź-15 11:12:06 +0200]:
>> As we plan to add more VFs provisioning methods, start moving
>> related code into single place.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> ---
>>  drivers/gpu/drm/xe/Makefile                |  1 +
>>  drivers/gpu/drm/xe/xe_pci_sriov.c          | 45 ++----------
>>  drivers/gpu/drm/xe/xe_sriov_pf_provision.c | 83 ++++++++++++++++++++++
>>  drivers/gpu/drm/xe/xe_sriov_pf_provision.h | 14 ++++
>>  4 files changed, 102 insertions(+), 41 deletions(-)
>>  create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_provision.c
>>  create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_provision.h
>>
>> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
>> index 84321fad3265..edae0c2a6e2f 100644
>> --- a/drivers/gpu/drm/xe/Makefile
>> +++ b/drivers/gpu/drm/xe/Makefile
>> @@ -176,6 +176,7 @@ xe-$(CONFIG_PCI_IOV) += \
>>  	xe_sriov_pf.o \
>>  	xe_sriov_pf_control.o \
>>  	xe_sriov_pf_debugfs.o \
>> +	xe_sriov_pf_provision.o \
>>  	xe_sriov_pf_service.o \
>>  	xe_tile_sriov_pf_debugfs.o
>>  
>> diff --git a/drivers/gpu/drm/xe/xe_pci_sriov.c b/drivers/gpu/drm/xe/xe_pci_sriov.c
>> index 9c1c9e669b04..735f51effc7a 100644
>> --- a/drivers/gpu/drm/xe/xe_pci_sriov.c
>> +++ b/drivers/gpu/drm/xe/xe_pci_sriov.c
>> @@ -19,46 +19,9 @@
>>  #include "xe_sriov_pf.h"
>>  #include "xe_sriov_pf_control.h"
>>  #include "xe_sriov_pf_helpers.h"
>> +#include "xe_sriov_pf_provision.h"
>>  #include "xe_sriov_printk.h"
>>  
>> -static int pf_needs_provisioning(struct xe_gt *gt, unsigned int num_vfs)
>> -{
>> -	unsigned int n;
>> -
>> -	for (n = 1; n <= num_vfs; n++)
>> -		if (!xe_gt_sriov_pf_config_is_empty(gt, n))
>> -			return false;
>> -
>> -	return true;
>> -}
>> -
>> -static int pf_provision_vfs(struct xe_device *xe, unsigned int num_vfs)
>> -{
>> -	struct xe_gt *gt;
>> -	unsigned int id;
>> -	int result = 0, err;
>> -
>> -	for_each_gt(gt, xe, id) {
>> -		if (!pf_needs_provisioning(gt, num_vfs))
>> -			continue;
>> -		err = xe_gt_sriov_pf_config_set_fair(gt, VFID(1), num_vfs);
>> -		result = result ?: err;
>> -	}
>> -
>> -	return result;
>> -}
>> -
>> -static void pf_unprovision_vfs(struct xe_device *xe, unsigned int num_vfs)
>> -{
>> -	struct xe_gt *gt;
>> -	unsigned int id;
>> -	unsigned int n;
>> -
>> -	for_each_gt(gt, xe, id)
>> -		for (n = 1; n <= num_vfs; n++)
>> -			xe_gt_sriov_pf_config_release(gt, n, true);
>> -}
>> -
>>  static void pf_reset_vfs(struct xe_device *xe, unsigned int num_vfs)
>>  {
>>  	unsigned int n;
>> @@ -168,7 +131,7 @@ static int pf_enable_vfs(struct xe_device *xe, int num_vfs)
>>  	 */
>>  	xe_pm_runtime_get_noresume(xe);
>>  
>> -	err = pf_provision_vfs(xe, num_vfs);
>> +	err = xe_sriov_pf_provision_vfs(xe, num_vfs);
>>  	if (err < 0)
>>  		goto failed;
>>  
>> @@ -192,7 +155,7 @@ static int pf_enable_vfs(struct xe_device *xe, int num_vfs)
>>  	return num_vfs;
>>  
>>  failed:
>> -	pf_unprovision_vfs(xe, num_vfs);
>> +	xe_sriov_pf_unprovision_vfs(xe, num_vfs);
>>  	xe_pm_runtime_put(xe);
>>  out:
>>  	xe_sriov_notice(xe, "Failed to enable %u VF%s (%pe)\n",
>> @@ -218,7 +181,7 @@ static int pf_disable_vfs(struct xe_device *xe)
>>  
>>  	pf_reset_vfs(xe, num_vfs);
>>  
>> -	pf_unprovision_vfs(xe, num_vfs);
>> +	xe_sriov_pf_unprovision_vfs(xe, num_vfs);
>>  
>>  	/* not needed anymore - see pf_enable_vfs() */
>>  	xe_pm_runtime_put(xe);
>> diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_provision.c b/drivers/gpu/drm/xe/xe_sriov_pf_provision.c
>> new file mode 100644
>> index 000000000000..c24803312231
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/xe_sriov_pf_provision.c
>> @@ -0,0 +1,83 @@
>> +// SPDX-License-Identifier: MIT
>> +/*
>> + * Copyright © 2025 Intel Corporation
>> + */
>> +
>> +#include "xe_assert.h"
>> +#include "xe_device.h"
>> +#include "xe_gt_sriov_pf_config.h"
>> +#include "xe_sriov.h"
>> +#include "xe_sriov_pf_helpers.h"
>> +#include "xe_sriov_pf_provision.h"
>> +
>> +static int pf_needs_provisioning(struct xe_gt *gt, unsigned int num_vfs)
> 
> NIT: Why don't you use bool here?

this is pure copy-paste, it was "int" already there

but I can change it why applying

> 
> 
>> +{
>> +	unsigned int n;
>> +
>> +	for (n = 1; n <= num_vfs; n++)
>> +		if (!xe_gt_sriov_pf_config_is_empty(gt, n))
>> +			return false;
>> +
>> +	return true;
>> +}
>> +
>> +static int pf_provision_vfs(struct xe_device *xe, unsigned int num_vfs)
>> +{
>> +	struct xe_gt *gt;
>> +	unsigned int id;
>> +	int result = 0;
>> +	int err;
>> +
>> +	for_each_gt(gt, xe, id) {
>> +		if (!pf_needs_provisioning(gt, num_vfs))
>> +			continue;
>> +		err = xe_gt_sriov_pf_config_set_fair(gt, VFID(1), num_vfs);
>> +		result = result ?: err;
>> +	}
>> +
>> +	return result;
>> +}
>> +
>> +static void pf_unprovision_vfs(struct xe_device *xe, unsigned int num_vfs)
>> +{
>> +	struct xe_gt *gt;
>> +	unsigned int id;
>> +	unsigned int n;
>> +
>> +	for_each_gt(gt, xe, id)
>> +		for (n = 1; n <= num_vfs; n++)
>> +			xe_gt_sriov_pf_config_release(gt, n, true);
>> +}
>> +
>> +/**
>> + * xe_sriov_pf_provision_vfs() - Provision VFs in auto-mode.
>> + * @xe: the PF &xe_device
>> + * @num_vfs: the number of VFs to auto-provision
>> + *
>> + * This function can only be called on PF.
>> + *
>> + * Return: 0 on success or a negative error code on failure.
>> + */
>> +int xe_sriov_pf_provision_vfs(struct xe_device *xe, unsigned int num_vfs)
>> +{
>> +	xe_assert(xe, IS_SRIOV_PF(xe));
>> +
>> +	return pf_provision_vfs(xe, num_vfs);
>> +}
>> +
>> +/**
>> + * xe_sriov_pf_unprovision_vfs() - Unprovision VFs in auto-mode.
>> + * @xe: the PF &xe_device
>> + * @num_vfs: the number of VFs to unprovision
>> + *
>> + * This function can only be called on PF.
>> + *
>> + * Return: 0 on success or a negative error code on failure.
>> + */
>> +int xe_sriov_pf_unprovision_vfs(struct xe_device *xe, unsigned int num_vfs)
>> +{
>> +	xe_assert(xe, IS_SRIOV_PF(xe));
>> +
>> +	pf_unprovision_vfs(xe, num_vfs);
>> +	return 0;
>> +}
> 
> NIT: Perhaps it would be worth adding the assertion num_vfs > 0 here.

it's harmless here and in pf_unprovision_vfs() where the loop is from 1

	for (n = 1; n <= num_vfs; n++)

> 
>> diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_provision.h b/drivers/gpu/drm/xe/xe_sriov_pf_provision.h
>> new file mode 100644
>> index 000000000000..f6a902190ad7
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/xe_sriov_pf_provision.h
>> @@ -0,0 +1,14 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2025 Intel Corporation
>> + */
>> +
>> +#ifndef _XE_SRIOV_PF_PROVISION_H_
>> +#define _XE_SRIOV_PF_PROVISION_H_
>> +
>> +struct xe_device;
>> +
>> +int xe_sriov_pf_provision_vfs(struct xe_device *xe, unsigned int num_vfs);
>> +int xe_sriov_pf_unprovision_vfs(struct xe_device *xe, unsigned int num_vfs);
>> +
>> +#endif
> 
> Minor comments, but the code looks okay:
> Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
> 
>> -- 
>> 2.47.1
>>
> 


  reply	other threads:[~2025-10-16 11:33 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-15  9:12 [PATCH 0/4] PF: Update auto-provisioning Michal Wajdeczko
2025-10-15  9:12 ` [PATCH 1/4] drm/xe/pf: Promote VFs provisioning helpers Michal Wajdeczko
2025-10-15 13:00   ` Piotr Piórkowski
2025-10-16 11:33     ` Michal Wajdeczko [this message]
2025-10-15  9:12 ` [PATCH 2/4] drm/xe/pf: Automatically provision VFs only in auto-mode Michal Wajdeczko
2025-10-15 16:30   ` Piotr Piórkowski
2025-10-15  9:12 ` [PATCH 3/4] drm/xe/pf: Disable auto-provisioning if changed using debugfs Michal Wajdeczko
2025-10-16 15:26   ` Piotr Piórkowski
2025-10-15  9:12 ` [PATCH 4/4] drm/xe/pf: Allow to restore auto-provisioning mode Michal Wajdeczko
2025-10-16 15:46   ` Piotr Piórkowski
2025-10-15 12:10 ` ✗ CI.checkpatch: warning for PF: Update auto-provisioning Patchwork
2025-10-15 12:11 ` ✓ CI.KUnit: success " Patchwork
2025-10-15 13:07 ` ✓ Xe.CI.BAT: " Patchwork
2025-10-15 22:12 ` ✗ Xe.CI.Full: failure " Patchwork
2025-10-16 10:55   ` Michal Wajdeczko
2025-10-20  9:49     ` Bernatowicz, Marcin
2025-10-20 11:08       ` Bernatowicz, Marcin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d264b175-76ea-4336-92a0-e377dd7e5b0e@intel.com \
    --to=michal.wajdeczko@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=piotr.piorkowski@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.