staging: vt6656: lock changes: usbpipe.c add mutex lock.
PIPEnsControlOut and PIPEnsControlIn are nolonger
atomic but they do need a usb lock.
Add new mutex lock for these functions and PIPEnsControlOutAsyn.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c
index 836da00..934d0a9 100644
--- a/drivers/staging/vt6656/usbpipe.c
+++ b/drivers/staging/vt6656/usbpipe.c
@@ -82,6 +82,8 @@
return STATUS_FAILURE;
}
+ mutex_lock(&pDevice->usb_lock);
+
ntStatus = usb_control_msg(
pDevice->usb,
usb_sndctrlpipe(pDevice->usb , 0),
@@ -100,6 +102,8 @@
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"usb_sndctrlpipe fail, ntStatus= %d\n", ntStatus);
}
+ mutex_unlock(&pDevice->usb_lock);
+
return ntStatus;
}
@@ -123,6 +127,8 @@
if (pDevice->pControlURB->hcpriv)
return STATUS_FAILURE;
+ mutex_lock(&pDevice->usb_lock);
+
MP_SET_FLAG(pDevice, fMP_CONTROL_WRITES);
pDevice->sUsbCtlRequest.bRequestType = 0x40;
@@ -143,6 +149,7 @@
"control send request submission failed: %d\n",
ntStatus);
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_WRITES);
+ mutex_unlock(&pDevice->usb_lock);
return STATUS_FAILURE;
}
@@ -157,10 +164,13 @@
DBG_PRT(MSG_LEVEL_DEBUG,
KERN_INFO "control send request submission timeout\n");
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_WRITES);
+ mutex_unlock(&pDevice->usb_lock);
return STATUS_FAILURE;
}
}
+ mutex_unlock(&pDevice->usb_lock);
+
return STATUS_SUCCESS;
}
@@ -184,6 +194,8 @@
if (pDevice->pControlURB->hcpriv)
return STATUS_FAILURE;
+ mutex_lock(&pDevice->usb_lock);
+
MP_SET_FLAG(pDevice, fMP_CONTROL_READS);
pDevice->sUsbCtlRequest.bRequestType = 0xC0;
@@ -202,6 +214,7 @@
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
"control request submission failed: %d\n", ntStatus);
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
+ mutex_unlock(&pDevice->usb_lock);
return STATUS_FAILURE;
}
@@ -216,10 +229,13 @@
DBG_PRT(MSG_LEVEL_DEBUG,
KERN_INFO "control rcv request submission timeout\n");
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
+ mutex_unlock(&pDevice->usb_lock);
return STATUS_FAILURE;
}
}
+ mutex_unlock(&pDevice->usb_lock);
+
return ntStatus;
}