Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d856626d authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'linux-can-fixes-for-4.5-20160221' of...

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: default avatarDavid S. Miller <davem@davemloft.net>
parents dd78dac8 90cfde46
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -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);
		}
	}