perf: Use device_show_string() helper for sysfs attributes
authorLukas Wunner <lukas@wunner.de>
Sat, 20 Apr 2024 20:00:04 +0000 (22:00 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 4 May 2024 15:37:03 +0000 (17:37 +0200)
Deduplicate sysfs ->show() callbacks which expose a string at a static
memory location.  Use the newly introduced device_show_string() helper
in the driver core instead by declaring those sysfs attributes with
DEVICE_STRING_ATTR_RO().

No functional change intended.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Link: https://lore.kernel.org/r/3a297850312b4ecb62d6872121de04496900f502.1713608122.git.lukas@wunner.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
14 files changed:
arch/x86/events/intel/core.c
drivers/perf/alibaba_uncore_drw_pmu.c
drivers/perf/arm-cci.c
drivers/perf/arm-ccn.c
drivers/perf/arm_cspmu/arm_cspmu.c
drivers/perf/arm_cspmu/arm_cspmu.h
drivers/perf/arm_dsu_pmu.c
drivers/perf/cxl_pmu.c
drivers/perf/hisilicon/hisi_pcie_pmu.c
drivers/perf/hisilicon/hisi_uncore_pmu.c
drivers/perf/hisilicon/hisi_uncore_pmu.h
drivers/perf/hisilicon/hns3_pmu.c
drivers/perf/qcom_l3_pmu.c
drivers/perf/xgene_pmu.c

index 768d1414897fb1de72a9cb9abad354add11828a4..38c1b1f1deaad23e0bb9ee8c2dd5f453b8b0ab6b 100644 (file)
@@ -5645,18 +5645,11 @@ lbr_is_visible(struct kobject *kobj, struct attribute *attr, int i)
 
 static char pmu_name_str[30];
 
-static ssize_t pmu_name_show(struct device *cdev,
-                            struct device_attribute *attr,
-                            char *buf)
-{
-       return snprintf(buf, PAGE_SIZE, "%s\n", pmu_name_str);
-}
-
-static DEVICE_ATTR_RO(pmu_name);
+static DEVICE_STRING_ATTR_RO(pmu_name, 0444, pmu_name_str);
 
 static struct attribute *intel_pmu_caps_attrs[] = {
-       &dev_attr_pmu_name.attr,
-       NULL
+       &dev_attr_pmu_name.attr.attr,
+       NULL
 };
 
 static DEVICE_ATTR(allow_tsx_force_abort, 0644,
index a9277dcf90ce0c6bd6ee97edb25b1a5814fc1e48..a82592e131ba512825d11df81bf14a477286ba14 100644 (file)
@@ -236,24 +236,16 @@ static const struct attribute_group ali_drw_pmu_cpumask_attr_group = {
        .attrs = ali_drw_pmu_cpumask_attrs,
 };
 
-static ssize_t ali_drw_pmu_identifier_show(struct device *dev,
-                                       struct device_attribute *attr,
-                                       char *page)
-{
-       return sysfs_emit(page, "%s\n", "ali_drw_pmu");
-}
-
 static umode_t ali_drw_pmu_identifier_attr_visible(struct kobject *kobj,
                                                struct attribute *attr, int n)
 {
        return attr->mode;
 }
 
-static struct device_attribute ali_drw_pmu_identifier_attr =
-       __ATTR(identifier, 0444, ali_drw_pmu_identifier_show, NULL);
+static DEVICE_STRING_ATTR_RO(ali_drw_pmu_identifier, 0444, "ali_drw_pmu");
 
 static struct attribute *ali_drw_pmu_identifier_attrs[] = {
-       &ali_drw_pmu_identifier_attr.attr,
+       &dev_attr_ali_drw_pmu_identifier.attr.attr,
        NULL
 };
 
index 6be03f81ae5db7489dd6ae49790ee5f1c99ca37e..e516edc933f2d6ad545cd7aeb95bd9f385960188 100644 (file)
@@ -127,8 +127,6 @@ enum cci_models {
 
 static void pmu_write_counters(struct cci_pmu *cci_pmu,
                                 unsigned long *mask);
-static ssize_t __maybe_unused cci_pmu_format_show(struct device *dev,
-                       struct device_attribute *attr, char *buf);
 static ssize_t __maybe_unused cci_pmu_event_show(struct device *dev,
                        struct device_attribute *attr, char *buf);
 
@@ -138,7 +136,7 @@ static ssize_t __maybe_unused cci_pmu_event_show(struct device *dev,
        })[0].attr.attr
 
 #define CCI_FORMAT_EXT_ATTR_ENTRY(_name, _config) \
-       CCI_EXT_ATTR_ENTRY(_name, cci_pmu_format_show, (char *)_config)
+       CCI_EXT_ATTR_ENTRY(_name, device_show_string, _config)
 #define CCI_EVENT_EXT_ATTR_ENTRY(_name, _config) \
        CCI_EXT_ATTR_ENTRY(_name, cci_pmu_event_show, (unsigned long)_config)
 
@@ -688,14 +686,6 @@ static void __cci_pmu_disable(struct cci_pmu *cci_pmu)
        writel(val, cci_pmu->ctrl_base + CCI_PMCR);
 }
 
-static ssize_t cci_pmu_format_show(struct device *dev,
-                       struct device_attribute *attr, char *buf)
-{
-       struct dev_ext_attribute *eattr = container_of(attr,
-                               struct dev_ext_attribute, attr);
-       return sysfs_emit(buf, "%s\n", (char *)eattr->var);
-}
-
 static ssize_t cci_pmu_event_show(struct device *dev,
                        struct device_attribute *attr, char *buf)
 {
index 641471bd5eff4010e2124e28ff8a7b4f628fed98..e4408acd4450638c5e699d1ff9d78b7abf693338 100644 (file)
@@ -215,18 +215,9 @@ static void arm_ccn_pmu_config_set(u64 *config, u32 node_xp, u32 type, u32 port)
        *config |= (node_xp << 0) | (type << 8) | (port << 24);
 }
 
-static ssize_t arm_ccn_pmu_format_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
-{
-       struct dev_ext_attribute *ea = container_of(attr,
-                       struct dev_ext_attribute, attr);
-
-       return sysfs_emit(buf, "%s\n", (char *)ea->var);
-}
-
 #define CCN_FORMAT_ATTR(_name, _config) \
        struct dev_ext_attribute arm_ccn_pmu_format_attr_##_name = \
-                       { __ATTR(_name, S_IRUGO, arm_ccn_pmu_format_show, \
+                       { __ATTR(_name, S_IRUGO, device_show_string, \
                        NULL), _config }
 
 static CCN_FORMAT_ATTR(node, "config:0-7");
index b9a252272f1e9f596db7aeba99f4d28dd6b95f84..7aff616523ec078430768c726f19182e53cf9f14 100644 (file)
@@ -223,16 +223,6 @@ arm_cspmu_event_attr_is_visible(struct kobject *kobj,
        return attr->mode;
 }
 
-ssize_t arm_cspmu_sysfs_format_show(struct device *dev,
-                               struct device_attribute *attr,
-                               char *buf)
-{
-       struct dev_ext_attribute *eattr =
-               container_of(attr, struct dev_ext_attribute, attr);
-       return sysfs_emit(buf, "%s\n", (char *)eattr->var);
-}
-EXPORT_SYMBOL_GPL(arm_cspmu_sysfs_format_show);
-
 static struct attribute *arm_cspmu_format_attrs[] = {
        ARM_CSPMU_FORMAT_EVENT_ATTR,
        ARM_CSPMU_FORMAT_FILTER_ATTR,
index c9163acfe8105249a0a1b19f0b17f6c187a32248..2621f31111483b2a6519649e5f8a8c76c2f38352 100644 (file)
@@ -28,7 +28,7 @@
        })[0].attr.attr)
 
 #define ARM_CSPMU_FORMAT_ATTR(_name, _config)                          \
-       ARM_CSPMU_EXT_ATTR(_name, arm_cspmu_sysfs_format_show, (char *)_config)
+       ARM_CSPMU_EXT_ATTR(_name, device_show_string, _config)
 
 #define ARM_CSPMU_EVENT_ATTR(_name, _config)                           \
        PMU_EVENT_ATTR_ID(_name, arm_cspmu_sysfs_event_show, _config)
@@ -167,11 +167,6 @@ ssize_t arm_cspmu_sysfs_event_show(struct device *dev,
                                   struct device_attribute *attr,
                                   char *buf);
 
-/* Default function to show format attribute in sysfs. */
-ssize_t arm_cspmu_sysfs_format_show(struct device *dev,
-                                   struct device_attribute *attr,
-                                   char *buf);
-
 /* Register vendor backend. */
 int arm_cspmu_impl_register(const struct arm_cspmu_impl_match *impl_match);
 
index bae3ca37f846ee9d7fb9c982ae3eb7d740e11ba7..4e54ce9100a6c245967cd35ae34ecfe291bc771d 100644 (file)
@@ -85,7 +85,7 @@
        DSU_EXT_ATTR(_name, dsu_pmu_sysfs_event_show, (unsigned long)_config)
 
 #define DSU_FORMAT_ATTR(_name, _config)                \
-       DSU_EXT_ATTR(_name, dsu_pmu_sysfs_format_show, (char *)_config)
+       DSU_EXT_ATTR(_name, device_show_string, _config)
 
 #define DSU_CPUMASK_ATTR(_name, _config)       \
        DSU_EXT_ATTR(_name, dsu_pmu_cpumask_show, (unsigned long)_config)
@@ -139,15 +139,6 @@ static ssize_t dsu_pmu_sysfs_event_show(struct device *dev,
        return sysfs_emit(buf, "event=0x%lx\n", (unsigned long)eattr->var);
 }
 
-static ssize_t dsu_pmu_sysfs_format_show(struct device *dev,
-                                        struct device_attribute *attr,
-                                        char *buf)
-{
-       struct dev_ext_attribute *eattr = container_of(attr,
-                                       struct dev_ext_attribute, attr);
-       return sysfs_emit(buf, "%s\n", (char *)eattr->var);
-}
-
 static ssize_t dsu_pmu_cpumask_show(struct device *dev,
                                    struct device_attribute *attr,
                                    char *buf)
index 308c9969642e1f149cdebd9f8aed7812adbc5f1f..c41263c7fe5c93b1b87bbd0ed16d3dd853bad0ff 100644 (file)
@@ -208,21 +208,10 @@ static int cxl_pmu_parse_caps(struct device *dev, struct cxl_pmu_info *info)
        return 0;
 }
 
