#include <drm/drm_managed.h>
#include "xe_assert.h"
+#include "xe_device.h"
#include "xe_pci_sriov.h"
#include "xe_pm.h"
#include "xe_sriov.h"
* ├── .bulk_profile
* │ ├── exec_quantum_ms
* │ ├── preempt_timeout_us
- * │ └── sched_priority
+ * │ ├── sched_priority
+ * │ └── vram_quota
* ├── pf/
* │ ├── ...
* │ ├── device -> ../../../BDF
* │ └── profile
* │ ├── exec_quantum_ms
* │ ├── preempt_timeout_us
- * │ └── sched_priority
+ * │ ├── sched_priority
+ * │ └── vram_quota
* ├── vf2/
* :
* └── vfN/
DEFINE_SIMPLE_BULK_PROVISIONING_SRIOV_DEV_ATTR_WO(exec_quantum_ms, eq, u32);
DEFINE_SIMPLE_BULK_PROVISIONING_SRIOV_DEV_ATTR_WO(preempt_timeout_us, pt, u32);
+DEFINE_SIMPLE_BULK_PROVISIONING_SRIOV_DEV_ATTR_WO(vram_quota, vram, u64);
static const char * const sched_priority_names[] = {
[GUC_SCHED_PRIORITY_LOW] = "low",
&xe_sriov_dev_attr_exec_quantum_ms.attr,
&xe_sriov_dev_attr_preempt_timeout_us.attr,
&xe_sriov_dev_attr_sched_priority.attr,
+ &xe_sriov_dev_attr_vram_quota.attr,
NULL
};
+static umode_t profile_dev_attr_is_visible(struct kobject *kobj,
+ struct attribute *attr, int index)
+{
+ struct xe_sriov_kobj *vkobj = to_xe_sriov_kobj(kobj);
+
+ if (attr == &xe_sriov_dev_attr_vram_quota.attr &&
+ !xe_device_has_lmtt(vkobj->xe))
+ return 0;
+
+ return attr->mode;
+}
+
static const struct attribute_group bulk_profile_dev_attr_group = {
.name = ".bulk_profile",
.attrs = bulk_profile_dev_attrs,
+ .is_visible = profile_dev_attr_is_visible,
};
static const struct attribute_group *xe_sriov_dev_attr_groups[] = {
DEFINE_SIMPLE_PROVISIONING_SRIOV_VF_ATTR(exec_quantum_ms, eq, u32, "%u\n");
DEFINE_SIMPLE_PROVISIONING_SRIOV_VF_ATTR(preempt_timeout_us, pt, u32, "%u\n");
+DEFINE_SIMPLE_PROVISIONING_SRIOV_VF_ATTR(vram_quota, vram, u64, "%llu\n");
static ssize_t xe_sriov_vf_attr_sched_priority_show(struct xe_device *xe, unsigned int vfid,
char *buf)
&xe_sriov_vf_attr_exec_quantum_ms.attr,
&xe_sriov_vf_attr_preempt_timeout_us.attr,
&xe_sriov_vf_attr_sched_priority.attr,
+ &xe_sriov_vf_attr_vram_quota.attr,
NULL
};
!sched_priority_change_allowed(vkobj->vfid))
return attr->mode & 0444;
+ if (attr == &xe_sriov_vf_attr_vram_quota.attr) {
+ if (!IS_DGFX(vkobj->xe) || vkobj->vfid == PFID)
+ return 0;
+ if (!xe_device_has_lmtt(vkobj->xe))
+ return attr->mode & 0444;
+ }
+
return attr->mode;
}