Driver core changes for 6.7-rc1
Here is the set of driver core updates for 6.7-rc1. Nothing major in here at all, just a small number of changes including: - minor cleanups and updates from Andy Shevchenko - __counted_by addition - firmware_loader update for aborting loads cleaner - other minor changes, details in the shortlog - documentation update All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZUTe8A8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ynP0QCfT2jQx3OcL22MoqCvdTuZJKPiHSIAoMxrliJF d4cUeICW17ywlTFzsKg8 =nTeu -----END PGP SIGNATURE----- Merge tag 'driver-core-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core Pull driver core updates from Greg KH: "Here is the set of driver core updates for 6.7-rc1. Nothing major in here at all, just a small number of changes including: - minor cleanups and updates from Andy Shevchenko - __counted_by addition - firmware_loader update for aborting loads cleaner - other minor changes, details in the shortlog - documentation update All of these have been in linux-next for a while with no reported issues" * tag 'driver-core-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (21 commits) firmware_loader: Abort all upcoming firmware load request once reboot triggered firmware_loader: Refactor kill_pending_fw_fallback_reqs() Documentation: security-bugs.rst: linux-distros relaxed their rules driver core: Release all resources during unbind before updating device links driver core: class: remove boilerplate code driver core: platform: Annotate struct irq_affinity_devres with __counted_by resource: Constify resource crosscheck APIs resource: Unify next_resource() and next_resource_skip_children() resource: Reuse for_each_resource() macro PCI: Implement custom llseek for sysfs resource entries kernfs: sysfs: support custom llseek method for sysfs entries debugfs: Fix __rcu type comparison warning device property: Replace custom implementation of COUNT_ARGS() drivers: base: test: Make property entry API test modular driver core: Add missing parameter description to __fwnode_link_add() device property: Clarify usage scope of some struct fwnode_handle members devres: rename the first parameter of devm_add_action(_or_reset) driver core: platform: Unify the firmware node type check driver core: platform: Use temporary variable in platform_device_add() driver core: platform: Refactor error path in a couple places ...
This commit is contained in:
commit
b06f58ad8e
22 changed files with 194 additions and 100 deletions
|
|
@ -56,33 +56,17 @@ struct resource_constraint {
|
|||
|
||||
static DEFINE_RWLOCK(resource_lock);
|
||||
|
||||
static struct resource *next_resource(struct resource *p)
|
||||
static struct resource *next_resource(struct resource *p, bool skip_children)
|
||||
{
|
||||
if (p->child)
|
||||
if (!skip_children && p->child)
|
||||
return p->child;
|
||||
while (!p->sibling && p->parent)
|
||||
p = p->parent;
|
||||
return p->sibling;
|
||||
}
|
||||
|
||||
static struct resource *next_resource_skip_children(struct resource *p)
|
||||
{
|
||||
while (!p->sibling && p->parent)
|
||||
p = p->parent;
|
||||
return p->sibling;
|
||||
}
|
||||
|
||||
#define for_each_resource(_root, _p, _skip_children) \
|
||||
for ((_p) = (_root)->child; (_p); \
|
||||
(_p) = (_skip_children) ? next_resource_skip_children(_p) : \
|
||||
next_resource(_p))
|
||||
|
||||
static void *r_next(struct seq_file *m, void *v, loff_t *pos)
|
||||
{
|
||||
struct resource *p = v;
|
||||
(*pos)++;
|
||||
return (void *)next_resource(p);
|
||||
}
|
||||
for ((_p) = (_root)->child; (_p); (_p) = next_resource(_p, _skip_children))
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
||||
|
|
@ -91,14 +75,28 @@ enum { MAX_IORES_LEVEL = 5 };
|
|||
static void *r_start(struct seq_file *m, loff_t *pos)
|
||||
__acquires(resource_lock)
|
||||
{
|
||||
struct resource *p = pde_data(file_inode(m->file));
|
||||
loff_t l = 0;
|
||||
struct resource *root = pde_data(file_inode(m->file));
|
||||
struct resource *p;
|
||||
loff_t l = *pos;
|
||||
|
||||
read_lock(&resource_lock);
|
||||
for (p = p->child; p && l < *pos; p = r_next(m, p, &l))
|
||||
;
|
||||
for_each_resource(root, p, false) {
|
||||
if (l-- == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
static void *r_next(struct seq_file *m, void *v, loff_t *pos)
|
||||
{
|
||||
struct resource *p = v;
|
||||
|
||||
(*pos)++;
|
||||
|
||||
return (void *)next_resource(p, false);
|
||||
}
|
||||
|
||||
static void r_stop(struct seq_file *m, void *v)
|
||||
__releases(resource_lock)
|
||||
{
|
||||
|
|
@ -336,7 +334,7 @@ static int find_next_iomem_res(resource_size_t start, resource_size_t end,
|
|||
|
||||
read_lock(&resource_lock);
|
||||
|
||||
for (p = iomem_resource.child; p; p = next_resource(p)) {
|
||||
for_each_resource(&iomem_resource, p, false) {
|
||||
/* If we passed the resource we are looking for, stop */
|
||||
if (p->start > end) {
|
||||
p = NULL;
|
||||
|
|
@ -1641,13 +1639,12 @@ __setup("reserve=", reserve_setup);
|
|||
*/
|
||||
int iomem_map_sanity_check(resource_size_t addr, unsigned long size)
|
||||
{
|
||||
struct resource *p = &iomem_resource;
|
||||
resource_size_t end = addr + size - 1;
|
||||
struct resource *p;
|
||||
int err = 0;
|
||||
loff_t l;
|
||||
|
||||
read_lock(&resource_lock);
|
||||
for (p = p->child; p ; p = r_next(NULL, p, &l)) {
|
||||
for_each_resource(&iomem_resource, p, false) {
|
||||
/*
|
||||
* We can probably skip the resources without
|
||||
* IORESOURCE_IO attribute?
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue