Re: [PATCH v4 04/11] driver core: Constify API device_find_child() then adapt for various usages

Mathieu Poirier
2025-01-02T17:07:46Z

On Wed, Dec 11, 2024 at 08:08:06AM +0800, Zijun Hu wrote:
> From: Zijun Hu <quic_zijuhu@quicinc.com>
>
> Constify the following API:
> struct device *device_find_child(struct device *dev, void *data,
> int (*match)(struct device *dev, void *data));
> To :
> struct device *device_find_child(struct device *dev, const void *data,
> device_match_t match);
> typedef int (*device_match_t)(struct device *dev, const void *data);
> with the following reasons:
>
> - Protect caller's match data @*data which is for comparison and lookup
> and the API does not actually need to modify @*data.
>
> - Make the API's parameters (@match)() and @data have the same type as
> all of other device finding APIs (bus|class|driver)_find_device().
>
> - All kinds of existing device match functions can be directly taken
> as the API's argument, they were exported by driver core.
>
> Constify the API and adapt for various existing usages by simply making
> various match functions take 'const void *' as type of match data @data.
>
> Reviewed-by: Alison Schofield <alison.schofield@intel.com>
> Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
> ---
> arch/sparc/kernel/vio.c | 6 +++---
> drivers/base/core.c | 6 +++---
> drivers/block/sunvdc.c | 6 +++---
> drivers/bus/fsl-mc/dprc-driver.c | 4 ++--
> drivers/cxl/core/pci.c | 4 ++--
> drivers/cxl/core/pmem.c | 2 +-
> drivers/cxl/core/region.c | 21 ++++++++++++---------
> drivers/firewire/core-device.c | 4 ++--
> drivers/firmware/arm_scmi/bus.c | 4 ++--
> drivers/firmware/efi/dev-path-parser.c | 4 ++--
> drivers/gpio/gpio-sim.c | 2 +-
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
> drivers/hwmon/hwmon.c | 2 +-
> drivers/media/pci/mgb4/mgb4_core.c | 4 ++--
> drivers/nvdimm/bus.c | 2 +-
> drivers/pwm/core.c | 2 +-
> drivers/rpmsg/rpmsg_core.c | 4 ++--

Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>

