Subject: ALSA: seq: Remove autoload locks in driver registration
authorTakashi Iwai <tiwai@suse.de>
Wed, 15 Oct 2014 12:09:42 +0000 (14:09 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sat, 18 Oct 2014 18:25:19 +0000 (20:25 +0200)
Since we're calling request_module() asynchronously now, we can get
rid of the autoload lock in snd_seq_device_register_driver(), as well
as in the snd-seq driver registration itself.  This enables the
automatic loading of dependent sequencer modules, such as
snd-seq-virmidi from snd-emu10k1-synth.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/seq/seq.c
sound/core/seq/seq_device.c

index bebdd2e920ca1c99485371818e3f30c4056723fb..7e0aabb808a66007d3719be8ca7885a611164ed3 100644 (file)
@@ -86,7 +86,6 @@ static int __init alsa_seq_init(void)
 {
        int err;
 
-       snd_seq_autoload_lock();
        if ((err = client_init_data()) < 0)
                goto error;
 
@@ -112,7 +111,6 @@ static int __init alsa_seq_init(void)
 
        snd_seq_autoload_init();
  error:
-       snd_seq_autoload_unlock();
        return err;
 }
 
index a8e2c60168004d0f1415ae5f5c6cbe0fd4ffaabb..0631bdadd12bd6ca884bf68578ac8fd7917a3f6b 100644 (file)
@@ -360,16 +360,12 @@ int snd_seq_device_register_driver(char *id, struct snd_seq_dev_ops *entry,
            entry->init_device == NULL || entry->free_device == NULL)
                return -EINVAL;
 
-       snd_seq_autoload_lock();
        ops = find_driver(id, 1);
-       if (ops == NULL) {
-               snd_seq_autoload_unlock();
+       if (ops == NULL)
                return -ENOMEM;
-       }
        if (ops->driver & DRIVER_LOADED) {
                pr_warn("ALSA: seq: driver_register: driver '%s' already exists\n", id);
                unlock_driver(ops);
-               snd_seq_autoload_unlock();
                return -EBUSY;
        }
 
@@ -386,7 +382,6 @@ int snd_seq_device_register_driver(char *id, struct snd_seq_dev_ops *entry,
        mutex_unlock(&ops->reg_mutex);
 
        unlock_driver(ops);
-       snd_seq_autoload_unlock();
 
        return 0;
 }