ALSA: asihpi - bug fix pa use before init.
authorEliot Blennerhassett <eblennerhassett@audioscience.com>
Wed, 27 Jul 2011 08:03:51 +0000 (20:03 +1200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 27 Jul 2011 08:08:26 +0000 (10:08 +0200)
Fixes bug introduced by 1c073b67.
Also declare pa local to block in which it is used.

Signed-off-by: Eliot Blennerhassett <eblennerhassett@audioscience.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/asihpi/hpioctl.c

index 65fcf4770731d1e0fa5606112f3c741f38dab7b0..e0cff0c72e51152bdee63dd600f281abe6c77bdb 100644 (file)
@@ -107,7 +107,6 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        union hpi_response_buffer_v1 *hr;
        u16 res_max_size;
        u32 uncopied_bytes;
-       struct hpi_adapter *pa = NULL;
        int err = 0;
 
        if (cmd != HPI_IOCTL_LINUX)
@@ -182,6 +181,7 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                /* -1=no data 0=read from user mem, 1=write to user mem */
                int wrflag = -1;
                u32 adapter = hm->h.adapter_index;
+               struct hpi_adapter *pa = &adapters[adapter];
 
                if ((adapter > HPI_MAX_ADAPTERS) || (!pa->type)) {
                        hpi_init_response(&hr->r0, HPI_OBJ_ADAPTER,
@@ -197,9 +197,7 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        goto out;
                }
 
-               pa = &adapters[adapter];
-
-               if (mutex_lock_interruptible(&adapters[adapter].mutex)) {
+               if (mutex_lock_interruptible(&pa->mutex)) {
                        err = -EINTR;
                        goto out;
                }
@@ -235,8 +233,7 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                                                        "stream buffer size %d\n",
                                                        size);
 
-                                               mutex_unlock(&adapters
-                                                       [adapter].mutex);
+                                               mutex_unlock(&pa->mutex);
                                                err = -EINVAL;
                                                goto out;
                                        }
@@ -277,7 +274,7 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                                        uncopied_bytes, size);
                }
 
-               mutex_unlock(&adapters[adapter].mutex);
+               mutex_unlock(&pa->mutex);
        }
 
        /* on return response size must be set */