sound: make all 'class' structures const

Now that the driver core allows for struct class to be in read-only
memory, making all 'class' structures to be declared at build time
placing them into read-only memory, instead of having to be dynamically
allocated at load time.

Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Takashi Iwai <tiwai@suse.com>
Cc: Ivan Orlov <ivan.orlov0322@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Geoff Levand <geoff@infradead.org>
Cc: Thierry Reding <treding@nvidia.com>
Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: alsa-devel@alsa-project.org
Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20230620175633.641141-2-gregkh@linuxfoundation.org
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Ivan Orlov 2023-06-20 19:56:34 +02:00 committed by Takashi Iwai
parent 7ea9ee0064
commit 8d0cf150d2
4 changed files with 16 additions and 15 deletions

View File

@ -232,7 +232,7 @@ static inline struct device *snd_card_get_device_link(struct snd_card *card)
extern int snd_major; extern int snd_major;
extern int snd_ecards_limit; extern int snd_ecards_limit;
extern struct class *sound_class; extern const struct class sound_class;
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
extern struct dentry *sound_debugfs_root; extern struct dentry *sound_debugfs_root;
#endif #endif

View File

@ -737,7 +737,7 @@ static int __init snd_ctl_led_init(void)
unsigned int group; unsigned int group;
device_initialize(&snd_ctl_led_dev); device_initialize(&snd_ctl_led_dev);
snd_ctl_led_dev.class = sound_class; snd_ctl_led_dev.class = &sound_class;
snd_ctl_led_dev.release = snd_ctl_led_dev_release; snd_ctl_led_dev.release = snd_ctl_led_dev_release;
dev_set_name(&snd_ctl_led_dev, "ctl-led"); dev_set_name(&snd_ctl_led_dev, "ctl-led");
if (device_add(&snd_ctl_led_dev)) { if (device_add(&snd_ctl_led_dev)) {

View File

@ -129,7 +129,7 @@ void snd_device_initialize(struct device *dev, struct snd_card *card)
device_initialize(dev); device_initialize(dev);
if (card) if (card)
dev->parent = &card->card_dev; dev->parent = &card->card_dev;
dev->class = sound_class; dev->class = &sound_class;
dev->release = default_release; dev->release = default_release;
} }
EXPORT_SYMBOL_GPL(snd_device_initialize); EXPORT_SYMBOL_GPL(snd_device_initialize);
@ -331,7 +331,7 @@ static int snd_card_init(struct snd_card *card, struct device *parent,
device_initialize(&card->card_dev); device_initialize(&card->card_dev);
card->card_dev.parent = parent; card->card_dev.parent = parent;
card->card_dev.class = sound_class; card->card_dev.class = &sound_class;
card->card_dev.release = release_card_device; card->card_dev.release = release_card_device;
card->card_dev.groups = card->dev_groups; card->card_dev.groups = card->dev_groups;
card->dev_groups[0] = &card_dev_attr_group; card->dev_groups[0] = &card_dev_attr_group;

View File

@ -23,9 +23,6 @@ static inline int init_oss_soundcore(void) { return 0; }
static inline void cleanup_oss_soundcore(void) { } static inline void cleanup_oss_soundcore(void) { }
#endif #endif
struct class *sound_class;
EXPORT_SYMBOL(sound_class);
MODULE_DESCRIPTION("Core sound module"); MODULE_DESCRIPTION("Core sound module");
MODULE_AUTHOR("Alan Cox"); MODULE_AUTHOR("Alan Cox");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
@ -37,6 +34,12 @@ static char *sound_devnode(const struct device *dev, umode_t *mode)
return kasprintf(GFP_KERNEL, "snd/%s", dev_name(dev)); return kasprintf(GFP_KERNEL, "snd/%s", dev_name(dev));
} }
const struct class sound_class = {
.name = "sound",
.devnode = sound_devnode,
};
EXPORT_SYMBOL(sound_class);
static int __init init_soundcore(void) static int __init init_soundcore(void)
{ {
int rc; int rc;
@ -45,21 +48,19 @@ static int __init init_soundcore(void)
if (rc) if (rc)
return rc; return rc;
sound_class = class_create("sound"); rc = class_register(&sound_class);
if (IS_ERR(sound_class)) { if (rc) {
cleanup_oss_soundcore(); cleanup_oss_soundcore();
return PTR_ERR(sound_class); return rc;
} }
sound_class->devnode = sound_devnode;
return 0; return 0;
} }
static void __exit cleanup_soundcore(void) static void __exit cleanup_soundcore(void)
{ {
cleanup_oss_soundcore(); cleanup_oss_soundcore();
class_destroy(sound_class); class_unregister(&sound_class);
} }
subsys_initcall(init_soundcore); subsys_initcall(init_soundcore);
@ -276,7 +277,7 @@ retry:
} }
} }
device_create(sound_class, dev, MKDEV(SOUND_MAJOR, s->unit_minor), device_create(&sound_class, dev, MKDEV(SOUND_MAJOR, s->unit_minor),
NULL, "%s", s->name+6); NULL, "%s", s->name+6);
return s->unit_minor; return s->unit_minor;
@ -302,7 +303,7 @@ static void sound_remove_unit(struct sound_unit **list, int unit)
if (!preclaim_oss) if (!preclaim_oss)
__unregister_chrdev(SOUND_MAJOR, p->unit_minor, 1, __unregister_chrdev(SOUND_MAJOR, p->unit_minor, 1,
p->name); p->name);
device_destroy(sound_class, MKDEV(SOUND_MAJOR, p->unit_minor)); device_destroy(&sound_class, MKDEV(SOUND_MAJOR, p->unit_minor));
kfree(p); kfree(p);
} }
} }