dmaengine: idxd: Simplify WQ attribute visibility checks
authorFenghua Yu <fenghua.yu@intel.com>
Wed, 12 Jul 2023 17:44:35 +0000 (10:44 -0700)
committerVinod Koul <vkoul@kernel.org>
Tue, 1 Aug 2023 18:04:43 +0000 (23:34 +0530)
The functions that check if WQ attributes are invisible are almost
duplicate. Define a helper to simplify these functions and future
WQ attribute visibility checks as well.

Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/20230712174436.3435088-1-fenghua.yu@intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/idxd/sysfs.c

index b6a0a12..36a3095 100644 (file)
@@ -1288,12 +1288,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)
@@ -1303,13 +1300,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)
 {
@@ -1317,13 +1307,13 @@ 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;
 
        return attr->mode;