summaryrefslogtreecommitdiffstats
path: root/drivers/staging/vt6656/usbpipe.c
diff options
context:
space:
mode:
authorMalcolm Priestley2014-06-29 00:55:42 +0200
committerGreg Kroah-Hartman2014-06-29 23:25:53 +0200
commit8cffb3cf06ee91a9d1c83305d1ba163b0a4dc411 (patch)
tree199891b357aeb5e9e0599fa282bb7ec3ae3a6390 /drivers/staging/vt6656/usbpipe.c
parentstaging: vt6656: vnt_tx_packet remove first assignment of time_stamp. (diff)
downloadkernel-qcow2-linux-8cffb3cf06ee91a9d1c83305d1ba163b0a4dc411.tar.gz
kernel-qcow2-linux-8cffb3cf06ee91a9d1c83305d1ba163b0a4dc411.tar.xz
kernel-qcow2-linux-8cffb3cf06ee91a9d1c83305d1ba163b0a4dc411.zip
staging: vt6656: Remove rx handing from RXvWorkItem
In s_nsBulkInUsbIoCompleteRead reuse or reallocate sb_buff and resubmit urb. In device_alloc_bufs allocate memory to rcb individually and call PIPEnsBulkInUsbRead to submit the urbs Change handling to free rcb in device_free_rx_bufs Remove calls to workqueue. Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/vt6656/usbpipe.c')
-rw-r--r--drivers/staging/vt6656/usbpipe.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c
index 6a7e69233164..428193e1497f 100644
--- a/drivers/staging/vt6656/usbpipe.c
+++ b/drivers/staging/vt6656/usbpipe.c
@@ -230,9 +230,6 @@ int PIPEnsBulkInUsbRead(struct vnt_private *priv, struct vnt_rcb *rcb)
int status = 0;
struct urb *urb;
- if (priv->Flags & fMP_DISCONNECTED)
- return STATUS_FAILURE;
-
urb = rcb->pUrb;
if (rcb->skb == NULL) {
dev_dbg(&priv->usb->dev, "rcb->skb is null\n");
@@ -303,16 +300,24 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb)
spin_unlock_irqrestore(&priv->lock, flags);
}
- rcb->Ref--;
- if (rcb->Ref == 0) {
- dev_dbg(&priv->usb->dev,
- "RxvFreeNormal %d\n", priv->NumRecvFreeList);
+ if (re_alloc_skb) {
+ rcb->skb = dev_alloc_skb(priv->rx_buf_sz);
+ if (!rcb->skb) {
+ dev_dbg(&priv->usb->dev, "Failed to re-alloc rx skb\n");
- spin_lock_irqsave(&priv->lock, flags);
+ rcb->bBoolInUse = false;
- RXvFreeRCB(rcb, re_alloc_skb);
+ return;
+ }
- spin_unlock_irqrestore(&priv->lock, flags);
+ urb->transfer_buffer = skb_put(rcb->skb,
+ skb_tailroom(rcb->skb));
+ }
+
+ if (usb_submit_urb(urb, GFP_ATOMIC)) {
+ dev_dbg(&priv->usb->dev, "Failed to re submit rx skb\n");
+
+ rcb->bBoolInUse = false;
}
return;