[ALSA] hda-codec - Use global workqueue
authorTakashi Iwai <tiwai@suse.de>
Tue, 19 Dec 2006 16:08:52 +0000 (17:08 +0100)
committerJaroslav Kysela <perex@suse.cz>
Fri, 9 Feb 2007 08:02:40 +0000 (09:02 +0100)
Use global workqueue for simplicity.
The unsolicited event frequency isn't so high to have own queue.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_local.h

index e14faf5d50530ffc041cd747bb10dc18e135fed9..8f34fb4479837087b177c6f0c15d6eeb29caf300 100644 (file)
@@ -263,7 +263,7 @@ int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
        unsol->queue[wp] = res;
        unsol->queue[wp + 1] = res_ex;
 
-       queue_work(unsol->workq, &unsol->work);
+       schedule_work(&unsol->work);
 
        return 0;
 }
@@ -310,12 +310,6 @@ static int init_unsol_queue(struct hda_bus *bus)
                snd_printk(KERN_ERR "hda_codec: can't allocate unsolicited queue\n");
                return -ENOMEM;
        }
-       unsol->workq = create_singlethread_workqueue("hda_codec");
-       if (! unsol->workq) {
-               snd_printk(KERN_ERR "hda_codec: can't create workqueue\n");
-               kfree(unsol);
-               return -ENOMEM;
-       }
        INIT_WORK(&unsol->work, process_unsol_events);
        unsol->bus = bus;
        bus->unsol = unsol;
@@ -334,7 +328,7 @@ static int snd_hda_bus_free(struct hda_bus *bus)
        if (! bus)
                return 0;
        if (bus->unsol) {
-               destroy_workqueue(bus->unsol->workq);
+               flush_scheduled_work();
                kfree(bus->unsol);
        }
        list_for_each_safe(p, n, &bus->codec_list) {
index b2f56d6888520b9d661ffaf06b38b7d5c4784878..39718d6cdadd381435a149ecc6eb0ff62e28c8fc 100644 (file)
@@ -199,7 +199,6 @@ struct hda_bus_unsolicited {
        unsigned int rp, wp;
 
        /* workqueue */
-       struct workqueue_struct *workq;
        struct work_struct work;
        struct hda_bus *bus;
 };