]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ALSA: core: fix up bus match const issues.
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 May 2025 10:08:05 +0000 (12:08 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 22 May 2025 18:29:45 +0000 (20:29 +0200)
In commit d69d80484598 ("driver core: have match() callback in struct
bus_type take a const *"), the match bus callback was changed to have
the driver be a const pointer.  Unfortunately that const attribute was
thrown away when container_of() is called, which is not correct and was
not caught by the compiler due to how container_of() is implemented.
Fix this up by correctly preserving the const attribute of the driver
passed to the bus match function which requires the hdac_driver match
function to also take a const pointer for the driver structure.

Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Takashi Iwai <tiwai@suse.com>
Fixes: d69d80484598 ("driver core: have match() callback in struct bus_type take a const *")
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://patch.msgid.link/2025052204-hyphen-thermal-3e72@gregkh
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/hdaudio.h
sound/core/seq_device.c
sound/hda/hda_bus_type.c
sound/pci/hda/hda_bind.c

index b098ceadbe74bff4999442f625dfe522a934101a..9a70048adbc069497d0d79458393c9d627612904 100644 (file)
@@ -223,7 +223,7 @@ struct hdac_driver {
        struct device_driver driver;
        int type;
        const struct hda_device_id *id_table;
-       int (*match)(struct hdac_device *dev, struct hdac_driver *drv);
+       int (*match)(struct hdac_device *dev, const struct hdac_driver *drv);
        void (*unsol_event)(struct hdac_device *dev, unsigned int event);
 
        /* fields used by ext bus APIs */
@@ -235,7 +235,7 @@ struct hdac_driver {
 #define drv_to_hdac_driver(_drv) container_of(_drv, struct hdac_driver, driver)
 
 const struct hda_device_id *
-hdac_get_device_id(struct hdac_device *hdev, struct hdac_driver *drv);
+hdac_get_device_id(struct hdac_device *hdev, const struct hdac_driver *drv);
 
 /*
  * Bus verb operators
index 4492be5d2317c7dfceaab354c72e3f07c4070c16..bac9f860373425199074215232af591f4fb6da96 100644 (file)
@@ -43,7 +43,7 @@ MODULE_LICENSE("GPL");
 static int snd_seq_bus_match(struct device *dev, const struct device_driver *drv)
 {
        struct snd_seq_device *sdev = to_seq_dev(dev);
-       struct snd_seq_driver *sdrv = to_seq_drv(drv);
+       const struct snd_seq_driver *sdrv = to_seq_drv(drv);
 
        return strcmp(sdrv->id, sdev->id) == 0 &&
                sdrv->argsize == sdev->argsize;
index 7545ace7b0ee4bbda384edc20e0ccd84af4c083d..eb72a7af2e56e85965eabf5cefb84bc4035db774 100644 (file)
@@ -21,7 +21,7 @@ MODULE_LICENSE("GPL");
  * driver id_table and returns the matching device id entry.
  */
 const struct hda_device_id *
-hdac_get_device_id(struct hdac_device *hdev, struct hdac_driver *drv)
+hdac_get_device_id(struct hdac_device *hdev, const struct hdac_driver *drv)
 {
        if (drv->id_table) {
                const struct hda_device_id *id  = drv->id_table;
@@ -38,7 +38,7 @@ hdac_get_device_id(struct hdac_device *hdev, struct hdac_driver *drv)
 }
 EXPORT_SYMBOL_GPL(hdac_get_device_id);
 
-static int hdac_codec_match(struct hdac_device *dev, struct hdac_driver *drv)
+static int hdac_codec_match(struct hdac_device *dev, const struct hdac_driver *drv)
 {
        if (hdac_get_device_id(dev, drv))
                return 1;
@@ -49,7 +49,7 @@ static int hdac_codec_match(struct hdac_device *dev, struct hdac_driver *drv)
 static int hda_bus_match(struct device *dev, const struct device_driver *drv)
 {
        struct hdac_device *hdev = dev_to_hdac_dev(dev);
-       struct hdac_driver *hdrv = drv_to_hdac_driver(drv);
+       const struct hdac_driver *hdrv = drv_to_hdac_driver(drv);
 
        if (hdev->type != hdrv->type)
                return 0;
index 9521e5e0e6e6f844b1147871ac26ce2b88eee427..1fef350d821ef07865b7e4f2dedc0f575cbf6acb 100644 (file)
 /*
  * find a matching codec id
  */
-static int hda_codec_match(struct hdac_device *dev, struct hdac_driver *drv)
+static int hda_codec_match(struct hdac_device *dev, const struct hdac_driver *drv)
 {
        struct hda_codec *codec = container_of(dev, struct hda_codec, core);
-       struct hda_codec_driver *driver =
+       const struct hda_codec_driver *driver =
                container_of(drv, struct hda_codec_driver, core);
        const struct hda_device_id *list;
        /* check probe_id instead of vendor_id if set */