-static ssize_t cxl_pmu_format_sysfs_show(struct device *dev,
-                                        struct device_attribute *attr, char *buf)
-{
-       struct dev_ext_attribute *eattr;
-
-       eattr = container_of(attr, struct dev_ext_attribute, attr);
-
-       return sysfs_emit(buf, "%s\n", (char *)eattr->var);
-}
-
 #define CXL_PMU_FORMAT_ATTR(_name, _format)\
        (&((struct dev_ext_attribute[]) {                                       \
                {                                                               \
-                       .attr = __ATTR(_name, 0444,                             \
-                                      cxl_pmu_format_sysfs_show, NULL),        \
+                       .attr = __ATTR(_name, 0444, device_show_string, NULL),  \
                        .var = (void *)_format                                  \
                }                                                               \
                })[0].attr.attr)
index 5d1f0e9fdb08d2ecdbff6170b8172859b196c12d..dfd1f448f3fced53e85e5e570907c10e7001ee9b 100644 (file)
@@ -99,16 +99,6 @@ HISI_PCIE_PMU_FILTER_ATTR(len_mode, config1, 11, 10);
 HISI_PCIE_PMU_FILTER_ATTR(port, config2, 15, 0);
 HISI_PCIE_PMU_FILTER_ATTR(bdf, config2, 31, 16);
 
-static ssize_t hisi_pcie_format_sysfs_show(struct device *dev, struct device_attribute *attr,
-                                          char *buf)
-{
-       struct dev_ext_attribute *eattr;
-
-       eattr = container_of(attr, struct dev_ext_attribute, attr);
-
-       return sysfs_emit(buf, "%s\n", (char *)eattr->var);
-}
-
 static ssize_t hisi_pcie_event_sysfs_show(struct device *dev, struct device_attribute *attr,
                                          char *buf)
 {
@@ -120,8 +110,7 @@ static ssize_t hisi_pcie_event_sysfs_show(struct device *dev, struct device_attr
 
 #define HISI_PCIE_PMU_FORMAT_ATTR(_name, _format)                              \
        (&((struct dev_ext_attribute[]){                                       \
-               { .attr = __ATTR(_name, 0444, hisi_pcie_format_sysfs_show,     \
-                                NULL),                                        \
+               { .attr = __ATTR(_name, 0444, device_show_string, NULL),       \
                  .var = (void *)_format }                                     \
        })[0].attr.attr)
 
index 04031450d5fecae9c5740deb553f4ce0ea574673..382c5567e4e2b4873f83731cd744f5c2eb9d15ca 100644 (file)
 
 #define HISI_MAX_PERIOD(nr) (GENMASK_ULL((nr) - 1, 0))
 
-/*
- * PMU format attributes
- */
-ssize_t hisi_format_sysfs_show(struct device *dev,
-                              struct device_attribute *attr, char *buf)
-{
-       struct dev_ext_attribute *eattr;
-
-       eattr = container_of(attr, struct dev_ext_attribute, attr);
-
-       return sysfs_emit(buf, "%s\n", (char *)eattr->var);
-}
-EXPORT_SYMBOL_GPL(hisi_format_sysfs_show);
-
 /*
  * PMU event attributes
  */
index 92402aa69d70f5103f41c278d3e3515f14b8e752..25b2d43b72bf91b1be7bbf12b1705e36af498e6e 100644 (file)
@@ -33,7 +33,7 @@
        })[0].attr.attr)
 
 #define HISI_PMU_FORMAT_ATTR(_name, _config)           \
-       HISI_PMU_ATTR(_name, hisi_format_sysfs_show, (void *)_config)
+       HISI_PMU_ATTR(_name, device_show_string, _config)
 #define HISI_PMU_EVENT_ATTR(_name, _config)            \
        HISI_PMU_ATTR(_name, hisi_event_sysfs_show, (unsigned long)_config)
 
@@ -122,8 +122,6 @@ void hisi_uncore_pmu_enable(struct pmu *pmu);
 void hisi_uncore_pmu_disable(struct pmu *pmu);
 ssize_t hisi_event_sysfs_show(struct device *dev,
                              struct device_attribute *attr, char *buf);
-ssize_t hisi_format_sysfs_show(struct device *dev,
-                              struct device_attribute *attr, char *buf);
 ssize_t hisi_cpumask_sysfs_show(struct device *dev,
                                struct device_attribute *attr, char *buf);
 int hisi_uncore_pmu_online_cpu(unsigned int cpu, struct hlist_node *node);
index 16869bf5bf4cca7ecdaea40db1c13a4a7eeb7be3..6d9725bdff831331a37db50491cb4647411efed0 100644 (file)
@@ -363,16 +363,6 @@ HNS3_PMU_FILTER_ATTR(global, config1, 52, 52);
        HNS3_PMU_EVT_PPS_##_name##_TIME,                                \
        HNS3_PMU_FILTER_INTR_##_name})
 
-static ssize_t hns3_pmu_format_show(struct device *dev,
-                                   struct device_attribute *attr, char *buf)
-{
-       struct dev_ext_attribute *eattr;
-
-       eattr = container_of(attr, struct dev_ext_attribute, attr);
-
-       return sysfs_emit(buf, "%s\n", (char *)eattr->var);
-}
-
 static ssize_t hns3_pmu_event_show(struct device *dev,
                                   struct device_attribute *attr, char *buf)
 {
@@ -421,7 +411,7 @@ static ssize_t hns3_pmu_filter_mode_show(struct device *dev,
        })[0].attr.attr)
 
 #define HNS3_PMU_FORMAT_ATTR(_name, _format) \
-       HNS3_PMU_ATTR(_name, hns3_pmu_format_show, (void *)_format)
+       HNS3_PMU_ATTR(_name, device_show_string, _format)
 #define HNS3_PMU_EVENT_ATTR(_name, _event) \
        HNS3_PMU_ATTR(_name, hns3_pmu_event_show, (void *)_event)
 #define HNS3_PMU_FLT_MODE_ATTR(_name, _event) \
index f16783d03db7b6be3bead4d8e331d1b9f7cec936..5fc53781afba322a37fb3eb841596eb99157b92b 100644 (file)
@@ -609,18 +609,9 @@ static void qcom_l3_cache__event_read(struct perf_event *event)
 
 /* formats */
 
-static ssize_t l3cache_pmu_format_show(struct device *dev,
-                                      struct device_attribute *attr, char *buf)
-{
-       struct dev_ext_attribute *eattr;
-
-       eattr = container_of(attr, struct dev_ext_attribute, attr);
-       return sysfs_emit(buf, "%s\n", (char *) eattr->var);
-}
-
 #define L3CACHE_PMU_FORMAT_ATTR(_name, _config)                                      \
        (&((struct dev_ext_attribute[]) {                                     \
-               { .attr = __ATTR(_name, 0444, l3cache_pmu_format_show, NULL), \
+               { .attr = __ATTR(_name, 0444, device_show_string, NULL),      \
                  .var = (void *) _config, }                                  \
        })[0].attr.attr)
 
index 0d49343d704b7c971b1616527f4a0190d9f89f19..79279a35999535f1f7faaf753fcd8efac7618589 100644 (file)
@@ -162,18 +162,9 @@ enum xgene_pmu_dev_type {
 /*
  * sysfs format attributes
  */
-static ssize_t xgene_pmu_format_show(struct device *dev,
-                                    struct device_attribute *attr, char *buf)
-{
-       struct dev_ext_attribute *eattr;
-
-       eattr = container_of(attr, struct dev_ext_attribute, attr);
-       return sysfs_emit(buf, "%s\n", (char *) eattr->var);
-}
-
 #define XGENE_PMU_FORMAT_ATTR(_name, _config)          \
        (&((struct dev_ext_attribute[]) {               \
-               { .attr = __ATTR(_name, S_IRUGO, xgene_pmu_format_show, NULL), \
+               { .attr = __ATTR(_name, S_IRUGO, device_show_string, NULL), \
                  .var = (void *) _config, }            \
        })[0].attr.attr)