mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
Driver core changes for 6.17-rc1
- DEBUGFS - Remove unneeded debugfs_file_{get,put}() instances - Remove last remnants of debugfs_real_fops() - Allow storing non-const void * in struct debugfs_inode_info::aux - SYSFS - Switch back to attribute_group::bin_attrs (treewide) - Switch back to bin_attribute::read()/write() (treewide) - Constify internal references to 'struct bin_attribute' - Support cache-ids for device-tree systems - Add arch hook arch_compact_of_hwid() - Use arch_compact_of_hwid() to compact MPIDR values on arm64 - Rust - Device - Introduce CoreInternal device context (for bus internal methods) - Provide generic drvdata accessors for bus devices - Provide Driver::unbind() callbacks - Use the infrastructure above for auxiliary, PCI and platform - Implement Device::as_bound() - Rename Device::as_ref() to Device::from_raw() (treewide) - Implement fwnode and device property abstractions - Implement example usage in the Rust platform sample driver - Devres - Remove the inner reference count (Arc) and use pin-init instead - Replace Devres::new_foreign_owned() with devres::register() - Require T to be Send in Devres<T> - Initialize the data kept inside a Devres last - Provide an accessor for the Devres associated Device - Device ID - Add support for ACPI device IDs and driver match tables - Split up generic device ID infrastructure - Use generic device ID infrastructure in net::phy - DMA - Implement the dma::Device trait - Add DMA mask accessors to dma::Device - Implement dma::Device for PCI and platform devices - Use DMA masks from the DMA sample module - I/O - Implement abstraction for resource regions (struct resource) - Implement resource-based ioremap() abstractions - Provide platform device accessors for I/O (remap) requests - Misc - Support fallible PinInit types in Revocable - Implement Wrapper<T> for Opaque<T> - Merge pin-init blanket dependencies (for Devres) - Misc - Fix OF node leak in auxiliary_device_create() - Use util macros in device property iterators - Improve kobject sample code - Add device_link_test() for testing device link flags - Fix typo in Documentation/ABI/testing/sysfs-kernel-address_bits - Hint to prefer container_of_const() over container_of() -----BEGIN PGP SIGNATURE----- iHQEABYKAB0WIQS2q/xV6QjXAdC7k+1FlHeO1qrKLgUCaIjkhwAKCRBFlHeO1qrK LpXuAP9RWwfD9ZGgQZ9OsMk/0pZ2mDclaK97jcmI9TAeSxeZMgD1FHnOMTY7oSIi iG7Muq0yLD+A5gk9HUnMUnFNrngWCg== =jgRj -----END PGP SIGNATURE----- Merge tag 'driver-core-6.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core Pull driver core updates from Danilo Krummrich: "debugfs: - Remove unneeded debugfs_file_{get,put}() instances - Remove last remnants of debugfs_real_fops() - Allow storing non-const void * in struct debugfs_inode_info::aux sysfs: - Switch back to attribute_group::bin_attrs (treewide) - Switch back to bin_attribute::read()/write() (treewide) - Constify internal references to 'struct bin_attribute' Support cache-ids for device-tree systems: - Add arch hook arch_compact_of_hwid() - Use arch_compact_of_hwid() to compact MPIDR values on arm64 Rust: - Device: - Introduce CoreInternal device context (for bus internal methods) - Provide generic drvdata accessors for bus devices - Provide Driver::unbind() callbacks - Use the infrastructure above for auxiliary, PCI and platform - Implement Device::as_bound() - Rename Device::as_ref() to Device::from_raw() (treewide) - Implement fwnode and device property abstractions - Implement example usage in the Rust platform sample driver - Devres: - Remove the inner reference count (Arc) and use pin-init instead - Replace Devres::new_foreign_owned() with devres::register() - Require T to be Send in Devres<T> - Initialize the data kept inside a Devres last - Provide an accessor for the Devres associated Device - Device ID: - Add support for ACPI device IDs and driver match tables - Split up generic device ID infrastructure - Use generic device ID infrastructure in net::phy - DMA: - Implement the dma::Device trait - Add DMA mask accessors to dma::Device - Implement dma::Device for PCI and platform devices - Use DMA masks from the DMA sample module - I/O: - Implement abstraction for resource regions (struct resource) - Implement resource-based ioremap() abstractions - Provide platform device accessors for I/O (remap) requests - Misc: - Support fallible PinInit types in Revocable - Implement Wrapper<T> for Opaque<T> - Merge pin-init blanket dependencies (for Devres) Misc: - Fix OF node leak in auxiliary_device_create() - Use util macros in device property iterators - Improve kobject sample code - Add device_link_test() for testing device link flags - Fix typo in Documentation/ABI/testing/sysfs-kernel-address_bits - Hint to prefer container_of_const() over container_of()" * tag 'driver-core-6.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core: (84 commits) rust: io: fix broken intra-doc links to `platform::Device` rust: io: fix broken intra-doc link to missing `flags` module rust: io: mem: enable IoRequest doc-tests rust: platform: add resource accessors rust: io: mem: add a generic iomem abstraction rust: io: add resource abstraction rust: samples: dma: set DMA mask rust: platform: implement the `dma::Device` trait rust: pci: implement the `dma::Device` trait rust: dma: add DMA addressing capabilities rust: dma: implement `dma::Device` trait rust: net::phy Change module_phy_driver macro to use module_device_table macro rust: net::phy represent DeviceId as transparent wrapper over mdio_device_id rust: device_id: split out index support into a separate trait device: rust: rename Device::as_ref() to Device::from_raw() arm64: cacheinfo: Provide helper to compress MPIDR value into u32 cacheinfo: Add arch hook to compress CPU h/w id into 32 bits for cache-id cacheinfo: Set cache 'id' based on DT data container_of: Document container_of() is not to be used in new code driver core: auxiliary bus: fix OF node leak ...
This commit is contained in:
commit
22c5696e3f
@ -1,4 +1,4 @@
|
||||
What: /sys/kernel/address_bit
|
||||
What: /sys/kernel/address_bits
|
||||
Date: May 2023
|
||||
KernelVersion: 6.3
|
||||
Contact: Thomas Weißschuh <linux@weissschuh.net>
|
||||
|
@ -302,6 +302,7 @@ F: include/linux/acpi.h
|
||||
F: include/linux/fwnode.h
|
||||
F: include/linux/fw_table.h
|
||||
F: lib/fw_table.c
|
||||
F: rust/kernel/acpi.rs
|
||||
F: tools/power/acpi/
|
||||
|
||||
ACPI APEI
|
||||
@ -7438,6 +7439,7 @@ F: include/linux/property.h
|
||||
F: include/linux/sysfs.h
|
||||
F: lib/kobj*
|
||||
F: rust/kernel/device.rs
|
||||
F: rust/kernel/device/
|
||||
F: rust/kernel/device_id.rs
|
||||
F: rust/kernel/devres.rs
|
||||
F: rust/kernel/driver.rs
|
||||
@ -18715,6 +18717,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
|
||||
F: Documentation/ABI/testing/sysfs-firmware-ofw
|
||||
F: drivers/of/
|
||||
F: include/linux/of*.h
|
||||
F: rust/helpers/of.c
|
||||
F: rust/kernel/of.rs
|
||||
F: scripts/dtc/
|
||||
F: tools/testing/selftests/dt/
|
||||
|
@ -87,6 +87,23 @@ int cache_line_size(void);
|
||||
|
||||
#define dma_get_cache_alignment cache_line_size
|
||||
|
||||
/* Compress a u64 MPIDR value into 32 bits. */
|
||||
static inline u64 arch_compact_of_hwid(u64 id)
|
||||
{
|
||||
u64 aff3 = MPIDR_AFFINITY_LEVEL(id, 3);
|
||||
|
||||
/*
|
||||
* These bits are expected to be RES0. If not, return a value with
|
||||
* the upper 32 bits set to force the caller to give up on 32 bit
|
||||
* cache ids.
|
||||
*/
|
||||
if (FIELD_GET(GENMASK_ULL(63, 40), id))
|
||||
return id;
|
||||
|
||||
return (aff3 << 24) | FIELD_GET(GENMASK_ULL(23, 0), id);
|
||||
}
|
||||
#define arch_compact_of_hwid arch_compact_of_hwid
|
||||
|
||||
/*
|
||||
* Read the effective value of CTR_EL0.
|
||||
*
|
||||
|
@ -121,7 +121,7 @@ static struct attribute *secvar_attrs[] = {
|
||||
|
||||
static const struct attribute_group secvar_attr_group = {
|
||||
.attrs = secvar_attrs,
|
||||
.bin_attrs_new = secvar_bin_attrs,
|
||||
.bin_attrs = secvar_bin_attrs,
|
||||
};
|
||||
__ATTRIBUTE_GROUPS(secvar_attr);
|
||||
|
||||
|
@ -1141,7 +1141,7 @@ static struct attribute *if_attrs[] = {
|
||||
|
||||
static const struct attribute_group if_group = {
|
||||
.name = "interface",
|
||||
.bin_attrs_new = if_bin_attrs,
|
||||
.bin_attrs = if_bin_attrs,
|
||||
.attrs = if_attrs,
|
||||
};
|
||||
|
||||
|
@ -208,7 +208,7 @@ static ssize_t read_opalcore(struct file *file, struct kobject *kobj,
|
||||
|
||||
static struct bin_attribute opal_core_attr __ro_after_init = {
|
||||
.attr = {.name = "core", .mode = 0400},
|
||||
.read_new = read_opalcore
|
||||
.read = read_opalcore
|
||||
};
|
||||
|
||||
/*
|
||||
@ -607,7 +607,7 @@ static const struct bin_attribute *const mpipl_bin_attr[] = {
|
||||
|
||||
static const struct attribute_group mpipl_group = {
|
||||
.attrs = mpipl_attr,
|
||||
.bin_attrs_new = mpipl_bin_attr,
|
||||
.bin_attrs = mpipl_bin_attr,
|
||||
};
|
||||
|
||||
static int __init opalcore_init(void)
|
||||
|
@ -342,7 +342,7 @@ static void create_dump_obj(uint32_t id, size_t size, uint32_t type)
|
||||
dump->dump_attr.attr.name = "dump";
|
||||
dump->dump_attr.attr.mode = 0400;
|
||||
dump->dump_attr.size = size;
|
||||
dump->dump_attr.read_new = dump_attr_read;
|
||||
dump->dump_attr.read = dump_attr_read;
|
||||
|
||||
dump->id = id;
|
||||
dump->size = size;
|
||||
|
@ -203,7 +203,7 @@ static void create_elog_obj(uint64_t id, size_t size, uint64_t type)
|
||||
elog->raw_attr.attr.name = "raw";
|
||||
elog->raw_attr.attr.mode = 0400;
|
||||
elog->raw_attr.size = size;
|
||||
elog->raw_attr.read_new = raw_attr_read;
|
||||
elog->raw_attr.read = raw_attr_read;
|
||||
|
||||
elog->id = id;
|
||||
elog->size = size;
|
||||
|
@ -493,7 +493,7 @@ out:
|
||||
static const struct bin_attribute image_data_attr = {
|
||||
.attr = {.name = "image", .mode = 0200},
|
||||
.size = MAX_IMAGE_SIZE, /* Limit image size */
|
||||
.write_new = image_data_write,
|
||||
.write = image_data_write,
|
||||
};
|
||||
|
||||
static struct kobj_attribute validate_attribute =
|
||||
|
@ -102,7 +102,7 @@ static ssize_t opal_msglog_read(struct file *file, struct kobject *kobj,
|
||||
|
||||
static struct bin_attribute opal_msglog_attr __ro_after_init = {
|
||||
.attr = {.name = "msglog", .mode = 0400},
|
||||
.read_new = opal_msglog_read
|
||||
.read = opal_msglog_read
|
||||
};
|
||||
|
||||
struct memcons *__init memcons_init(struct device_node *node, const char *mc_prop_name)
|
||||
|
@ -815,7 +815,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_new = sysfs_bin_attr_simple_read;
|
||||
attr->read = sysfs_bin_attr_simple_read;
|
||||
attr->private = __va(vals[0]);
|
||||
attr->size = vals[1];
|
||||
|
||||
|
@ -40,7 +40,7 @@ static ssize_t uv_msglog_read(struct file *file, struct kobject *kobj,
|
||||
|
||||
static struct bin_attribute uv_msglog_attr __ro_after_init = {
|
||||
.attr = {.name = "msglog", .mode = 0400},
|
||||
.read_new = uv_msglog_read
|
||||
.read = uv_msglog_read
|
||||
};
|
||||
|
||||
static int __init uv_init(void)
|
||||
|
@ -101,7 +101,7 @@ static const struct bin_attribute *const cpacf_attrs[] = {
|
||||
|
||||
static const struct attribute_group cpacf_attr_grp = {
|
||||
.name = "cpacf",
|
||||
.bin_attrs_new = cpacf_attrs,
|
||||
.bin_attrs = cpacf_attrs,
|
||||
};
|
||||
|
||||
static int __init cpacf_init(void)
|
||||
|
@ -596,7 +596,7 @@ static struct attribute *ipl_fcp_attrs[] = {
|
||||
|
||||
static const struct attribute_group ipl_fcp_attr_group = {
|
||||
.attrs = ipl_fcp_attrs,
|
||||
.bin_attrs_new = ipl_fcp_bin_attrs,
|
||||
.bin_attrs = ipl_fcp_bin_attrs,
|
||||
};
|
||||
|
||||
static struct attribute *ipl_nvme_attrs[] = {
|
||||
@ -610,7 +610,7 @@ static struct attribute *ipl_nvme_attrs[] = {
|
||||
|
||||
static const struct attribute_group ipl_nvme_attr_group = {
|
||||
.attrs = ipl_nvme_attrs,
|
||||
.bin_attrs_new = ipl_nvme_bin_attrs,
|
||||
.bin_attrs = ipl_nvme_bin_attrs,
|
||||
};
|
||||
|
||||
static struct attribute *ipl_eckd_attrs[] = {
|
||||
@ -623,7 +623,7 @@ static struct attribute *ipl_eckd_attrs[] = {
|
||||
|
||||
static const struct attribute_group ipl_eckd_attr_group = {
|
||||
.attrs = ipl_eckd_attrs,
|
||||
.bin_attrs_new = ipl_eckd_bin_attrs,
|
||||
.bin_attrs = ipl_eckd_bin_attrs,
|
||||
};
|
||||
|
||||
/* CCW ipl device attributes */
|
||||
@ -920,7 +920,7 @@ static struct attribute *reipl_fcp_attrs[] = {
|
||||
|
||||
static const struct attribute_group reipl_fcp_attr_group = {
|
||||
.attrs = reipl_fcp_attrs,
|
||||
.bin_attrs_new = reipl_fcp_bin_attrs,
|
||||
.bin_attrs = reipl_fcp_bin_attrs,
|
||||
};
|
||||
|
||||
static struct kobj_attribute sys_reipl_fcp_clear_attr =
|
||||
@ -958,7 +958,7 @@ static struct attribute *reipl_nvme_attrs[] = {
|
||||
|
||||
static const struct attribute_group reipl_nvme_attr_group = {
|
||||
.attrs = reipl_nvme_attrs,
|
||||
.bin_attrs_new = reipl_nvme_bin_attrs
|
||||
.bin_attrs = reipl_nvme_bin_attrs
|
||||
};
|
||||
|
||||
static ssize_t reipl_nvme_clear_show(struct kobject *kobj,
|
||||
@ -1051,7 +1051,7 @@ static struct attribute *reipl_eckd_attrs[] = {
|
||||
|
||||
static const struct attribute_group reipl_eckd_attr_group = {
|
||||
.attrs = reipl_eckd_attrs,
|
||||
.bin_attrs_new = reipl_eckd_bin_attrs
|
||||
.bin_attrs = reipl_eckd_bin_attrs
|
||||
};
|
||||
|
||||
static ssize_t reipl_eckd_clear_show(struct kobject *kobj,
|
||||
@ -1596,7 +1596,7 @@ static const struct bin_attribute *const dump_fcp_bin_attrs[] = {
|
||||
static const struct attribute_group dump_fcp_attr_group = {
|
||||
.name = IPL_FCP_STR,
|
||||
.attrs = dump_fcp_attrs,
|
||||
.bin_attrs_new = dump_fcp_bin_attrs,
|
||||
.bin_attrs = dump_fcp_bin_attrs,
|
||||
};
|
||||
|
||||
/* NVME dump device attributes */
|
||||
@ -1630,7 +1630,7 @@ static const struct bin_attribute *const dump_nvme_bin_attrs[] = {
|
||||
static const struct attribute_group dump_nvme_attr_group = {
|
||||
.name = IPL_NVME_STR,
|
||||
.attrs = dump_nvme_attrs,
|
||||
.bin_attrs_new = dump_nvme_bin_attrs,
|
||||
.bin_attrs = dump_nvme_bin_attrs,
|
||||
};
|
||||
|
||||
/* ECKD dump device attributes */
|
||||
@ -1664,7 +1664,7 @@ static const struct bin_attribute *const dump_eckd_bin_attrs[] = {
|
||||
static const struct attribute_group dump_eckd_attr_group = {
|
||||
.name = IPL_ECKD_STR,
|
||||
.attrs = dump_eckd_attrs,
|
||||
.bin_attrs_new = dump_eckd_bin_attrs,
|
||||
.bin_attrs = dump_eckd_bin_attrs,
|
||||
};
|
||||
|
||||
/* CCW dump device attributes */
|
||||
|
@ -218,7 +218,7 @@ static struct attribute *zpci_dev_attrs[] = {
|
||||
|
||||
const struct attribute_group zpci_attr_group = {
|
||||
.attrs = zpci_dev_attrs,
|
||||
.bin_attrs_new = zpci_bin_attrs,
|
||||
.bin_attrs = zpci_bin_attrs,
|
||||
};
|
||||
|
||||
static struct attribute *pfip_attrs[] = {
|
||||
|
@ -40,7 +40,7 @@ static const struct bin_attribute boot_params_data_attr = {
|
||||
.name = "data",
|
||||
.mode = S_IRUGO,
|
||||
},
|
||||
.read_new = boot_params_data_read,
|
||||
.read = boot_params_data_read,
|
||||
.size = sizeof(boot_params),
|
||||
};
|
||||
|
||||
@ -56,7 +56,7 @@ static const struct bin_attribute *const boot_params_data_attrs[] = {
|
||||
|
||||
static const struct attribute_group boot_params_attr_group = {
|
||||
.attrs = boot_params_version_attrs,
|
||||
.bin_attrs_new = boot_params_data_attrs,
|
||||
.bin_attrs = boot_params_data_attrs,
|
||||
};
|
||||
|
||||
static int kobj_to_setup_data_nr(struct kobject *kobj, int *nr)
|
||||
@ -250,7 +250,7 @@ static struct bin_attribute data_attr __ro_after_init = {
|
||||
.name = "data",
|
||||
.mode = S_IRUGO,
|
||||
},
|
||||
.read_new = setup_data_data_read,
|
||||
.read = setup_data_data_read,
|
||||
};
|
||||
|
||||
static struct attribute *setup_data_type_attrs[] = {
|
||||
@ -265,7 +265,7 @@ static const struct bin_attribute *const setup_data_data_attrs[] = {
|
||||
|
||||
static const struct attribute_group setup_data_attr_group = {
|
||||
.attrs = setup_data_type_attrs,
|
||||
.bin_attrs_new = setup_data_data_attrs,
|
||||
.bin_attrs = setup_data_data_attrs,
|
||||
};
|
||||
|
||||
static int __init create_setup_data_node(struct kobject *parent,
|
||||
|
@ -521,7 +521,7 @@ CTX_RQ_SEQ_OPS(poll, HCTX_TYPE_POLL);
|
||||
static int blk_mq_debugfs_show(struct seq_file *m, void *v)
|
||||
{
|
||||
const struct blk_mq_debugfs_attr *attr = m->private;
|
||||
void *data = d_inode(m->file->f_path.dentry->d_parent)->i_private;
|
||||
void *data = debugfs_get_aux(m->file);
|
||||
|
||||
return attr->show(data, m);
|
||||
}
|
||||
@ -531,7 +531,7 @@ static ssize_t blk_mq_debugfs_write(struct file *file, const char __user *buf,
|
||||
{
|
||||
struct seq_file *m = file->private_data;
|
||||
const struct blk_mq_debugfs_attr *attr = m->private;
|
||||
void *data = d_inode(file->f_path.dentry->d_parent)->i_private;
|
||||
void *data = debugfs_get_aux(file);
|
||||
|
||||
/*
|
||||
* Attributes that only implement .seq_ops are read-only and 'attr' is
|
||||
@ -546,7 +546,7 @@ static ssize_t blk_mq_debugfs_write(struct file *file, const char __user *buf,
|
||||
static int blk_mq_debugfs_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
const struct blk_mq_debugfs_attr *attr = inode->i_private;
|
||||
void *data = d_inode(file->f_path.dentry->d_parent)->i_private;
|
||||
void *data = debugfs_get_aux(file);
|
||||
struct seq_file *m;
|
||||
int ret;
|
||||
|
||||
@ -612,11 +612,9 @@ static void debugfs_create_files(struct dentry *parent, void *data,
|
||||
if (IS_ERR_OR_NULL(parent))
|
||||
return;
|
||||
|
||||
d_inode(parent)->i_private = data;
|
||||
|
||||
for (; attr->name; attr++)
|
||||
debugfs_create_file(attr->name, attr->mode, parent,
|
||||
(void *)attr, &blk_mq_debugfs_fops);
|
||||
debugfs_create_file_aux(attr->name, attr->mode, parent,
|
||||
(void *)attr, data, &blk_mq_debugfs_fops);
|
||||
}
|
||||
|
||||
void blk_mq_debugfs_register(struct request_queue *q)
|
||||
|
@ -446,7 +446,7 @@ static DEVICE_ATTR_RO(parent_device);
|
||||
static const struct bin_attribute bin_attr_eeprom = {
|
||||
.attr = {.name = "eeprom", .mode = (0444)},
|
||||
.size = PAGE_SIZE,
|
||||
.read_new = eeprom_read_handler
|
||||
.read = eeprom_read_handler
|
||||
};
|
||||
|
||||
static struct attribute *hl_dev_attrs[] = {
|
||||
@ -479,7 +479,7 @@ static const struct bin_attribute *const hl_dev_bin_attrs[] = {
|
||||
|
||||
static struct attribute_group hl_dev_attr_group = {
|
||||
.attrs = hl_dev_attrs,
|
||||
.bin_attrs_new = hl_dev_bin_attrs,
|
||||
.bin_attrs = hl_dev_bin_attrs,
|
||||
};
|
||||
|
||||
static struct attribute_group hl_dev_clks_attr_group;
|
||||
|
@ -47,7 +47,7 @@ static const struct bin_attribute *const bgrt_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group bgrt_attribute_group = {
|
||||
.attrs = bgrt_attributes,
|
||||
.bin_attrs_new = bgrt_bin_attributes,
|
||||
.bin_attrs = bgrt_bin_attributes,
|
||||
};
|
||||
|
||||
int __init acpi_parse_bgrt(struct acpi_table_header *table)
|
||||
|
@ -372,7 +372,7 @@ static int acpi_table_attr_init(struct kobject *tables_obj,
|
||||
}
|
||||
|
||||
table_attr->attr.size = table_header->length;
|
||||
table_attr->attr.read_new = acpi_table_show;
|
||||
table_attr->attr.read = acpi_table_show;
|
||||
table_attr->attr.attr.name = table_attr->filename;
|
||||
table_attr->attr.attr.mode = 0400;
|
||||
|
||||
@ -495,7 +495,7 @@ static int acpi_table_data_init(struct acpi_table_header *th)
|
||||
if (!data_attr)
|
||||
return -ENOMEM;
|
||||
sysfs_attr_init(&data_attr->attr.attr);
|
||||
data_attr->attr.read_new = acpi_data_show;
|
||||
data_attr->attr.read = acpi_data_show;
|
||||
data_attr->attr.attr.mode = 0400;
|
||||
return acpi_data_objs[i].fn(th, data_attr);
|
||||
}
|
||||
|
@ -399,6 +399,7 @@ static void auxiliary_device_release(struct device *dev)
|
||||
{
|
||||
struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
|
||||
|
||||
of_node_put(dev->of_node);
|
||||
kfree(auxdev);
|
||||
}
|
||||
|
||||
@ -435,6 +436,7 @@ struct auxiliary_device *auxiliary_device_create(struct device *dev,
|
||||
|
||||
ret = auxiliary_device_init(auxdev);
|
||||
if (ret) {
|
||||
of_node_put(auxdev->dev.of_node);
|
||||
kfree(auxdev);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -8,6 +8,7 @@
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/cacheinfo.h>
|
||||
#include <linux/compiler.h>
|
||||
@ -183,6 +184,54 @@ static bool cache_node_is_unified(struct cacheinfo *this_leaf,
|
||||
return of_property_read_bool(np, "cache-unified");
|
||||
}
|
||||
|
||||
static bool match_cache_node(struct device_node *cpu,
|
||||
const struct device_node *cache_node)
|
||||
{
|
||||
struct device_node *prev, *cache = of_find_next_cache_node(cpu);
|
||||
|
||||
while (cache) {
|
||||
if (cache == cache_node) {
|
||||
of_node_put(cache);
|
||||
return true;
|
||||
}
|
||||
|
||||
prev = cache;
|
||||
cache = of_find_next_cache_node(cache);
|
||||
of_node_put(prev);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifndef arch_compact_of_hwid
|
||||
#define arch_compact_of_hwid(_x) (_x)
|
||||
#endif
|
||||
|
||||
static void cache_of_set_id(struct cacheinfo *this_leaf,
|
||||
struct device_node *cache_node)
|
||||
{
|
||||
struct device_node *cpu;
|
||||
u32 min_id = ~0;
|
||||
|
||||
for_each_of_cpu_node(cpu) {
|
||||
u64 id = of_get_cpu_hwid(cpu, 0);
|
||||
|
||||
id = arch_compact_of_hwid(id);
|
||||
if (FIELD_GET(GENMASK_ULL(63, 32), id)) {
|
||||
of_node_put(cpu);
|
||||
return;
|
||||
}
|
||||
|
||||
if (match_cache_node(cpu, cache_node))
|
||||
min_id = min(min_id, id);
|
||||
}
|
||||
|
||||
if (min_id != ~0) {
|
||||
this_leaf->id = min_id;
|
||||
this_leaf->attributes |= CACHE_ID;
|
||||
}
|
||||
}
|
||||
|
||||
static void cache_of_set_props(struct cacheinfo *this_leaf,
|
||||
struct device_node *np)
|
||||
{
|
||||
@ -198,6 +247,7 @@ static void cache_of_set_props(struct cacheinfo *this_leaf,
|
||||
cache_get_line_size(this_leaf, np);
|
||||
cache_nr_sets(this_leaf, np);
|
||||
cache_associativity(this_leaf);
|
||||
cache_of_set_id(this_leaf, np);
|
||||
}
|
||||
|
||||
static int cache_setup_of_node(unsigned int cpu)
|
||||
|
@ -460,9 +460,9 @@ static ssize_t auto_remove_on_show(struct device *dev,
|
||||
struct device_link *link = to_devlink(dev);
|
||||
const char *output;
|
||||
|
||||
if (link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
|
||||
if (device_link_test(link, DL_FLAG_AUTOREMOVE_SUPPLIER))
|
||||
output = "supplier unbind";
|
||||
else if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
|
||||
else if (device_link_test(link, DL_FLAG_AUTOREMOVE_CONSUMER))
|
||||
output = "consumer unbind";
|
||||
else
|
||||
output = "never";
|
||||
@ -476,7 +476,7 @@ static ssize_t runtime_pm_show(struct device *dev,
|
||||
{
|
||||
struct device_link *link = to_devlink(dev);
|
||||
|
||||
return sysfs_emit(buf, "%d\n", !!(link->flags & DL_FLAG_PM_RUNTIME));
|
||||
return sysfs_emit(buf, "%d\n", device_link_test(link, DL_FLAG_PM_RUNTIME));
|
||||
}
|
||||
static DEVICE_ATTR_RO(runtime_pm);
|
||||
|
||||
@ -485,8 +485,7 @@ static ssize_t sync_state_only_show(struct device *dev,
|
||||
{
|
||||
struct device_link *link = to_devlink(dev);
|
||||
|
||||
return sysfs_emit(buf, "%d\n",
|
||||
!!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
|
||||
return sysfs_emit(buf, "%d\n", device_link_test(link, DL_FLAG_SYNC_STATE_ONLY));
|
||||
}
|
||||
static DEVICE_ATTR_RO(sync_state_only);
|
||||
|
||||
@ -792,12 +791,12 @@ struct device_link *device_link_add(struct device *consumer,
|
||||
if (link->consumer != consumer)
|
||||
continue;
|
||||
|
||||
if (link->flags & DL_FLAG_INFERRED &&
|
||||
if (device_link_test(link, DL_FLAG_INFERRED) &&
|
||||
!(flags & DL_FLAG_INFERRED))
|
||||
link->flags &= ~DL_FLAG_INFERRED;
|
||||
|
||||
if (flags & DL_FLAG_PM_RUNTIME) {
|
||||
if (!(link->flags & DL_FLAG_PM_RUNTIME)) {
|
||||
if (!device_link_test(link, DL_FLAG_PM_RUNTIME)) {
|
||||
pm_runtime_new_link(consumer);
|
||||
link->flags |= DL_FLAG_PM_RUNTIME;
|
||||
}
|
||||
@ -807,8 +806,8 @@ struct device_link *device_link_add(struct device *consumer,
|
||||
|
||||
if (flags & DL_FLAG_STATELESS) {
|
||||
kref_get(&link->kref);
|
||||
if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
|
||||
!(link->flags & DL_FLAG_STATELESS)) {
|
||||
if (device_link_test(link, DL_FLAG_SYNC_STATE_ONLY) &&
|
||||
!device_link_test(link, DL_FLAG_STATELESS)) {
|
||||
link->flags |= DL_FLAG_STATELESS;
|
||||
goto reorder;
|
||||
} else {
|
||||
@ -823,7 +822,7 @@ struct device_link *device_link_add(struct device *consumer,
|
||||
* update the existing link to stay around longer.
|
||||
*/
|
||||
if (flags & DL_FLAG_AUTOREMOVE_SUPPLIER) {
|
||||
if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
|
||||
if (device_link_test(link, DL_FLAG_AUTOREMOVE_CONSUMER)) {
|
||||
link->flags &= ~DL_FLAG_AUTOREMOVE_CONSUMER;
|
||||
link->flags |= DL_FLAG_AUTOREMOVE_SUPPLIER;
|
||||
}
|
||||
@ -831,12 +830,12 @@ struct device_link *device_link_add(struct device *consumer,
|
||||
link->flags &= ~(DL_FLAG_AUTOREMOVE_CONSUMER |
|
||||
DL_FLAG_AUTOREMOVE_SUPPLIER);
|
||||
}
|
||||
if (!(link->flags & DL_FLAG_MANAGED)) {
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED)) {
|
||||
kref_get(&link->kref);
|
||||
link->flags |= DL_FLAG_MANAGED;
|
||||
device_link_init_status(link, consumer, supplier);
|
||||
}
|
||||
if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
|
||||
if (device_link_test(link, DL_FLAG_SYNC_STATE_ONLY) &&
|
||||
!(flags & DL_FLAG_SYNC_STATE_ONLY)) {
|
||||
link->flags &= ~DL_FLAG_SYNC_STATE_ONLY;
|
||||
goto reorder;
|
||||
@ -940,7 +939,7 @@ static void __device_link_del(struct kref *kref)
|
||||
|
||||
static void device_link_put_kref(struct device_link *link)
|
||||
{
|
||||
if (link->flags & DL_FLAG_STATELESS)
|
||||
if (device_link_test(link, DL_FLAG_STATELESS))
|
||||
kref_put(&link->kref, __device_link_del);
|
||||
else if (!device_is_registered(link->consumer))
|
||||
__device_link_del(&link->kref);
|
||||
@ -1004,7 +1003,7 @@ static void device_links_missing_supplier(struct device *dev)
|
||||
if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
|
||||
WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
|
||||
} else {
|
||||
WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
|
||||
WARN_ON(!device_link_test(link, DL_FLAG_SYNC_STATE_ONLY));
|
||||
WRITE_ONCE(link->status, DL_STATE_DORMANT);
|
||||
}
|
||||
}
|
||||
@ -1072,14 +1071,14 @@ int device_links_check_suppliers(struct device *dev)
|
||||
device_links_write_lock();
|
||||
|
||||
list_for_each_entry(link, &dev->links.suppliers, c_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
if (link->status != DL_STATE_AVAILABLE &&
|
||||
!(link->flags & DL_FLAG_SYNC_STATE_ONLY)) {
|
||||
!device_link_test(link, DL_FLAG_SYNC_STATE_ONLY)) {
|
||||
|
||||
if (dev_is_best_effort(dev) &&
|
||||
link->flags & DL_FLAG_INFERRED &&
|
||||
device_link_test(link, DL_FLAG_INFERRED) &&
|
||||
!link->supplier->can_match) {
|
||||
ret = -EAGAIN;
|
||||
continue;
|
||||
@ -1128,7 +1127,7 @@ static void __device_links_queue_sync_state(struct device *dev,
|
||||
return;
|
||||
|
||||
list_for_each_entry(link, &dev->links.consumers, s_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
if (link->status != DL_STATE_ACTIVE)
|
||||
return;
|
||||
@ -1268,7 +1267,7 @@ void device_links_force_bind(struct device *dev)
|
||||
device_links_write_lock();
|
||||
|
||||
list_for_each_entry_safe(link, ln, &dev->links.suppliers, c_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
if (link->status != DL_STATE_AVAILABLE) {
|
||||
@ -1329,7 +1328,7 @@ void device_links_driver_bound(struct device *dev)
|
||||
device_links_write_lock();
|
||||
|
||||
list_for_each_entry(link, &dev->links.consumers, s_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
/*
|
||||
@ -1345,7 +1344,7 @@ void device_links_driver_bound(struct device *dev)
|
||||
WARN_ON(link->status != DL_STATE_DORMANT);
|
||||
WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
|
||||
|
||||
if (link->flags & DL_FLAG_AUTOPROBE_CONSUMER)
|
||||
if (device_link_test(link, DL_FLAG_AUTOPROBE_CONSUMER))
|
||||
driver_deferred_probe_add(link->consumer);
|
||||
}
|
||||
|
||||
@ -1357,11 +1356,11 @@ void device_links_driver_bound(struct device *dev)
|
||||
list_for_each_entry_safe(link, ln, &dev->links.suppliers, c_node) {
|
||||
struct device *supplier;
|
||||
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
supplier = link->supplier;
|
||||
if (link->flags & DL_FLAG_SYNC_STATE_ONLY) {
|
||||
if (device_link_test(link, DL_FLAG_SYNC_STATE_ONLY)) {
|
||||
/*
|
||||
* When DL_FLAG_SYNC_STATE_ONLY is set, it means no
|
||||
* other DL_MANAGED_LINK_FLAGS have been set. So, it's
|
||||
@ -1369,7 +1368,7 @@ void device_links_driver_bound(struct device *dev)
|
||||
*/
|
||||
device_link_drop_managed(link);
|
||||
} else if (dev_is_best_effort(dev) &&
|
||||
link->flags & DL_FLAG_INFERRED &&
|
||||
device_link_test(link, DL_FLAG_INFERRED) &&
|
||||
link->status != DL_STATE_CONSUMER_PROBE &&
|
||||
!link->supplier->can_match) {
|
||||
/*
|
||||
@ -1421,10 +1420,10 @@ static void __device_links_no_driver(struct device *dev)
|
||||
struct device_link *link, *ln;
|
||||
|
||||
list_for_each_entry_safe_reverse(link, ln, &dev->links.suppliers, c_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
|
||||
if (device_link_test(link, DL_FLAG_AUTOREMOVE_CONSUMER)) {
|
||||
device_link_drop_managed(link);
|
||||
continue;
|
||||
}
|
||||
@ -1436,7 +1435,7 @@ static void __device_links_no_driver(struct device *dev)
|
||||
if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
|
||||
WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
|
||||
} else {
|
||||
WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
|
||||
WARN_ON(!device_link_test(link, DL_FLAG_SYNC_STATE_ONLY));
|
||||
WRITE_ONCE(link->status, DL_STATE_DORMANT);
|
||||
}
|
||||
}
|
||||
@ -1461,7 +1460,7 @@ void device_links_no_driver(struct device *dev)
|
||||
device_links_write_lock();
|
||||
|
||||
list_for_each_entry(link, &dev->links.consumers, s_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
/*
|
||||
@ -1498,10 +1497,10 @@ void device_links_driver_cleanup(struct device *dev)
|
||||
device_links_write_lock();
|
||||
|
||||
list_for_each_entry_safe(link, ln, &dev->links.consumers, s_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
WARN_ON(link->flags & DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
WARN_ON(device_link_test(link, DL_FLAG_AUTOREMOVE_CONSUMER));
|
||||
WARN_ON(link->status != DL_STATE_SUPPLIER_UNBIND);
|
||||
|
||||
/*
|
||||
@ -1510,7 +1509,7 @@ void device_links_driver_cleanup(struct device *dev)
|
||||
* has moved to DL_STATE_SUPPLIER_UNBIND.
|
||||
*/
|
||||
if (link->status == DL_STATE_SUPPLIER_UNBIND &&
|
||||
link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
|
||||
device_link_test(link, DL_FLAG_AUTOREMOVE_SUPPLIER))
|
||||
device_link_drop_managed(link);
|
||||
|
||||
WRITE_ONCE(link->status, DL_STATE_DORMANT);
|
||||
@ -1544,7 +1543,7 @@ bool device_links_busy(struct device *dev)
|
||||
device_links_write_lock();
|
||||
|
||||
list_for_each_entry(link, &dev->links.consumers, s_node) {
|
||||
if (!(link->flags & DL_FLAG_MANAGED))
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED))
|
||||
continue;
|
||||
|
||||
if (link->status == DL_STATE_CONSUMER_PROBE
|
||||
@ -1586,8 +1585,8 @@ void device_links_unbind_consumers(struct device *dev)
|
||||
list_for_each_entry(link, &dev->links.consumers, s_node) {
|
||||
enum device_link_state status;
|
||||
|
||||
if (!(link->flags & DL_FLAG_MANAGED) ||
|
||||
link->flags & DL_FLAG_SYNC_STATE_ONLY)
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED) ||
|
||||
device_link_test(link, DL_FLAG_SYNC_STATE_ONLY))
|
||||
continue;
|
||||
|
||||
status = link->status;
|
||||
@ -1743,7 +1742,7 @@ static void fw_devlink_parse_fwtree(struct fwnode_handle *fwnode)
|
||||
|
||||
static void fw_devlink_relax_link(struct device_link *link)
|
||||
{
|
||||
if (!(link->flags & DL_FLAG_INFERRED))
|
||||
if (!device_link_test(link, DL_FLAG_INFERRED))
|
||||
return;
|
||||
|
||||
if (device_link_flag_is_sync_state_only(link->flags))
|
||||
@ -1779,7 +1778,7 @@ static int fw_devlink_dev_sync_state(struct device *dev, void *data)
|
||||
struct device_link *link = to_devlink(dev);
|
||||
struct device *sup = link->supplier;
|
||||
|
||||
if (!(link->flags & DL_FLAG_MANAGED) ||
|
||||
if (!device_link_test(link, DL_FLAG_MANAGED) ||
|
||||
link->status == DL_STATE_ACTIVE || sup->state_synced ||
|
||||
!dev_has_sync_state(sup))
|
||||
return 0;
|
||||
@ -2061,7 +2060,7 @@ static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle,
|
||||
* such due to a cycle.
|
||||
*/
|
||||
if (device_link_flag_is_sync_state_only(dev_link->flags) &&
|
||||
!(dev_link->flags & DL_FLAG_CYCLE))
|
||||
!device_link_test(dev_link, DL_FLAG_CYCLE))
|
||||
continue;
|
||||
|
||||
if (__fw_devlink_relax_cycles(con_handle,
|
||||
|
@ -140,7 +140,7 @@ static const struct bin_attribute *const devcd_dev_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group devcd_dev_group = {
|
||||
.bin_attrs_new = devcd_dev_bin_attrs,
|
||||
.bin_attrs = devcd_dev_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *devcd_dev_groups[] = {
|
||||
|
@ -359,8 +359,8 @@ out:
|
||||
static const struct bin_attribute firmware_attr_data = {
|
||||
.attr = { .name = "data", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = firmware_data_read,
|
||||
.write_new = firmware_data_write,
|
||||
.read = firmware_data_read,
|
||||
.write = firmware_data_write,
|
||||
};
|
||||
|
||||
static struct attribute *fw_dev_attrs[] = {
|
||||
@ -381,7 +381,7 @@ static const struct bin_attribute *const fw_dev_bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group fw_dev_attr_group = {
|
||||
.attrs = fw_dev_attrs,
|
||||
.bin_attrs_new = fw_dev_bin_attrs,
|
||||
.bin_attrs = fw_dev_bin_attrs,
|
||||
#ifdef CONFIG_FW_UPLOAD
|
||||
.is_visible = fw_upload_is_visible,
|
||||
#endif
|
||||
|
@ -597,7 +597,7 @@ static const struct bin_attribute *node_dev_bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group node_dev_group = {
|
||||
.attrs = node_dev_attrs,
|
||||
.bin_attrs_new = node_dev_bin_attrs,
|
||||
.bin_attrs = node_dev_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *node_dev_groups[] = {
|
||||
|
@ -2052,7 +2052,7 @@ static bool device_prepare_smart_suspend(struct device *dev)
|
||||
idx = device_links_read_lock();
|
||||
|
||||
list_for_each_entry_rcu_locked(link, &dev->links.suppliers, c_node) {
|
||||
if (!(link->flags & DL_FLAG_PM_RUNTIME))
|
||||
if (!device_link_test(link, DL_FLAG_PM_RUNTIME))
|
||||
continue;
|
||||
|
||||
if (!dev_pm_smart_suspend(link->supplier) &&
|
||||
|
@ -302,7 +302,7 @@ static int rpm_get_suppliers(struct device *dev)
|
||||
device_links_read_lock_held()) {
|
||||
int retval;
|
||||
|
||||
if (!(link->flags & DL_FLAG_PM_RUNTIME))
|
||||
if (!device_link_test(link, DL_FLAG_PM_RUNTIME))
|
||||
continue;
|
||||
|
||||
retval = pm_runtime_get_sync(link->supplier);
|
||||
@ -1905,7 +1905,7 @@ void pm_runtime_get_suppliers(struct device *dev)
|
||||
|
||||
list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
|
||||
device_links_read_lock_held())
|
||||
if (link->flags & DL_FLAG_PM_RUNTIME) {
|
||||
if (device_link_test(link, DL_FLAG_PM_RUNTIME)) {
|
||||
link->supplier_preactivated = true;
|
||||
pm_runtime_get_sync(link->supplier);
|
||||
}
|
||||
@ -1959,7 +1959,7 @@ static void pm_runtime_drop_link_count(struct device *dev)
|
||||
*/
|
||||
void pm_runtime_drop_link(struct device_link *link)
|
||||
{
|
||||
if (!(link->flags & DL_FLAG_PM_RUNTIME))
|
||||
if (!device_link_test(link, DL_FLAG_PM_RUNTIME))
|
||||
return;
|
||||
|
||||
pm_runtime_drop_link_count(link->consumer);
|
||||
|
@ -179,7 +179,7 @@ static umode_t topology_is_visible(struct kobject *kobj,
|
||||
|
||||
static const struct attribute_group topology_attr_group = {
|
||||
.attrs = default_attrs,
|
||||
.bin_attrs_new = bin_attrs,
|
||||
.bin_attrs = bin_attrs,
|
||||
.is_visible = topology_is_visible,
|
||||
.name = "topology"
|
||||
};
|
||||
|
@ -20,7 +20,8 @@ use kernel::{
|
||||
/// Finds exact supply name from the OF node.
|
||||
fn find_supply_name_exact(dev: &Device, name: &str) -> Option<CString> {
|
||||
let prop_name = CString::try_from_fmt(fmt!("{}-supply", name)).ok()?;
|
||||
dev.property_present(&prop_name)
|
||||
dev.fwnode()?
|
||||
.property_present(&prop_name)
|
||||
.then(|| CString::try_from_fmt(fmt!("{name}")).ok())
|
||||
.flatten()
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ static const struct bin_attribute *const cxl_cdat_bin_attributes[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group cxl_cdat_attribute_group = {
|
||||
.bin_attrs_new = cxl_cdat_bin_attributes,
|
||||
.bin_attrs = cxl_cdat_bin_attributes,
|
||||
.is_bin_visible = cxl_port_bin_attr_is_visible,
|
||||
};
|
||||
|
||||
|
@ -340,7 +340,7 @@ static int __init efi_mokvar_sysfs_init(void)
|
||||
mokvar_sysfs->bin_attr.attr.name = mokvar_entry->name;
|
||||
mokvar_sysfs->bin_attr.attr.mode = 0400;
|
||||
mokvar_sysfs->bin_attr.size = mokvar_entry->data_size;
|
||||
mokvar_sysfs->bin_attr.read_new = efi_mokvar_sysfs_read;
|
||||
mokvar_sysfs->bin_attr.read = efi_mokvar_sysfs_read;
|
||||
|
||||
err = sysfs_create_bin_file(mokvar_kobj,
|
||||
&mokvar_sysfs->bin_attr);
|
||||
|
@ -86,7 +86,7 @@ static const struct bin_attribute *const bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group cbmem_entry_group = {
|
||||
.attrs = attrs,
|
||||
.bin_attrs_new = bin_attrs,
|
||||
.bin_attrs = bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *dev_groups[] = {
|
||||
|
@ -530,7 +530,7 @@ static ssize_t eventlog_write(struct file *filp, struct kobject *kobj,
|
||||
|
||||
static const struct bin_attribute eventlog_bin_attr = {
|
||||
.attr = {.name = "append_to_eventlog", .mode = 0200},
|
||||
.write_new = eventlog_write,
|
||||
.write = eventlog_write,
|
||||
};
|
||||
|
||||
static ssize_t gsmi_clear_eventlog_store(struct kobject *kobj,
|
||||
|
@ -28,7 +28,7 @@ static ssize_t memconsole_read(struct file *filp, struct kobject *kobp,
|
||||
|
||||
static struct bin_attribute memconsole_bin_attr = {
|
||||
.attr = {.name = "log", .mode = 0444},
|
||||
.read_new = memconsole_read,
|
||||
.read = memconsole_read,
|
||||
};
|
||||
|
||||
void memconsole_setup(ssize_t (*read_func)(char *, loff_t, size_t))
|
||||
|
@ -121,7 +121,7 @@ static int vpd_section_attrib_add(const u8 *key, u32 key_len,
|
||||
info->bin_attr.attr.name = info->key;
|
||||
info->bin_attr.attr.mode = 0444;
|
||||
info->bin_attr.size = value_len;
|
||||
info->bin_attr.read_new = vpd_attrib_read;
|
||||
info->bin_attr.read = vpd_attrib_read;
|
||||
info->bin_attr.private = info;
|
||||
|
||||
info->value = value;
|
||||
@ -201,7 +201,7 @@ static int vpd_section_init(const char *name, struct vpd_section *sec,
|
||||
sec->bin_attr.attr.name = sec->raw_name;
|
||||
sec->bin_attr.attr.mode = 0444;
|
||||
sec->bin_attr.size = size;
|
||||
sec->bin_attr.read_new = vpd_section_read;
|
||||
sec->bin_attr.read = vpd_section_read;
|
||||
sec->bin_attr.private = sec;
|
||||
|
||||
err = sysfs_create_bin_file(vpd_kobj, &sec->bin_attr);
|
||||
|
@ -476,7 +476,7 @@ static ssize_t fw_cfg_sysfs_read_raw(struct file *filp, struct kobject *kobj,
|
||||
|
||||
static const struct bin_attribute fw_cfg_sysfs_attr_raw = {
|
||||
.attr = { .name = "raw", .mode = S_IRUSR },
|
||||
.read_new = fw_cfg_sysfs_read_raw,
|
||||
.read = fw_cfg_sysfs_read_raw,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -613,8 +613,8 @@ static const struct bin_attribute fsi_slave_raw_attr = {
|
||||
.mode = 0600,
|
||||
},
|
||||
.size = 0,
|
||||
.read_new = fsi_slave_sysfs_raw_read,
|
||||
.write_new = fsi_slave_sysfs_raw_write,
|
||||
.read = fsi_slave_sysfs_raw_read,
|
||||
.write = fsi_slave_sysfs_raw_write,
|
||||
};
|
||||
|
||||
static void fsi_slave_release(struct device *dev)
|
||||
|
@ -4125,8 +4125,8 @@ rel_buf:
|
||||
static const struct bin_attribute psp_vbflash_bin_attr = {
|
||||
.attr = {.name = "psp_vbflash", .mode = 0660},
|
||||
.size = 0,
|
||||
.write_new = amdgpu_psp_vbflash_write,
|
||||
.read_new = amdgpu_psp_vbflash_read,
|
||||
.write = amdgpu_psp_vbflash_write,
|
||||
.read = amdgpu_psp_vbflash_read,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -4189,7 +4189,7 @@ static umode_t amdgpu_bin_flash_attr_is_visible(struct kobject *kobj,
|
||||
|
||||
const struct attribute_group amdgpu_flash_attr_group = {
|
||||
.attrs = flash_attrs,
|
||||
.bin_attrs_new = bin_flash_attrs,
|
||||
.bin_attrs = bin_flash_attrs,
|
||||
.is_bin_visible = amdgpu_bin_flash_attr_is_visible,
|
||||
.is_visible = amdgpu_flash_attr_is_visible,
|
||||
};
|
||||
|
@ -2124,7 +2124,7 @@ static int amdgpu_ras_fs_init(struct amdgpu_device *adev)
|
||||
con->badpages_attr = bin_attr_gpu_vram_bad_pages;
|
||||
sysfs_bin_attr_init(&con->badpages_attr);
|
||||
bin_attrs[0] = &con->badpages_attr;
|
||||
group.bin_attrs_new = bin_attrs;
|
||||
group.bin_attrs = bin_attrs;
|
||||
}
|
||||
|
||||
r = sysfs_create_group(&adev->dev->kobj, &group);
|
||||
|
@ -723,8 +723,8 @@ ret:
|
||||
static const struct bin_attribute data_attr = {
|
||||
.attr = {.name = "hdcp_srm", .mode = 0664},
|
||||
.size = PSP_HDCP_SRM_FIRST_GEN_MAX_SIZE, /* Limit SRM size */
|
||||
.write_new = srm_data_write,
|
||||
.read_new = srm_data_read,
|
||||
.write = srm_data_write,
|
||||
.read = srm_data_read,
|
||||
};
|
||||
|
||||
struct hdcp_workqueue *hdcp_create_workqueue(struct amdgpu_device *adev,
|
||||
|
@ -319,7 +319,7 @@ static const struct bin_attribute edid_attr = {
|
||||
.attr.name = "edid",
|
||||
.attr.mode = 0444,
|
||||
.size = 0,
|
||||
.read_new = edid_show,
|
||||
.read = edid_show,
|
||||
};
|
||||
|
||||
static const struct bin_attribute *const connector_bin_attrs[] = {
|
||||
@ -329,7 +329,7 @@ static const struct bin_attribute *const connector_bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group connector_dev_group = {
|
||||
.attrs = connector_dev_attrs,
|
||||
.bin_attrs_new = connector_bin_attrs,
|
||||
.bin_attrs = connector_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *connector_dev_groups[] = {
|
||||
|
@ -2506,8 +2506,8 @@ static const struct bin_attribute error_state_attr = {
|
||||
.attr.name = "error",
|
||||
.attr.mode = S_IRUSR | S_IWUSR,
|
||||
.size = 0,
|
||||
.read_new = error_state_read,
|
||||
.write_new = error_state_write,
|
||||
.read = error_state_read,
|
||||
.write = error_state_write,
|
||||
};
|
||||
|
||||
void i915_gpu_error_sysfs_setup(struct drm_i915_private *i915)
|
||||
|
@ -140,8 +140,8 @@ i915_l3_write(struct file *filp, struct kobject *kobj,
|
||||
static const struct bin_attribute dpf_attrs = {
|
||||
.attr = {.name = "l3_parity", .mode = (S_IRUSR | S_IWUSR)},
|
||||
.size = GEN7_L3LOG_SIZE,
|
||||
.read_new = i915_l3_read,
|
||||
.write_new = i915_l3_write,
|
||||
.read = i915_l3_read,
|
||||
.write = i915_l3_write,
|
||||
.mmap = NULL,
|
||||
.private = (void *)0
|
||||
};
|
||||
@ -149,8 +149,8 @@ static const struct bin_attribute dpf_attrs = {
|
||||
static const struct bin_attribute dpf_attrs_1 = {
|
||||
.attr = {.name = "l3_parity_slice_1", .mode = (S_IRUSR | S_IWUSR)},
|
||||
.size = GEN7_L3LOG_SIZE,
|
||||
.read_new = i915_l3_read,
|
||||
.write_new = i915_l3_write,
|
||||
.read = i915_l3_read,
|
||||
.write = i915_l3_write,
|
||||
.mmap = NULL,
|
||||
.private = (void *)1
|
||||
};
|
||||
|
@ -362,8 +362,8 @@ static const struct bin_attribute lima_error_state_attr = {
|
||||
.attr.name = "error",
|
||||
.attr.mode = 0600,
|
||||
.size = 0,
|
||||
.read_new = lima_error_state_read,
|
||||
.write_new = lima_error_state_write,
|
||||
.read = lima_error_state_read,
|
||||
.write = lima_error_state_write,
|
||||
};
|
||||
|
||||
static int lima_pdev_probe(struct platform_device *pdev)
|
||||
|
@ -1869,20 +1869,14 @@ static int zynqmp_dp_test_setup(struct zynqmp_dp *dp)
|
||||
static ssize_t zynqmp_dp_pattern_read(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct zynqmp_dp *dp = file->private_data;
|
||||
char buf[16];
|
||||
ssize_t ret;
|
||||
|
||||
ret = debugfs_file_get(dentry);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
scoped_guard(mutex, &dp->lock)
|
||||
ret = snprintf(buf, sizeof(buf), "%s\n",
|
||||
test_pattern_str[dp->test.pattern]);
|
||||
|
||||
debugfs_file_put(dentry);
|
||||
return simple_read_from_buffer(user_buf, count, ppos, buf, ret);
|
||||
}
|
||||
|
||||
@ -1890,27 +1884,20 @@ static ssize_t zynqmp_dp_pattern_write(struct file *file,
|
||||
const char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct zynqmp_dp *dp = file->private_data;
|
||||
char buf[16];
|
||||
ssize_t ret;
|
||||
int pattern;
|
||||
|
||||
ret = debugfs_file_get(dentry);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf,
|
||||
count);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
return ret;
|
||||
buf[ret] = '\0';
|
||||
|
||||
pattern = sysfs_match_string(test_pattern_str, buf);
|
||||
if (pattern < 0) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (pattern < 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&dp->lock);
|
||||
dp->test.pattern = pattern;
|
||||
@ -1919,8 +1906,6 @@ static ssize_t zynqmp_dp_pattern_write(struct file *file,
|
||||
dp->test.custom) ?: ret;
|
||||
mutex_unlock(&dp->lock);
|
||||
|
||||
out:
|
||||
debugfs_file_put(dentry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2026,20 +2011,13 @@ DEFINE_DEBUGFS_ATTRIBUTE(fops_zynqmp_dp_active, zynqmp_dp_active_get,
|
||||
static ssize_t zynqmp_dp_custom_read(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct zynqmp_dp *dp = file->private_data;
|
||||
ssize_t ret;
|
||||
|
||||
ret = debugfs_file_get(dentry);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
mutex_lock(&dp->lock);
|
||||
ret = simple_read_from_buffer(user_buf, count, ppos, &dp->test.custom,
|
||||
sizeof(dp->test.custom));
|
||||
mutex_unlock(&dp->lock);
|
||||
|
||||
debugfs_file_put(dentry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2047,18 +2025,13 @@ static ssize_t zynqmp_dp_custom_write(struct file *file,
|
||||
const char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct zynqmp_dp *dp = file->private_data;
|
||||
ssize_t ret;
|
||||
char buf[sizeof(dp->test.custom)];
|
||||
|
||||
ret = debugfs_file_get(dentry);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
ret = simple_write_to_buffer(buf, sizeof(buf), ppos, user_buf, count);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
return ret;
|
||||
|
||||
mutex_lock(&dp->lock);
|
||||
memcpy(dp->test.custom, buf, ret);
|
||||
@ -2066,9 +2039,6 @@ static ssize_t zynqmp_dp_custom_write(struct file *file,
|
||||
ret = zynqmp_dp_set_test_pattern(dp, dp->test.pattern,
|
||||
dp->test.custom) ?: ret;
|
||||
mutex_unlock(&dp->lock);
|
||||
|
||||
out:
|
||||
debugfs_file_put(dentry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
use kernel::{auxiliary, bindings, c_str, device::Core, pci, prelude::*};
|
||||
use kernel::{auxiliary, bindings, c_str, device::Core, pci, prelude::*, sync::Arc};
|
||||
|
||||
use crate::gpu::Gpu;
|
||||
|
||||
@ -34,7 +34,10 @@ impl pci::Driver for NovaCore {
|
||||
pdev.enable_device_mem()?;
|
||||
pdev.set_master();
|
||||
|
||||
let bar = pdev.iomap_region_sized::<BAR0_SIZE>(0, c_str!("nova-core/bar0"))?;
|
||||
let bar = Arc::pin_init(
|
||||
pdev.iomap_region_sized::<BAR0_SIZE>(0, c_str!("nova-core/bar0")),
|
||||
GFP_KERNEL,
|
||||
)?;
|
||||
|
||||
let this = KBox::pin_init(
|
||||
try_pin_init!(Self {
|
||||
|
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
use kernel::{device, devres::Devres, error::code::*, pci, prelude::*};
|
||||
use kernel::{device, devres::Devres, error::code::*, pci, prelude::*, sync::Arc};
|
||||
|
||||
use crate::driver::Bar0;
|
||||
use crate::firmware::{Firmware, FIRMWARE_VERSION};
|
||||
@ -161,14 +161,14 @@ impl Spec {
|
||||
pub(crate) struct Gpu {
|
||||
spec: Spec,
|
||||
/// MMIO mapping of PCI BAR 0
|
||||
bar: Devres<Bar0>,
|
||||
bar: Arc<Devres<Bar0>>,
|
||||
fw: Firmware,
|
||||
}
|
||||
|
||||
impl Gpu {
|
||||
pub(crate) fn new(
|
||||
pdev: &pci::Device<device::Bound>,
|
||||
devres_bar: Devres<Bar0>,
|
||||
devres_bar: Arc<Devres<Bar0>>,
|
||||
) -> Result<impl PinInit<Self>> {
|
||||
let bar = devres_bar.access(pdev.as_ref())?;
|
||||
let spec = Spec::new(bar)?;
|
||||
|
@ -2824,7 +2824,7 @@ static const struct bin_attribute *hid_dev_bin_attrs[] = {
|
||||
};
|
||||
static const struct attribute_group hid_dev_group = {
|
||||
.attrs = hid_dev_attrs,
|
||||
.bin_attrs_new = hid_dev_bin_attrs,
|
||||
.bin_attrs = hid_dev_bin_attrs,
|
||||
};
|
||||
__ATTRIBUTE_GROUPS(hid_dev);
|
||||
|
||||
|
@ -258,7 +258,7 @@ static const struct bin_attribute *const arvo_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group arvo_group = {
|
||||
.attrs = arvo_attrs,
|
||||
.bin_attrs_new = arvo_bin_attributes,
|
||||
.bin_attrs = arvo_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *arvo_groups[] = {
|
||||
|
@ -71,8 +71,8 @@ ROCCAT_COMMON2_SYSFS_RW(thingy, COMMAND, SIZE); \
|
||||
static const struct bin_attribute bin_attr_ ## thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = SIZE, \
|
||||
.read_new = roccat_common2_sysfs_read_ ## thingy, \
|
||||
.write_new = roccat_common2_sysfs_write_ ## thingy \
|
||||
.read = roccat_common2_sysfs_read_ ## thingy, \
|
||||
.write = roccat_common2_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_R(thingy, COMMAND, SIZE) \
|
||||
@ -80,7 +80,7 @@ ROCCAT_COMMON2_SYSFS_R(thingy, COMMAND, SIZE); \
|
||||
static const struct bin_attribute bin_attr_ ## thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size = SIZE, \
|
||||
.read_new = roccat_common2_sysfs_read_ ## thingy, \
|
||||
.read = roccat_common2_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define ROCCAT_COMMON2_BIN_ATTRIBUTE_W(thingy, COMMAND, SIZE) \
|
||||
@ -88,7 +88,7 @@ ROCCAT_COMMON2_SYSFS_W(thingy, COMMAND, SIZE); \
|
||||
static const struct bin_attribute bin_attr_ ## thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = SIZE, \
|
||||
.write_new = roccat_common2_sysfs_write_ ## thingy \
|
||||
.write = roccat_common2_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -181,8 +181,8 @@ ISKU_SYSFS_RW(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = ISKU_SIZE_ ## THINGY, \
|
||||
.read_new = isku_sysfs_read_ ## thingy, \
|
||||
.write_new = isku_sysfs_write_ ## thingy \
|
||||
.read = isku_sysfs_read_ ## thingy, \
|
||||
.write = isku_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define ISKU_BIN_ATTR_R(thingy, THINGY) \
|
||||
@ -190,7 +190,7 @@ ISKU_SYSFS_R(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size = ISKU_SIZE_ ## THINGY, \
|
||||
.read_new = isku_sysfs_read_ ## thingy, \
|
||||
.read = isku_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define ISKU_BIN_ATTR_W(thingy, THINGY) \
|
||||
@ -198,7 +198,7 @@ ISKU_SYSFS_W(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = ISKU_SIZE_ ## THINGY, \
|
||||
.write_new = isku_sysfs_write_ ## thingy \
|
||||
.write = isku_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
ISKU_BIN_ATTR_RW(macro, MACRO);
|
||||
@ -238,7 +238,7 @@ static const struct bin_attribute *const isku_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group isku_group = {
|
||||
.attrs = isku_attrs,
|
||||
.bin_attrs_new = isku_bin_attributes,
|
||||
.bin_attrs = isku_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *isku_groups[] = {
|
||||
|
@ -385,8 +385,8 @@ static ssize_t kone_sysfs_write_profilex(struct file *fp,
|
||||
static const struct bin_attribute bin_attr_profile##number = { \
|
||||
.attr = { .name = "profile" #number, .mode = 0660 }, \
|
||||
.size = sizeof(struct kone_profile), \
|
||||
.read_new = kone_sysfs_read_profilex, \
|
||||
.write_new = kone_sysfs_write_profilex, \
|
||||
.read = kone_sysfs_read_profilex, \
|
||||
.write = kone_sysfs_write_profilex, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}
|
||||
PROFILE_ATTR(1);
|
||||
@ -646,7 +646,7 @@ static const struct bin_attribute *const kone_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group kone_group = {
|
||||
.attrs = kone_attrs,
|
||||
.bin_attrs_new = kone_bin_attributes,
|
||||
.bin_attrs = kone_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *kone_groups[] = {
|
||||
|
@ -153,8 +153,8 @@ KONEPLUS_SYSFS_RW(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = KONEPLUS_SIZE_ ## THINGY, \
|
||||
.read_new = koneplus_sysfs_read_ ## thingy, \
|
||||
.write_new = koneplus_sysfs_write_ ## thingy \
|
||||
.read = koneplus_sysfs_read_ ## thingy, \
|
||||
.write = koneplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define KONEPLUS_BIN_ATTRIBUTE_R(thingy, THINGY) \
|
||||
@ -162,7 +162,7 @@ KONEPLUS_SYSFS_R(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size = KONEPLUS_SIZE_ ## THINGY, \
|
||||
.read_new = koneplus_sysfs_read_ ## thingy, \
|
||||
.read = koneplus_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define KONEPLUS_BIN_ATTRIBUTE_W(thingy, THINGY) \
|
||||
@ -170,7 +170,7 @@ KONEPLUS_SYSFS_W(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = KONEPLUS_SIZE_ ## THINGY, \
|
||||
.write_new = koneplus_sysfs_write_ ## thingy \
|
||||
.write = koneplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
KONEPLUS_BIN_ATTRIBUTE_W(control, CONTROL);
|
||||
KONEPLUS_BIN_ATTRIBUTE_W(talk, TALK);
|
||||
@ -222,13 +222,13 @@ static ssize_t koneplus_sysfs_read_profilex_buttons(struct file *fp,
|
||||
static const struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
.attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
|
||||
.size = KONEPLUS_SIZE_PROFILE_SETTINGS, \
|
||||
.read_new = koneplus_sysfs_read_profilex_settings, \
|
||||
.read = koneplus_sysfs_read_profilex_settings, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}; \
|
||||
static const struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
.attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
|
||||
.size = KONEPLUS_SIZE_PROFILE_BUTTONS, \
|
||||
.read_new = koneplus_sysfs_read_profilex_buttons, \
|
||||
.read = koneplus_sysfs_read_profilex_buttons, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
};
|
||||
PROFILE_ATTR(1);
|
||||
@ -346,7 +346,7 @@ static const struct bin_attribute *const koneplus_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group koneplus_group = {
|
||||
.attrs = koneplus_attrs,
|
||||
.bin_attrs_new = koneplus_bin_attributes,
|
||||
.bin_attrs = koneplus_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *koneplus_groups[] = {
|
||||
|
@ -62,7 +62,7 @@ static const struct bin_attribute *const konepure_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group konepure_group = {
|
||||
.bin_attrs_new = konepure_bin_attrs,
|
||||
.bin_attrs = konepure_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *konepure_groups[] = {
|
||||
|
@ -196,8 +196,8 @@ KOVAPLUS_SYSFS_RW(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = KOVAPLUS_SIZE_ ## THINGY, \
|
||||
.read_new = kovaplus_sysfs_read_ ## thingy, \
|
||||
.write_new = kovaplus_sysfs_write_ ## thingy \
|
||||
.read = kovaplus_sysfs_read_ ## thingy, \
|
||||
.write = kovaplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define KOVAPLUS_BIN_ATTRIBUTE_W(thingy, THINGY) \
|
||||
@ -205,7 +205,7 @@ KOVAPLUS_SYSFS_W(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = KOVAPLUS_SIZE_ ## THINGY, \
|
||||
.write_new = kovaplus_sysfs_write_ ## thingy \
|
||||
.write = kovaplus_sysfs_write_ ## thingy \
|
||||
}
|
||||
KOVAPLUS_BIN_ATTRIBUTE_W(control, CONTROL);
|
||||
KOVAPLUS_BIN_ATTRIBUTE_RW(info, INFO);
|
||||
@ -252,13 +252,13 @@ static ssize_t kovaplus_sysfs_read_profilex_buttons(struct file *fp,
|
||||
static const struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
.attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
|
||||
.size = KOVAPLUS_SIZE_PROFILE_SETTINGS, \
|
||||
.read_new = kovaplus_sysfs_read_profilex_settings, \
|
||||
.read = kovaplus_sysfs_read_profilex_settings, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}; \
|
||||
static const struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
.attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
|
||||
.size = KOVAPLUS_SIZE_PROFILE_BUTTONS, \
|
||||
.read_new = kovaplus_sysfs_read_profilex_buttons, \
|
||||
.read = kovaplus_sysfs_read_profilex_buttons, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
};
|
||||
PROFILE_ATTR(1);
|
||||
@ -399,7 +399,7 @@ static const struct bin_attribute *const kovaplus_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group kovaplus_group = {
|
||||
.attrs = kovaplus_attrs,
|
||||
.bin_attrs_new = kovaplus_bin_attributes,
|
||||
.bin_attrs = kovaplus_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *kovaplus_groups[] = {
|
||||
|
@ -88,8 +88,8 @@ LUA_SYSFS_R(thingy, THINGY) \
|
||||
static const struct bin_attribute lua_ ## thingy ## _attr = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = LUA_SIZE_ ## THINGY, \
|
||||
.read_new = lua_sysfs_read_ ## thingy, \
|
||||
.write_new = lua_sysfs_write_ ## thingy \
|
||||
.read = lua_sysfs_read_ ## thingy, \
|
||||
.write = lua_sysfs_write_ ## thingy \
|
||||
};
|
||||
|
||||
LUA_BIN_ATTRIBUTE_RW(control, CONTROL)
|
||||
|
@ -154,8 +154,8 @@ PYRA_SYSFS_RW(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0660 }, \
|
||||
.size = PYRA_SIZE_ ## THINGY, \
|
||||
.read_new = pyra_sysfs_read_ ## thingy, \
|
||||
.write_new = pyra_sysfs_write_ ## thingy \
|
||||
.read = pyra_sysfs_read_ ## thingy, \
|
||||
.write = pyra_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
#define PYRA_BIN_ATTRIBUTE_R(thingy, THINGY) \
|
||||
@ -163,7 +163,7 @@ PYRA_SYSFS_R(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0440 }, \
|
||||
.size_new = PYRA_SIZE_ ## THINGY, \
|
||||
.read_new = pyra_sysfs_read_ ## thingy, \
|
||||
.read = pyra_sysfs_read_ ## thingy, \
|
||||
}
|
||||
|
||||
#define PYRA_BIN_ATTRIBUTE_W(thingy, THINGY) \
|
||||
@ -171,7 +171,7 @@ PYRA_SYSFS_W(thingy, THINGY); \
|
||||
static const struct bin_attribute bin_attr_##thingy = { \
|
||||
.attr = { .name = #thingy, .mode = 0220 }, \
|
||||
.size = PYRA_SIZE_ ## THINGY, \
|
||||
.write_new = pyra_sysfs_write_ ## thingy \
|
||||
.write = pyra_sysfs_write_ ## thingy \
|
||||
}
|
||||
|
||||
PYRA_BIN_ATTRIBUTE_W(control, CONTROL);
|
||||
@ -219,13 +219,13 @@ static ssize_t pyra_sysfs_read_profilex_buttons(struct file *fp,
|
||||
static const struct bin_attribute bin_attr_profile##number##_settings = { \
|
||||
.attr = { .name = "profile" #number "_settings", .mode = 0440 }, \
|
||||
.size = PYRA_SIZE_PROFILE_SETTINGS, \
|
||||
.read_new = pyra_sysfs_read_profilex_settings, \
|
||||
.read = pyra_sysfs_read_profilex_settings, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
}; \
|
||||
static const struct bin_attribute bin_attr_profile##number##_buttons = { \
|
||||
.attr = { .name = "profile" #number "_buttons", .mode = 0440 }, \
|
||||
.size = PYRA_SIZE_PROFILE_BUTTONS, \
|
||||
.read_new = pyra_sysfs_read_profilex_buttons, \
|
||||
.read = pyra_sysfs_read_profilex_buttons, \
|
||||
.private = &profile_numbers[number-1], \
|
||||
};
|
||||
PROFILE_ATTR(1);
|
||||
@ -355,7 +355,7 @@ static const struct bin_attribute *const pyra_bin_attributes[] = {
|
||||
|
||||
static const struct attribute_group pyra_group = {
|
||||
.attrs = pyra_attrs,
|
||||
.bin_attrs_new = pyra_bin_attributes,
|
||||
.bin_attrs = pyra_bin_attributes,
|
||||
};
|
||||
|
||||
static const struct attribute_group *pyra_groups[] = {
|
||||
|
@ -70,7 +70,7 @@ static const struct bin_attribute *const ryos_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group ryos_group = {
|
||||
.bin_attrs_new = ryos_bin_attrs,
|
||||
.bin_attrs = ryos_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *ryos_groups[] = {
|
||||
|
@ -42,7 +42,7 @@ static const struct bin_attribute *const savu_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group savu_group = {
|
||||
.bin_attrs_new = savu_bin_attrs,
|
||||
.bin_attrs = savu_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *savu_groups[] = {
|
||||
|
@ -165,8 +165,8 @@ static int i2c_slave_eeprom_probe(struct i2c_client *client)
|
||||
sysfs_bin_attr_init(&eeprom->bin);
|
||||
eeprom->bin.attr.name = "slave-eeprom";
|
||||
eeprom->bin.attr.mode = S_IRUSR | S_IWUSR;
|
||||
eeprom->bin.read_new = i2c_slave_eeprom_bin_read;
|
||||
eeprom->bin.write_new = i2c_slave_eeprom_bin_write;
|
||||
eeprom->bin.read = i2c_slave_eeprom_bin_read;
|
||||
eeprom->bin.write = i2c_slave_eeprom_bin_write;
|
||||
eeprom->bin.size = size;
|
||||
|
||||
ret = sysfs_create_bin_file(&client->dev.kobj, &eeprom->bin);
|
||||
|
@ -1365,7 +1365,7 @@ static const struct bin_attribute *const bno055_bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group bno055_attrs_group = {
|
||||
.attrs = bno055_attrs,
|
||||
.bin_attrs_new = bno055_bin_attrs,
|
||||
.bin_attrs = bno055_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct iio_info bno055_info = {
|
||||
|
@ -22,34 +22,6 @@
|
||||
|
||||
static struct dentry *hfi1_dbg_root;
|
||||
|
||||
/* wrappers to enforce srcu in seq file */
|
||||
ssize_t hfi1_seq_read(struct file *file, char __user *buf, size_t size,
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct dentry *d = file->f_path.dentry;
|
||||
ssize_t r;
|
||||
|
||||
r = debugfs_file_get(d);
|
||||
if (unlikely(r))
|
||||
return r;
|
||||
r = seq_read(file, buf, size, ppos);
|
||||
debugfs_file_put(d);
|
||||
return r;
|
||||
}
|
||||
|
||||
loff_t hfi1_seq_lseek(struct file *file, loff_t offset, int whence)
|
||||
{
|
||||
struct dentry *d = file->f_path.dentry;
|
||||
loff_t r;
|
||||
|
||||
r = debugfs_file_get(d);
|
||||
if (unlikely(r))
|
||||
return r;
|
||||
r = seq_lseek(file, offset, whence);
|
||||
debugfs_file_put(d);
|
||||
return r;
|
||||
}
|
||||
|
||||
#define private2dd(file) (file_inode(file)->i_private)
|
||||
#define private2ppd(file) (file_inode(file)->i_private)
|
||||
|
||||
|
@ -33,16 +33,11 @@ static int _##name##_open(struct inode *inode, struct file *s) \
|
||||
static const struct file_operations _##name##_file_ops = { \
|
||||
.owner = THIS_MODULE, \
|
||||
.open = _##name##_open, \
|
||||
.read = hfi1_seq_read, \
|
||||
.llseek = hfi1_seq_lseek, \
|
||||
.read = seq_read, \
|
||||
.llseek = seq_lseek, \
|
||||
.release = seq_release \
|
||||
}
|
||||
|
||||
|
||||
ssize_t hfi1_seq_read(struct file *file, char __user *buf, size_t size,
|
||||
loff_t *ppos);
|
||||
loff_t hfi1_seq_lseek(struct file *file, loff_t offset, int whence);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void hfi1_dbg_ibdev_init(struct hfi1_ibdev *ibd);
|
||||
void hfi1_dbg_ibdev_exit(struct hfi1_ibdev *ibd);
|
||||
|
@ -104,9 +104,6 @@ static ssize_t fault_opcodes_write(struct file *file, const char __user *buf,
|
||||
goto free_data;
|
||||
}
|
||||
|
||||
ret = debugfs_file_get(file->f_path.dentry);
|
||||
if (unlikely(ret))
|
||||
goto free_data;
|
||||
ptr = data;
|
||||
token = ptr;
|
||||
for (ptr = data; *ptr; ptr = end + 1, token = ptr) {
|
||||
@ -154,7 +151,6 @@ static ssize_t fault_opcodes_write(struct file *file, const char __user *buf,
|
||||
}
|
||||
ret = len;
|
||||
|
||||
debugfs_file_put(file->f_path.dentry);
|
||||
free_data:
|
||||
kfree(data);
|
||||
return ret;
|
||||
@ -173,9 +169,6 @@ static ssize_t fault_opcodes_read(struct file *file, char __user *buf,
|
||||
data = kcalloc(datalen, sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
ret = debugfs_file_get(file->f_path.dentry);
|
||||
if (unlikely(ret))
|
||||
goto free_data;
|
||||
bit = find_first_bit(fault->opcodes, bitsize);
|
||||
while (bit < bitsize) {
|
||||
zero = find_next_zero_bit(fault->opcodes, bitsize, bit);
|
||||
@ -189,11 +182,9 @@ static ssize_t fault_opcodes_read(struct file *file, char __user *buf,
|
||||
bit);
|
||||
bit = find_next_bit(fault->opcodes, bitsize, zero);
|
||||
}
|
||||
debugfs_file_put(file->f_path.dentry);
|
||||
data[size - 1] = '\n';
|
||||
data[size] = '\0';
|
||||
ret = simple_read_from_buffer(buf, len, pos, data, size);
|
||||
free_data:
|
||||
kfree(data);
|
||||
return ret;
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ static struct attribute *port_cc_attributes[] = {
|
||||
static const struct attribute_group port_cc_group = {
|
||||
.name = "CCMgtA",
|
||||
.attrs = port_cc_attributes,
|
||||
.bin_attrs_new = port_cc_bin_attributes,
|
||||
.bin_attrs = port_cc_bin_attributes,
|
||||
};
|
||||
|
||||
/* Start sc2vl */
|
||||
|
@ -295,7 +295,7 @@ static umode_t qib_ccmgta_is_bin_visible(struct kobject *kobj,
|
||||
static const struct attribute_group port_ccmgta_attribute_group = {
|
||||
.name = "CCMgtA",
|
||||
.is_bin_visible = qib_ccmgta_is_bin_visible,
|
||||
.bin_attrs_new = port_ccmgta_attributes,
|
||||
.bin_attrs = port_ccmgta_attributes,
|
||||
};
|
||||
|
||||
/* Start sl2vl */
|
||||
|
@ -707,7 +707,7 @@ static const struct bin_attribute *const goodix_berlin_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group goodix_berlin_attr_group = {
|
||||
.bin_attrs_new = goodix_berlin_bin_attrs,
|
||||
.bin_attrs = goodix_berlin_bin_attrs,
|
||||
};
|
||||
|
||||
const struct attribute_group *goodix_berlin_groups[] = {
|
||||
|
@ -91,7 +91,7 @@ static const struct bin_attribute *const led_trigger_bin_attrs[] = {
|
||||
NULL,
|
||||
};
|
||||
static const struct attribute_group led_trigger_group = {
|
||||
.bin_attrs_new = led_trigger_bin_attrs,
|
||||
.bin_attrs = led_trigger_bin_attrs,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -432,7 +432,7 @@ static int solo_sysfs_init(struct solo_dev *solo_dev)
|
||||
sysfs_attr_init(&sdram_attr->attr);
|
||||
sdram_attr->attr.name = "sdram";
|
||||
sdram_attr->attr.mode = 0440;
|
||||
sdram_attr->read_new = sdram_show;
|
||||
sdram_attr->read = sdram_show;
|
||||
sdram_attr->size = solo_dev->sdram_size;
|
||||
|
||||
if (device_create_bin_file(dev, sdram_attr)) {
|
||||
|
@ -888,7 +888,7 @@ static size_t c2port_bin_attr_size(struct kobject *kobj,
|
||||
|
||||
static const struct attribute_group c2port_group = {
|
||||
.attrs = c2port_attrs,
|
||||
.bin_attrs_new = c2port_bin_attrs,
|
||||
.bin_attrs = c2port_bin_attrs,
|
||||
.bin_size = c2port_bin_attr_size,
|
||||
};
|
||||
|
||||
|
@ -194,8 +194,8 @@ static const struct bin_attribute ds1682_eeprom_attr = {
|
||||
.mode = S_IRUGO | S_IWUSR,
|
||||
},
|
||||
.size = DS1682_EEPROM_SIZE,
|
||||
.read_new = ds1682_eeprom_read,
|
||||
.write_new = ds1682_eeprom_write,
|
||||
.read = ds1682_eeprom_read,
|
||||
.write = ds1682_eeprom_write,
|
||||
};
|
||||
|
||||
static int ds1682_nvmem_read(void *priv, unsigned int offset, void *val,
|
||||
|
@ -127,7 +127,7 @@ static const struct bin_attribute user_eeprom_attr = {
|
||||
.mode = S_IRUGO,
|
||||
},
|
||||
.size = USER_EEPROM_SIZE,
|
||||
.read_new = max6875_read,
|
||||
.read = max6875_read,
|
||||
};
|
||||
|
||||
static int max6875_probe(struct i2c_client *client)
|
||||
|
@ -155,7 +155,7 @@ int ocxl_sysfs_register_afu(struct ocxl_file_info *info)
|
||||
info->attr_global_mmio.attr.name = "global_mmio_area";
|
||||
info->attr_global_mmio.attr.mode = 0600;
|
||||
info->attr_global_mmio.size = info->afu->config.global_mmio_size;
|
||||
info->attr_global_mmio.read_new = global_mmio_read;
|
||||
info->attr_global_mmio.read = global_mmio_read;
|
||||
info->attr_global_mmio.mmap = global_mmio_mmap;
|
||||
rc = device_create_bin_file(&info->dev, &info->attr_global_mmio);
|
||||
if (rc) {
|
||||
|
@ -655,8 +655,8 @@ static const struct bin_attribute pch_bin_attr = {
|
||||
.mode = S_IRUGO | S_IWUSR,
|
||||
},
|
||||
.size = PCH_PHUB_OROM_SIZE + 1,
|
||||
.read_new = pch_phub_bin_read,
|
||||
.write_new = pch_phub_bin_write,
|
||||
.read = pch_phub_bin_read,
|
||||
.write = pch_phub_bin_write,
|
||||
};
|
||||
|
||||
static int pch_phub_probe(struct pci_dev *pdev,
|
||||
|
@ -85,8 +85,8 @@ static int sram_add_export(struct sram_dev *sram, struct sram_reserve *block,
|
||||
return -ENOMEM;
|
||||
|
||||
part->battr.attr.mode = S_IRUSR | S_IWUSR;
|
||||
part->battr.read_new = sram_read;
|
||||
part->battr.write_new = sram_write;
|
||||
part->battr.read = sram_read;
|
||||
part->battr.write = sram_write;
|
||||
part->battr.size = block->size;
|
||||
|
||||
return device_create_bin_file(sram->dev, &part->battr);
|
||||
|
@ -104,7 +104,7 @@ static const struct attribute_group spi_nor_sysfs_group = {
|
||||
.is_visible = spi_nor_sysfs_is_visible,
|
||||
.is_bin_visible = spi_nor_sysfs_is_bin_visible,
|
||||
.attrs = spi_nor_sysfs_entries,
|
||||
.bin_attrs_new = spi_nor_sysfs_bin_entries,
|
||||
.bin_attrs = spi_nor_sysfs_bin_entries,
|
||||
};
|
||||
|
||||
const struct attribute_group *spi_nor_sysfs_groups[] = {
|
||||
|
@ -77,7 +77,7 @@ DEFINE_SHOW_ATTRIBUTE(nfp_rx_q);
|
||||
static int nfp_tx_q_show(struct seq_file *file, void *data);
|
||||
DEFINE_SHOW_ATTRIBUTE(nfp_tx_q);
|
||||
|
||||
static int nfp_tx_q_show(struct seq_file *file, void *data)
|
||||
static int __nfp_tx_q_show(struct seq_file *file, void *data, bool is_xdp)
|
||||
{
|
||||
struct nfp_net_r_vector *r_vec = file->private;
|
||||
struct nfp_net_tx_ring *tx_ring;
|
||||
@ -86,10 +86,10 @@ static int nfp_tx_q_show(struct seq_file *file, void *data)
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
if (debugfs_real_fops(file->file) == &nfp_tx_q_fops)
|
||||
tx_ring = r_vec->tx_ring;
|
||||
else
|
||||
if (is_xdp)
|
||||
tx_ring = r_vec->xdp_ring;
|
||||
else
|
||||
tx_ring = r_vec->tx_ring;
|
||||
if (!r_vec->nfp_net || !tx_ring)
|
||||
goto out;
|
||||
nn = r_vec->nfp_net;
|
||||
@ -115,9 +115,14 @@ out:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nfp_tx_q_show(struct seq_file *file, void *data)
|
||||
{
|
||||
return __nfp_tx_q_show(file, data, false);
|
||||
}
|
||||
|
||||
static int nfp_xdp_q_show(struct seq_file *file, void *data)
|
||||
{
|
||||
return nfp_tx_q_show(file, data);
|
||||
return __nfp_tx_q_show(file, data, true);
|
||||
}
|
||||
DEFINE_SHOW_ATTRIBUTE(nfp_xdp_q);
|
||||
|
||||
|
@ -2946,15 +2946,15 @@ static ssize_t netxen_sysfs_write_mem(struct file *filp, struct kobject *kobj,
|
||||
static const struct bin_attribute bin_attr_crb = {
|
||||
.attr = { .name = "crb", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = netxen_sysfs_read_crb,
|
||||
.write_new = netxen_sysfs_write_crb,
|
||||
.read = netxen_sysfs_read_crb,
|
||||
.write = netxen_sysfs_write_crb,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_mem = {
|
||||
.attr = { .name = "mem", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = netxen_sysfs_read_mem,
|
||||
.write_new = netxen_sysfs_write_mem,
|
||||
.read = netxen_sysfs_read_mem,
|
||||
.write = netxen_sysfs_write_mem,
|
||||
};
|
||||
|
||||
static ssize_t
|
||||
@ -3082,7 +3082,7 @@ out:
|
||||
static const struct bin_attribute bin_attr_dimm = {
|
||||
.attr = { .name = "dimm", .mode = 0644 },
|
||||
.size = sizeof(struct netxen_dimm_cfg),
|
||||
.read_new = netxen_sysfs_read_dimm,
|
||||
.read = netxen_sysfs_read_dimm,
|
||||
};
|
||||
|
||||
|
||||
|
@ -1195,63 +1195,63 @@ static const struct device_attribute dev_attr_beacon = {
|
||||
static const struct bin_attribute bin_attr_crb = {
|
||||
.attr = { .name = "crb", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_read_crb,
|
||||
.write_new = qlcnic_sysfs_write_crb,
|
||||
.read = qlcnic_sysfs_read_crb,
|
||||
.write = qlcnic_sysfs_write_crb,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_mem = {
|
||||
.attr = { .name = "mem", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_read_mem,
|
||||
.write_new = qlcnic_sysfs_write_mem,
|
||||
.read = qlcnic_sysfs_read_mem,
|
||||
.write = qlcnic_sysfs_write_mem,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_npar_config = {
|
||||
.attr = { .name = "npar_config", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_read_npar_config,
|
||||
.write_new = qlcnic_sysfs_write_npar_config,
|
||||
.read = qlcnic_sysfs_read_npar_config,
|
||||
.write = qlcnic_sysfs_write_npar_config,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_pci_config = {
|
||||
.attr = { .name = "pci_config", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_read_pci_config,
|
||||
.read = qlcnic_sysfs_read_pci_config,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_port_stats = {
|
||||
.attr = { .name = "port_stats", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_get_port_stats,
|
||||
.write_new = qlcnic_sysfs_clear_port_stats,
|
||||
.read = qlcnic_sysfs_get_port_stats,
|
||||
.write = qlcnic_sysfs_clear_port_stats,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_esw_stats = {
|
||||
.attr = { .name = "esw_stats", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_get_esw_stats,
|
||||
.write_new = qlcnic_sysfs_clear_esw_stats,
|
||||
.read = qlcnic_sysfs_get_esw_stats,
|
||||
.write = qlcnic_sysfs_clear_esw_stats,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_esw_config = {
|
||||
.attr = { .name = "esw_config", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_read_esw_config,
|
||||
.write_new = qlcnic_sysfs_write_esw_config,
|
||||
.read = qlcnic_sysfs_read_esw_config,
|
||||
.write = qlcnic_sysfs_write_esw_config,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_pm_config = {
|
||||
.attr = { .name = "pm_config", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_sysfs_read_pm_config,
|
||||
.write_new = qlcnic_sysfs_write_pm_config,
|
||||
.read = qlcnic_sysfs_read_pm_config,
|
||||
.write = qlcnic_sysfs_write_pm_config,
|
||||
};
|
||||
|
||||
static const struct bin_attribute bin_attr_flash = {
|
||||
.attr = { .name = "flash", .mode = 0644 },
|
||||
.size = 0,
|
||||
.read_new = qlcnic_83xx_sysfs_flash_read_handler,
|
||||
.write_new = qlcnic_83xx_sysfs_flash_write_handler,
|
||||
.read = qlcnic_83xx_sysfs_flash_read_handler,
|
||||
.write = qlcnic_83xx_sysfs_flash_write_handler,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_QLCNIC_HWMON
|
||||
|
@ -401,8 +401,8 @@ static const struct bin_attribute ks8995_registers_attr = {
|
||||
.mode = 0600,
|
||||
},
|
||||
.size = KS8995_REGS_SIZE,
|
||||
.read_new = ks8995_registers_read,
|
||||
.write_new = ks8995_registers_write,
|
||||
.read = ks8995_registers_read,
|
||||
.write = ks8995_registers_write,
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
@ -121,7 +121,7 @@ static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
|
||||
|
||||
static const struct bin_attribute fwlog_attr = {
|
||||
.attr = { .name = "fwlog", .mode = 0400 },
|
||||
.read_new = wl1271_sysfs_read_fwlog,
|
||||
.read = wl1271_sysfs_read_fwlog,
|
||||
};
|
||||
|
||||
int wlcore_sysfs_init(struct wl1271 *wl)
|
||||
|
@ -376,8 +376,8 @@ static const struct bin_attribute bin_attr_rw_nvmem = {
|
||||
.name = "nvmem",
|
||||
.mode = 0644,
|
||||
},
|
||||
.read_new = bin_attr_nvmem_read,
|
||||
.write_new = bin_attr_nvmem_write,
|
||||
.read = bin_attr_nvmem_read,
|
||||
.write = bin_attr_nvmem_write,
|
||||
};
|
||||
|
||||
static const struct bin_attribute *const nvmem_bin_attributes[] = {
|
||||
@ -386,7 +386,7 @@ static const struct bin_attribute *const nvmem_bin_attributes[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group nvmem_bin_group = {
|
||||
.bin_attrs_new = nvmem_bin_attributes,
|
||||
.bin_attrs = nvmem_bin_attributes,
|
||||
.attrs = nvmem_attrs,
|
||||
.is_bin_visible = nvmem_bin_attr_is_visible,
|
||||
.bin_size = nvmem_bin_attr_size,
|
||||
@ -402,8 +402,8 @@ static const struct bin_attribute bin_attr_nvmem_eeprom_compat = {
|
||||
.attr = {
|
||||
.name = "eeprom",
|
||||
},
|
||||
.read_new = bin_attr_nvmem_read,
|
||||
.write_new = bin_attr_nvmem_write,
|
||||
.read = bin_attr_nvmem_read,
|
||||
.write = bin_attr_nvmem_write,
|
||||
};
|
||||
|
||||
/*
|
||||
@ -492,7 +492,7 @@ static int nvmem_populate_sysfs_cells(struct nvmem_device *nvmem)
|
||||
entry->bit_offset);
|
||||
attrs[i].attr.mode = 0444 & nvmem_bin_attr_get_umode(nvmem);
|
||||
attrs[i].size = entry->bytes;
|
||||
attrs[i].read_new = &nvmem_cell_attr_read;
|
||||
attrs[i].read = &nvmem_cell_attr_read;
|
||||
attrs[i].private = entry;
|
||||
if (!attrs[i].attr.name) {
|
||||
ret = -ENOMEM;
|
||||
@ -503,7 +503,7 @@ static int nvmem_populate_sysfs_cells(struct nvmem_device *nvmem)
|
||||
i++;
|
||||
}
|
||||
|
||||
group.bin_attrs_new = pattrs;
|
||||
group.bin_attrs = pattrs;
|
||||
|
||||
ret = device_add_group(&nvmem->dev, &group);
|
||||
if (ret)
|
||||
|
@ -77,7 +77,7 @@ int __of_add_property_sysfs(struct device_node *np, struct property *pp)
|
||||
pp->attr.attr.name = safe_name(&np->kobj, pp->name);
|
||||
pp->attr.attr.mode = secure ? 0400 : 0444;
|
||||
pp->attr.size = secure ? 0 : pp->length;
|
||||
pp->attr.read_new = of_node_property_read;
|
||||
pp->attr.read = of_node_property_read;
|
||||
|
||||
rc = sysfs_create_bin_file(&np->kobj, &pp->attr);
|
||||
WARN(rc, "error adding attribute %s to node %pOF\n", pp->name, np);
|
||||
|
@ -37,6 +37,16 @@
|
||||
test-device@2 {
|
||||
compatible = "test,rust-device";
|
||||
reg = <0x2>;
|
||||
|
||||
test,u32-prop = <0xdeadbeef>;
|
||||
test,i16-array = /bits/ 16 <1 2 (-3) (-4)>;
|
||||
|
||||
ref_child_0: child-0 {
|
||||
test,ref-arg = <&ref_child_1 0x20 0x32>;
|
||||
};
|
||||
ref_child_1: child-1 {
|
||||
test,ref-arg = <&ref_child_0 0x10 0x64>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1856,6 +1856,8 @@ static void __init of_unittest_platform_populate(void)
|
||||
of_platform_populate(np, match, NULL, &test_bus->dev);
|
||||
for_each_child_of_node(np, child) {
|
||||
for_each_child_of_node(child, grandchild) {
|
||||
if (!of_property_present(grandchild, "compatible"))
|
||||
continue;
|
||||
pdev = of_find_device_by_node(grandchild);
|
||||
unittest(pdev,
|
||||
"Could not create device for node '%pOFn'\n",
|
||||
|
@ -98,7 +98,7 @@ static struct bin_attribute ibm_apci_table_attr __ro_after_init = {
|
||||
.name = "apci_table",
|
||||
.mode = S_IRUGO,
|
||||
},
|
||||
.read_new = ibm_read_apci_table,
|
||||
.read = ibm_read_apci_table,
|
||||
.write = NULL,
|
||||
};
|
||||
static struct acpiphp_attention_info ibm_attention_info =
|
||||
|
@ -196,7 +196,7 @@ static const struct bin_attribute *const p2pmem_bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group p2pmem_group = {
|
||||
.attrs = p2pmem_attrs,
|
||||
.bin_attrs_new = p2pmem_bin_attrs,
|
||||
.bin_attrs = p2pmem_bin_attrs,
|
||||
.name = "p2pmem",
|
||||
};
|
||||
|
||||
|
@ -857,7 +857,7 @@ static size_t pci_dev_config_attr_bin_size(struct kobject *kobj,
|
||||
}
|
||||
|
||||
static const struct attribute_group pci_dev_config_attr_group = {
|
||||
.bin_attrs_new = pci_dev_config_attrs,
|
||||
.bin_attrs = pci_dev_config_attrs,
|
||||
.bin_size = pci_dev_config_attr_bin_size,
|
||||
};
|
||||
|
||||
@ -1004,8 +1004,8 @@ void pci_create_legacy_files(struct pci_bus *b)
|
||||
b->legacy_io->attr.name = "legacy_io";
|
||||
b->legacy_io->size = 0xffff;
|
||||
b->legacy_io->attr.mode = 0600;
|
||||
b->legacy_io->read_new = pci_read_legacy_io;
|
||||
b->legacy_io->write_new = pci_write_legacy_io;
|
||||
b->legacy_io->read = pci_read_legacy_io;
|
||||
b->legacy_io->write = pci_write_legacy_io;
|
||||
/* See pci_create_attr() for motivation */
|
||||
b->legacy_io->llseek = pci_llseek_resource;
|
||||
b->legacy_io->mmap = pci_mmap_legacy_io;
|
||||
@ -1211,8 +1211,8 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
|
||||
} else {
|
||||
sprintf(res_attr_name, "resource%d", num);
|
||||
if (pci_resource_flags(pdev, num) & IORESOURCE_IO) {
|
||||
res_attr->read_new = pci_read_resource_io;
|
||||
res_attr->write_new = pci_write_resource_io;
|
||||
res_attr->read = pci_read_resource_io;
|
||||
res_attr->write = pci_write_resource_io;
|
||||
if (arch_can_pci_mmap_io())
|
||||
res_attr->mmap = pci_mmap_resource_uc;
|
||||
} else {
|
||||
@ -1377,7 +1377,7 @@ static size_t pci_dev_rom_attr_bin_size(struct kobject *kobj,
|
||||
}
|
||||
|
||||
static const struct attribute_group pci_dev_rom_attr_group = {
|
||||
.bin_attrs_new = pci_dev_rom_attrs,
|
||||
.bin_attrs = pci_dev_rom_attrs,
|
||||
.is_bin_visible = pci_dev_rom_attr_is_visible,
|
||||
.bin_size = pci_dev_rom_attr_bin_size,
|
||||
};
|
||||
|
@ -336,7 +336,7 @@ static umode_t vpd_attr_is_visible(struct kobject *kobj,
|
||||
}
|
||||
|
||||
const struct attribute_group pci_dev_vpd_attr_group = {
|
||||
.bin_attrs_new = vpd_attrs,
|
||||
.bin_attrs = vpd_attrs,
|
||||
.is_bin_visible = vpd_attr_is_visible,
|
||||
};
|
||||
|
||||
|
@ -1605,6 +1605,6 @@ static ssize_t pccard_store_cis(struct file *filp, struct kobject *kobj,
|
||||
const struct bin_attribute pccard_cis_attr = {
|
||||
.attr = { .name = "cis", .mode = S_IRUGO | S_IWUSR },
|
||||
.size = 0x200,
|
||||
.read_new = pccard_show_cis,
|
||||
.write_new = pccard_store_cis,
|
||||
.read = pccard_show_cis,
|
||||
.write = pccard_store_cis,
|
||||
};
|
||||
|
@ -108,7 +108,7 @@ static const struct bin_attribute *const cros_ec_vbc_bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group cros_ec_vbc_attr_group = {
|
||||
.name = "vbc",
|
||||
.bin_attrs_new = cros_ec_vbc_bin_attrs,
|
||||
.bin_attrs = cros_ec_vbc_bin_attrs,
|
||||
};
|
||||
|
||||
static int cros_ec_vbc_probe(struct platform_device *pd)
|
||||
|
@ -993,7 +993,7 @@ static ssize_t mlxbf_bootctl_bootfifo_read(struct file *filp,
|
||||
|
||||
static const struct bin_attribute mlxbf_bootctl_bootfifo_sysfs_attr = {
|
||||
.attr = { .name = "bootfifo", .mode = 0400 },
|
||||
.read_new = mlxbf_bootctl_bootfifo_read,
|
||||
.read = mlxbf_bootctl_bootfifo_read,
|
||||
};
|
||||
|
||||
static bool mlxbf_bootctl_guid_match(const guid_t *guid,
|
||||
|
@ -509,7 +509,7 @@ static int init_acpi(struct device *dev)
|
||||
|
||||
static const struct bin_attribute hsmp_metric_tbl_attr = {
|
||||
.attr = { .name = HSMP_METRICS_TABLE_NAME, .mode = 0444},
|
||||
.read_new = hsmp_metric_tbl_acpi_read,
|
||||
.read = hsmp_metric_tbl_acpi_read,
|
||||
.size = sizeof(struct hsmp_metric_table),
|
||||
};
|
||||
|
||||
@ -560,7 +560,7 @@ static struct attribute *hsmp_dev_attr_list[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group hsmp_attr_grp = {
|
||||
.bin_attrs_new = hsmp_attr_list,
|
||||
.bin_attrs = hsmp_attr_list,
|
||||
.attrs = hsmp_dev_attr_list,
|
||||
.is_bin_visible = hsmp_is_sock_attr_visible,
|
||||
.is_visible = hsmp_is_sock_dev_attr_visible,
|
||||
|
@ -93,7 +93,7 @@ static_assert(MAX_AMD_NUM_NODES == 8);
|
||||
static const struct bin_attribute attr##index = { \
|
||||
.attr = { .name = HSMP_METRICS_TABLE_NAME, .mode = 0444}, \
|
||||
.private = (void *)index, \
|
||||
.read_new = hsmp_metric_tbl_plat_read, \
|
||||
.read = hsmp_metric_tbl_plat_read, \
|
||||
.size = sizeof(struct hsmp_metric_table), \
|
||||
}; \
|
||||
static const struct bin_attribute _list[] = { \
|
||||
@ -112,7 +112,7 @@ HSMP_BIN_ATTR(7, *sock7_attr_list);
|
||||
|
||||
#define HSMP_BIN_ATTR_GRP(index, _list, _name) \
|
||||
static const struct attribute_group sock##index##_attr_grp = { \
|
||||
.bin_attrs_new = _list, \
|
||||
.bin_attrs = _list, \
|
||||
.is_bin_visible = hsmp_is_sock_attr_visible, \
|
||||
.name = #_name, \
|
||||
}
|
||||
|
@ -662,7 +662,7 @@ static struct attribute *dcdbas_dev_attrs[] = {
|
||||
|
||||
static const struct attribute_group dcdbas_attr_group = {
|
||||
.attrs = dcdbas_dev_attrs,
|
||||
.bin_attrs_new = dcdbas_bin_attrs,
|
||||
.bin_attrs = dcdbas_bin_attrs,
|
||||
};
|
||||
|
||||
static int dcdbas_probe(struct platform_device *dev)
|
||||
|
@ -636,7 +636,7 @@ static const struct bin_attribute *const rbu_bin_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group rbu_group = {
|
||||
.bin_attrs_new = rbu_bin_attrs,
|
||||
.bin_attrs = rbu_bin_attrs,
|
||||
};
|
||||
|
||||
static int __init dcdrbu_init(void)
|
||||
|
@ -340,7 +340,7 @@ static int intel_pmt_dev_register(struct intel_pmt_entry *entry,
|
||||
entry->pmt_bin_attr.attr.name = ns->name;
|
||||
entry->pmt_bin_attr.attr.mode = 0440;
|
||||
entry->pmt_bin_attr.mmap = intel_pmt_mmap;
|
||||
entry->pmt_bin_attr.read_new = intel_pmt_read;
|
||||
entry->pmt_bin_attr.read = intel_pmt_read;
|
||||
entry->pmt_bin_attr.size = entry->size;
|
||||
|
||||
ret = sysfs_create_bin_file(&dev->kobj, &entry->pmt_bin_attr);
|
||||
|
@ -576,7 +576,7 @@ static struct attribute *sdsi_attrs[] = {
|
||||
|
||||
static const struct attribute_group sdsi_group = {
|
||||
.attrs = sdsi_attrs,
|
||||
.bin_attrs_new = sdsi_bin_attrs,
|
||||
.bin_attrs = sdsi_bin_attrs,
|
||||
.is_bin_visible = sdsi_battr_is_visible,
|
||||
};
|
||||
__ATTRIBUTE_GROUPS(sdsi);
|
||||
|
@ -46,7 +46,7 @@ static size_t bmof_bin_size(struct kobject *kobj, const struct bin_attribute *at
|
||||
|
||||
static const struct attribute_group bmof_group = {
|
||||
.bin_size = bmof_bin_size,
|
||||
.bin_attrs_new = bmof_attrs,
|
||||
.bin_attrs = bmof_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *bmof_groups[] = {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user