[igt-dev] [PATCH i-g-t 4/8] lib/igt_sriov_device: add helpers for operations in different VFs scenarios
Lukasz Laguna
lukasz.laguna at intel.com
Thu Nov 30 12:48:37 UTC 2023
Added helpers:
- for_each_vf and for_each_num_vfs
- for_random_vf and for_random_num_vfs
- for_last_vf and for_max_num_vfs
v2:
- document helpers (Michal)
Cc: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
Signed-off-by: Lukasz Laguna <lukasz.laguna at intel.com>
---
lib/igt_sriov_device.h | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/lib/igt_sriov_device.h b/lib/igt_sriov_device.h
index 84f033f52..3ab984720 100644
--- a/lib/igt_sriov_device.h
+++ b/lib/igt_sriov_device.h
@@ -28,4 +28,45 @@ void igt_sriov_disable_driver_autoprobe(int pf);
int igt_sriov_open_vf_drm_device(int pf, unsigned int vf_num);
bool igt_sriov_is_vf_drm_driver_probed(int pf, unsigned int vf_num);
+/**
+ * for_each_vf - Helper for running code on each VF
+ * @__pf_fd: PF device file descriptor
+ * @__vf_num: VFs iterator
+ *
+ * For loop that iterates over all VFs associated with given PF @__pf_fd.
+ */
+#define for_each_vf(__pf_fd, __vf_num) \
+ for (unsigned int __vf_num = 1, __total_vfs = igt_sriov_get_total_vfs(__pf_fd); \
+ __vf_num <= __total_vfs; \
+ ++__vf_num)
+#define for_each_num_vfs for_each_vf
+
+/**
+ * for_random_vf - Helper for running code on random VF
+ * @__pf_fd: PF device file descriptor
+ * @__vf_num: stores random VF
+ *
+ * Helper allows to run code using random VF number (stored in @__vf_num)
+ * picked from the range of all VFs associated with given PF @__pf_fd.
+ */
+#define for_random_vf(__pf_fd, __vf_num) \
+ for (unsigned int __vf_num = 1 + random() % igt_sriov_get_total_vfs(__pf_fd), __tmp = 0; \
+ __tmp < 1; \
+ ++__tmp)
+#define for_random_num_vfs for_random_vf
+
+/**
+ * for_last_vf - Helper for running code on last VF
+ * @__pf_fd: PF device file descriptor
+ * @__vf_num: stores last VF number
+ *
+ * Helper allows to run code using last VF number (stored in @__vf_num)
+ * associated with given PF @__pf_fd.
+ */
+#define for_last_vf(__pf_fd, __vf_num) \
+ for (unsigned int __vf_num = igt_sriov_get_total_vfs(__pf_fd), __tmp = 0; \
+ __tmp < 1; \
+ ++__tmp)
+#define for_max_num_vfs for_last_vf
+
#endif /* __IGT_SRIOV_DEVICE_H__ */
--
2.40.0
More information about the igt-dev
mailing list