Merge tag 'dmaengine-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul...
[platform/kernel/linux-rpi.git] / drivers / dma / idxd / sysfs.c
index 63f6966..7caba90 100644 (file)
@@ -1088,8 +1088,8 @@ static ssize_t wq_ats_disable_store(struct device *dev, struct device_attribute
        if (wq->state != IDXD_WQ_DISABLED)
                return -EPERM;
 
-       if (!idxd->hw.wq_cap.wq_ats_support)
-               return -EOPNOTSUPP;
+       if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
+               return -EPERM;
 
        rc = kstrtobool(buf, &ats_dis);
        if (rc < 0)
@@ -1124,8 +1124,8 @@ static ssize_t wq_prs_disable_store(struct device *dev, struct device_attribute
        if (wq->state != IDXD_WQ_DISABLED)
                return -EPERM;
 
-       if (!idxd->hw.wq_cap.wq_prs_support)
-               return -EOPNOTSUPP;
+       if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
+               return -EPERM;
 
        rc = kstrtobool(buf, &prs_dis);
        if (rc < 0)
@@ -1281,12 +1281,9 @@ static struct attribute *idxd_wq_attributes[] = {
        NULL,
 };
 
-static bool idxd_wq_attr_op_config_invisible(struct attribute *attr,
-                                            struct idxd_device *idxd)
-{
-       return attr == &dev_attr_wq_op_config.attr &&
-              !idxd->hw.wq_cap.op_config;
-}
+/*  A WQ attr is invisible if the feature is not supported in WQCAP. */
+#define idxd_wq_attr_invisible(name, cap_field, a, idxd)               \
+       ((a) == &dev_attr_wq_##name.attr && !(idxd)->hw.wq_cap.cap_field)
 
 static bool idxd_wq_attr_max_batch_size_invisible(struct attribute *attr,
                                                  struct idxd_device *idxd)
@@ -1296,13 +1293,6 @@ static bool idxd_wq_attr_max_batch_size_invisible(struct attribute *attr,
               idxd->data->type == IDXD_TYPE_IAX;
 }
 
-static bool idxd_wq_attr_wq_prs_disable_invisible(struct attribute *attr,
-                                                 struct idxd_device *idxd)
-{
-       return attr == &dev_attr_wq_prs_disable.attr &&
-              !idxd->hw.wq_cap.wq_prs_support;
-}
-
 static umode_t idxd_wq_attr_visible(struct kobject *kobj,
                                    struct attribute *attr, int n)
 {
@@ -1310,13 +1300,16 @@ static umode_t idxd_wq_attr_visible(struct kobject *kobj,
        struct idxd_wq *wq = confdev_to_wq(dev);
        struct idxd_device *idxd = wq->idxd;
 
-       if (idxd_wq_attr_op_config_invisible(attr, idxd))
+       if (idxd_wq_attr_invisible(op_config, op_config, attr, idxd))
                return 0;
 
        if (idxd_wq_attr_max_batch_size_invisible(attr, idxd))
                return 0;
 
-       if (idxd_wq_attr_wq_prs_disable_invisible(attr, idxd))
+       if (idxd_wq_attr_invisible(prs_disable, wq_prs_support, attr, idxd))
+               return 0;
+
+       if (idxd_wq_attr_invisible(ats_disable, wq_ats_support, attr, idxd))
                return 0;
 
        return attr->mode;
@@ -1473,7 +1466,7 @@ static ssize_t pasid_enabled_show(struct device *dev,
 {
        struct idxd_device *idxd = confdev_to_idxd(dev);
 
-       return sysfs_emit(buf, "%u\n", device_pasid_enabled(idxd));
+       return sysfs_emit(buf, "%u\n", device_user_pasid_enabled(idxd));
 }
 static DEVICE_ATTR_RO(pasid_enabled);