> drivers/scsi/qla4xxx/ql4_os.c | 3 ++-
> drivers/scsi/scsi_transport_iscsi.c | 10 +++++-----
> drivers/slimbus/core.c | 8 ++++----
> drivers/thunderbolt/retimer.c | 2 +-
> drivers/thunderbolt/xdomain.c | 2 +-
> drivers/tty/serial/serial_core.c | 4 ++--
> drivers/usb/typec/class.c | 8 ++++----
> include/linux/device.h | 4 ++--
> include/scsi/scsi_transport_iscsi.h | 4 ++--
> net/dsa/dsa.c | 2 +-
> tools/testing/cxl/test/cxl.c | 2 +-
> 28 files changed, 66 insertions(+), 62 deletions(-)
>
> diff --git a/arch/sparc/kernel/vio.c b/arch/sparc/kernel/vio.c
> index 07933d75ac815160a2580dce39fde7653a9502e1..1a1a9d6b8f2e8dfedefafde846315a06a167fbfb 100644
> --- a/arch/sparc/kernel/vio.c
> +++ b/arch/sparc/kernel/vio.c
> @@ -419,13 +419,13 @@ struct vio_remove_node_data {
> u64 node;
> };
>
> -static int vio_md_node_match(struct device *dev, void *arg)
> +static int vio_md_node_match(struct device *dev, const void *arg)
> {
> struct vio_dev *vdev = to_vio_dev(dev);
> - struct vio_remove_node_data *node_data;
> + const struct vio_remove_node_data *node_data;
> u64 node;
>
> - node_data = (struct vio_remove_node_data *)arg;
> + node_data = (const struct vio_remove_node_data *)arg;
>
> node = vio_vdev_node(node_data->hp, vdev);
>
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 94865c9d8adcf5f2ce5002ffd7bf0ef4fc85e4d7..bc3b523a4a6366080c3c9fd190e54c7fd13c8ded 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -4079,8 +4079,8 @@ EXPORT_SYMBOL_GPL(device_for_each_child_reverse_from);
> *
> * NOTE: you will need to drop the reference with put_device() after use.
> */
> -struct device *device_find_child(struct device *parent, void *data,
> - int (*match)(struct device *dev, void *data))
> +struct device *device_find_child(struct device *parent, const void *data,
> + device_match_t match)
> {
> struct klist_iter i;
> struct device *child;
> @@ -4125,7 +4125,7 @@ struct device *device_find_child_by_name(struct device *parent,
> }
> EXPORT_SYMBOL_GPL(device_find_child_by_name);
>
> -static int match_any(struct device *dev, void *unused)
> +static int match_any(struct device *dev, const void *unused)
> {
> return 1;
> }
> diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
> index 2d38331ee66793402e803ec0cc82e9e71c991c84..386643ceed59921203828844aa070833c44c67fb 100644
> --- a/drivers/block/sunvdc.c
> +++ b/drivers/block/sunvdc.c
> @@ -918,12 +918,12 @@ struct vdc_check_port_data {
> char *type;
> };
>
> -static int vdc_device_probed(struct device *dev, void *arg)
> +static int vdc_device_probed(struct device *dev, const void *arg)
> {
> struct vio_dev *vdev = to_vio_dev(dev);
> - struct vdc_check_port_data *port_data;
> + const struct vdc_check_port_data *port_data;
>
> - port_data = (struct vdc_check_port_data *)arg;
> + port_data = (const struct vdc_check_port_data *)arg;
>
> if ((vdev->dev_no == port_data->dev_no) &&
> (!(strcmp((char *)&vdev->type, port_data->type))) &&
> diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
> index 11c8fadcf85148b4e4ea6b97b7efb6d4ddf22d3c..52053f7c6d9a654ba46c6579c6a3c5c3faaa75c1 100644
> --- a/drivers/bus/fsl-mc/dprc-driver.c
> +++ b/drivers/bus/fsl-mc/dprc-driver.c
> @@ -112,9 +112,9 @@ void dprc_remove_devices(struct fsl_mc_device *mc_bus_dev,
> }
> EXPORT_SYMBOL_GPL(dprc_remove_devices);
>
> -static int __fsl_mc_device_match(struct device *dev, void *data)
> +static int __fsl_mc_device_match(struct device *dev, const void *data)
> {
> - struct fsl_mc_obj_desc *obj_desc = data;
> + const struct fsl_mc_obj_desc *obj_desc = data;
> struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
>
> return fsl_mc_device_match(mc_dev, obj_desc);
> diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c
> index 9d58ab9d33c554e05ddfa2610269e6d08bfaa8e9..a3c57f96138a28c9f30562d554c42cb5224bcf4b 100644
> --- a/drivers/cxl/core/pci.c
> +++ b/drivers/cxl/core/pci.c
> @@ -252,9 +252,9 @@ static int devm_cxl_enable_mem(struct device *host, struct cxl_dev_state *cxlds)
> }
>
> /* require dvsec ranges to be covered by a locked platform window */
> -static int dvsec_range_allowed(struct device *dev, void *arg)
> +static int dvsec_range_allowed(struct device *dev, const void *arg)
> {
> - struct range *dev_range = arg;
> + const struct range *dev_range = arg;
> struct cxl_decoder *cxld;
>
> if (!is_root_decoder(dev))
> diff --git a/drivers/cxl/core/pmem.c b/drivers/cxl/core/pmem.c
> index b3378d3f6acb4c9e3601683119754e3cd6329df2..a8473de24ebfd92f12f47e0556e28b81a29cff7c 100644
> --- a/drivers/cxl/core/pmem.c
> +++ b/drivers/cxl/core/pmem.c
> @@ -57,7 +57,7 @@ bool is_cxl_nvdimm_bridge(struct device *dev)
> }
> EXPORT_SYMBOL_NS_GPL(is_cxl_nvdimm_bridge, "CXL");
>
> -static int match_nvdimm_bridge(struct device *dev, void *data)
> +static int match_nvdimm_bridge(struct device *dev, const void *data)
> {
> return is_cxl_nvdimm_bridge(dev);
> }
> diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> index d778996507984a759bbe84e7acac3774e0c7af98..bfecd71040c2f4373645380b4c31327d8b42d095 100644
> --- a/drivers/cxl/core/region.c
> +++ b/drivers/cxl/core/region.c
> @@ -792,7 +792,7 @@ static int check_commit_order(struct device *dev, const void *data)
> return 0;
> }
>
> -static int match_free_decoder(struct device *dev, void *data)
> +static int match_free_decoder(struct device *dev, const void *data)
> {
> struct cxl_port *port = to_cxl_port(dev->parent);
> struct cxl_decoder *cxld;
> @@ -824,9 +824,9 @@ static int match_free_decoder(struct device *dev, void *data)
> return 1;
> }
>
> -static int match_auto_decoder(struct device *dev, void *data)
> +static int match_auto_decoder(struct device *dev, const void *data)
> {
> - struct cxl_region_params *p = data;
> + const struct cxl_region_params *p = data;
> struct cxl_decoder *cxld;
> struct range *r;
>
> @@ -1722,10 +1722,12 @@ static struct cxl_port *next_port(struct cxl_port *port)
> return port->parent_dport->port;
> }
>
> -static int match_switch_decoder_by_range(struct device *dev, void *data)
> +static int match_switch_decoder_by_range(struct device *dev,
> + const void *data)
> {
> struct cxl_switch_decoder *cxlsd;
> - struct range *r1, *r2 = data;
> + const struct range *r1, *r2 = data;
> +
>
> if (!is_switch_decoder(dev))
> return 0;
> @@ -3176,9 +3178,10 @@ static int devm_cxl_add_dax_region(struct cxl_region *cxlr)
> return rc;
> }
>
> -static int match_root_decoder_by_range(struct device *dev, void *data)
> +static int match_root_decoder_by_range(struct device *dev,
> + const void *data)
> {
> - struct range *r1, *r2 = data;
> + const struct range *r1, *r2 = data;
> struct cxl_root_decoder *cxlrd;
>
> if (!is_root_decoder(dev))
> @@ -3189,11 +3192,11 @@ static int match_root_decoder_by_range(struct device *dev, void *data)
> return range_contains(r1, r2);
> }
>
> -static int match_region_by_range(struct device *dev, void *data)
> +static int match_region_by_range(struct device *dev, const void *data)
> {
> struct cxl_region_params *p;
> struct cxl_region *cxlr;
> - struct range *r = data;
> + const struct range *r = data;
> int rc = 0;
>
> if (!is_cxl_region(dev))
> diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
> index a99fe35f1f0d1a2e585ac49b86cc6fd0807cffb6..ec3e21ad202520dda745064b954c853a26d03e3d 100644
> --- a/drivers/firewire/core-device.c
> +++ b/drivers/firewire/core-device.c
> @@ -988,7 +988,7 @@ int fw_device_set_broadcast_channel(struct device *dev, void *gen)
> return 0;
> }
>
> -static int compare_configuration_rom(struct device *dev, void *data)
> +static int compare_configuration_rom(struct device *dev, const void *data)
> {
> const struct fw_device *old = fw_device(dev);
> const u32 *config_rom = data;
> @@ -1039,7 +1039,7 @@ static void fw_device_init(struct work_struct *work)
> //
> // serialize config_rom access.
> scoped_guard(rwsem_read, &fw_device_rwsem) {
> - found = device_find_child(card->device, (void *)device->config_rom,
> + found = device_find_child(card->device, device->config_rom,
> compare_configuration_rom);
> }
> if (found) {
> diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
> index 157172a5f2b577ce4f04425f967f548230c1ebed..a3386bf36de508d312e2c4fa2e27ba62ba3776a0 100644
> --- a/drivers/firmware/arm_scmi/bus.c
> +++ b/drivers/firmware/arm_scmi/bus.c
> @@ -238,10 +238,10 @@ static int scmi_dev_match(struct device *dev, const struct device_driver *drv)
> return 0;
> }
>
> -static int scmi_match_by_id_table(struct device *dev, void *data)
> +static int scmi_match_by_id_table(struct device *dev, const void *data)
> {
> struct scmi_device *sdev = to_scmi_dev(dev);
> - struct scmi_device_id *id_table = data;
> + const struct scmi_device_id *id_table = data;
>
> return sdev->protocol_id == id_table->protocol_id &&
> (id_table->name && !strcmp(sdev->name, id_table->name));
> diff --git a/drivers/firmware/efi/dev-path-parser.c b/drivers/firmware/efi/dev-path-parser.c
> index 937be269fee86d5d71256758aed94741e794431c..13ea141c0defb5e80d5af43cca73cf527444a238 100644
> --- a/drivers/firmware/efi/dev-path-parser.c
> +++ b/drivers/firmware/efi/dev-path-parser.c
> @@ -47,9 +47,9 @@ static long __init parse_acpi_path(const struct efi_dev_path *node,
> return 0;
> }
>
> -static int __init match_pci_dev(struct device *dev, void *data)
> +static int __init match_pci_dev(struct device *dev, const void *data)
> {
> - unsigned int devfn = *(unsigned int *)data;
> + unsigned int devfn = *(const unsigned int *)data;
>
> return dev_is_pci(dev) && to_pci_dev(dev)->devfn == devfn;
> }
> diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c
> index f387dad81f2960b5ec3c1b5fd04081ee501cc75b..370b71513bdb529112e157fa22a5451e02502a17 100644
> --- a/drivers/gpio/gpio-sim.c
> +++ b/drivers/gpio/gpio-sim.c
> @@ -413,7 +413,7 @@ static int gpio_sim_setup_sysfs(struct gpio_sim_chip *chip)
> return devm_add_action_or_reset(dev, gpio_sim_sysfs_remove, chip);
> }
>
> -static int gpio_sim_dev_match_fwnode(struct device *dev, void *data)
> +static int gpio_sim_dev_match_fwnode(struct device *dev, const void *data)
> {
> return device_match_fwnode(dev, data);
> }
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 0829ceb9967ca5d03509c52a559494d58776077b..4aeb393b58e636225ba3b529e4529f3028219e62 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -359,7 +359,7 @@ static const struct of_device_id mtk_drm_of_ids[] = {
> };
> MODULE_DEVICE_TABLE(of, mtk_drm_of_ids);
>
> -static int mtk_drm_match(struct device *dev, void *data)
> +static int mtk_drm_match(struct device *dev, const void *data)
> {
> if (!strncmp(dev_name(dev), "mediatek-drm", sizeof("mediatek-drm") - 1))
> return true;
> diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
> index bbb9cc44e29fbc635706db5bed21f3b8a1cd4987..6552ee5186896e9290658a26d8f230849aacafa6 100644
> --- a/drivers/hwmon/hwmon.c
> +++ b/drivers/hwmon/hwmon.c
> @@ -341,7 +341,7 @@ static int hwmon_attr_base(enum hwmon_sensor_types type)
>
> static DEFINE_MUTEX(hwmon_pec_mutex);
>
> -static int hwmon_match_device(struct device *dev, void *data)
> +static int hwmon_match_device(struct device *dev, const void *data)
> {
> return dev->class == &hwmon_class;
> }
> diff --git a/drivers/media/pci/mgb4/mgb4_core.c b/drivers/media/pci/mgb4/mgb4_core.c
> index bc63dc81bcae0d20924174be74b93a2139d5879f..697d50bedfe285d74c702efde61e510df87c1229 100644
> --- a/drivers/media/pci/mgb4/mgb4_core.c
> +++ b/drivers/media/pci/mgb4/mgb4_core.c
> @@ -123,7 +123,7 @@ static const struct hwmon_chip_info temp_chip_info = {
> };
> #endif
>
> -static int match_i2c_adap(struct device *dev, void *data)
> +static int match_i2c_adap(struct device *dev, const void *data)
> {
> return i2c_verify_adapter(dev) ? 1 : 0;
> }
> @@ -139,7 +139,7 @@ static struct i2c_adapter *get_i2c_adap(struct platform_device *pdev)
> return dev ? to_i2c_adapter(dev) : NULL;
> }
>
> -static int match_spi_adap(struct device *dev, void *data)
> +static int match_spi_adap(struct device *dev, const void *data)
> {
> return to_spi_device(dev) ? 1 : 0;
> }
> diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
> index 2237715e42eb32a14a4134746739a0df5ca27414..0ccf4a9e523a52ef52a96a339ecff0bcb51b214b 100644
> --- a/drivers/nvdimm/bus.c
> +++ b/drivers/nvdimm/bus.c
> @@ -1212,7 +1212,7 @@ enum nd_ioctl_mode {
> DIMM_IOCTL,
> };
>
> -static int match_dimm(struct device *dev, void *data)
> +static int match_dimm(struct device *dev, const void *data)
> {
> long id = (long) data;
>
> diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> index 675b252d9c8ce74705ef245faae42e2c1330ed15..14144d0fa38e0c4e0bc34b9c929e127f1b2e96b6 100644
> --- a/drivers/pwm/core.c
> +++ b/drivers/pwm/core.c
> @@ -1276,7 +1276,7 @@ static int pwm_export_child(struct device *pwmchip_dev, struct pwm_device *pwm)
> return 0;
> }
>
> -static int pwm_unexport_match(struct device *pwm_dev, void *data)
> +static int pwm_unexport_match(struct device *pwm_dev, const void *data)
> {
> return pwm_from_dev(pwm_dev) == data;
> }
> diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> index 712c06c02696663821c8c884bcbd83036098899b..207b64c0a2fe9ccdb03b4ed66d1cee81e6f4c1ae 100644
> --- a/drivers/rpmsg/rpmsg_core.c
> +++ b/drivers/rpmsg/rpmsg_core.c
> @@ -377,9 +377,9 @@ EXPORT_SYMBOL(rpmsg_get_mtu);
> * this is used to make sure we're not creating rpmsg devices for channels
> * that already exist.
> */
> -static int rpmsg_device_match(struct device *dev, void *data)
> +static int rpmsg_device_match(struct device *dev, const void *data)
> {
> - struct rpmsg_channel_info *chinfo = data;
> + const struct rpmsg_channel_info *chinfo = data;
> struct rpmsg_device *rpdev = to_rpmsg_device(dev);
>
> if (chinfo->src != RPMSG_ADDR_ANY && chinfo->src != rpdev->src)
> diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
> index d91f54a6e752f2feb68da69f474375f1415f33a2..133f36457b283a53b4dca29adf081f385a371368 100644
> --- a/drivers/scsi/qla4xxx/ql4_os.c
> +++ b/drivers/scsi/qla4xxx/ql4_os.c
> @@ -7189,7 +7189,8 @@ static void qla4xxx_build_new_nt_list(struct scsi_qla_host *ha,
> * 1: if flashnode entry is non-persistent
> * 0: if flashnode entry is persistent
> **/
> -static int qla4xxx_sysfs_ddb_is_non_persistent(struct device *dev, void *data)
> +static int qla4xxx_sysfs_ddb_is_non_persistent(struct device *dev,
> + const void *data)
> {
> struct iscsi_bus_flash_session *fnode_sess;
>
> diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
> index fde7de3b1e55381f7cd468ad308a3e4ee9417c8c..0d474de2d960a865c52c9e7253f173d70ddd8f16 100644
> --- a/drivers/scsi/scsi_transport_iscsi.c
> +++ b/drivers/scsi/scsi_transport_iscsi.c
> @@ -1324,7 +1324,7 @@ EXPORT_SYMBOL_GPL(iscsi_create_flashnode_conn);
> * 1 on success
> * 0 on failure
> */
> -static int iscsi_is_flashnode_conn_dev(struct device *dev, void *data)
> +static int iscsi_is_flashnode_conn_dev(struct device *dev, const void *data)
> {
> return dev->bus == &iscsi_flashnode_bus;
> }
> @@ -1335,7 +1335,7 @@ static int iscsi_destroy_flashnode_conn(struct iscsi_bus_flash_conn *fnode_conn)
> return 0;
> }
>
> -static int flashnode_match_index(struct device *dev, void *data)
> +static int flashnode_match_index(struct device *dev, const void *data)
> {
> struct iscsi_bus_flash_session *fnode_sess = NULL;
> int ret = 0;
> @@ -1344,7 +1344,7 @@ static int flashnode_match_index(struct device *dev, void *data)
> goto exit_match_index;
>
> fnode_sess = iscsi_dev_to_flash_session(dev);
> - ret = (fnode_sess->target_id == *((int *)data)) ? 1 : 0;
> + ret = (fnode_sess->target_id == *((const int *)data)) ? 1 : 0;
>
> exit_match_index:
> return ret;
> @@ -1389,8 +1389,8 @@ iscsi_get_flashnode_by_index(struct Scsi_Host *shost, uint32_t idx)
> * %NULL on failure
> */
> struct device *
> -iscsi_find_flashnode_sess(struct Scsi_Host *shost, void *data,
> - int (*fn)(struct device *dev, void *data))
> +iscsi_find_flashnode_sess(struct Scsi_Host *shost, const void *data,
> + device_match_t fn)
> {
> return device_find_child(&shost->shost_gendev, data, fn);
> }
> diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
> index b5d5bbb9fdb6614ffd578f5754226b50e394f0df..ab927fd077cb4fe1e29c004269fe52b2896c302f 100644
> --- a/drivers/slimbus/core.c
> +++ b/drivers/slimbus/core.c
> @@ -337,9 +337,9 @@ static bool slim_eaddr_equal(const struct slim_eaddr *a,
> a->instance == b->instance);
> }
>
> -static int slim_match_dev(struct device *dev, void *data)
> +static int slim_match_dev(struct device *dev, const void *data)
> {
> - struct slim_eaddr *e_addr = data;
> + const struct slim_eaddr *e_addr = data;
> struct slim_device *sbdev = to_slim_device(dev);
>
> return slim_eaddr_equal(&sbdev->e_addr, e_addr);
> @@ -385,9 +385,9 @@ struct slim_device *slim_get_device(struct slim_controller *ctrl,
> }
> EXPORT_SYMBOL_GPL(slim_get_device);
>
> -static int of_slim_match_dev(struct device *dev, void *data)
> +static int of_slim_match_dev(struct device *dev, const void *data)
> {
> - struct device_node *np = data;
> + const struct device_node *np = data;
> struct slim_device *sbdev = to_slim_device(dev);
>
> return (sbdev->dev.of_node == np);
> diff --git a/drivers/thunderbolt/retimer.c b/drivers/thunderbolt/retimer.c
> index 89d2919d0193e8f5c68e669d054f3efc7abf78c8..21d2902c6102f0f593fb0c6d645acaff31ebb274 100644
> --- a/drivers/thunderbolt/retimer.c
> +++ b/drivers/thunderbolt/retimer.c
> @@ -461,7 +461,7 @@ struct tb_retimer_lookup {
> u8 index;
> };
>
> -static int retimer_match(struct device *dev, void *data)
> +static int retimer_match(struct device *dev, const void *data)
> {
> const struct tb_retimer_lookup *lookup = data;
> struct tb_retimer *rt = tb_to_retimer(dev);
> diff --git a/drivers/thunderbolt/xdomain.c b/drivers/thunderbolt/xdomain.c
> index 11a50c86a1e4302968f44dafeab47977bac01dd5..b0630e6d94726f9069c20017876ec7e212071686 100644
> --- a/drivers/thunderbolt/xdomain.c
> +++ b/drivers/thunderbolt/xdomain.c
> @@ -1026,7 +1026,7 @@ static int remove_missing_service(struct device *dev, void *data)
> return 0;
> }
>
> -static int find_service(struct device *dev, void *data)
> +static int find_service(struct device *dev, const void *data)
> {
> const struct tb_property *p = data;
> struct tb_service *svc;
> diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
> index 74fa02b237729931928b2ae4902c699ec017af94..8e0aa2c76d4037047a16f6c631eccaa066d8f230 100644
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -2365,9 +2365,9 @@ struct uart_match {
> struct uart_driver *driver;
> };
>
> -static int serial_match_port(struct device *dev, void *data)
> +static int serial_match_port(struct device *dev, const void *data)
> {
> - struct uart_match *match = data;
> + const struct uart_match *match = data;
> struct tty_driver *tty_drv = match->driver->tty_driver;
> dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
> match->port->line;
> diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
> index 4b3047e055a3737d3eb841e00fc976a70f8c9c3e..601a81aa1e1024265f2359393dee531a7779c6ea 100644
> --- a/drivers/usb/typec/class.c
> +++ b/drivers/usb/typec/class.c
> @@ -229,10 +229,10 @@ static const char * const usb_modes[] = {
> /* ------------------------------------------------------------------------- */
> /* Alternate Modes */
>
> -static int altmode_match(struct device *dev, void *data)
> +static int altmode_match(struct device *dev, const void *data)
> {
> struct typec_altmode *adev = to_typec_altmode(dev);
> - struct typec_device_id *id = data;
> + const struct typec_device_id *id = data;
>
> if (!is_typec_altmode(dev))
> return 0;
> @@ -1282,7 +1282,7 @@ const struct device_type typec_cable_dev_type = {
> .release = typec_cable_release,
> };
>
> -static int cable_match(struct device *dev, void *data)
> +static int cable_match(struct device *dev, const void *data)
> {
> return is_typec_cable(dev);
> }
> @@ -2028,7 +2028,7 @@ const struct device_type typec_port_dev_type = {
> /* --------------------------------------- */
> /* Driver callbacks to report role updates */
>
> -static int partner_match(struct device *dev, void *data)
> +static int partner_match(struct device *dev, const void *data)
> {
> return is_typec_partner(dev);
> }
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 667cb6db9019349c9db0233acf9e78ff6a6d9625..0e0bc9bfe0d15a8734bf3d34106300f4df6b5364 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -1081,8 +1081,8 @@ int device_for_each_child_reverse(struct device *dev, void *data,
> int device_for_each_child_reverse_from(struct device *parent,
> struct device *from, const void *data,
> int (*fn)(struct device *, const void *));
> -struct device *device_find_child(struct device *dev, void *data,
> - int (*match)(struct device *dev, void *data));
> +struct device *device_find_child(struct device *dev, const void *data,
> + device_match_t match);
> struct device *device_find_child_by_name(struct device *parent,
> const char *name);
> struct device *device_find_any_child(struct device *parent);
> diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
> index bd1243657c019962853849b07fc2ae190ec3b557..4d3baf324900f4b2b1ff3a5724b7ca7d122dc468 100644
> --- a/include/scsi/scsi_transport_iscsi.h
> +++ b/include/scsi/scsi_transport_iscsi.h
> @@ -497,8 +497,8 @@ extern void iscsi_destroy_all_flashnode(struct Scsi_Host *shost);
> extern int iscsi_flashnode_bus_match(struct device *dev,
> const struct device_driver *drv);
> extern struct device *
> -iscsi_find_flashnode_sess(struct Scsi_Host *shost, void *data,
> - int (*fn)(struct device *dev, void *data));
> +iscsi_find_flashnode_sess(struct Scsi_Host *shost, const void *data,
> + device_match_t fn);
> extern struct device *
> iscsi_find_flashnode_conn(struct iscsi_bus_flash_session *fnode_sess);
>
> diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
> index 5a7c0e565a894545ee14f0e0186ed3c46b809b16..e827775baf2ee1d0e1c0ce5807c2cca5c372fc75 100644
> --- a/net/dsa/dsa.c
> +++ b/net/dsa/dsa.c
> @@ -1367,7 +1367,7 @@ static int dsa_switch_parse_of(struct dsa_switch *ds, struct device_node *dn)
> return dsa_switch_parse_ports_of(ds, dn);
> }
>
> -static int dev_is_class(struct device *dev, void *class)
> +static int dev_is_class(struct device *dev, const void *class)
> {
> if (dev->class != NULL && !strcmp(dev->class->name, class))
> return 1;
> diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
> index d0337c11f9ee675b0c461c8ae28e50957dc644ce..cc8948f49117a98086b3ef2ea7a8de0ce1ec36a5 100644
> --- a/tools/testing/cxl/test/cxl.c
> +++ b/tools/testing/cxl/test/cxl.c
> @@ -725,7 +725,7 @@ static void default_mock_decoder(struct cxl_decoder *cxld)
> cxld->reset = mock_decoder_reset;
> }
>
> -static int first_decoder(struct device *dev, void *data)
> +static int first_decoder(struct device *dev, const void *data)
> {
> struct cxl_decoder *cxld;
>
>
> --
> 2.34.1
>
>