[PATCH i-g-t v3 2/4] lib/xe/xe_sriov_provisioning: Add helper to get VF's provisioned quota
Lukasz Laguna
lukasz.laguna at intel.com
Tue Feb 11 16:29:17 UTC 2025
Add helper allowing to get VF's provisioned quota based on provisioned
ranges exposed in debugfs.
v2:
- release allocated struct (Marcin)
Signed-off-by: Lukasz Laguna <lukasz.laguna at intel.com>
Reviewed-by: Satyanarayana K V P <satyanarayana.k.v.p at intel.com>
---
lib/xe/xe_sriov_provisioning.c | 59 ++++++++++++++++++++++++++++++++++
lib/xe/xe_sriov_provisioning.h | 6 ++++
2 files changed, 65 insertions(+)
diff --git a/lib/xe/xe_sriov_provisioning.c b/lib/xe/xe_sriov_provisioning.c
index 22035ffd8..f7d8c63d1 100644
--- a/lib/xe/xe_sriov_provisioning.c
+++ b/lib/xe/xe_sriov_provisioning.c
@@ -6,6 +6,8 @@
#include <errno.h>
#include "igt_core.h"
+#include "igt_debugfs.h"
+#include "igt_sriov_device.h"
#include "intel_chipset.h"
#include "linux_scaffold.h"
#include "xe/xe_mmio.h"
@@ -296,3 +298,60 @@ bool xe_sriov_is_shared_res_provisionable(int pf, enum xe_sriov_shared_res res,
return true;
}
+
+/**
+ * __xe_sriov_pf_get_provisioned_quota - Get VF's provisioned quota.
+ * @pf: PF device file descriptor
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @vf_num: VF number (1-based)
+ * @gt_num: GT number
+ * @value: Pointer to store the read value
+ *
+ * Gets VF's provisioning value for the specified shared resource @res,
+ * VF number @vf_num and GT number @gt_num.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int __xe_sriov_pf_get_provisioned_quota(int pf, enum xe_sriov_shared_res res,
+ unsigned int vf_num, unsigned int gt_num,
+ uint64_t *value)
+{
+ struct xe_sriov_provisioned_range *ranges;
+ int ret;
+
+ ret = xe_sriov_pf_debugfs_read_check_ranges(pf, res, gt_num, &ranges,
+ igt_sriov_get_enabled_vfs(pf));
+ if (igt_debug_on_f(ret, "%s: Failed ranges check on GT%u (%d)\n",
+ xe_sriov_debugfs_provisioned_attr_name(res), gt_num, ret))
+ return ret;
+
+ *value = ranges[vf_num - 1].end - ranges[vf_num - 1].start + 1;
+
+ free(ranges);
+
+ return 0;
+}
+
+/**
+ * xe_sriov_pf_get_provisioned_quota - Get VF's provisioned quota.
+ * @pf: PF device file descriptor
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @vf_num: VF number (1-based)
+ * @gt_num: GT number
+ *
+ * A throwing version of __xe_sriov_pf_get_provisioned_quota().
+ * Instead of returning an error code, it returns the quota value and asserts
+ * in case of an error.
+ *
+ * Return: The provisioned quota for the given shared resource.
+ * Asserts in case of failure.
+ */
+uint64_t xe_sriov_pf_get_provisioned_quota(int pf, enum xe_sriov_shared_res res,
+ unsigned int vf_num, unsigned int gt_num)
+{
+ uint64_t value;
+
+ igt_fail_on(__xe_sriov_pf_get_provisioned_quota(pf, res, vf_num, gt_num, &value));
+
+ return value;
+}
diff --git a/lib/xe/xe_sriov_provisioning.h b/lib/xe/xe_sriov_provisioning.h
index b4300ec2e..171e4f028 100644
--- a/lib/xe/xe_sriov_provisioning.h
+++ b/lib/xe/xe_sriov_provisioning.h
@@ -90,4 +90,10 @@ void xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
unsigned int vf_num, unsigned int gt_num,
uint64_t value);
+int __xe_sriov_pf_get_provisioned_quota(int pf, enum xe_sriov_shared_res res,
+ unsigned int vf_num, unsigned int gt_num,
+ uint64_t *value);
+uint64_t xe_sriov_pf_get_provisioned_quota(int pf, enum xe_sriov_shared_res res,
+ unsigned int vf_num, unsigned int gt_num);
+
#endif /* __XE_SRIOV_PROVISIONING_H__ */
--
2.40.0
More information about the igt-dev
mailing list