linux-can-fixes-for-4.5-20160221
-----BEGIN PGP SIGNATURE----- iQEcBAABCgAGBQJWycVaAAoJED07qiWsqSVqhoIIAKNVMLApOlvduZ2JQYSUJ+tC IWjRSuB3sOwCIMKx4DXWhovkTU6j00jxQiEHF5phSOA9n5n+wwJMhgZQeOehAYoS smwkKMjJhgvEd4lZ7+OBWj6Xi1mStU3ddYYubE7MkTE/4E6vsnJ6/iVbCyIv4d0F 7zGnWaq/bca+ccZyrVO9hk3mg8ZD+2L6hGR47E5vWerR4mupifMK0LvmfgIPBsMk FVMKhddDek2xUTZxdUesXCvAoOewSfhFbNG3uMH6AFKVjEhFoEC8c0Wn7zLrJ5Zn FCec9e4qXRHwQo1MgobLn6SXgrwEoPqXUFTQfNVG8rYkX/vXScXX9V7JZCCuC8U= =0Qdk -----END PGP SIGNATURE----- Merge tag 'linux-can-fixes-for-4.5-20160221' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can Marc Kleine-Budde says: ==================== pull-request: can 2016-02-21 this is a pull reqeust of one patch for net/master. The patch is by Gerhard Uttenthaler and fixes a potential tx overflow in the ems_usb driver. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
d856626d3b
|
@ -117,6 +117,9 @@ MODULE_LICENSE("GPL v2");
|
|||
*/
|
||||
#define EMS_USB_ARM7_CLOCK 8000000
|
||||
|
||||
#define CPC_TX_QUEUE_TRIGGER_LOW 25
|
||||
#define CPC_TX_QUEUE_TRIGGER_HIGH 35
|
||||
|
||||
/*
|
||||
* CAN-Message representation in a CPC_MSG. Message object type is
|
||||
* CPC_MSG_TYPE_CAN_FRAME or CPC_MSG_TYPE_RTR_FRAME or
|
||||
|
@ -278,6 +281,11 @@ static void ems_usb_read_interrupt_callback(struct urb *urb)
|
|||
switch (urb->status) {
|
||||
case 0:
|
||||
dev->free_slots = dev->intr_in_buffer[1];
|
||||
if(dev->free_slots > CPC_TX_QUEUE_TRIGGER_HIGH){
|
||||
if (netif_queue_stopped(netdev)){
|
||||
netif_wake_queue(netdev);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case -ECONNRESET: /* unlink */
|
||||
|
@ -526,8 +534,6 @@ static void ems_usb_write_bulk_callback(struct urb *urb)
|
|||
/* Release context */
|
||||
context->echo_index = MAX_TX_URBS;
|
||||
|
||||
if (netif_queue_stopped(netdev))
|
||||
netif_wake_queue(netdev);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -587,7 +593,7 @@ static int ems_usb_start(struct ems_usb *dev)
|
|||
int err, i;
|
||||
|
||||
dev->intr_in_buffer[0] = 0;
|
||||
dev->free_slots = 15; /* initial size */
|
||||
dev->free_slots = 50; /* initial size */
|
||||
|
||||
for (i = 0; i < MAX_RX_URBS; i++) {
|
||||
struct urb *urb = NULL;
|
||||
|
@ -835,7 +841,7 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *ne
|
|||
|
||||
/* Slow down tx path */
|
||||
if (atomic_read(&dev->active_tx_urbs) >= MAX_TX_URBS ||
|
||||
dev->free_slots < 5) {
|
||||
dev->free_slots < CPC_TX_QUEUE_TRIGGER_LOW) {
|
||||
netif_stop_queue(netdev);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue