mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
Driver core changes for 6.10-rc1
Here is the small set of driver core and kernfs changes for 6.10-rc1. Nothing major here at all, just a small set of changes for some driver core apis, and minor fixups. Included in here are: - sysfs_bin_attr_simple_read() helper added and used - device_show_string() helper added and used All usages of these were acked by the various maintainers. Also in here are: - kernfs minor cleanup - removed unused functions - typo fix in documentation - pay attention to sysfs_create_link() failures in module.c finally. All of these have been in linux-next for a very long time with no reported problems. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZk3+hQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ylfTwCfUyHWkDZuZ7ehdtjzfmcd4EKZBK8An3AAV99G ox8PXMxuFTaUEdT/69FQ =2sEo -----END PGP SIGNATURE----- Merge tag 'driver-core-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core Pull driver core updates from Greg KH: "Here is the small set of driver core and kernfs changes for 6.10-rc1. Nothing major here at all, just a small set of changes for some driver core apis, and minor fixups. Included in here are: - sysfs_bin_attr_simple_read() helper added and used - device_show_string() helper added and used All usages of these were acked by the various maintainers. Also in here are: - kernfs minor cleanup - removed unused functions - typo fix in documentation - pay attention to sysfs_create_link() failures in module.c finally All of these have been in linux-next for a very long time with no reported problems" * tag 'driver-core-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: device property: Fix a typo in the description of device_get_child_node_count() kernfs: mount: Remove unnecessary ‘NULL’ values from knparent scsi: Use device_show_string() helper for sysfs attributes platform/x86: Use device_show_string() helper for sysfs attributes perf: Use device_show_string() helper for sysfs attributes IB/qib: Use device_show_string() helper for sysfs attributes hwmon: Use device_show_string() helper for sysfs attributes driver core: Add device_show_string() helper for sysfs attributes treewide: Use sysfs_bin_attr_simple_read() helper sysfs: Add sysfs_bin_attr_simple_read() helper module: don't ignore sysfs_create_link() failures driver core: Remove unused platform_notify, platform_notify_remove
This commit is contained in:
commit
d90be6e4aa
@ -425,16 +425,6 @@ static char *memdup_to_str(char *maybe_str, int max_len, gfp_t gfp)
|
||||
return kasprintf(gfp, "%.*s", max_len, maybe_str);
|
||||
}
|
||||
|
||||
static ssize_t device_show_string(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct dev_ext_attribute *d;
|
||||
|
||||
d = container_of(attr, struct dev_ext_attribute, attr);
|
||||
|
||||
return sprintf(buf, "%s\n", (char *)d->var);
|
||||
}
|
||||
|
||||
static ssize_t cpumask_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
|
@ -792,14 +792,6 @@ static int __init opal_sysfs_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t export_attr_read(struct file *fp, struct kobject *kobj,
|
||||
struct bin_attribute *bin_attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
{
|
||||
return memory_read_from_buffer(buf, count, &off, bin_attr->private,
|
||||
bin_attr->size);
|
||||
}
|
||||
|
||||
static int opal_add_one_export(struct kobject *parent, const char *export_name,
|
||||
struct device_node *np, const char *prop_name)
|
||||
{
|
||||
@ -826,7 +818,7 @@ static int opal_add_one_export(struct kobject *parent, const char *export_name,
|
||||
sysfs_bin_attr_init(attr);
|
||||
attr->attr.name = name;
|
||||
attr->attr.mode = 0400;
|
||||
attr->read = export_attr_read;
|
||||
attr->read = sysfs_bin_attr_simple_read;
|
||||
attr->private = __va(vals[0]);
|
||||
attr->size = vals[1];
|
||||
|
||||
|
@ -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,
|
||||
|
@ -29,14 +29,7 @@ BGRT_SHOW(type, image_type);
|
||||
BGRT_SHOW(xoffset, image_offset_x);
|
||||
BGRT_SHOW(yoffset, image_offset_y);
|
||||
|
||||
static ssize_t image_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf, loff_t off, size_t count)
|
||||
{
|
||||
memcpy(buf, attr->private + off, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static BIN_ATTR_RO(image, 0); /* size gets filled in later */
|
||||
static BIN_ATTR_SIMPLE_RO(image);
|
||||
|
||||
static struct attribute *bgrt_attributes[] = {
|
||||
&bgrt_attr_version.attr,
|
||||
|
@ -192,11 +192,14 @@ extern struct kset *devices_kset;
|
||||
void devices_kset_move_last(struct device *dev);
|
||||
|
||||
#if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
|
||||
void module_add_driver(struct module *mod, struct device_driver *drv);
|
||||
int module_add_driver(struct module *mod, struct device_driver *drv);
|
||||
void module_remove_driver(struct device_driver *drv);
|
||||
#else
|
||||
static inline void module_add_driver(struct module *mod,
|
||||
struct device_driver *drv) { }
|
||||
static inline int module_add_driver(struct module *mod,
|
||||
struct device_driver *drv)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void module_remove_driver(struct device_driver *drv) { }
|
||||
#endif
|
||||
|
||||
|
@ -674,7 +674,12 @@ int bus_add_driver(struct device_driver *drv)
|
||||
if (error)
|
||||
goto out_del_list;
|
||||
}
|
||||
module_add_driver(drv->owner, drv);
|
||||
error = module_add_driver(drv->owner, drv);
|
||||
if (error) {
|
||||
printk(KERN_ERR "%s: failed to create module links for %s\n",
|
||||
__func__, drv->name);
|
||||
goto out_detach;
|
||||
}
|
||||
|
||||
error = driver_create_file(drv, &driver_attr_uevent);
|
||||
if (error) {
|
||||
@ -699,6 +704,8 @@ int bus_add_driver(struct device_driver *drv)
|
||||
|
||||
return 0;
|
||||
|
||||
out_detach:
|
||||
driver_detach(drv);
|
||||
out_del_list:
|
||||
klist_del(&priv->knode_bus);
|
||||
out_unregister:
|
||||
|
@ -2346,8 +2346,6 @@ static void fw_devlink_link_device(struct device *dev)
|
||||
|
||||
/* Device links support end. */
|
||||
|
||||
int (*platform_notify)(struct device *dev) = NULL;
|
||||
int (*platform_notify_remove)(struct device *dev) = NULL;
|
||||
static struct kobject *dev_kobj;
|
||||
|
||||
/* /sys/dev/char */
|
||||
@ -2395,16 +2393,10 @@ static void device_platform_notify(struct device *dev)
|
||||
acpi_device_notify(dev);
|
||||
|
||||
software_node_notify(dev);
|
||||
|
||||
if (platform_notify)
|
||||
platform_notify(dev);
|
||||
}
|
||||
|
||||
static void device_platform_notify_remove(struct device *dev)
|
||||
{
|
||||
if (platform_notify_remove)
|
||||
platform_notify_remove(dev);
|
||||
|
||||
software_node_notify_remove(dev);
|
||||
|
||||
acpi_device_notify_remove(dev);
|
||||
@ -2546,6 +2538,15 @@ ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(device_show_bool);
|
||||
|
||||
ssize_t device_show_string(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct dev_ext_attribute *ea = to_ext_attr(attr);
|
||||
|
||||
return sysfs_emit(buf, "%s\n", (char *)ea->var);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(device_show_string);
|
||||
|
||||
/**
|
||||
* device_release - free device structure.
|
||||
* @kobj: device's kobject.
|
||||
|
@ -30,14 +30,14 @@ static void module_create_drivers_dir(struct module_kobject *mk)
|
||||
mutex_unlock(&drivers_dir_mutex);
|
||||
}
|
||||
|
||||
void module_add_driver(struct module *mod, struct device_driver *drv)
|
||||
int module_add_driver(struct module *mod, struct device_driver *drv)
|
||||
{
|
||||
char *driver_name;
|
||||
int no_warn;
|
||||
struct module_kobject *mk = NULL;
|
||||
int ret;
|
||||
|
||||
if (!drv)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (mod)
|
||||
mk = &mod->mkobj;
|
||||
@ -56,17 +56,37 @@ void module_add_driver(struct module *mod, struct device_driver *drv)
|
||||
}
|
||||
|
||||
if (!mk)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
ret = sysfs_create_link(&drv->p->kobj, &mk->kobj, "module");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Don't check return codes; these calls are idempotent */
|
||||
no_warn = sysfs_create_link(&drv->p->kobj, &mk->kobj, "module");
|
||||
driver_name = make_driver_name(drv);
|
||||
if (driver_name) {
|
||||
module_create_drivers_dir(mk);
|
||||
no_warn = sysfs_create_link(mk->drivers_dir, &drv->p->kobj,
|
||||
driver_name);
|
||||
kfree(driver_name);
|
||||
if (!driver_name) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
module_create_drivers_dir(mk);
|
||||
if (!mk->drivers_dir) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = sysfs_create_link(mk->drivers_dir, &drv->p->kobj, driver_name);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
kfree(driver_name);
|
||||
|
||||
return 0;
|
||||
out:
|
||||
sysfs_remove_link(&drv->p->kobj, "module");
|
||||
sysfs_remove_link(mk->drivers_dir, driver_name);
|
||||
kfree(driver_name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void module_remove_driver(struct device_driver *drv)
|
||||
|
@ -905,7 +905,7 @@ EXPORT_SYMBOL_GPL(fwnode_device_is_available);
|
||||
|
||||
/**
|
||||
* device_get_child_node_count - return the number of child nodes for device
|
||||
* @dev: Device to cound the child nodes for
|
||||
* @dev: Device to count the child nodes for
|
||||
*
|
||||
* Return: the number of child nodes for a given device.
|
||||
*/
|
||||
|
@ -761,16 +761,8 @@ static void __init dmi_scan_machine(void)
|
||||
pr_info("DMI not present or invalid.\n");
|
||||
}
|
||||
|
||||
static ssize_t raw_table_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t pos, size_t count)
|
||||
{
|
||||
memcpy(buf, attr->private + pos, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static BIN_ATTR(smbios_entry_point, S_IRUSR, raw_table_read, NULL, 0);
|
||||
static BIN_ATTR(DMI, S_IRUSR, raw_table_read, NULL, 0);
|
||||
static BIN_ATTR_SIMPLE_ADMIN_RO(smbios_entry_point);
|
||||
static BIN_ATTR_SIMPLE_ADMIN_RO(DMI);
|
||||
|
||||
static int __init dmi_init(void)
|
||||
{
|
||||
|
@ -40,15 +40,7 @@ static u8 *rci2_base;
|
||||
static u32 rci2_table_len;
|
||||
unsigned long rci2_table_phys __ro_after_init = EFI_INVALID_TABLE_ADDR;
|
||||
|
||||
static ssize_t raw_table_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t pos, size_t count)
|
||||
{
|
||||
memcpy(buf, attr->private + pos, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static BIN_ATTR(rci2, S_IRUSR, raw_table_read, NULL, 0);
|
||||
static BIN_ATTR_SIMPLE_ADMIN_RO(rci2);
|
||||
|
||||
static u16 checksum(void)
|
||||
{
|
||||
|
@ -51,21 +51,7 @@ struct gvt_firmware_header {
|
||||
|
||||
#define dev_to_drm_minor(d) dev_get_drvdata((d))
|
||||
|
||||
static ssize_t
|
||||
gvt_firmware_read(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t offset, size_t count)
|
||||
{
|
||||
memcpy(buf, attr->private + offset, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static struct bin_attribute firmware_attr = {
|
||||
.attr = {.name = "gvt_firmware", .mode = (S_IRUSR)},
|
||||
.read = gvt_firmware_read,
|
||||
.write = NULL,
|
||||
.mmap = NULL,
|
||||
};
|
||||
static BIN_ATTR_SIMPLE_ADMIN_RO(gvt_firmware);
|
||||
|
||||
static int expose_firmware_sysfs(struct intel_gvt *gvt)
|
||||
{
|
||||
@ -108,10 +94,10 @@ static int expose_firmware_sysfs(struct intel_gvt *gvt)
|
||||
crc32_start = offsetof(struct gvt_firmware_header, version);
|
||||
h->crc32 = crc32_le(0, firmware + crc32_start, size - crc32_start);
|
||||
|
||||
firmware_attr.size = size;
|
||||
firmware_attr.private = firmware;
|
||||
bin_attr_gvt_firmware.size = size;
|
||||
bin_attr_gvt_firmware.private = firmware;
|
||||
|
||||
ret = device_create_bin_file(&pdev->dev, &firmware_attr);
|
||||
ret = device_create_bin_file(&pdev->dev, &bin_attr_gvt_firmware);
|
||||
if (ret) {
|
||||
vfree(firmware);
|
||||
return ret;
|
||||
@ -123,8 +109,8 @@ static void clean_firmware_sysfs(struct intel_gvt *gvt)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(gvt->gt->i915->drm.dev);
|
||||
|
||||
device_remove_bin_file(&pdev->dev, &firmware_attr);
|
||||
vfree(firmware_attr.private);
|
||||
device_remove_bin_file(&pdev->dev, &bin_attr_gvt_firmware);
|
||||
vfree(bin_attr_gvt_firmware.private);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -101,14 +101,7 @@ struct i5k_amb_data {
|
||||
unsigned int num_attrs;
|
||||
};
|
||||
|
||||
static ssize_t name_show(struct device *dev, struct device_attribute *devattr,
|
||||
char *buf)
|
||||
{
|
||||
return sprintf(buf, "%s\n", DRVNAME);
|
||||
}
|
||||
|
||||
|
||||
static DEVICE_ATTR_RO(name);
|
||||
static DEVICE_STRING_ATTR_RO(name, 0444, DRVNAME);
|
||||
|
||||
static struct platform_device *amb_pdev;
|
||||
|
||||
@ -373,7 +366,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
|
||||
}
|
||||
}
|
||||
|
||||
res = device_create_file(&pdev->dev, &dev_attr_name);
|
||||
res = device_create_file(&pdev->dev, &dev_attr_name.attr);
|
||||
if (res)
|
||||
goto exit_remove;
|
||||
|
||||
@ -386,7 +379,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
|
||||
return res;
|
||||
|
||||
exit_remove:
|
||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
||||
device_remove_file(&pdev->dev, &dev_attr_name.attr);
|
||||
for (i = 0; i < data->num_attrs; i++)
|
||||
device_remove_file(&pdev->dev, &data->attrs[i].s_attr.dev_attr);
|
||||
kfree(data->attrs);
|
||||
@ -561,7 +554,7 @@ static void i5k_amb_remove(struct platform_device *pdev)
|
||||
struct i5k_amb_data *data = platform_get_drvdata(pdev);
|
||||
|
||||
hwmon_device_unregister(data->hwmon_dev);
|
||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
||||
device_remove_file(&pdev->dev, &dev_attr_name.attr);
|
||||
for (i = 0; i < data->num_attrs; i++)
|
||||
device_remove_file(&pdev->dev, &data->attrs[i].s_attr.dev_attr);
|
||||
kfree(data->attrs);
|
||||
|
@ -256,12 +256,7 @@ static struct ibmpex_bmc_data *get_bmc_data(int iface)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static ssize_t name_show(struct device *dev, struct device_attribute *devattr,
|
||||
char *buf)
|
||||
{
|
||||
return sprintf(buf, "%s\n", DRVNAME);
|
||||
}
|
||||
static SENSOR_DEVICE_ATTR_RO(name, name, 0);
|
||||
static DEVICE_STRING_ATTR_RO(name, 0444, DRVNAME);
|
||||
|
||||
static ssize_t ibmpex_show_sensor(struct device *dev,
|
||||
struct device_attribute *devattr,
|
||||
@ -415,8 +410,7 @@ static int ibmpex_find_sensors(struct ibmpex_bmc_data *data)
|
||||
if (err)
|
||||
goto exit_remove;
|
||||
|
||||
err = device_create_file(data->bmc_device,
|
||||
&sensor_dev_attr_name.dev_attr);
|
||||
err = device_create_file(data->bmc_device, &dev_attr_name.attr);
|
||||
if (err)
|
||||
goto exit_remove;
|
||||
|
||||
@ -425,7 +419,7 @@ static int ibmpex_find_sensors(struct ibmpex_bmc_data *data)
|
||||
exit_remove:
|
||||
device_remove_file(data->bmc_device,
|
||||
&sensor_dev_attr_reset_high_low.dev_attr);
|
||||
device_remove_file(data->bmc_device, &sensor_dev_attr_name.dev_attr);
|
||||
device_remove_file(data->bmc_device, &dev_attr_name.attr);
|
||||
for (i = 0; i < data->num_sensors; i++)
|
||||
for (j = 0; j < PEX_NUM_SENSOR_FUNCS; j++) {
|
||||
if (!data->sensors[i].attr[j].dev_attr.attr.name)
|
||||
@ -516,7 +510,7 @@ static void ibmpex_bmc_delete(struct ibmpex_bmc_data *data)
|
||||
|
||||
device_remove_file(data->bmc_device,
|
||||
&sensor_dev_attr_reset_high_low.dev_attr);
|
||||
device_remove_file(data->bmc_device, &sensor_dev_attr_name.dev_attr);
|
||||
device_remove_file(data->bmc_device, &dev_attr_name.attr);
|
||||
for (i = 0; i < data->num_sensors; i++)
|
||||
for (j = 0; j < PEX_NUM_SENSOR_FUNCS; j++) {
|
||||
if (!data->sensors[i].attr[j].dev_attr.attr.name)
|
||||
|
@ -1359,7 +1359,6 @@ static inline u32 qib_get_rcvhdrtail(const struct qib_ctxtdata *rcd)
|
||||
* sysfs interface.
|
||||
*/
|
||||
|
||||
extern const char ib_qib_version[];
|
||||
extern const struct attribute_group qib_attr_group;
|
||||
extern const struct attribute_group *qib_attr_port_groups[];
|
||||
|
||||
|
@ -44,12 +44,6 @@
|
||||
|
||||
#include "qib.h"
|
||||
|
||||
/*
|
||||
* The size has to be longer than this string, so we can append
|
||||
* board/chip information to it in the init code.
|
||||
*/
|
||||
const char ib_qib_version[] = QIB_DRIVER_VERSION "\n";
|
||||
|
||||
DEFINE_MUTEX(qib_mutex); /* general driver use */
|
||||
|
||||
unsigned qib_ibmtu;
|
||||
|
@ -585,13 +585,7 @@ static ssize_t hca_type_show(struct device *device,
|
||||
static DEVICE_ATTR_RO(hca_type);
|
||||
static DEVICE_ATTR(board_id, 0444, hca_type_show, NULL);
|
||||
|
||||
static ssize_t version_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
/* The string printed here is already newline-terminated. */
|
||||
return sysfs_emit(buf, "%s", (char *)ib_qib_version);
|
||||
}
|
||||
static DEVICE_ATTR_RO(version);
|
||||
static DEVICE_STRING_ATTR_RO(version, 0444, QIB_DRIVER_VERSION);
|
||||
|
||||
static ssize_t boardversion_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
@ -721,7 +715,7 @@ static struct attribute *qib_attributes[] = {
|
||||
&dev_attr_hw_rev.attr,
|
||||
&dev_attr_hca_type.attr,
|
||||
&dev_attr_board_id.attr,
|
||||
&dev_attr_version.attr,
|
||||
&dev_attr_version.attr.attr,
|
||||
&dev_attr_nctxts.attr,
|
||||
&dev_attr_nfreectxts.attr,
|
||||
&dev_attr_serial.attr,
|
||||
|
@ -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)
|
||||
|
||||
|
@ -925,17 +925,12 @@ static ssize_t kbd_rgb_mode_store(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR_WO(kbd_rgb_mode);
|
||||
|
||||
static ssize_t kbd_rgb_mode_index_show(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", "cmd mode red green blue speed");
|
||||
}
|
||||
static DEVICE_ATTR_RO(kbd_rgb_mode_index);
|
||||
static DEVICE_STRING_ATTR_RO(kbd_rgb_mode_index, 0444,
|
||||
"cmd mode red green blue speed");
|
||||
|
||||
static struct attribute *kbd_rgb_mode_attrs[] = {
|
||||
&dev_attr_kbd_rgb_mode.attr,
|
||||
&dev_attr_kbd_rgb_mode_index.attr,
|
||||
&dev_attr_kbd_rgb_mode_index.attr.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@ -977,17 +972,12 @@ static ssize_t kbd_rgb_state_store(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR_WO(kbd_rgb_state);
|
||||
|
||||
static ssize_t kbd_rgb_state_index_show(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", "cmd boot awake sleep keyboard");
|
||||
}
|
||||
static DEVICE_ATTR_RO(kbd_rgb_state_index);
|
||||
static DEVICE_STRING_ATTR_RO(kbd_rgb_state_index, 0444,
|
||||
"cmd boot awake sleep keyboard");
|
||||
|
||||
static struct attribute *kbd_rgb_state_attrs[] = {
|
||||
&dev_attr_kbd_rgb_state.attr,
|
||||
&dev_attr_kbd_rgb_state_index.attr,
|
||||
&dev_attr_kbd_rgb_state_index.attr.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@ -2718,13 +2708,6 @@ static ssize_t pwm1_enable_store(struct device *dev,
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fan1_label_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", ASUS_FAN_DESC);
|
||||
}
|
||||
|
||||
static ssize_t asus_hwmon_temp1(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
@ -2759,13 +2742,6 @@ static ssize_t fan2_input_show(struct device *dev,
|
||||
return sysfs_emit(buf, "%d\n", value * 100);
|
||||
}
|
||||
|
||||
static ssize_t fan2_label_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", ASUS_GPU_FAN_DESC);
|
||||
}
|
||||
|
||||
/* Middle/Center fan on modern ROG laptops */
|
||||
static ssize_t fan3_input_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
@ -2784,13 +2760,6 @@ static ssize_t fan3_input_show(struct device *dev,
|
||||
return sysfs_emit(buf, "%d\n", value * 100);
|
||||
}
|
||||
|
||||
static ssize_t fan3_label_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", ASUS_MID_FAN_DESC);
|
||||
}
|
||||
|
||||
static ssize_t pwm2_enable_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
@ -2887,15 +2856,16 @@ static ssize_t pwm3_enable_store(struct device *dev,
|
||||
static DEVICE_ATTR_RW(pwm1);
|
||||
static DEVICE_ATTR_RW(pwm1_enable);
|
||||
static DEVICE_ATTR_RO(fan1_input);
|
||||
static DEVICE_ATTR_RO(fan1_label);
|
||||
static DEVICE_STRING_ATTR_RO(fan1_label, 0444, ASUS_FAN_DESC);
|
||||
|
||||
/* Fan2 - GPU fan */
|
||||
static DEVICE_ATTR_RW(pwm2_enable);
|
||||
static DEVICE_ATTR_RO(fan2_input);
|
||||
static DEVICE_ATTR_RO(fan2_label);
|
||||
static DEVICE_STRING_ATTR_RO(fan2_label, 0444, ASUS_GPU_FAN_DESC);
|
||||
/* Fan3 - Middle/center fan */
|
||||
static DEVICE_ATTR_RW(pwm3_enable);
|
||||
static DEVICE_ATTR_RO(fan3_input);
|
||||
static DEVICE_ATTR_RO(fan3_label);
|
||||
static DEVICE_STRING_ATTR_RO(fan3_label, 0444, ASUS_MID_FAN_DESC);
|
||||
|
||||
/* Temperature */
|
||||
static DEVICE_ATTR(temp1_input, S_IRUGO, asus_hwmon_temp1, NULL);
|
||||
@ -2906,11 +2876,11 @@ static struct attribute *hwmon_attributes[] = {
|
||||
&dev_attr_pwm2_enable.attr,
|
||||
&dev_attr_pwm3_enable.attr,
|
||||
&dev_attr_fan1_input.attr,
|
||||
&dev_attr_fan1_label.attr,
|
||||
&dev_attr_fan1_label.attr.attr,
|
||||
&dev_attr_fan2_input.attr,
|
||||
&dev_attr_fan2_label.attr,
|
||||
&dev_attr_fan2_label.attr.attr,
|
||||
&dev_attr_fan3_input.attr,
|
||||
&dev_attr_fan3_label.attr,
|
||||
&dev_attr_fan3_label.attr.attr,
|
||||
|
||||
&dev_attr_temp1_input.attr,
|
||||
NULL
|
||||
@ -2927,17 +2897,17 @@ static umode_t asus_hwmon_sysfs_is_visible(struct kobject *kobj,
|
||||
if (asus->fan_type != FAN_TYPE_AGFN)
|
||||
return 0;
|
||||
} else if (attr == &dev_attr_fan1_input.attr
|
||||
|| attr == &dev_attr_fan1_label.attr
|
||||
|| attr == &dev_attr_fan1_label.attr.attr
|
||||
|| attr == &dev_attr_pwm1_enable.attr) {
|
||||
if (asus->fan_type == FAN_TYPE_NONE)
|
||||
return 0;
|
||||
} else if (attr == &dev_attr_fan2_input.attr
|
||||
|| attr == &dev_attr_fan2_label.attr
|
||||
|| attr == &dev_attr_fan2_label.attr.attr
|
||||
|| attr == &dev_attr_pwm2_enable.attr) {
|
||||
if (asus->gpu_fan_type == FAN_TYPE_NONE)
|
||||
return 0;
|
||||
} else if (attr == &dev_attr_fan3_input.attr
|
||||
|| attr == &dev_attr_fan3_label.attr
|
||||
|| attr == &dev_attr_fan3_label.attr.attr
|
||||
|| attr == &dev_attr_pwm3_enable.attr) {
|
||||
if (asus->mid_fan_type == FAN_TYPE_NONE)
|
||||
return 0;
|
||||
|
@ -10828,13 +10828,7 @@ static struct ibm_struct auxmac_data = {
|
||||
.name = "auxmac",
|
||||
};
|
||||
|
||||
static ssize_t auxmac_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", auxmac);
|
||||
}
|
||||
static DEVICE_ATTR_RO(auxmac);
|
||||
static DEVICE_STRING_ATTR_RO(auxmac, 0444, auxmac);
|
||||
|
||||
static umode_t auxmac_attr_is_visible(struct kobject *kobj,
|
||||
struct attribute *attr, int n)
|
||||
@ -10843,7 +10837,7 @@ static umode_t auxmac_attr_is_visible(struct kobject *kobj,
|
||||
}
|
||||
|
||||
static struct attribute *auxmac_attributes[] = {
|
||||
&dev_attr_auxmac.attr,
|
||||
&dev_attr_auxmac.attr.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -1821,12 +1821,7 @@ static DECLARE_WORK(kbd_bl_work, toshiba_acpi_kbd_bl_work);
|
||||
/*
|
||||
* Sysfs files
|
||||
*/
|
||||
static ssize_t version_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sprintf(buf, "%s\n", TOSHIBA_ACPI_VERSION);
|
||||
}
|
||||
static DEVICE_ATTR_RO(version);
|
||||
static DEVICE_STRING_ATTR_RO(version, 0444, TOSHIBA_ACPI_VERSION);
|
||||
|
||||
static ssize_t fan_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
@ -2435,7 +2430,7 @@ static ssize_t cooling_method_store(struct device *dev,
|
||||
static DEVICE_ATTR_RW(cooling_method);
|
||||
|
||||
static struct attribute *toshiba_attributes[] = {
|
||||
&dev_attr_version.attr,
|
||||
&dev_attr_version.attr.attr,
|
||||
&dev_attr_fan.attr,
|
||||
&dev_attr_kbd_backlight_mode.attr,
|
||||
&dev_attr_kbd_type.attr,
|
||||
|
@ -853,13 +853,6 @@ bfad_im_hw_version_show(struct device *dev, struct device_attribute *attr,
|
||||
return sysfs_emit(buf, "%s\n", hw_ver);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
bfad_im_drv_version_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", BFAD_DRIVER_VERSION);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
bfad_im_optionrom_version_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
@ -901,13 +894,6 @@ bfad_im_num_of_ports_show(struct device *dev, struct device_attribute *attr,
|
||||
bfa_get_nports(&bfad->bfa));
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
bfad_im_drv_name_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", BFAD_DRIVER_NAME);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
bfad_im_num_of_discovered_ports_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
@ -944,15 +930,15 @@ static DEVICE_ATTR(symbolic_name, S_IRUGO,
|
||||
bfad_im_symbolic_name_show, NULL);
|
||||
static DEVICE_ATTR(hardware_version, S_IRUGO,
|
||||
bfad_im_hw_version_show, NULL);
|
||||
static DEVICE_ATTR(driver_version, S_IRUGO,
|
||||
bfad_im_drv_version_show, NULL);
|
||||
static DEVICE_STRING_ATTR_RO(driver_version, S_IRUGO,
|
||||
BFAD_DRIVER_VERSION);
|
||||
static DEVICE_ATTR(option_rom_version, S_IRUGO,
|
||||
bfad_im_optionrom_version_show, NULL);
|
||||
static DEVICE_ATTR(firmware_version, S_IRUGO,
|
||||
bfad_im_fw_version_show, NULL);
|
||||
static DEVICE_ATTR(number_of_ports, S_IRUGO,
|
||||
bfad_im_num_of_ports_show, NULL);
|
||||
static DEVICE_ATTR(driver_name, S_IRUGO, bfad_im_drv_name_show, NULL);
|
||||
static DEVICE_STRING_ATTR_RO(driver_name, S_IRUGO, BFAD_DRIVER_NAME);
|
||||
static DEVICE_ATTR(number_of_discovered_ports, S_IRUGO,
|
||||
bfad_im_num_of_discovered_ports_show, NULL);
|
||||
|
||||
@ -963,11 +949,11 @@ static struct attribute *bfad_im_host_attrs[] = {
|
||||
&dev_attr_node_name.attr,
|
||||
&dev_attr_symbolic_name.attr,
|
||||
&dev_attr_hardware_version.attr,
|
||||
&dev_attr_driver_version.attr,
|
||||
&dev_attr_driver_version.attr.attr,
|
||||
&dev_attr_option_rom_version.attr,
|
||||
&dev_attr_firmware_version.attr,
|
||||
&dev_attr_number_of_ports.attr,
|
||||
&dev_attr_driver_name.attr,
|
||||
&dev_attr_driver_name.attr.attr,
|
||||
&dev_attr_number_of_discovered_ports.attr,
|
||||
NULL,
|
||||
};
|
||||
@ -988,11 +974,11 @@ static struct attribute *bfad_im_vport_attrs[] = {
|
||||
&dev_attr_node_name.attr,
|
||||
&dev_attr_symbolic_name.attr,
|
||||
&dev_attr_hardware_version.attr,
|
||||
&dev_attr_driver_version.attr,
|
||||
&dev_attr_driver_version.attr.attr,
|
||||
&dev_attr_option_rom_version.attr,
|
||||
&dev_attr_firmware_version.attr,
|
||||
&dev_attr_number_of_ports.attr,
|
||||
&dev_attr_driver_name.attr,
|
||||
&dev_attr_driver_name.attr.attr,
|
||||
&dev_attr_number_of_discovered_ports.attr,
|
||||
NULL,
|
||||
};
|
||||
|
@ -3613,12 +3613,6 @@ static void ibmvscsis_remove(struct vio_dev *vdev)
|
||||
kfree(vscsi);
|
||||
}
|
||||
|
||||
static ssize_t system_id_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return sysfs_emit(buf, "%s\n", system_id);
|
||||
}
|
||||
|
||||
static ssize_t partition_number_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
@ -3982,8 +3976,7 @@ static const struct target_core_fabric_ops ibmvscsis_ops = {
|
||||
|
||||
static void ibmvscsis_dev_release(struct device *dev) {};
|
||||
|
||||
static struct device_attribute dev_attr_system_id =
|
||||
__ATTR(system_id, S_IRUGO, system_id_show, NULL);
|
||||
static DEVICE_STRING_ATTR_RO(system_id, S_IRUGO, system_id);
|
||||
|
||||
static struct device_attribute dev_attr_partition_number =
|
||||
__ATTR(partition_number, S_IRUGO, partition_number_show, NULL);
|
||||
@ -3992,7 +3985,7 @@ static struct device_attribute dev_attr_unit_address =
|
||||
__ATTR(unit_address, S_IRUGO, unit_address_show, NULL);
|
||||
|
||||
static struct attribute *ibmvscsis_dev_attrs[] = {
|
||||
&dev_attr_system_id.attr,
|
||||
&dev_attr_system_id.attr.attr,
|
||||
&dev_attr_partition_number.attr,
|
||||
&dev_attr_unit_address.attr,
|
||||
};
|
||||
|
@ -676,13 +676,7 @@ static struct pci_driver mvs_pci_driver = {
|
||||
.remove = mvs_pci_remove,
|
||||
};
|
||||
|
||||
static ssize_t driver_version_show(struct device *cdev,
|
||||
struct device_attribute *attr, char *buffer)
|
||||
{
|
||||
return sysfs_emit(buffer, "%s\n", DRV_VERSION);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RO(driver_version);
|
||||
static DEVICE_STRING_ATTR_RO(driver_version, 0444, DRV_VERSION);
|
||||
|
||||
static ssize_t interrupt_coalescing_store(struct device *cdev,
|
||||
struct device_attribute *attr,
|
||||
@ -757,7 +751,7 @@ static void __exit mvs_exit(void)
|
||||
}
|
||||
|
||||
static struct attribute *mvst_host_attrs[] = {
|
||||
&dev_attr_driver_version.attr,
|
||||
&dev_attr_driver_version.attr.attr,
|
||||
&dev_attr_interrupt_coalescing.attr,
|
||||
NULL,
|
||||
};
|
||||
|
@ -1067,13 +1067,6 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *vha, bool stop_beacon)
|
||||
|
||||
/* Scsi_Host attributes. */
|
||||
|
||||
static ssize_t
|
||||
qla2x00_driver_version_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return scnprintf(buf, PAGE_SIZE, "%s\n", qla2x00_version_str);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
qla2x00_fw_version_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
@ -2412,7 +2405,7 @@ qla2x00_dport_diagnostics_show(struct device *dev,
|
||||
static DEVICE_ATTR(dport_diagnostics, 0444,
|
||||
qla2x00_dport_diagnostics_show, NULL);
|
||||
|
||||
static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_driver_version_show, NULL);
|
||||
static DEVICE_STRING_ATTR_RO(driver_version, S_IRUGO, qla2x00_version_str);
|
||||
static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL);
|
||||
static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL);
|
||||
static DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL);
|
||||
@ -2478,7 +2471,7 @@ static DEVICE_ATTR(port_no, 0444, qla2x00_port_no_show, NULL);
|
||||
static DEVICE_ATTR(fw_attr, 0444, qla2x00_fw_attr_show, NULL);
|
||||
|
||||
static struct attribute *qla2x00_host_attrs[] = {
|
||||
&dev_attr_driver_version.attr,
|
||||
&dev_attr_driver_version.attr.attr,
|
||||
&dev_attr_fw_version.attr,
|
||||
&dev_attr_serial_num.attr,
|
||||
&dev_attr_isp_name.attr,
|
||||
|
@ -6891,12 +6891,6 @@ static ssize_t pqi_firmware_version_show(struct device *dev,
|
||||
return scnprintf(buffer, PAGE_SIZE, "%s\n", ctrl_info->firmware_version);
|
||||
}
|
||||
|
||||
static ssize_t pqi_driver_version_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buffer)
|
||||
{
|
||||
return scnprintf(buffer, PAGE_SIZE, "%s\n", DRIVER_VERSION BUILD_TIMESTAMP);
|
||||
}
|
||||
|
||||
static ssize_t pqi_serial_number_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buffer)
|
||||
{
|
||||
@ -7065,7 +7059,8 @@ static ssize_t pqi_host_enable_r6_writes_store(struct device *dev,
|
||||
return count;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(driver_version, 0444, pqi_driver_version_show, NULL);
|
||||
static DEVICE_STRING_ATTR_RO(driver_version, 0444,
|
||||
DRIVER_VERSION BUILD_TIMESTAMP);
|
||||
static DEVICE_ATTR(firmware_version, 0444, pqi_firmware_version_show, NULL);
|
||||
static DEVICE_ATTR(model, 0444, pqi_model_show, NULL);
|
||||
static DEVICE_ATTR(serial_number, 0444, pqi_serial_number_show, NULL);
|
||||
@ -7082,7 +7077,7 @@ static DEVICE_ATTR(enable_r6_writes, 0644,
|
||||
pqi_host_enable_r6_writes_show, pqi_host_enable_r6_writes_store);
|
||||
|
||||
static struct attribute *pqi_shost_attrs[] = {
|
||||
&dev_attr_driver_version.attr,
|
||||
&dev_attr_driver_version.attr.attr,
|
||||
&dev_attr_firmware_version.attr,
|
||||
&dev_attr_model.attr,
|
||||
&dev_attr_serial_number.attr,
|
||||
|
@ -73,14 +73,7 @@ struct odvp_attr {
|
||||
struct device_attribute attr;
|
||||
};
|
||||
|
||||
static ssize_t data_vault_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf, loff_t off, size_t count)
|
||||
{
|
||||
memcpy(buf, attr->private + off, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static BIN_ATTR_RO(data_vault, 0);
|
||||
static BIN_ATTR_SIMPLE_RO(data_vault);
|
||||
|
||||
static struct bin_attribute *data_attributes[] = {
|
||||
&bin_attr_data_vault,
|
||||
|
@ -206,7 +206,7 @@ struct dentry *kernfs_node_dentry(struct kernfs_node *kn,
|
||||
struct super_block *sb)
|
||||
{
|
||||
struct dentry *dentry;
|
||||
struct kernfs_node *knparent = NULL;
|
||||
struct kernfs_node *knparent;
|
||||
|
||||
BUG_ON(sb->s_op != &kernfs_sops);
|
||||
|
||||
|
@ -785,3 +785,30 @@ int sysfs_emit_at(char *buf, int at, const char *fmt, ...)
|
||||
return len;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sysfs_emit_at);
|
||||
|
||||
/**
|
||||
* sysfs_bin_attr_simple_read - read callback to simply copy from memory.
|
||||
* @file: attribute file which is being read.
|
||||
* @kobj: object to which the attribute belongs.
|
||||
* @attr: attribute descriptor.
|
||||
* @buf: destination buffer.
|
||||
* @off: offset in bytes from which to read.
|
||||
* @count: maximum number of bytes to read.
|
||||
*
|
||||
* Simple ->read() callback for bin_attributes backed by a buffer in memory.
|
||||
* The @private and @size members in struct bin_attribute must be set to the
|
||||
* buffer's location and size before the bin_attribute is created in sysfs.
|
||||
*
|
||||
* Bounds check for @off and @count is done in sysfs_kf_bin_read().
|
||||
* Negative value check for @off is done in vfs_setpos() and default_llseek().
|
||||
*
|
||||
* Returns number of bytes written to @buf.
|
||||
*/
|
||||
ssize_t sysfs_bin_attr_simple_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
{
|
||||
memcpy(buf, attr->private + off, count);
|
||||
return count;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sysfs_bin_attr_simple_read);
|
||||
|
@ -132,6 +132,8 @@ ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
|
||||
char *buf);
|
||||
ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count);
|
||||
ssize_t device_show_string(struct device *dev, struct device_attribute *attr,
|
||||
char *buf);
|
||||
|
||||
/**
|
||||
* DEVICE_ATTR - Define a device attribute.
|
||||
@ -251,6 +253,19 @@ ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
|
||||
struct dev_ext_attribute dev_attr_##_name = \
|
||||
{ __ATTR(_name, _mode, device_show_bool, device_store_bool), &(_var) }
|
||||
|
||||
/**
|
||||
* DEVICE_STRING_ATTR_RO - Define a device attribute backed by a r/o string.
|
||||
* @_name: Attribute name.
|
||||
* @_mode: File mode.
|
||||
* @_var: Identifier of string.
|
||||
*
|
||||
* Like DEVICE_ULONG_ATTR(), but @_var is a string. Because the length of the
|
||||
* string allocation is unknown, the attribute must be read-only.
|
||||
*/
|
||||
#define DEVICE_STRING_ATTR_RO(_name, _mode, _var) \
|
||||
struct dev_ext_attribute dev_attr_##_name = \
|
||||
{ __ATTR(_name, (_mode) & ~0222, device_show_string, NULL), (_var) }
|
||||
|
||||
#define DEVICE_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
|
||||
struct device_attribute dev_attr_##_name = \
|
||||
__ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
|
||||
@ -1210,17 +1225,6 @@ int __must_check devm_device_add_groups(struct device *dev,
|
||||
int __must_check devm_device_add_group(struct device *dev,
|
||||
const struct attribute_group *grp);
|
||||
|
||||
/*
|
||||
* Platform "fixup" functions - allow the platform to have their say
|
||||
* about devices and actions that the general device layer doesn't
|
||||
* know about.
|
||||
*/
|
||||
/* Notify platform of device discovery */
|
||||
extern int (*platform_notify)(struct device *dev);
|
||||
|
||||
extern int (*platform_notify_remove)(struct device *dev);
|
||||
|
||||
|
||||
/*
|
||||
* get_device - atomically increment the reference count for the device.
|
||||
*
|
||||
|
@ -371,6 +371,17 @@ struct bin_attribute bin_attr_##_name = __BIN_ATTR_ADMIN_RO(_name, _size)
|
||||
#define BIN_ATTR_ADMIN_RW(_name, _size) \
|
||||
struct bin_attribute bin_attr_##_name = __BIN_ATTR_ADMIN_RW(_name, _size)
|
||||
|
||||
#define __BIN_ATTR_SIMPLE_RO(_name, _mode) { \
|
||||
.attr = { .name = __stringify(_name), .mode = _mode }, \
|
||||
.read = sysfs_bin_attr_simple_read, \
|
||||
}
|
||||
|
||||
#define BIN_ATTR_SIMPLE_RO(_name) \
|
||||
struct bin_attribute bin_attr_##_name = __BIN_ATTR_SIMPLE_RO(_name, 0444)
|
||||
|
||||
#define BIN_ATTR_SIMPLE_ADMIN_RO(_name) \
|
||||
struct bin_attribute bin_attr_##_name = __BIN_ATTR_SIMPLE_RO(_name, 0400)
|
||||
|
||||
struct sysfs_ops {
|
||||
ssize_t (*show)(struct kobject *, struct attribute *, char *);
|
||||
ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
|
||||
@ -478,6 +489,10 @@ int sysfs_emit(char *buf, const char *fmt, ...);
|
||||
__printf(3, 4)
|
||||
int sysfs_emit_at(char *buf, int at, const char *fmt, ...);
|
||||
|
||||
ssize_t sysfs_bin_attr_simple_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count);
|
||||
|
||||
#else /* CONFIG_SYSFS */
|
||||
|
||||
static inline int sysfs_create_dir_ns(struct kobject *kobj, const void *ns)
|
||||
|
@ -575,15 +575,7 @@ extern unsigned long __initramfs_size;
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/kexec.h>
|
||||
|
||||
static ssize_t raw_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t pos, size_t count)
|
||||
{
|
||||
memcpy(buf, attr->private + pos, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static BIN_ATTR(initrd, 0440, raw_read, NULL, 0);
|
||||
static BIN_ATTR(initrd, 0440, sysfs_bin_attr_simple_read, NULL, 0);
|
||||
|
||||
void __init reserve_initrd_mem(void)
|
||||
{
|
||||
|
@ -146,17 +146,6 @@ struct module_notes_attrs {
|
||||
struct bin_attribute attrs[] __counted_by(notes);
|
||||
};
|
||||
|
||||
static ssize_t module_notes_read(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *bin_attr,
|
||||
char *buf, loff_t pos, size_t count)
|
||||
{
|
||||
/*
|
||||
* The caller checked the pos and count against our size.
|
||||
*/
|
||||
memcpy(buf, bin_attr->private + pos, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static void free_notes_attrs(struct module_notes_attrs *notes_attrs,
|
||||
unsigned int i)
|
||||
{
|
||||
@ -205,7 +194,7 @@ static void add_notes_attrs(struct module *mod, const struct load_info *info)
|
||||
nattr->attr.mode = 0444;
|
||||
nattr->size = info->sechdrs[i].sh_size;
|
||||
nattr->private = (void *)info->sechdrs[i].sh_addr;
|
||||
nattr->read = module_notes_read;
|
||||
nattr->read = sysfs_bin_attr_simple_read;
|
||||
++nattr;
|
||||
}
|
||||
++loaded;
|
||||
|
Loading…
Reference in New Issue
Block a user