From: "Piotr Piórkowski" <piotr.piorkowski@intel.com>
To: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH 3/3] drm/xe/tests: Add KUnit tests for PF fair provisioning
Date: Thu, 6 Nov 2025 17:09:29 +0100 [thread overview]
Message-ID: <20251106160929.pcflqlleh5otbr3t@intel.com> (raw)
In-Reply-To: <20251105183253.863-4-michal.wajdeczko@intel.com>
Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on śro [2025-lis-05 19:32:52 +0100]:
> Add test cases to check outcome of fair GuC context or doorbells
> IDs allocations for regular and admin-only PF mode.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
> .../xe/tests/xe_gt_sriov_pf_config_kunit.c | 162 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 4 +
> 2 files changed, 166 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c
>
> diff --git a/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c b/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c
> new file mode 100644
> index 000000000000..162a8a1a1dc6
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c
> @@ -0,0 +1,162 @@
> +// SPDX-License-Identifier: GPL-2.0 AND MIT
> +/*
> + * Copyright © 2025 Intel Corporation
> + */
> +
> +#include <kunit/static_stub.h>
> +#include <kunit/test.h>
> +#include <kunit/test-bug.h>
> +
> +#include "xe_kunit_helpers.h"
> +#include "xe_pci_test.h"
> +
> +#define TEST_MAX_VFS 63
> +
> +static void pf_set_admin_mode(struct xe_device *xe, bool enable)
> +{
> + /* should match logic of xe_sriov_pf_admin_only() */
> + xe->info.probe_display = !enable;
> + KUNIT_EXPECT_EQ(kunit_get_current_test(), enable, xe_sriov_pf_admin_only(xe));
> +}
> +
> +static const void *num_vfs_gen_param(struct kunit *test, const void *prev, char *desc)
> +{
> + unsigned long next = 1 + (unsigned long)prev;
> +
> + if (next > TEST_MAX_VFS)
> + return NULL;
> + snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%lu VF%s",
> + next, str_plural(next));
> + return (void *)next;
> +}
> +
> +static int pf_gt_config_test_init(struct kunit *test)
> +{
> + struct xe_pci_fake_data fake = {
> + .sriov_mode = XE_SRIOV_MODE_PF,
> + .platform = XE_TIGERLAKE, /* any random platform with SR-IOV */
> + .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_TRUE(test, IS_SRIOV_PF(xe));
> +
> + gt = xe_root_mmio_gt(xe);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, gt);
> + test->priv = gt;
> +
> + /* pretend it can support up to 63 VFs */
> + xe->sriov.pf.device_total_vfs = TEST_MAX_VFS;
> + xe->sriov.pf.driver_max_vfs = TEST_MAX_VFS;
> + KUNIT_ASSERT_EQ(test, xe_sriov_pf_get_totalvfs(xe), 63);
> +
> + pf_set_admin_mode(xe, false);
> + KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0);
> +
> + /* more sanity checks */
> + KUNIT_EXPECT_EQ(test, GUC_ID_MAX + 1, SZ_64K);
> + KUNIT_EXPECT_EQ(test, GUC_NUM_DOORBELLS, SZ_256);
> +
> + return 0;
> +}
> +
> +static void fair_contexts_1vf(struct kunit *test)
> +{
> + struct xe_gt *gt = test->priv;
> + struct xe_device *xe = gt_to_xe(gt);
> +
> + pf_set_admin_mode(xe, false);
> + KUNIT_ASSERT_FALSE(test, xe_sriov_pf_admin_only(xe));
> + KUNIT_EXPECT_EQ(test, SZ_32K, pf_profile_fair_ctxs(gt, 1));
> +
> + pf_set_admin_mode(xe, true);
> + KUNIT_ASSERT_TRUE(test, xe_sriov_pf_admin_only(xe));
> + KUNIT_EXPECT_EQ(test, SZ_64K - SZ_1K, pf_profile_fair_ctxs(gt, 1));
> +}
> +
> +static void fair_contexts(struct kunit *test)
> +{
> + unsigned int num_vfs = (unsigned long)test->param_value;
> + struct xe_gt *gt = test->priv;
> + struct xe_device *xe = gt_to_xe(gt);
> +
> + pf_set_admin_mode(xe, false);
> + KUNIT_ASSERT_FALSE(test, xe_sriov_pf_admin_only(xe));
> +
> + KUNIT_EXPECT_TRUE(test, is_power_of_2(pf_profile_fair_ctxs(gt, num_vfs)));
> + KUNIT_EXPECT_GT(test, GUC_ID_MAX, num_vfs * pf_profile_fair_ctxs(gt, num_vfs));
> +
> + if (num_vfs > 31)
> + KUNIT_ASSERT_EQ(test, SZ_1K, pf_profile_fair_ctxs(gt, num_vfs));
> + else if (num_vfs > 15)
> + KUNIT_ASSERT_EQ(test, SZ_2K, pf_profile_fair_ctxs(gt, num_vfs));
> + else if (num_vfs > 7)
> + KUNIT_ASSERT_EQ(test, SZ_4K, pf_profile_fair_ctxs(gt, num_vfs));
> + else if (num_vfs > 3)
> + KUNIT_ASSERT_EQ(test, SZ_8K, pf_profile_fair_ctxs(gt, num_vfs));
> + else if (num_vfs > 1)
> + KUNIT_ASSERT_EQ(test, SZ_16K, pf_profile_fair_ctxs(gt, num_vfs));
> + else
> + KUNIT_ASSERT_EQ(test, SZ_32K, pf_profile_fair_ctxs(gt, num_vfs));
> +}
> +
> +static void fair_doorbells_1vf(struct kunit *test)
> +{
> + struct xe_gt *gt = test->priv;
> + struct xe_device *xe = gt_to_xe(gt);
> +
> + pf_set_admin_mode(xe, false);
> + KUNIT_ASSERT_FALSE(test, xe_sriov_pf_admin_only(xe));
> + KUNIT_EXPECT_EQ(test, 128, pf_profile_fair_dbs(gt, 1));
> +
> + pf_set_admin_mode(xe, true);
> + KUNIT_ASSERT_TRUE(test, xe_sriov_pf_admin_only(xe));
> + KUNIT_EXPECT_EQ(test, 240, pf_profile_fair_dbs(gt, 1));
> +}
> +
> +static void fair_doorbells(struct kunit *test)
> +{
> + unsigned int num_vfs = (unsigned long)test->param_value;
> + struct xe_gt *gt = test->priv;
> + struct xe_device *xe = gt_to_xe(gt);
> +
> + pf_set_admin_mode(xe, false);
> + KUNIT_ASSERT_FALSE(test, xe_sriov_pf_admin_only(xe));
> +
> + KUNIT_EXPECT_TRUE(test, is_power_of_2(pf_profile_fair_dbs(gt, num_vfs)));
> + KUNIT_EXPECT_GE(test, GUC_NUM_DOORBELLS, (num_vfs + 1) * pf_profile_fair_dbs(gt, num_vfs));
> +
> + if (num_vfs > 31)
> + KUNIT_ASSERT_EQ(test, SZ_4, pf_profile_fair_dbs(gt, num_vfs));
> + else if (num_vfs > 15)
> + KUNIT_ASSERT_EQ(test, SZ_8, pf_profile_fair_dbs(gt, num_vfs));
> + else if (num_vfs > 7)
> + KUNIT_ASSERT_EQ(test, SZ_16, pf_profile_fair_dbs(gt, num_vfs));
> + else if (num_vfs > 3)
> + KUNIT_ASSERT_EQ(test, SZ_32, pf_profile_fair_dbs(gt, num_vfs));
> + else if (num_vfs > 1)
> + KUNIT_ASSERT_EQ(test, SZ_64, pf_profile_fair_dbs(gt, num_vfs));
> + else
> + KUNIT_ASSERT_EQ(test, SZ_128, pf_profile_fair_dbs(gt, num_vfs));
> +}
> +
> +static struct kunit_case pf_gt_confit_test_cases[] = {
typo
> + KUNIT_CASE(fair_contexts_1vf),
> + KUNIT_CASE(fair_doorbells_1vf),
> + KUNIT_CASE_PARAM(fair_contexts, num_vfs_gen_param),
> + KUNIT_CASE_PARAM(fair_doorbells, num_vfs_gen_param),
> + {}
> +};
> +
> +static struct kunit_suite pf_gt_config_suite = {
> + .name = "pf_gt_config",
> + .test_cases = pf_gt_confit_test_cases,
> + .init = pf_gt_config_test_init,
> +};
> +
> +kunit_test_suite(pf_gt_config_suite);
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> index 701889e5dded..80cc3f2cd047 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> @@ -2826,3 +2826,7 @@ int xe_gt_sriov_pf_config_print_available_ggtt(struct xe_gt *gt, struct drm_prin
>
> return 0;
> }
> +
> +#if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST)
> +#include "tests/xe_gt_sriov_pf_config_kunit.c"
> +#endif
one typo but the rest looks okay:
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
> --
> 2.47.1
>
--
next prev parent reply other threads:[~2025-11-06 16:09 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-05 18:32 [PATCH 0/3] PF: migration-friendly auto-provisioning Michal Wajdeczko
2025-11-05 18:32 ` [PATCH 1/3] drm/xe/pf: Use migration-friendly context IDs auto-provisioning Michal Wajdeczko
2025-11-06 14:24 ` Piotr Piórkowski
2025-11-06 16:55 ` Michal Wajdeczko
2025-11-05 18:32 ` [PATCH 2/3] drm/xe/pf: Use migration-friendly doorbells auto-provisioning Michal Wajdeczko
2025-11-06 14:39 ` Piotr Piórkowski
2025-11-05 18:32 ` [PATCH 3/3] drm/xe/tests: Add KUnit tests for PF fair provisioning Michal Wajdeczko
2025-11-06 16:09 ` Piotr Piórkowski [this message]
2025-11-06 16:59 ` [PATCH v2 " Michal Wajdeczko
2025-11-05 21:28 ` ✗ CI.checkpatch: warning for PF: migration-friendly auto-provisioning Patchwork
2025-11-05 21:30 ` ✓ CI.KUnit: success " Patchwork
2025-11-05 22:46 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-11-06 9:50 ` ✗ Xe.CI.Full: " Patchwork
2025-11-06 17:13 ` ✗ CI.checkpatch: warning for PF: migration-friendly auto-provisioning (rev2) Patchwork
2025-11-06 17:15 ` ✓ CI.KUnit: success " Patchwork
2025-11-06 17:53 ` ✓ Xe.CI.BAT: " Patchwork
2025-11-07 14:52 ` ✗ Xe.CI.Full: failure " Patchwork
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=20251106160929.pcflqlleh5otbr3t@intel.com \
--to=piotr.piorkowski@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=michal.wajdeczko@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.