Commit 9f3b795a authored by Michał Mirosław's avatar Michał Mirosław Committed by Greg Kroah-Hartman

driver-core: constify data for class_find_device()

All in-kernel users of class_find_device() don't really need mutable
data for match callback.

In two places (kernel/power/suspend_test.c, drivers/scsi/osd/osd_uld.c)
this patch changes match callbacks to use const search data.

The const is propagated to rtc_class_open() and power_supply_get_by_name()
parameters.

Note that there's a dev reference leak in suspend_test.c that's not
touched in this patch.
Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 807be03c
...@@ -420,8 +420,8 @@ EXPORT_SYMBOL_GPL(class_for_each_device); ...@@ -420,8 +420,8 @@ EXPORT_SYMBOL_GPL(class_for_each_device);
* code. There's no locking restriction. * code. There's no locking restriction.
*/ */
struct device *class_find_device(struct class *class, struct device *start, struct device *class_find_device(struct class *class, struct device *start,
void *data, const void *data,
int (*match)(struct device *, void *)) int (*match)(struct device *, const void *))
{ {
struct class_dev_iter iter; struct class_dev_iter iter;
struct device *dev; struct device *dev;
......
...@@ -1617,9 +1617,9 @@ struct device *device_create(struct class *class, struct device *parent, ...@@ -1617,9 +1617,9 @@ struct device *device_create(struct class *class, struct device *parent,
} }
EXPORT_SYMBOL_GPL(device_create); EXPORT_SYMBOL_GPL(device_create);
static int __match_devt(struct device *dev, void *data) static int __match_devt(struct device *dev, const void *data)
{ {
dev_t *devt = data; const dev_t *devt = data;
return dev->devt == *devt; return dev->devt == *devt;
} }
......
...@@ -806,7 +806,7 @@ int gpio_export(unsigned gpio, bool direction_may_change) ...@@ -806,7 +806,7 @@ int gpio_export(unsigned gpio, bool direction_may_change)
} }
EXPORT_SYMBOL_GPL(gpio_export); EXPORT_SYMBOL_GPL(gpio_export);
static int match_export(struct device *dev, void *data) static int match_export(struct device *dev, const void *data)
{ {
return dev_get_drvdata(dev) == data; return dev_get_drvdata(dev) == data;
} }
......
...@@ -168,13 +168,13 @@ static struct class mISDN_class = { ...@@ -168,13 +168,13 @@ static struct class mISDN_class = {
}; };
static int static int
_get_mdevice(struct device *dev, void *id) _get_mdevice(struct device *dev, const void *id)
{ {
struct mISDNdevice *mdev = dev_to_mISDN(dev); struct mISDNdevice *mdev = dev_to_mISDN(dev);
if (!mdev) if (!mdev)
return 0; return 0;
if (mdev->id != *(u_int *)id) if (mdev->id != *(const u_int *)id)
return 0; return 0;
return 1; return 1;
} }
......
...@@ -95,7 +95,7 @@ static struct class mdio_bus_class = { ...@@ -95,7 +95,7 @@ static struct class mdio_bus_class = {
#if IS_ENABLED(CONFIG_OF_MDIO) #if IS_ENABLED(CONFIG_OF_MDIO)
/* Helper function for of_mdio_find_bus */ /* Helper function for of_mdio_find_bus */
static int of_mdio_bus_match(struct device *dev, void *mdio_bus_np) static int of_mdio_bus_match(struct device *dev, const void *mdio_bus_np)
{ {
return dev->of_node == mdio_bus_np; return dev->of_node == mdio_bus_np;
} }
......
...@@ -141,7 +141,7 @@ int power_supply_set_battery_charged(struct power_supply *psy) ...@@ -141,7 +141,7 @@ int power_supply_set_battery_charged(struct power_supply *psy)
} }
EXPORT_SYMBOL_GPL(power_supply_set_battery_charged); EXPORT_SYMBOL_GPL(power_supply_set_battery_charged);
static int power_supply_match_device_by_name(struct device *dev, void *data) static int power_supply_match_device_by_name(struct device *dev, const void *data)
{ {
const char *name = data; const char *name = data;
struct power_supply *psy = dev_get_drvdata(dev); struct power_supply *psy = dev_get_drvdata(dev);
...@@ -149,7 +149,7 @@ static int power_supply_match_device_by_name(struct device *dev, void *data) ...@@ -149,7 +149,7 @@ static int power_supply_match_device_by_name(struct device *dev, void *data)
return strcmp(psy->name, name) == 0; return strcmp(psy->name, name) == 0;
} }
struct power_supply *power_supply_get_by_name(char *name) struct power_supply *power_supply_get_by_name(const char *name)
{ {
struct device *dev = class_find_device(power_supply_class, NULL, name, struct device *dev = class_find_device(power_supply_class, NULL, name,
power_supply_match_device_by_name); power_supply_match_device_by_name);
......
...@@ -587,16 +587,16 @@ void rtc_update_irq(struct rtc_device *rtc, ...@@ -587,16 +587,16 @@ void rtc_update_irq(struct rtc_device *rtc,
} }
EXPORT_SYMBOL_GPL(rtc_update_irq); EXPORT_SYMBOL_GPL(rtc_update_irq);
static int __rtc_match(struct device *dev, void *data) static int __rtc_match(struct device *dev, const void *data)
{ {
char *name = (char *)data; const char *name = data;
if (strcmp(dev_name(dev), name) == 0) if (strcmp(dev_name(dev), name) == 0)
return 1; return 1;
return 0; return 0;
} }
struct rtc_device *rtc_class_open(char *name) struct rtc_device *rtc_class_open(const char *name)
{ {
struct device *dev; struct device *dev;
struct rtc_device *rtc = NULL; struct rtc_device *rtc = NULL;
......
...@@ -468,10 +468,10 @@ void scsi_unregister(struct Scsi_Host *shost) ...@@ -468,10 +468,10 @@ void scsi_unregister(struct Scsi_Host *shost)
} }
EXPORT_SYMBOL(scsi_unregister); EXPORT_SYMBOL(scsi_unregister);
static int __scsi_host_match(struct device *dev, void *data) static int __scsi_host_match(struct device *dev, const void *data)
{ {
struct Scsi_Host *p; struct Scsi_Host *p;
unsigned short *hostnum = (unsigned short *)data; const unsigned short *hostnum = data;
p = class_to_shost(dev); p = class_to_shost(dev);
return p->host_no == *hostnum; return p->host_no == *hostnum;
......
...@@ -268,18 +268,11 @@ static inline bool _the_same_or_null(const u8 *a1, unsigned a1_len, ...@@ -268,18 +268,11 @@ static inline bool _the_same_or_null(const u8 *a1, unsigned a1_len,
return 0 == memcmp(a1, a2, a1_len); return 0 == memcmp(a1, a2, a1_len);
} }
struct find_oud_t { static int _match_odi(struct device *dev, const void *find_data)
const struct osd_dev_info *odi;
struct device *dev;
struct osd_uld_device *oud;
} ;
int _mach_odi(struct device *dev, void *find_data)
{ {
struct osd_uld_device *oud = container_of(dev, struct osd_uld_device, struct osd_uld_device *oud = container_of(dev, struct osd_uld_device,
class_dev); class_dev);
struct find_oud_t *fot = find_data; const struct osd_dev_info *odi = find_data;
const struct osd_dev_info *odi = fot->odi;
if (_the_same_or_null(oud->odi.systemid, oud->odi.systemid_len, if (_the_same_or_null(oud->odi.systemid, oud->odi.systemid_len,
odi->systemid, odi->systemid_len) && odi->systemid, odi->systemid_len) &&
...@@ -287,7 +280,6 @@ int _mach_odi(struct device *dev, void *find_data) ...@@ -287,7 +280,6 @@ int _mach_odi(struct device *dev, void *find_data)
odi->osdname, odi->osdname_len)) { odi->osdname, odi->osdname_len)) {
OSD_DEBUG("found device sysid_len=%d osdname=%d\n", OSD_DEBUG("found device sysid_len=%d osdname=%d\n",
odi->systemid_len, odi->osdname_len); odi->systemid_len, odi->osdname_len);
fot->oud = oud;
return 1; return 1;
} else { } else {
return 0; return 0;
...@@ -301,19 +293,19 @@ int _mach_odi(struct device *dev, void *find_data) ...@@ -301,19 +293,19 @@ int _mach_odi(struct device *dev, void *find_data)
*/ */
struct osd_dev *osduld_info_lookup(const struct osd_dev_info *odi) struct osd_dev *osduld_info_lookup(const struct osd_dev_info *odi)
{ {
struct find_oud_t find = {.odi = odi}; struct device *dev = class_find_device(&osd_uld_class, NULL, odi, _match_odi);
if (likely(dev)) {
find.dev = class_find_device(&osd_uld_class, NULL, &find, _mach_odi);
if (likely(find.dev)) {
struct osd_dev_handle *odh = kzalloc(sizeof(*odh), GFP_KERNEL); struct osd_dev_handle *odh = kzalloc(sizeof(*odh), GFP_KERNEL);
struct osd_uld_device *oud = container_of(dev,
struct osd_uld_device, class_dev);
if (unlikely(!odh)) { if (unlikely(!odh)) {
put_device(find.dev); put_device(dev);
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
} }
odh->od = find.oud->od; odh->od = oud->od;
odh->oud = find.oud; odh->oud = oud;
return &odh->od; return &odh->od;
} }
......
...@@ -183,10 +183,10 @@ static struct attribute_group iscsi_endpoint_group = { ...@@ -183,10 +183,10 @@ static struct attribute_group iscsi_endpoint_group = {
#define ISCSI_MAX_EPID -1 #define ISCSI_MAX_EPID -1
static int iscsi_match_epid(struct device *dev, void *data) static int iscsi_match_epid(struct device *dev, const void *data)
{ {
struct iscsi_endpoint *ep = iscsi_dev_to_endpoint(dev); struct iscsi_endpoint *ep = iscsi_dev_to_endpoint(dev);
uint64_t *epid = (uint64_t *) data; const uint64_t *epid = data;
return *epid == ep->id; return *epid == ep->id;
} }
......
...@@ -1248,10 +1248,10 @@ int spi_master_resume(struct spi_master *master) ...@@ -1248,10 +1248,10 @@ int spi_master_resume(struct spi_master *master)
} }
EXPORT_SYMBOL_GPL(spi_master_resume); EXPORT_SYMBOL_GPL(spi_master_resume);
static int __spi_master_match(struct device *dev, void *data) static int __spi_master_match(struct device *dev, const void *data)
{ {
struct spi_master *m; struct spi_master *m;
u16 *bus_num = data; const u16 *bus_num = data;
m = container_of(dev, struct spi_master, dev); m = container_of(dev, struct spi_master, dev);
return m->bus_num == *bus_num; return m->bus_num == *bus_num;
......
...@@ -40,9 +40,9 @@ ...@@ -40,9 +40,9 @@
#include "uwb-internal.h" #include "uwb-internal.h"
static int uwb_rc_index_match(struct device *dev, void *data) static int uwb_rc_index_match(struct device *dev, const void *data)
{ {
int *index = data; const int *index = data;
struct uwb_rc *rc = dev_get_drvdata(dev); struct uwb_rc *rc = dev_get_drvdata(dev);
if (rc->index == *index) if (rc->index == *index)
...@@ -334,9 +334,9 @@ void uwb_rc_rm(struct uwb_rc *rc) ...@@ -334,9 +334,9 @@ void uwb_rc_rm(struct uwb_rc *rc)
} }
EXPORT_SYMBOL_GPL(uwb_rc_rm); EXPORT_SYMBOL_GPL(uwb_rc_rm);
static int find_rc_try_get(struct device *dev, void *data) static int find_rc_try_get(struct device *dev, const void *data)
{ {
struct uwb_rc *target_rc = data; const struct uwb_rc *target_rc = data;
struct uwb_rc *rc = dev_get_drvdata(dev); struct uwb_rc *rc = dev_get_drvdata(dev);
if (rc == NULL) { if (rc == NULL) {
...@@ -386,9 +386,9 @@ static inline struct uwb_rc *uwb_rc_get(struct uwb_rc *rc) ...@@ -386,9 +386,9 @@ static inline struct uwb_rc *uwb_rc_get(struct uwb_rc *rc)
return rc; return rc;
} }
static int find_rc_grandpa(struct device *dev, void *data) static int find_rc_grandpa(struct device *dev, const void *data)
{ {
struct device *grandpa_dev = data; const struct device *grandpa_dev = data;
struct uwb_rc *rc = dev_get_drvdata(dev); struct uwb_rc *rc = dev_get_drvdata(dev);
if (rc->uwb_dev.dev.parent->parent == grandpa_dev) { if (rc->uwb_dev.dev.parent->parent == grandpa_dev) {
...@@ -419,7 +419,7 @@ struct uwb_rc *uwb_rc_get_by_grandpa(const struct device *grandpa_dev) ...@@ -419,7 +419,7 @@ struct uwb_rc *uwb_rc_get_by_grandpa(const struct device *grandpa_dev)
struct device *dev; struct device *dev;
struct uwb_rc *rc = NULL; struct uwb_rc *rc = NULL;
dev = class_find_device(&uwb_rc_class, NULL, (void *)grandpa_dev, dev = class_find_device(&uwb_rc_class, NULL, grandpa_dev,
find_rc_grandpa); find_rc_grandpa);
if (dev) if (dev)
rc = dev_get_drvdata(dev); rc = dev_get_drvdata(dev);
...@@ -432,9 +432,9 @@ EXPORT_SYMBOL_GPL(uwb_rc_get_by_grandpa); ...@@ -432,9 +432,9 @@ EXPORT_SYMBOL_GPL(uwb_rc_get_by_grandpa);
* *
* @returns the pointer to the radio controller, properly referenced * @returns the pointer to the radio controller, properly referenced
*/ */
static int find_rc_dev(struct device *dev, void *data) static int find_rc_dev(struct device *dev, const void *data)
{ {
struct uwb_dev_addr *addr = data; const struct uwb_dev_addr *addr = data;
struct uwb_rc *rc = dev_get_drvdata(dev); struct uwb_rc *rc = dev_get_drvdata(dev);
if (rc == NULL) { if (rc == NULL) {
...@@ -453,8 +453,7 @@ struct uwb_rc *uwb_rc_get_by_dev(const struct uwb_dev_addr *addr) ...@@ -453,8 +453,7 @@ struct uwb_rc *uwb_rc_get_by_dev(const struct uwb_dev_addr *addr)
struct device *dev; struct device *dev;
struct uwb_rc *rc = NULL; struct uwb_rc *rc = NULL;
dev = class_find_device(&uwb_rc_class, NULL, (void *)addr, dev = class_find_device(&uwb_rc_class, NULL, addr, find_rc_dev);
find_rc_dev);
if (dev) if (dev)
rc = dev_get_drvdata(dev); rc = dev_get_drvdata(dev);
......
...@@ -395,8 +395,8 @@ extern int class_for_each_device(struct class *class, struct device *start, ...@@ -395,8 +395,8 @@ extern int class_for_each_device(struct class *class, struct device *start,
void *data, void *data,
int (*fn)(struct device *dev, void *data)); int (*fn)(struct device *dev, void *data));
extern struct device *class_find_device(struct class *class, extern struct device *class_find_device(struct class *class,
struct device *start, void *data, struct device *start, const void *data,
int (*match)(struct device *, void *)); int (*match)(struct device *, const void *));
struct class_attribute { struct class_attribute {
struct attribute attr; struct attribute attr;
......
...@@ -224,7 +224,7 @@ struct power_supply_info { ...@@ -224,7 +224,7 @@ struct power_supply_info {
int use_for_apm; int use_for_apm;
}; };
extern struct power_supply *power_supply_get_by_name(char *name); extern struct power_supply *power_supply_get_by_name(const char *name);
extern void power_supply_changed(struct power_supply *psy); extern void power_supply_changed(struct power_supply *psy);
extern int power_supply_am_i_supplied(struct power_supply *psy); extern int power_supply_am_i_supplied(struct power_supply *psy);
extern int power_supply_set_battery_charged(struct power_supply *psy); extern int power_supply_set_battery_charged(struct power_supply *psy);
......
...@@ -148,7 +148,7 @@ extern int rtc_initialize_alarm(struct rtc_device *rtc, ...@@ -148,7 +148,7 @@ extern int rtc_initialize_alarm(struct rtc_device *rtc,
extern void rtc_update_irq(struct rtc_device *rtc, extern void rtc_update_irq(struct rtc_device *rtc,
unsigned long num, unsigned long events); unsigned long num, unsigned long events);
extern struct rtc_device *rtc_class_open(char *name); extern struct rtc_device *rtc_class_open(const char *name);
extern void rtc_class_close(struct rtc_device *rtc); extern void rtc_class_close(struct rtc_device *rtc);
extern int rtc_irq_register(struct rtc_device *rtc, extern int rtc_irq_register(struct rtc_device *rtc,
......
...@@ -81,9 +81,9 @@ struct uuidcmp { ...@@ -81,9 +81,9 @@ struct uuidcmp {
* *
* Returns 1 if the device matches, and 0 otherwise. * Returns 1 if the device matches, and 0 otherwise.
*/ */
static int match_dev_by_uuid(struct device *dev, void *data) static int match_dev_by_uuid(struct device *dev, const void *data)
{ {
struct uuidcmp *cmp = data; const struct uuidcmp *cmp = data;
struct hd_struct *part = dev_to_part(dev); struct hd_struct *part = dev_to_part(dev);
if (!part->info) if (!part->info)
......
...@@ -112,7 +112,7 @@ static void __init test_wakealarm(struct rtc_device *rtc, suspend_state_t state) ...@@ -112,7 +112,7 @@ static void __init test_wakealarm(struct rtc_device *rtc, suspend_state_t state)
rtc_set_alarm(rtc, &alm); rtc_set_alarm(rtc, &alm);
} }
static int __init has_wakealarm(struct device *dev, void *name_ptr) static int __init has_wakealarm(struct device *dev, const void *data)
{ {
struct rtc_device *candidate = to_rtc_device(dev); struct rtc_device *candidate = to_rtc_device(dev);
...@@ -121,7 +121,6 @@ static int __init has_wakealarm(struct device *dev, void *name_ptr) ...@@ -121,7 +121,6 @@ static int __init has_wakealarm(struct device *dev, void *name_ptr)
if (!device_may_wakeup(candidate->dev.parent)) if (!device_may_wakeup(candidate->dev.parent))
return 0; return 0;
*(const char **)name_ptr = dev_name(dev);
return 1; return 1;
} }
...@@ -159,8 +158,8 @@ static int __init test_suspend(void) ...@@ -159,8 +158,8 @@ static int __init test_suspend(void)
static char warn_no_rtc[] __initdata = static char warn_no_rtc[] __initdata =
KERN_WARNING "PM: no wakealarm-capable RTC driver is ready\n"; KERN_WARNING "PM: no wakealarm-capable RTC driver is ready\n";
char *pony = NULL;
struct rtc_device *rtc = NULL; struct rtc_device *rtc = NULL;
struct device *dev;
/* PM is initialized by now; is that state testable? */ /* PM is initialized by now; is that state testable? */
if (test_state == PM_SUSPEND_ON) if (test_state == PM_SUSPEND_ON)
...@@ -171,9 +170,9 @@ static int __init test_suspend(void) ...@@ -171,9 +170,9 @@ static int __init test_suspend(void)
} }
/* RTCs have initialized by now too ... can we use one? */ /* RTCs have initialized by now too ... can we use one? */
class_find_device(rtc_class, NULL, &pony, has_wakealarm); dev = class_find_device(rtc_class, NULL, NULL, has_wakealarm);
if (pony) if (dev)
rtc = rtc_class_open(pony); rtc = rtc_class_open(dev_name(dev));
if (!rtc) { if (!rtc) {
printk(warn_no_rtc); printk(warn_no_rtc);
goto done; goto done;
......
...@@ -91,7 +91,7 @@ static struct class wpan_phy_class = { ...@@ -91,7 +91,7 @@ static struct class wpan_phy_class = {
static DEFINE_MUTEX(wpan_phy_mutex); static DEFINE_MUTEX(wpan_phy_mutex);
static int wpan_phy_idx; static int wpan_phy_idx;
static int wpan_phy_match(struct device *dev, void *data) static int wpan_phy_match(struct device *dev, const void *data)
{ {
return !strcmp(dev_name(dev), (const char *)data); return !strcmp(dev_name(dev), (const char *)data);
} }
...@@ -103,8 +103,7 @@ struct wpan_phy *wpan_phy_find(const char *str) ...@@ -103,8 +103,7 @@ struct wpan_phy *wpan_phy_find(const char *str)
if (WARN_ON(!str)) if (WARN_ON(!str))
return NULL; return NULL;
dev = class_find_device(&wpan_phy_class, NULL, dev = class_find_device(&wpan_phy_class, NULL, str, wpan_phy_match);
(void *)str, wpan_phy_match);
if (!dev) if (!dev)
return NULL; return NULL;
......
...@@ -734,10 +734,10 @@ struct class nfc_class = { ...@@ -734,10 +734,10 @@ struct class nfc_class = {
}; };
EXPORT_SYMBOL(nfc_class); EXPORT_SYMBOL(nfc_class);
static int match_idx(struct device *d, void *data) static int match_idx(struct device *d, const void *data)
{ {
struct nfc_dev *dev = to_nfc_dev(d); struct nfc_dev *dev = to_nfc_dev(d);
unsigned int *idx = data; const unsigned int *idx = data;
return dev->idx == *idx; return dev->idx == *idx;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment