From: Michal Wajdeczko <michal.wajdeczko@intel.com>
To: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>,
<intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH v6 7/7] drm/xe/tests: Add KUnit tests for VF provisioning error handling
Date: Fri, 21 Aug 2026 13:01:36 +0200 [thread overview]
Message-ID: <2bf7c929-8228-455b-833e-5d1d98fe8540@intel.com> (raw)
In-Reply-To: <20260812124313.1377582-16-satyanarayana.k.v.p@intel.com>
On 8/12/2026 2:43 PM, Satyanarayana K V P wrote:
> VF relies on the PF to provide a valid hardware configuration via GuC
> KLV responses. In unlikely event of PF malfunction or misconfiguration,
> a VF may receive incomplete, zero, or out-of-range values for its
> submission contexts, doorbells, VRAM or GGTT assignment.
>
> Add KUnit test cases that use the xe_guc_mmio_send_recv() stub to inject
> bad KLV responses and verify that VF can survive without crashing for
> the invalid configuration data received.
>
> Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
> V5 -> V6:
> - Fixed review comments (Michal W).
>
> V4 -> V5:
> - Added alignment tests for vram, GGTT base and size (Michal W).
> - Separated stubs for ctx, db, vram and GGTT (Michal W).
> - Added new test cases for xe_guc_mmio_send_recv() (Michal W).
>
> V3 -> V4:
> - Changed stub function from guc_action_query_single_klv32() and
> guc_action_query_single_klv64() to xe_guc_mmio_send_recv() (Michal W).
> - Fixed review comments (Michal W).
>
> V2 -> V3:
> - Renamed the test names. (Michal W).
> - Fixed review comments (Michal W).
>
> V1 -> V2:
> - Renamed the test file (Michal W).
> - Fixed review comments (Michal W).
> ---
> .../gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c | 484 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 4 +
> 2 files changed, 488 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c
>
> diff --git a/drivers/gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c b/drivers/gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c
> new file mode 100644
> index 000000000000..8cb7f3cebb31
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/tests/xe_gt_sriov_vf_kunit.c
> @@ -0,0 +1,484 @@
> +// SPDX-License-Identifier: GPL-2.0 AND MIT
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#include <kunit/static_stub.h>
> +#include <kunit/test.h>
> +
> +#include "regs/xe_guc_regs.h"
> +#include "xe_device.h"
> +#include "xe_kunit_helpers.h"
> +#include "xe_pci_test.h"
> +#include "xe_guc.h"
> +
> +#define TEST_VRAM SZ_8G
> +#define TEST_GGTT_SIZE SZ_2G
> +#define TEST_CTXS 1024
> +#define TEST_DBS 128
> +#define TEST_GGTT_START 0xa0a00000ull
> +
> +struct config {
> + u32 orig;
> + u32 query;
> + int expected_ret;
> + int ret;
> + const char *name;
> +} vf_ctx_testcase[] = {
> + {
> + .orig = TEST_CTXS, .query = TEST_CTXS,
> + .expected_ret = 0, .name = "same",
> + },
> + {
> + .orig = 0, .query = 0,
> + .expected_ret = -ENODATA, .name = "none",
> + },
> + {
> + .orig = 0, .query = GUC_ID_MAX + 1,
> + .expected_ret = -EPROTO, .name = "overflow",
> + },
> + {
> + .orig = TEST_CTXS, .query = 0,
> + .expected_ret = -EREMCHG, .name = "lost",
> + },
> + {
> + .orig = TEST_CTXS, .query = TEST_CTXS / 2,
> + .expected_ret = -EREMCHG, .name = "reduced",
> + },
> + {
> + .orig = TEST_CTXS, .query = TEST_CTXS * 2,
> + .expected_ret = -EREMCHG, .name = "increased",
> + },
> + {
> + .expected_ret = -EPROTO, .ret = -EPROTO,
> + .name = "proto_error",
> + },
> + {
> + .expected_ret = -EIO, .ret = -EIO,
> + .name = "IO error",
> + },
> +}, vf_db_testcase[] = {
> + {
> + .orig = TEST_DBS, .query = TEST_DBS,
> + .expected_ret = 0, .name = "same",
> + },
> + {
> + .orig = 0, .query = 0,
> + .expected_ret = 0, .name = "none",
> + },
> + {
> + .orig = TEST_DBS, .query = GUC_NUM_DOORBELLS + 1,
> + .expected_ret = -EPROTO, .name = "overflow",
> + },
> + {
> + .orig = TEST_DBS, .query = 0,
> + .expected_ret = -EREMCHG, .name = "lost",
> + },
> + {
> + .orig = TEST_DBS, .query = TEST_DBS / 2,
> + .expected_ret = -EREMCHG, .name = "reduced",
> + },
> + {
> + .orig = TEST_DBS, .query = GUC_NUM_DOORBELLS - 1,
> + .expected_ret = -EREMCHG, .name = "increased",
> + },
> + {
> + .expected_ret = -EPROTO, .ret = -EPROTO,
> + .name = "proto_error"
> + },
> + {
> + .expected_ret = -EIO, .ret = -EIO,
> + .name = "IO error",
> + },
> +};
> +
> +struct config_vram {
> + u64 orig;
> + u64 query;
> + int expected_ret;
> + int ret;
> + const char *name;
> +} vf_vram_testcase[] = {
> + {
> + .orig = TEST_VRAM, .query = TEST_VRAM,
> + .expected_ret = 0, .name = "same",
> + },
> + {
> + .orig = 0, .query = 0,
> + .expected_ret = -ENODATA, .name = "none",
> + },
> + {
> + .orig = TEST_VRAM / 2, .query = TEST_VRAM + SZ_1G,
> + .expected_ret = -EREMCHG, .name = "overflow",
> + },
> + {
> + .orig = TEST_VRAM / 2, .query = 0,
> + .expected_ret = -EREMCHG, .name = "lost",
> + },
> + {
> + .orig = TEST_VRAM / 2, .query = TEST_VRAM / 4,
> + .expected_ret = -EREMCHG, .name = "reduced",
> + },
> + {
> + .orig = TEST_VRAM, .query = TEST_VRAM * 2,
> + .expected_ret = -EREMCHG, .name = "increased",
> + },
> + {
> + .orig = TEST_VRAM - SZ_1M, .query = TEST_VRAM - SZ_1M,
> + .expected_ret = -EINVAL, .name = "unaligned",
> + },
> + {
> + .expected_ret = -EPROTO, .ret = -EPROTO,
> + .name = "proto_error"
> + },
> + {
> + .expected_ret = -EIO, .ret = -EIO,
> + .name = "IO error",
> + },
> +};
> +
> +struct config_ggtt {
> + u64 start_orig;
> + u64 start_query;
> + u64 size_orig;
> + u64 size_query;
> + int expected_ret;
> + int ret;
> + int flags;
> + const char *name;
> +} vf_ggtt_testcase[] = {
static const ?
as a bonus you likely will not need to initialize some members to 0
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE, .size_query = TEST_GGTT_SIZE,
> + .expected_ret = 0, .flags = 0,
> + .name = "same",
> + },
> + {
> + .start_orig = 0, .start_query = 0,
> + .size_orig = 0, .size_query = 0,
> + .expected_ret = -ENODATA, .flags = 0,
> + .name = "none",
> + },
we need all those negative test cases also for the initial query (orig = 0)
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE, .size_query = TEST_GGTT_SIZE + SZ_1G,
> + .expected_ret = -EREMCHG, .flags = 0,
> + .name = "overflow",
> + },
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE, .size_query = 0,
> + .expected_ret = -ENODATA, .flags = 0,
> + .name = "lost",
> + },
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE, .size_query = TEST_GGTT_SIZE - SZ_1M,
> + .expected_ret = -EREMCHG, .flags = 0,
> + .name = "reduced",
> + },
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE, .size_query = TEST_GGTT_SIZE + SZ_1M,
> + .expected_ret = -EREMCHG, .flags = 0,
> + .name = "increased",
> + },
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE - SZ_2K, .size_query = TEST_GGTT_SIZE - SZ_2K,
it shouldn't be possible to have unaligned original GGTT size (size_orig)
> + .expected_ret = -EINVAL, .flags = 0,
> + .name = "unaligned_size_4K",
> +
> + },
> + {
> + .start_orig = TEST_GGTT_START, .start_query = TEST_GGTT_START,
> + .size_orig = TEST_GGTT_SIZE - SZ_8K, .size_query = TEST_GGTT_SIZE - SZ_8K,
> + .expected_ret = -EINVAL, .flags = XE_VRAM_FLAGS_NEED64K,
> + .name = "unaligned_size_64K",
> + },
ditto
> + {
> + .start_orig = TEST_GGTT_START - SZ_2K, .start_query = TEST_GGTT_START - SZ_2K,
> + .size_orig = TEST_GGTT_SIZE, .size_query = TEST_GGTT_SIZE,
> + .expected_ret = -EINVAL, .flags = 0,
> + .name = "unaligned_base_4k",
> + },
same here, we should never store invalid GGTT start
> + {
> + .start_orig = TEST_GGTT_START - SZ_8K, .start_query = TEST_GGTT_START - SZ_8K,
> + .size_orig = TEST_GGTT_SIZE, .size_query = TEST_GGTT_SIZE,
> + .expected_ret = -EINVAL, .flags = XE_VRAM_FLAGS_NEED64K,
> + .name = "unaligned_base_64k",
> + },
> + {
> + .expected_ret = -EPROTO, .ret = -EPROTO,
> + .name = "proto_error"
> + },
> + {
> + .expected_ret = -EIO, .ret = -EIO,
> + .name = "IO error",
> + },
> +};
> +
> +struct config_mmio {
> + u32 response_length;
> + u32 response_value;
> + int expected_ret;
> + int ret;
> + const char *name;
> +} guc_mmio_resp_testcase[] = {
> + {
> + .response_length = sizeof(u32) / sizeof(u32),
> + .response_value = TEST_CTXS, .expected_ret = 0, .name = "same",
> + },
> + {
> + .response_length = 0, .response_value = 0,
> + .expected_ret = -ENODATA, .name = "none",
> + },
> + {
> + .response_length = sizeof(u64) / sizeof(u32),
> + .response_value = TEST_CTXS, .expected_ret = -EOVERFLOW,
> + .name = "overflow",
> + },
> + {
> + .response_length = sizeof(u32) / sizeof(u32),
> + .response_value = 0, .expected_ret = -EREMCHG,
> + .name = "lost",
> + },
> + {
> + .response_length = 0xffff, .response_value = 0xffff,
> + .expected_ret = -EOVERFLOW, .name = "invalid",
> + },
> + {
> + .expected_ret = -EPROTO, .ret = -EPROTO,
> + .name = "proto_error",
> + },
> + {
> + .expected_ret = -EIO, .ret = -EIO,
> + .name = "IO error",
> + },
> +};
> +
> +KUNIT_ARRAY_PARAM_DESC(ctx_testcase, vf_ctx_testcase, name);
> +KUNIT_ARRAY_PARAM_DESC(db_testcase, vf_db_testcase, name);
> +KUNIT_ARRAY_PARAM_DESC(vram_testcase, vf_vram_testcase, name);
> +KUNIT_ARRAY_PARAM_DESC(ggtt_testcase, vf_ggtt_testcase, name);
> +KUNIT_ARRAY_PARAM_DESC(guc_mmio_resp, guc_mmio_resp_testcase, name);
hmm, I'm wondering if maybe keeping config struct + KNIT_ARRAY helper
closer to the actual test case code will be easier to view/maintain ?
> +
> +static int xe_guc_mmio_send_recv_stub_ctx(struct xe_guc *guc, const u32 *request,
> + u32 len, u32 *response_buf)
> +{
> + struct kunit *test = kunit_get_current_test();
> + const struct config *c = test->param_value;
> +
> + if (c->ret)
> + return c->ret;
> +
> + KUNIT_ASSERT_EQ(test, FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, request[0]),
> + GUC_ACTION_VF2GUC_QUERY_SINGLE_KLV);
> + KUNIT_ASSERT_EQ(test,
> + FIELD_GET(VF2GUC_QUERY_SINGLE_KLV_REQUEST_MSG_1_KEY, request[1]),
> + GUC_KLV_VF_CFG_NUM_CONTEXTS_KEY);
> +
> + response_buf[0] = sizeof(u32) / sizeof(u32);
> + response_buf[1] = c->query;
> +
> + return 0;
> +}
> +
> +static int xe_guc_mmio_send_recv_stub_db(struct xe_guc *guc, const u32 *request,
> + u32 len, u32 *response_buf)
> +{
> + struct kunit *test = kunit_get_current_test();
> + const struct config *c = test->param_value;
> +
> + if (c->ret)
> + return c->ret;
> +
> + KUNIT_ASSERT_EQ(test, FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, request[0]),
> + GUC_ACTION_VF2GUC_QUERY_SINGLE_KLV);
> + KUNIT_ASSERT_EQ(test,
> + FIELD_GET(VF2GUC_QUERY_SINGLE_KLV_REQUEST_MSG_1_KEY, request[1]),
> + GUC_KLV_VF_CFG_NUM_DOORBELLS_KEY);
> +
> + response_buf[0] = sizeof(u32) / sizeof(u32);
> + response_buf[1] = c->query;
> +
> + return 0;
> +}
> +
> +static int xe_guc_mmio_send_recv_stub_vram(struct xe_guc *guc, const u32 *request,
> + u32 len, u32 *response_buf)
> +{
> + struct kunit *test = kunit_get_current_test();
> + const struct config_vram *c = test->param_value;
> +
> + if (c->ret)
> + return c->ret;
> +
> + KUNIT_ASSERT_EQ(test, FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, request[0]),
> + GUC_ACTION_VF2GUC_QUERY_SINGLE_KLV);
> + KUNIT_ASSERT_EQ(test,
> + FIELD_GET(VF2GUC_QUERY_SINGLE_KLV_REQUEST_MSG_1_KEY, request[1]),
> + GUC_KLV_VF_CFG_LMEM_SIZE_KEY);
> +
> + response_buf[0] = sizeof(u64) / sizeof(u32);
> + response_buf[1] = lower_32_bits(c->query);
> + response_buf[2] = upper_32_bits(c->query);
> +
> + return 0;
> +}
> +
> +static int xe_guc_mmio_send_recv_stub_ggtt(struct xe_guc *guc, const u32 *request,
> + u32 len, u32 *response_buf)
> +{
> + struct kunit *test = kunit_get_current_test();
> + const struct config_ggtt *c = test->param_value;
> + u32 key;
> +
> + if (c->ret)
> + return c->ret;
> +
> + KUNIT_ASSERT_EQ(test, FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, request[0]),
> + GUC_ACTION_VF2GUC_QUERY_SINGLE_KLV);
> + key = FIELD_GET(VF2GUC_QUERY_SINGLE_KLV_REQUEST_MSG_1_KEY, request[1]);
> + KUNIT_ASSERT_TRUE(test,
> + key == GUC_KLV_VF_CFG_GGTT_START_KEY ||
> + key == GUC_KLV_VF_CFG_GGTT_SIZE_KEY);
> +
> + response_buf[0] = sizeof(u64) / sizeof(u32);
> + if (key == GUC_KLV_VF_CFG_GGTT_START_KEY) {
> + response_buf[1] = lower_32_bits(c->start_query);
> + response_buf[2] = upper_32_bits(c->start_query);
> + } else {
else if (key == START)
> + response_buf[1] = lower_32_bits(c->size_query);
> + response_buf[2] = upper_32_bits(c->size_query);
> + }
else
KUNIT_FAIL
> +
> + return 0;
> +}
> +
> +static int xe_guc_mmio_send_recv_stub(struct xe_guc *guc, const u32 *request,
> + u32 len, u32 *response_buf)
> +{
> + struct kunit *test = kunit_get_current_test();
> + const struct config_mmio *c = test->param_value;
> +
> + if (c->ret)
> + return c->ret;
> +
> + KUNIT_ASSERT_EQ(test, FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, request[0]),
> + GUC_ACTION_VF2GUC_QUERY_SINGLE_KLV);
> + /**
> + * Let us take help of vf_get_ctxs_cfg() function to test responses
> + * from Guc.
> + */
do we really need this comment?
> + KUNIT_ASSERT_EQ(test,
> + FIELD_GET(VF2GUC_QUERY_SINGLE_KLV_REQUEST_MSG_1_KEY, request[1]),
> + GUC_KLV_VF_CFG_NUM_CONTEXTS_KEY);
> +
> + response_buf[0] = c->response_length;
> + response_buf[1] = c->response_value;
> +
> + return 0;
> +}
> +
> +static void test_ctxs(struct kunit *test)
> +{
> + struct xe_gt *gt = test->priv;
> + const struct config *c = test->param_value;
> +
> + gt->sriov.vf.self_config.num_ctxs = c->orig;
> + kunit_activate_static_stub(test, xe_guc_mmio_send_recv,
> + xe_guc_mmio_send_recv_stub_ctx);
> + KUNIT_EXPECT_EQ(test, vf_get_ctxs_cfg(gt), c->expected_ret);
> +}
> +
> +static void test_dbs(struct kunit *test)
> +{
> + struct xe_gt *gt = test->priv;
> + const struct config *c = test->param_value;
> +
> + gt->sriov.vf.self_config.num_dbs = c->orig;
> + kunit_activate_static_stub(test, xe_guc_mmio_send_recv,
> + xe_guc_mmio_send_recv_stub_db);
> + KUNIT_EXPECT_EQ(test, vf_get_dbs_cfg(gt), c->expected_ret);
> +}
> +
> +static void test_vram(struct kunit *test)
> +{
> + struct xe_gt *gt = test->priv;
> + const struct config_vram *c = test->param_value;
> +
> + gt->tile->sriov.vf.self_config.lmem_size = c->orig;
> + kunit_activate_static_stub(test, xe_guc_mmio_send_recv,
> + xe_guc_mmio_send_recv_stub_vram);
> + KUNIT_EXPECT_EQ(test, vf_get_lmem_info(gt), c->expected_ret);
> +}
> +
> +static void test_ggtt(struct kunit *test)
> +{
> + const struct config_ggtt *c = test->param_value;
> + struct xe_gt *gt = test->priv;
> + struct xe_device *xe = gt_to_xe(gt);
> +
> + gt->tile->sriov.vf.self_config.ggtt_base = c->start_orig;
> + gt->tile->sriov.vf.self_config.ggtt_size = c->size_orig;
> +
> + xe->info.vram_flags = c->flags;
hmm, if flags are only used here, then we should name it c->vram_flags
but OTOH maybe it is overkill to test for 64K mis-alignment if we
already have test for 4K and the code under test is the same?
> +
> + kunit_activate_static_stub(test, xe_guc_mmio_send_recv,
> + xe_guc_mmio_send_recv_stub_ggtt);
> + KUNIT_EXPECT_EQ(test, vf_get_ggtt_info(gt), c->expected_ret);
> +}
> +
> +static void test_guc_mmio(struct kunit *test)
> +{
> + const struct config_mmio *c = test->param_value;
> + struct xe_gt *gt = test->priv;
> +
> + gt->sriov.vf.self_config.num_ctxs = TEST_CTXS;
> + kunit_activate_static_stub(test, xe_guc_mmio_send_recv,
> + xe_guc_mmio_send_recv_stub);
> + KUNIT_EXPECT_EQ(test, vf_get_ctxs_cfg(gt), c->expected_ret);
> +}
> +
> +static int vf_gt_config_test_init(struct kunit *test)
> +{
> + struct xe_pci_fake_data fake = {
> + .sriov_mode = XE_SRIOV_MODE_VF,
> + .platform = XE_BATTLEMAGE, /* any random DGFX platform with SR-IOV */
> + .subplatform = XE_SUBPLATFORM_NONE,
> + .graphics_verx100 = 2001,
> + };
> + 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_VF(xe));
> + KUNIT_ASSERT_TRUE(test, IS_DGFX(xe));
> +
> + gt = xe_root_mmio_gt(xe);
> + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, gt);
> + test->priv = gt;
> +
> + return 0;
> +}
> +
> +static struct kunit_case vf_gt_config_test_cases[] = {
> + KUNIT_CASE_PARAM(test_ctxs, ctx_testcase_gen_params),
> + KUNIT_CASE_PARAM(test_dbs, db_testcase_gen_params),
> + KUNIT_CASE_PARAM(test_vram, vram_testcase_gen_params),
> + KUNIT_CASE_PARAM(test_ggtt, ggtt_testcase_gen_params),
> + KUNIT_CASE_PARAM(test_guc_mmio, guc_mmio_resp_gen_params),
> + {}
> +};
> +
> +static struct kunit_suite vf_gt_config_suite = {
> + .name = "vf_gt_config",
> + .test_cases = vf_gt_config_test_cases,
> + .init = vf_gt_config_test_init,
> +};
> +
> +kunit_test_suite(vf_gt_config_suite);
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> index be932ebe6a8d..d6b631cd4dfc 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> @@ -1684,3 +1684,7 @@ int xe_gt_sriov_vf_wait_valid_ggtt(struct xe_gt *gt)
>
> return atomic_read(>->sriov.vf.migration.fixups_complete_count);
> }
> +
> +#if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST)
> +#include "tests/xe_gt_sriov_vf_kunit.c"
> +#endif
next prev parent reply other threads:[~2026-08-21 11:01 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-12 12:43 [PATCH v6 0/7] KUnit test for VF provisioning error handling Satyanarayana K V P
2026-08-12 12:43 ` [PATCH v6 1/7] drm/xe/guc: Allow to replace xe_guc_mmio_send_recv() with KUNIT stub Satyanarayana K V P
2026-08-12 12:43 ` [PATCH v6 2/7] drm/xe/vf: Split submission config query helpers Satyanarayana K V P
2026-08-12 12:43 ` [PATCH v6 3/7] drm/xe/vf: Add bounds checking for queried context and doorbell counts Satyanarayana K V P
2026-08-12 12:43 ` [PATCH v6 4/7] drm/xe: Introduce helpers for xe_vram size Satyanarayana K V P
2026-08-12 12:55 ` sashiko-bot
2026-08-21 10:04 ` Michal Wajdeczko
2026-08-12 12:43 ` [PATCH v6 5/7] drm/xe/vf: Add bounds checking for queried GGTT base and size Satyanarayana K V P
2026-08-12 12:55 ` sashiko-bot
2026-08-21 10:27 ` Michal Wajdeczko
2026-08-12 12:43 ` [PATCH v6 6/7] drm/xe/vf: Add bounds checking for queried VRAM size Satyanarayana K V P
2026-08-12 13:02 ` sashiko-bot
2026-08-21 10:31 ` Michal Wajdeczko
2026-08-12 12:43 ` [PATCH v6 7/7] drm/xe/tests: Add KUnit tests for VF provisioning error handling Satyanarayana K V P
2026-08-12 13:00 ` sashiko-bot
2026-08-21 11:01 ` Michal Wajdeczko [this message]
2026-08-12 13:18 ` ✗ CI.checkpatch: warning for KUnit test for VF provisioning error handling (rev6) Patchwork
2026-08-12 13:19 ` ✓ CI.KUnit: success " Patchwork
2026-08-12 14:20 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-12 18:27 ` ✓ Xe.CI.FULL: " 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=2bf7c929-8228-455b-833e-5d1d98fe8540@intel.com \
--to=michal.wajdeczko@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=satyanarayana.k.v.p@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox