Commit d8f654ef authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
  at91_can: Forgotten git 'add' of at91_can.c
  TI Davinci EMAC: Fix in vector definition for EMAC_VERSION_2
  ax25: Fix ax25_cb refcounting in ax25_ctl_ioctl
  virtio_net: Check for room in the vq before adding buffer
  virtio_net: avoid (most) NETDEV_TX_BUSY by stopping queue early.
  virtio_net: formalize skb_vnet_hdr
  virtio_net: don't free buffers in xmit ring
  virtio_net: return NETDEV_TX_BUSY instead of queueing an extra skb.
  virtio_net: skb_orphan() and nf_reset() in xmit path.
parents 052a0cf6 99c4a634
This diff is collapsed.
...@@ -200,6 +200,9 @@ static const char emac_version_string[] = "TI DaVinci EMAC Linux v6.1"; ...@@ -200,6 +200,9 @@ static const char emac_version_string[] = "TI DaVinci EMAC Linux v6.1";
/** NOTE:: For DM646x the IN_VECTOR has changed */ /** NOTE:: For DM646x the IN_VECTOR has changed */
#define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC BIT(EMAC_DEF_RX_CH) #define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC BIT(EMAC_DEF_RX_CH)
#define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC BIT(16 + EMAC_DEF_TX_CH) #define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC BIT(16 + EMAC_DEF_TX_CH)
#define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT BIT(26)
#define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT BIT(27)
/* CPPI bit positions */ /* CPPI bit positions */
#define EMAC_CPPI_SOP_BIT BIT(31) #define EMAC_CPPI_SOP_BIT BIT(31)
...@@ -2167,7 +2170,11 @@ static int emac_poll(struct napi_struct *napi, int budget) ...@@ -2167,7 +2170,11 @@ static int emac_poll(struct napi_struct *napi, int budget)
emac_int_enable(priv); emac_int_enable(priv);
} }
if (unlikely(status & EMAC_DM644X_MAC_IN_VECTOR_HOST_INT)) { mask = EMAC_DM644X_MAC_IN_VECTOR_HOST_INT;
if (priv->version == EMAC_VERSION_2)
mask = EMAC_DM646X_MAC_IN_VECTOR_HOST_INT;
if (unlikely(status & mask)) {
u32 ch, cause; u32 ch, cause;
dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n"); dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n");
netif_stop_queue(ndev); netif_stop_queue(ndev);
......
This diff is collapsed.
...@@ -358,6 +358,7 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg) ...@@ -358,6 +358,7 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
ax25_dev *ax25_dev; ax25_dev *ax25_dev;
ax25_cb *ax25; ax25_cb *ax25;
unsigned int k; unsigned int k;
int ret = 0;
if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl))) if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
return -EFAULT; return -EFAULT;
...@@ -388,57 +389,63 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg) ...@@ -388,57 +389,63 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
case AX25_WINDOW: case AX25_WINDOW:
if (ax25->modulus == AX25_MODULUS) { if (ax25->modulus == AX25_MODULUS) {
if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7) if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
return -EINVAL; goto einval_put;
} else { } else {
if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63) if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
return -EINVAL; goto einval_put;
} }
ax25->window = ax25_ctl.arg; ax25->window = ax25_ctl.arg;
break; break;
case AX25_T1: case AX25_T1:
if (ax25_ctl.arg < 1) if (ax25_ctl.arg < 1)
return -EINVAL; goto einval_put;
ax25->rtt = (ax25_ctl.arg * HZ) / 2; ax25->rtt = (ax25_ctl.arg * HZ) / 2;
ax25->t1 = ax25_ctl.arg * HZ; ax25->t1 = ax25_ctl.arg * HZ;
break; break;
case AX25_T2: case AX25_T2:
if (ax25_ctl.arg < 1) if (ax25_ctl.arg < 1)
return -EINVAL; goto einval_put;
ax25->t2 = ax25_ctl.arg * HZ; ax25->t2 = ax25_ctl.arg * HZ;
break; break;
case AX25_N2: case AX25_N2:
if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31) if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
return -EINVAL; goto einval_put;
ax25->n2count = 0; ax25->n2count = 0;
ax25->n2 = ax25_ctl.arg; ax25->n2 = ax25_ctl.arg;
break; break;
case AX25_T3: case AX25_T3:
if (ax25_ctl.arg < 0) if (ax25_ctl.arg < 0)
return -EINVAL; goto einval_put;
ax25->t3 = ax25_ctl.arg * HZ; ax25->t3 = ax25_ctl.arg * HZ;
break; break;
case AX25_IDLE: case AX25_IDLE:
if (ax25_ctl.arg < 0) if (ax25_ctl.arg < 0)
return -EINVAL; goto einval_put;
ax25->idle = ax25_ctl.arg * 60 * HZ; ax25->idle = ax25_ctl.arg * 60 * HZ;
break; break;
case AX25_PACLEN: case AX25_PACLEN:
if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535) if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
return -EINVAL; goto einval_put;
ax25->paclen = ax25_ctl.arg; ax25->paclen = ax25_ctl.arg;
break; break;
default: default:
return -EINVAL; goto einval_put;
} }
return 0; out_put:
ax25_cb_put(ax25);
return ret;
einval_put:
ret = -EINVAL;
goto out_put;
} }
static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev) static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment