mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
perf: Use device_show_string() helper for sysfs attributes
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>
This commit is contained in:
parent
7b53e926bf
commit
b91b73a438
@ -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,
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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");
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -22,20 +22,6 @@
|
||||
|
||||
#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
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -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) \
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user