mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'driver-core-6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core updates from Greg KH:
"Here is a small set of driver core changes for 6.13-rc1.
Nothing major for this merge cycle, except for the two simple merge
conflicts are here just to make life interesting.
Included in here are:
- sysfs core changes and preparations for more sysfs api cleanups
that can come through all driver trees after -rc1 is out
- fw_devlink fixes based on many reports and debugging sessions
- list_for_each_reverse() removal, no one was using it!
- last-minute seq_printf() format string bug found and fixed in many
drivers all at once.
- minor bugfixes and changes full details in the shortlog"
* tag 'driver-core-6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (35 commits)
Fix a potential abuse of seq_printf() format string in drivers
cpu: Remove spurious NULL in attribute_group definition
s390/con3215: Remove spurious NULL in attribute_group definition
perf: arm-ni: Remove spurious NULL in attribute_group definition
driver core: Constify bin_attribute definitions
sysfs: attribute_group: allow registration of const bin_attribute
firmware_loader: Fix possible resource leak in fw_log_firmware_info()
drivers: core: fw_devlink: Fix excess parameter description in docstring
driver core: class: Correct WARN() message in APIs class_(for_each|find)_device()
cacheinfo: Use of_property_present() for non-boolean properties
cdx: Fix cdx_mmap_resource() after constifying attr in ->mmap()
drivers: core: fw_devlink: Make the error message a bit more useful
phy: tegra: xusb: Set fwnode for xusb port devices
drm: display: Set fwnode for aux bus devices
driver core: fw_devlink: Stop trying to optimize cycle detection logic
driver core: Constify attribute arguments of binary attributes
sysfs: bin_attribute: add const read/write callback variants
sysfs: implement all BIN_ATTR_* macros in terms of __BIN_ATTR()
sysfs: treewide: constify attribute callback of bin_attribute::llseek()
sysfs: treewide: constify attribute callback of bin_attribute::mmap()
...
This commit is contained in:
@@ -24,7 +24,6 @@ Auxiliary Device Creation
|
||||
|
||||
.. kernel-doc:: drivers/base/auxiliary.c
|
||||
:identifiers: auxiliary_device_init __auxiliary_device_add
|
||||
auxiliary_find_device
|
||||
|
||||
Auxiliary Device Memory Model and Lifespan
|
||||
------------------------------------------
|
||||
|
||||
@@ -64,7 +64,7 @@ static int __pci_mmap_fits(struct pci_dev *pdev, int num,
|
||||
* Return: %0 on success, negative error code otherwise
|
||||
*/
|
||||
static int pci_mmap_resource(struct kobject *kobj,
|
||||
struct bin_attribute *attr,
|
||||
const struct bin_attribute *attr,
|
||||
struct vm_area_struct *vma, int sparse)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));
|
||||
@@ -93,14 +93,14 @@ static int pci_mmap_resource(struct kobject *kobj,
|
||||
}
|
||||
|
||||
static int pci_mmap_resource_sparse(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *attr,
|
||||
const struct bin_attribute *attr,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
return pci_mmap_resource(kobj, attr, vma, 1);
|
||||
}
|
||||
|
||||
static int pci_mmap_resource_dense(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *attr,
|
||||
const struct bin_attribute *attr,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
return pci_mmap_resource(kobj, attr, vma, 0);
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
* Auxiliary devices are created and registered by a subsystem-level core
|
||||
* device that needs to break up its functionality into smaller fragments. One
|
||||
* way to extend the scope of an auxiliary_device is to encapsulate it within a
|
||||
* domain- pecific structure defined by the parent device. This structure
|
||||
* domain-specific structure defined by the parent device. This structure
|
||||
* contains the auxiliary_device and any associated shared data/callbacks
|
||||
* needed to establish the connection with the parent.
|
||||
*
|
||||
@@ -335,35 +335,6 @@ int __auxiliary_device_add(struct auxiliary_device *auxdev, const char *modname)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__auxiliary_device_add);
|
||||
|
||||
/**
|
||||
* auxiliary_find_device - auxiliary device iterator for locating a particular device.
|
||||
* @start: Device to begin with
|
||||
* @data: Data to pass to match function
|
||||
* @match: Callback function to check device
|
||||
*
|
||||
* This function returns a reference to a device that is 'found'
|
||||
* for later use, as determined by the @match callback.
|
||||
*
|
||||
* The reference returned should be released with put_device().
|
||||
*
|
||||
* The callback should return 0 if the device doesn't match and non-zero
|
||||
* if it does. If the callback returns non-zero, this function will
|
||||
* return to the caller and not iterate over any more devices.
|
||||
*/
|
||||
struct auxiliary_device *auxiliary_find_device(struct device *start,
|
||||
const void *data,
|
||||
device_match_t match)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = bus_find_device(&auxiliary_bus_type, start, data, match);
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
return to_auxiliary_dev(dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(auxiliary_find_device);
|
||||
|
||||
/**
|
||||
* __auxiliary_driver_register - register a driver for auxiliary bus devices
|
||||
* @auxdrv: auxiliary_driver structure
|
||||
|
||||
@@ -254,11 +254,11 @@ static int of_count_cache_leaves(struct device_node *np)
|
||||
{
|
||||
unsigned int leaves = 0;
|
||||
|
||||
if (of_property_read_bool(np, "cache-size"))
|
||||
if (of_property_present(np, "cache-size"))
|
||||
++leaves;
|
||||
if (of_property_read_bool(np, "i-cache-size"))
|
||||
if (of_property_present(np, "i-cache-size"))
|
||||
++leaves;
|
||||
if (of_property_read_bool(np, "d-cache-size"))
|
||||
if (of_property_present(np, "d-cache-size"))
|
||||
++leaves;
|
||||
|
||||
if (!leaves) {
|
||||
@@ -367,9 +367,7 @@ static int cache_shared_cpu_map_setup(unsigned int cpu)
|
||||
|
||||
cpumask_set_cpu(cpu, &this_leaf->shared_cpu_map);
|
||||
for_each_online_cpu(i) {
|
||||
struct cpu_cacheinfo *sib_cpu_ci = get_cpu_cacheinfo(i);
|
||||
|
||||
if (i == cpu || !sib_cpu_ci->info_list)
|
||||
if (i == cpu || !per_cpu_cacheinfo(i))
|
||||
continue;/* skip if itself or no cacheinfo */
|
||||
for (sib_index = 0; sib_index < cache_leaves(i); sib_index++) {
|
||||
sib_leaf = per_cpu_cacheinfo_idx(i, sib_index);
|
||||
@@ -409,10 +407,7 @@ static void cache_shared_cpu_map_remove(unsigned int cpu)
|
||||
for (index = 0; index < cache_leaves(cpu); index++) {
|
||||
this_leaf = per_cpu_cacheinfo_idx(cpu, index);
|
||||
for_each_cpu(sibling, &this_leaf->shared_cpu_map) {
|
||||
struct cpu_cacheinfo *sib_cpu_ci =
|
||||
get_cpu_cacheinfo(sibling);
|
||||
|
||||
if (sibling == cpu || !sib_cpu_ci->info_list)
|
||||
if (sibling == cpu || !per_cpu_cacheinfo(sibling))
|
||||
continue;/* skip if itself or no cacheinfo */
|
||||
|
||||
for (sib_index = 0; sib_index < cache_leaves(sibling); sib_index++) {
|
||||
|
||||
@@ -405,7 +405,7 @@ int class_for_each_device(const struct class *class, const struct device *start,
|
||||
if (!class)
|
||||
return -EINVAL;
|
||||
if (!sp) {
|
||||
WARN(1, "%s called for class '%s' before it was initialized",
|
||||
WARN(1, "%s called for class '%s' before it was registered",
|
||||
__func__, class->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -453,7 +453,7 @@ struct device *class_find_device(const struct class *class, const struct device
|
||||
if (!class)
|
||||
return NULL;
|
||||
if (!sp) {
|
||||
WARN(1, "%s called for class '%s' before it was initialized",
|
||||
WARN(1, "%s called for class '%s' before it was registered",
|
||||
__func__, class->name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -552,7 +552,7 @@ void device_link_wait_removal(void)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(device_link_wait_removal);
|
||||
|
||||
static struct class devlink_class = {
|
||||
static const struct class devlink_class = {
|
||||
.name = "devlink",
|
||||
.dev_groups = devlink_groups,
|
||||
.dev_release = devlink_dev_release,
|
||||
@@ -1971,7 +1971,7 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn
|
||||
|
||||
/**
|
||||
* __fw_devlink_relax_cycles - Relax and mark dependency cycles.
|
||||
* @con: Potential consumer device.
|
||||
* @con_handle: Potential consumer device fwnode.
|
||||
* @sup_handle: Potential supplier's fwnode.
|
||||
*
|
||||
* Needs to be called with fwnode_lock and device link lock held.
|
||||
@@ -1989,10 +1989,10 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn
|
||||
*
|
||||
* Return true if one or more cycles were found. Otherwise, return false.
|
||||
*/
|
||||
static bool __fw_devlink_relax_cycles(struct device *con,
|
||||
static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle,
|
||||
struct fwnode_handle *sup_handle)
|
||||
{
|
||||
struct device *sup_dev = NULL, *par_dev = NULL;
|
||||
struct device *sup_dev = NULL, *par_dev = NULL, *con_dev = NULL;
|
||||
struct fwnode_link *link;
|
||||
struct device_link *dev_link;
|
||||
bool ret = false;
|
||||
@@ -2009,22 +2009,22 @@ static bool __fw_devlink_relax_cycles(struct device *con,
|
||||
|
||||
sup_handle->flags |= FWNODE_FLAG_VISITED;
|
||||
|
||||
sup_dev = get_dev_from_fwnode(sup_handle);
|
||||
|
||||
/* Termination condition. */
|
||||
if (sup_dev == con) {
|
||||
if (sup_handle == con_handle) {
|
||||
pr_debug("----- cycle: start -----\n");
|
||||
ret = true;
|
||||
goto out;
|
||||
}
|
||||
|
||||
sup_dev = get_dev_from_fwnode(sup_handle);
|
||||
con_dev = get_dev_from_fwnode(con_handle);
|
||||
/*
|
||||
* If sup_dev is bound to a driver and @con hasn't started binding to a
|
||||
* driver, sup_dev can't be a consumer of @con. So, no need to check
|
||||
* further.
|
||||
*/
|
||||
if (sup_dev && sup_dev->links.status == DL_DEV_DRIVER_BOUND &&
|
||||
con->links.status == DL_DEV_NO_DRIVER) {
|
||||
con_dev && con_dev->links.status == DL_DEV_NO_DRIVER) {
|
||||
ret = false;
|
||||
goto out;
|
||||
}
|
||||
@@ -2033,7 +2033,7 @@ static bool __fw_devlink_relax_cycles(struct device *con,
|
||||
if (link->flags & FWLINK_FLAG_IGNORE)
|
||||
continue;
|
||||
|
||||
if (__fw_devlink_relax_cycles(con, link->supplier)) {
|
||||
if (__fw_devlink_relax_cycles(con_handle, link->supplier)) {
|
||||
__fwnode_link_cycle(link);
|
||||
ret = true;
|
||||
}
|
||||
@@ -2048,7 +2048,7 @@ static bool __fw_devlink_relax_cycles(struct device *con,
|
||||
else
|
||||
par_dev = fwnode_get_next_parent_dev(sup_handle);
|
||||
|
||||
if (par_dev && __fw_devlink_relax_cycles(con, par_dev->fwnode)) {
|
||||
if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) {
|
||||
pr_debug("%pfwf: cycle: child of %pfwf\n", sup_handle,
|
||||
par_dev->fwnode);
|
||||
ret = true;
|
||||
@@ -2066,7 +2066,7 @@ static bool __fw_devlink_relax_cycles(struct device *con,
|
||||
!(dev_link->flags & DL_FLAG_CYCLE))
|
||||
continue;
|
||||
|
||||
if (__fw_devlink_relax_cycles(con,
|
||||
if (__fw_devlink_relax_cycles(con_handle,
|
||||
dev_link->supplier->fwnode)) {
|
||||
pr_debug("%pfwf: cycle: depends on %pfwf\n", sup_handle,
|
||||
dev_link->supplier->fwnode);
|
||||
@@ -2114,11 +2114,6 @@ static int fw_devlink_create_devlink(struct device *con,
|
||||
if (link->flags & FWLINK_FLAG_IGNORE)
|
||||
return 0;
|
||||
|
||||
if (con->fwnode == link->consumer)
|
||||
flags = fw_devlink_get_flags(link->flags);
|
||||
else
|
||||
flags = FW_DEVLINK_FLAGS_PERMISSIVE;
|
||||
|
||||
/*
|
||||
* In some cases, a device P might also be a supplier to its child node
|
||||
* C. However, this would defer the probe of C until the probe of P
|
||||
@@ -2139,25 +2134,23 @@ static int fw_devlink_create_devlink(struct device *con,
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* SYNC_STATE_ONLY device links don't block probing and supports cycles.
|
||||
* So, one might expect that cycle detection isn't necessary for them.
|
||||
* However, if the device link was marked as SYNC_STATE_ONLY because
|
||||
* it's part of a cycle, then we still need to do cycle detection. This
|
||||
* is because the consumer and supplier might be part of multiple cycles
|
||||
* and we need to detect all those cycles.
|
||||
* Don't try to optimize by not calling the cycle detection logic under
|
||||
* certain conditions. There's always some corner case that won't get
|
||||
* detected.
|
||||
*/
|
||||
if (!device_link_flag_is_sync_state_only(flags) ||
|
||||
flags & DL_FLAG_CYCLE) {
|
||||
device_links_write_lock();
|
||||
if (__fw_devlink_relax_cycles(con, sup_handle)) {
|
||||
__fwnode_link_cycle(link);
|
||||
flags = fw_devlink_get_flags(link->flags);
|
||||
pr_debug("----- cycle: end -----\n");
|
||||
dev_info(con, "Fixed dependency cycle(s) with %pfwf\n",
|
||||
sup_handle);
|
||||
}
|
||||
device_links_write_unlock();
|
||||
device_links_write_lock();
|
||||
if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) {
|
||||
__fwnode_link_cycle(link);
|
||||
pr_debug("----- cycle: end -----\n");
|
||||
pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n",
|
||||
link->consumer, sup_handle);
|
||||
}
|
||||
device_links_write_unlock();
|
||||
|
||||
if (con->fwnode == link->consumer)
|
||||
flags = fw_devlink_get_flags(link->flags);
|
||||
else
|
||||
flags = FW_DEVLINK_FLAGS_PERMISSIVE;
|
||||
|
||||
if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE)
|
||||
sup_dev = fwnode_get_next_parent_dev(sup_handle);
|
||||
@@ -2180,8 +2173,8 @@ static int fw_devlink_create_devlink(struct device *con,
|
||||
}
|
||||
|
||||
if (con != sup_dev && !device_link_add(con, sup_dev, flags)) {
|
||||
dev_err(con, "Failed to create device link (0x%x) with %s\n",
|
||||
flags, dev_name(sup_dev));
|
||||
dev_err(con, "Failed to create device link (0x%x) with supplier %s for %pfwf\n",
|
||||
flags, dev_name(sup_dev), link->consumer);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -829,19 +829,18 @@ static void fw_log_firmware_info(const struct firmware *fw, const char *name, st
|
||||
shash->tfm = alg;
|
||||
|
||||
if (crypto_shash_digest(shash, fw->data, fw->size, sha256buf) < 0)
|
||||
goto out_shash;
|
||||
goto out_free;
|
||||
|
||||
for (int i = 0; i < SHA256_DIGEST_SIZE; i++)
|
||||
sprintf(&outbuf[i * 2], "%02x", sha256buf[i]);
|
||||
outbuf[SHA256_BLOCK_SIZE] = 0;
|
||||
dev_dbg(device, "Loaded FW: %s, sha256: %s\n", name, outbuf);
|
||||
|
||||
out_shash:
|
||||
crypto_free_shash(alg);
|
||||
out_free:
|
||||
kfree(shash);
|
||||
kfree(outbuf);
|
||||
kfree(sha256buf);
|
||||
crypto_free_shash(alg);
|
||||
}
|
||||
#else
|
||||
static void fw_log_firmware_info(const struct firmware *fw, const char *name,
|
||||
@@ -1075,8 +1074,8 @@ EXPORT_SYMBOL_GPL(firmware_request_platform);
|
||||
|
||||
/**
|
||||
* firmware_request_cache() - cache firmware for suspend so resume can use it
|
||||
* @name: name of firmware file
|
||||
* @device: device for which firmware should be cached for
|
||||
* @name: name of firmware file
|
||||
*
|
||||
* There are some devices with an optimization that enables the device to not
|
||||
* require loading firmware on system reboot. This optimization may still
|
||||
|
||||
@@ -27,7 +27,7 @@ static const struct bus_type node_subsys = {
|
||||
};
|
||||
|
||||
static inline ssize_t cpumap_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
const struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
@@ -45,10 +45,10 @@ static inline ssize_t cpumap_read(struct file *file, struct kobject *kobj,
|
||||
return n;
|
||||
}
|
||||
|
||||
static BIN_ATTR_RO(cpumap, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(cpumap, CPUMAP_FILE_MAX_BYTES);
|
||||
|
||||
static inline ssize_t cpulist_read(struct file *file, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
const struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
@@ -66,7 +66,7 @@ static inline ssize_t cpulist_read(struct file *file, struct kobject *kobj,
|
||||
return n;
|
||||
}
|
||||
|
||||
static BIN_ATTR_RO(cpulist, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(cpulist, CPULIST_FILE_MAX_BYTES);
|
||||
|
||||
/**
|
||||
* struct node_access_nodes - Access class device to hold user visible
|
||||
@@ -578,7 +578,7 @@ static struct attribute *node_dev_attrs[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct bin_attribute *node_dev_bin_attrs[] = {
|
||||
static const struct bin_attribute *node_dev_bin_attrs[] = {
|
||||
&bin_attr_cpumap,
|
||||
&bin_attr_cpulist,
|
||||
NULL
|
||||
@@ -586,7 +586,7 @@ static struct bin_attribute *node_dev_bin_attrs[] = {
|
||||
|
||||
static const struct attribute_group node_dev_group = {
|
||||
.attrs = node_dev_attrs,
|
||||
.bin_attrs = node_dev_bin_attrs
|
||||
.bin_attrs_new = node_dev_bin_attrs,
|
||||
};
|
||||
|
||||
static const struct attribute_group *node_dev_groups[] = {
|
||||
|
||||
@@ -509,14 +509,6 @@ static ssize_t wakeup_last_time_ms_show(struct device *dev,
|
||||
return sysfs_emit(buf, "%lld\n", msec);
|
||||
}
|
||||
|
||||
static inline int dpm_sysfs_wakeup_change_owner(struct device *dev, kuid_t kuid,
|
||||
kgid_t kgid)
|
||||
{
|
||||
if (dev->power.wakeup && dev->power.wakeup->dev)
|
||||
return device_change_owner(dev->power.wakeup->dev, kuid, kgid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RO(wakeup_last_time_ms);
|
||||
|
||||
#ifdef CONFIG_PM_AUTOSLEEP
|
||||
@@ -541,6 +533,15 @@ static ssize_t wakeup_prevent_sleep_time_ms_show(struct device *dev,
|
||||
|
||||
static DEVICE_ATTR_RO(wakeup_prevent_sleep_time_ms);
|
||||
#endif /* CONFIG_PM_AUTOSLEEP */
|
||||
|
||||
static inline int dpm_sysfs_wakeup_change_owner(struct device *dev, kuid_t kuid,
|
||||
kgid_t kgid)
|
||||
{
|
||||
if (dev->power.wakeup && dev->power.wakeup->dev)
|
||||
return device_change_owner(dev->power.wakeup->dev, kuid, kgid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* CONFIG_PM_SLEEP */
|
||||
static inline int dpm_sysfs_wakeup_change_owner(struct device *dev, kuid_t kuid,
|
||||
kgid_t kgid)
|
||||
|
||||
@@ -23,7 +23,7 @@ static ssize_t name##_show(struct device *dev, \
|
||||
|
||||
#define define_siblings_read_func(name, mask) \
|
||||
static ssize_t name##_read(struct file *file, struct kobject *kobj, \
|
||||
struct bin_attribute *attr, char *buf, \
|
||||
const struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
{ \
|
||||
struct device *dev = kobj_to_dev(kobj); \
|
||||
@@ -33,7 +33,7 @@ static ssize_t name##_read(struct file *file, struct kobject *kobj, \
|
||||
} \
|
||||
\
|
||||
static ssize_t name##_list_read(struct file *file, struct kobject *kobj, \
|
||||
struct bin_attribute *attr, char *buf, \
|
||||
const struct bin_attribute *attr, char *buf, \
|
||||
loff_t off, size_t count) \
|
||||
{ \
|
||||
struct device *dev = kobj_to_dev(kobj); \
|
||||
@@ -62,50 +62,50 @@ define_id_show_func(ppin, "0x%llx");
|
||||
static DEVICE_ATTR_ADMIN_RO(ppin);
|
||||
|
||||
define_siblings_read_func(thread_siblings, sibling_cpumask);
|
||||
static BIN_ATTR_RO(thread_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(thread_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(thread_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(thread_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
|
||||
define_siblings_read_func(core_cpus, sibling_cpumask);
|
||||
static BIN_ATTR_RO(core_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(core_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(core_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(core_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
|
||||
define_siblings_read_func(core_siblings, core_cpumask);
|
||||
static BIN_ATTR_RO(core_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(core_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(core_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(core_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
|
||||
#ifdef TOPOLOGY_CLUSTER_SYSFS
|
||||
define_siblings_read_func(cluster_cpus, cluster_cpumask);
|
||||
static BIN_ATTR_RO(cluster_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(cluster_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(cluster_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(cluster_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
#endif
|
||||
|
||||
#ifdef TOPOLOGY_DIE_SYSFS
|
||||
define_siblings_read_func(die_cpus, die_cpumask);
|
||||
static BIN_ATTR_RO(die_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(die_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(die_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(die_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
#endif
|
||||
|
||||
define_siblings_read_func(package_cpus, core_cpumask);
|
||||
static BIN_ATTR_RO(package_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(package_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(package_cpus, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(package_cpus_list, CPULIST_FILE_MAX_BYTES);
|
||||
|
||||
#ifdef TOPOLOGY_BOOK_SYSFS
|
||||
define_id_show_func(book_id, "%d");
|
||||
static DEVICE_ATTR_RO(book_id);
|
||||
define_siblings_read_func(book_siblings, book_cpumask);
|
||||
static BIN_ATTR_RO(book_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(book_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(book_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(book_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
#endif
|
||||
|
||||
#ifdef TOPOLOGY_DRAWER_SYSFS
|
||||
define_id_show_func(drawer_id, "%d");
|
||||
static DEVICE_ATTR_RO(drawer_id);
|
||||
define_siblings_read_func(drawer_siblings, drawer_cpumask);
|
||||
static BIN_ATTR_RO(drawer_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static BIN_ATTR_RO(drawer_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(drawer_siblings, CPUMAP_FILE_MAX_BYTES);
|
||||
static const BIN_ATTR_RO(drawer_siblings_list, CPULIST_FILE_MAX_BYTES);
|
||||
#endif
|
||||
|
||||
static struct bin_attribute *bin_attrs[] = {
|
||||
static const struct bin_attribute *const bin_attrs[] = {
|
||||
&bin_attr_core_cpus,
|
||||
&bin_attr_core_cpus_list,
|
||||
&bin_attr_thread_siblings,
|
||||
@@ -163,7 +163,7 @@ static umode_t topology_is_visible(struct kobject *kobj,
|
||||
|
||||
static const struct attribute_group topology_attr_group = {
|
||||
.attrs = default_attrs,
|
||||
.bin_attrs = bin_attrs,
|
||||
.bin_attrs_new = bin_attrs,
|
||||
.is_visible = topology_is_visible,
|
||||
.name = "topology"
|
||||
};
|
||||
|
||||
@@ -24,18 +24,18 @@ DECLARE_EVENT_CLASS(devres,
|
||||
__field(struct device *, dev)
|
||||
__field(const char *, op)
|
||||
__field(void *, node)
|
||||
__field(const char *, name)
|
||||
__string(name, name)
|
||||
__field(size_t, size)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__assign_str(devname);
|
||||
__entry->op = op;
|
||||
__entry->node = node;
|
||||
__entry->name = name;
|
||||
__assign_str(name);
|
||||
__entry->size = size;
|
||||
),
|
||||
TP_printk("%s %3s %p %s (%zu bytes)", __get_str(devname),
|
||||
__entry->op, __entry->node, __entry->name, __entry->size)
|
||||
__entry->op, __entry->node, __get_str(name), __entry->size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(devres, devres_log,
|
||||
|
||||
@@ -707,7 +707,7 @@ static const struct vm_operations_struct cdx_phys_vm_ops = {
|
||||
* Return: true on success, false otherwise.
|
||||
*/
|
||||
static int cdx_mmap_resource(struct file *fp, struct kobject *kobj,
|
||||
struct bin_attribute *attr,
|
||||
const struct bin_attribute *attr,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
struct cdx_device *cdx_dev = to_cdx_device(kobj_to_dev(kobj));
|
||||
|
||||
@@ -173,7 +173,7 @@ static ssize_t CDAT_read(struct file *filp, struct kobject *kobj,
|
||||
static BIN_ATTR_ADMIN_RO(CDAT, 0);
|
||||
|
||||
static umode_t cxl_port_bin_attr_is_visible(struct kobject *kobj,
|
||||
struct bin_attribute *attr, int i)
|
||||
const struct bin_attribute *attr, int i)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
struct cxl_port *port = to_cxl_port(dev);
|
||||
|
||||
@@ -420,7 +420,7 @@ static void aspeed_sgpio_irq_print_chip(struct irq_data *d, struct seq_file *p)
|
||||
int offset;
|
||||
|
||||
irqd_to_aspeed_sgpio_data(d, &gpio, &bank, &bit, &offset);
|
||||
seq_printf(p, dev_name(gpio->dev));
|
||||
seq_puts(p, dev_name(gpio->dev));
|
||||
}
|
||||
|
||||
static const struct irq_chip aspeed_sgpio_irq_chip = {
|
||||
|
||||
@@ -1049,7 +1049,7 @@ static void aspeed_gpio_irq_print_chip(struct irq_data *d, struct seq_file *p)
|
||||
if (rc)
|
||||
return;
|
||||
|
||||
seq_printf(p, dev_name(gpio->dev));
|
||||
seq_puts(p, dev_name(gpio->dev));
|
||||
}
|
||||
|
||||
static const struct irq_chip aspeed_gpio_irq_chip = {
|
||||
|
||||
@@ -249,7 +249,7 @@ static void ep93xx_irq_print_chip(struct irq_data *data, struct seq_file *p)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
|
||||
|
||||
seq_printf(p, dev_name(gc->parent));
|
||||
seq_puts(p, dev_name(gc->parent));
|
||||
}
|
||||
|
||||
static const struct irq_chip gpio_eic_irq_chip = {
|
||||
|
||||
@@ -210,7 +210,7 @@ static void hlwd_gpio_irq_print_chip(struct irq_data *data, struct seq_file *p)
|
||||
struct hlwd_gpio *hlwd =
|
||||
gpiochip_get_data(irq_data_get_irq_chip_data(data));
|
||||
|
||||
seq_printf(p, dev_name(hlwd->dev));
|
||||
seq_puts(p, dev_name(hlwd->dev));
|
||||
}
|
||||
|
||||
static const struct irq_chip hlwd_gpio_irq_chip = {
|
||||
|
||||
@@ -331,7 +331,7 @@ static void mlxbf2_gpio_irq_print_chip(struct irq_data *irqd,
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
|
||||
struct mlxbf2_gpio_context *gs = gpiochip_get_data(gc);
|
||||
|
||||
seq_printf(p, dev_name(gs->dev));
|
||||
seq_puts(p, dev_name(gs->dev));
|
||||
}
|
||||
|
||||
static const struct irq_chip mlxbf2_gpio_irq_chip = {
|
||||
|
||||
@@ -715,7 +715,7 @@ static void omap_gpio_irq_print_chip(struct irq_data *d, struct seq_file *p)
|
||||
{
|
||||
struct gpio_bank *bank = omap_irq_data_get_bank(d);
|
||||
|
||||
seq_printf(p, dev_name(bank->dev));
|
||||
seq_puts(p, dev_name(bank->dev));
|
||||
}
|
||||
|
||||
static const struct irq_chip omap_gpio_irq_chip = {
|
||||
|
||||
@@ -815,7 +815,7 @@ static void pca953x_irq_print_chip(struct irq_data *data, struct seq_file *p)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
|
||||
|
||||
seq_printf(p, dev_name(gc->parent));
|
||||
seq_puts(p, dev_name(gc->parent));
|
||||
}
|
||||
|
||||
static const struct irq_chip pca953x_irq_chip = {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user