diff options
author | Malcolm Priestley | 2014-06-29 00:55:42 +0200 |
---|---|---|
committer | Greg Kroah-Hartman | 2014-06-29 23:25:53 +0200 |
commit | 8cffb3cf06ee91a9d1c83305d1ba163b0a4dc411 (patch) | |
tree | 199891b357aeb5e9e0599fa282bb7ec3ae3a6390 /drivers/staging/vt6656/usbpipe.c | |
parent | staging: vt6656: vnt_tx_packet remove first assignment of time_stamp. (diff) | |
download | kernel-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.c | 25 |
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; |