mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
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: net: Fix percpu counters deadlock cpumask: prepare for iterators to only go to nr_cpu_ids/nr_cpumask_bits: net drivers/net/usb: use USB API functions rather than constants cls_cgroup: clean up Kconfig cls_cgroup: clean up for cgroup part cls_cgroup: fix an oops when removing a cgroup EtherExpress16: fix printing timed out status mlx4_en: Added "set_ringparam" Ethtool interface implementation mlx4_en: Always allocate RX ring for each interrupt vector mlx4_en: Verify number of RX rings doesn't exceed MAX_RX_RINGS IPVS: Make "no destination available" message more consistent between schedulers net: KS8695: removed duplicated #include tun: Fix SIOCSIFHWADDR error. smsc911x: compile fix re netif_rx signature changes netns: foreach_netdev_safe is insufficient in default_device_exit net: make xfrm_statistics_seq_show use generic snmp_fold_field net: Fix more NAPI interface netdev argument drop fallout. net: Fix unused variable warnings in pasemi_mac.c and spider_net.c
This commit is contained in:
commit
5ed1836814
38 changed files with 176 additions and 143 deletions
|
|
@ -307,7 +307,7 @@ poll_some_more:
|
|||
}
|
||||
spin_unlock_irq(&ep->rx_lock);
|
||||
|
||||
if (more && netif_rx_reschedule(dev, napi))
|
||||
if (more && netif_rx_reschedule(napi))
|
||||
goto poll_some_more;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -504,7 +504,7 @@ static int eth_poll(struct napi_struct *napi, int budget)
|
|||
netif_rx_complete(napi);
|
||||
qmgr_enable_irq(rxq);
|
||||
if (!qmgr_stat_empty(rxq) &&
|
||||
netif_rx_reschedule(dev, napi)) {
|
||||
netif_rx_reschedule(napi)) {
|
||||
#if DEBUG_RX
|
||||
printk(KERN_DEBUG "%s: eth_poll"
|
||||
" netif_rx_reschedule successed\n",
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
|
|
|
|||
|
|
@ -68,17 +68,17 @@
|
|||
*/
|
||||
|
||||
/* these functions take the SCB status word and test the relevant status bit */
|
||||
#define SCB_complete(s) ((s&0x8000)!=0)
|
||||
#define SCB_rxdframe(s) ((s&0x4000)!=0)
|
||||
#define SCB_CUdead(s) ((s&0x2000)!=0)
|
||||
#define SCB_RUdead(s) ((s&0x1000)!=0)
|
||||
#define SCB_ack(s) (s & 0xf000)
|
||||
#define SCB_complete(s) (((s) & 0x8000) != 0)
|
||||
#define SCB_rxdframe(s) (((s) & 0x4000) != 0)
|
||||
#define SCB_CUdead(s) (((s) & 0x2000) != 0)
|
||||
#define SCB_RUdead(s) (((s) & 0x1000) != 0)
|
||||
#define SCB_ack(s) ((s) & 0xf000)
|
||||
|
||||
/* Command unit status: 0=idle, 1=suspended, 2=active */
|
||||
#define SCB_CUstat(s) ((s&0x0300)>>8)
|
||||
#define SCB_CUstat(s) (((s)&0x0300)>>8)
|
||||
|
||||
/* Receive unit status: 0=idle, 1=suspended, 2=out of resources, 4=ready */
|
||||
#define SCB_RUstat(s) ((s&0x0070)>>4)
|
||||
#define SCB_RUstat(s) (((s)&0x0070)>>4)
|
||||
|
||||
/* SCB commands */
|
||||
#define SCB_CUnop 0x0000
|
||||
|
|
@ -98,18 +98,18 @@
|
|||
* Command block defines
|
||||
*/
|
||||
|
||||
#define Stat_Done(s) ((s&0x8000)!=0)
|
||||
#define Stat_Busy(s) ((s&0x4000)!=0)
|
||||
#define Stat_OK(s) ((s&0x2000)!=0)
|
||||
#define Stat_Abort(s) ((s&0x1000)!=0)
|
||||
#define Stat_STFail ((s&0x0800)!=0)
|
||||
#define Stat_TNoCar(s) ((s&0x0400)!=0)
|
||||
#define Stat_TNoCTS(s) ((s&0x0200)!=0)
|
||||
#define Stat_TNoDMA(s) ((s&0x0100)!=0)
|
||||
#define Stat_TDefer(s) ((s&0x0080)!=0)
|
||||
#define Stat_TColl(s) ((s&0x0040)!=0)
|
||||
#define Stat_TXColl(s) ((s&0x0020)!=0)
|
||||
#define Stat_NoColl(s) (s&0x000f)
|
||||
#define Stat_Done(s) (((s) & 0x8000) != 0)
|
||||
#define Stat_Busy(s) (((s) & 0x4000) != 0)
|
||||
#define Stat_OK(s) (((s) & 0x2000) != 0)
|
||||
#define Stat_Abort(s) (((s) & 0x1000) != 0)
|
||||
#define Stat_STFail (((s) & 0x0800) != 0)
|
||||
#define Stat_TNoCar(s) (((s) & 0x0400) != 0)
|
||||
#define Stat_TNoCTS(s) (((s) & 0x0200) != 0)
|
||||
#define Stat_TNoDMA(s) (((s) & 0x0100) != 0)
|
||||
#define Stat_TDefer(s) (((s) & 0x0080) != 0)
|
||||
#define Stat_TColl(s) (((s) & 0x0040) != 0)
|
||||
#define Stat_TXColl(s) (((s) & 0x0020) != 0)
|
||||
#define Stat_NoColl(s) ((s) & 0x000f)
|
||||
|
||||
/* Cmd_END will end AFTER the command if this is the first
|
||||
* command block after an SCB_CUstart, but BEFORE the command
|
||||
|
|
@ -136,16 +136,16 @@
|
|||
* Frame Descriptor (Receive block) defines
|
||||
*/
|
||||
|
||||
#define FD_Done(s) ((s&0x8000)!=0)
|
||||
#define FD_Busy(s) ((s&0x4000)!=0)
|
||||
#define FD_OK(s) ((s&0x2000)!=0)
|
||||
#define FD_Done(s) (((s) & 0x8000) != 0)
|
||||
#define FD_Busy(s) (((s) & 0x4000) != 0)
|
||||
#define FD_OK(s) (((s) & 0x2000) != 0)
|
||||
|
||||
#define FD_CRC(s) ((s&0x0800)!=0)
|
||||
#define FD_Align(s) ((s&0x0400)!=0)
|
||||
#define FD_Resrc(s) ((s&0x0200)!=0)
|
||||
#define FD_DMA(s) ((s&0x0100)!=0)
|
||||
#define FD_Short(s) ((s&0x0080)!=0)
|
||||
#define FD_NoEOF(s) ((s&0x0040)!=0)
|
||||
#define FD_CRC(s) (((s) & 0x0800) != 0)
|
||||
#define FD_Align(s) (((s) & 0x0400) != 0)
|
||||
#define FD_Resrc(s) (((s) & 0x0200) != 0)
|
||||
#define FD_DMA(s) (((s) & 0x0100) != 0)
|
||||
#define FD_Short(s) (((s) & 0x0080) != 0)
|
||||
#define FD_NoEOF(s) (((s) & 0x0040) != 0)
|
||||
|
||||
struct rfd_header {
|
||||
volatile unsigned long flags;
|
||||
|
|
|
|||
|
|
@ -169,13 +169,10 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
|
|||
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) {
|
||||
mlx4_info(mdev, "Using %d tx rings for port:%d\n",
|
||||
mdev->profile.prof[i].tx_ring_num, i);
|
||||
if (!mdev->profile.prof[i].rx_ring_num) {
|
||||
mdev->profile.prof[i].rx_ring_num = dev->caps.num_comp_vectors;
|
||||
mlx4_info(mdev, "Defaulting to %d rx rings for port:%d\n",
|
||||
mdev->profile.prof[i].rx_ring_num, i);
|
||||
} else
|
||||
mlx4_info(mdev, "Using %d rx rings for port:%d\n",
|
||||
mdev->profile.prof[i].rx_ring_num, i);
|
||||
mdev->profile.prof[i].rx_ring_num =
|
||||
min_t(int, dev->caps.num_comp_vectors, MAX_RX_RINGS);
|
||||
mlx4_info(mdev, "Defaulting to %d rx rings for port:%d\n",
|
||||
mdev->profile.prof[i].rx_ring_num, i);
|
||||
}
|
||||
|
||||
/* Create our own workqueue for reset/multicast tasks
|
||||
|
|
|
|||
|
|
@ -552,7 +552,7 @@ static void mlx4_en_linkstate(struct work_struct *work)
|
|||
}
|
||||
|
||||
|
||||
static int mlx4_en_start_port(struct net_device *dev)
|
||||
int mlx4_en_start_port(struct net_device *dev)
|
||||
{
|
||||
struct mlx4_en_priv *priv = netdev_priv(dev);
|
||||
struct mlx4_en_dev *mdev = priv->mdev;
|
||||
|
|
@ -707,7 +707,7 @@ cq_err:
|
|||
}
|
||||
|
||||
|
||||
static void mlx4_en_stop_port(struct net_device *dev)
|
||||
void mlx4_en_stop_port(struct net_device *dev)
|
||||
{
|
||||
struct mlx4_en_priv *priv = netdev_priv(dev);
|
||||
struct mlx4_en_dev *mdev = priv->mdev;
|
||||
|
|
@ -826,7 +826,7 @@ static int mlx4_en_close(struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void mlx4_en_free_resources(struct mlx4_en_priv *priv)
|
||||
void mlx4_en_free_resources(struct mlx4_en_priv *priv)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
@ -845,7 +845,7 @@ static void mlx4_en_free_resources(struct mlx4_en_priv *priv)
|
|||
}
|
||||
}
|
||||
|
||||
static int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
|
||||
int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
|
||||
{
|
||||
struct mlx4_en_dev *mdev = priv->mdev;
|
||||
struct mlx4_en_port_profile *prof = priv->prof;
|
||||
|
|
|
|||
|
|
@ -65,15 +65,6 @@ MLX4_EN_PARM_INT(pfctx, 0, "Priority based Flow Control policy on TX[7:0]."
|
|||
MLX4_EN_PARM_INT(pfcrx, 0, "Priority based Flow Control policy on RX[7:0]."
|
||||
" Per priority bit mask");
|
||||
|
||||
MLX4_EN_PARM_INT(rx_ring_num1, 0, "Number or Rx rings for port 1 (0 = #cores)");
|
||||
MLX4_EN_PARM_INT(rx_ring_num2, 0, "Number or Rx rings for port 2 (0 = #cores)");
|
||||
|
||||
MLX4_EN_PARM_INT(tx_ring_size1, MLX4_EN_AUTO_CONF, "Tx ring size for port 1");
|
||||
MLX4_EN_PARM_INT(tx_ring_size2, MLX4_EN_AUTO_CONF, "Tx ring size for port 2");
|
||||
MLX4_EN_PARM_INT(rx_ring_size1, MLX4_EN_AUTO_CONF, "Rx ring size for port 1");
|
||||
MLX4_EN_PARM_INT(rx_ring_size2, MLX4_EN_AUTO_CONF, "Rx ring size for port 2");
|
||||
|
||||
|
||||
int mlx4_en_get_profile(struct mlx4_en_dev *mdev)
|
||||
{
|
||||
struct mlx4_en_profile *params = &mdev->profile;
|
||||
|
|
@ -87,6 +78,8 @@ int mlx4_en_get_profile(struct mlx4_en_dev *mdev)
|
|||
params->prof[i].rx_ppp = pfcrx;
|
||||
params->prof[i].tx_pause = 1;
|
||||
params->prof[i].tx_ppp = pfctx;
|
||||
params->prof[i].tx_ring_size = MLX4_EN_DEF_TX_RING_SIZE;
|
||||
params->prof[i].rx_ring_size = MLX4_EN_DEF_RX_RING_SIZE;
|
||||
}
|
||||
if (pfcrx || pfctx) {
|
||||
params->prof[1].tx_ring_num = MLX4_EN_TX_RING_NUM;
|
||||
|
|
@ -95,32 +88,7 @@ int mlx4_en_get_profile(struct mlx4_en_dev *mdev)
|
|||
params->prof[1].tx_ring_num = 1;
|
||||
params->prof[2].tx_ring_num = 1;
|
||||
}
|
||||
params->prof[1].rx_ring_num = min_t(int, rx_ring_num1, MAX_RX_RINGS);
|
||||
params->prof[2].rx_ring_num = min_t(int, rx_ring_num2, MAX_RX_RINGS);
|
||||
|
||||
if (tx_ring_size1 == MLX4_EN_AUTO_CONF)
|
||||
tx_ring_size1 = MLX4_EN_DEF_TX_RING_SIZE;
|
||||
params->prof[1].tx_ring_size =
|
||||
(tx_ring_size1 < MLX4_EN_MIN_TX_SIZE) ?
|
||||
MLX4_EN_MIN_TX_SIZE : roundup_pow_of_two(tx_ring_size1);
|
||||
|
||||
if (tx_ring_size2 == MLX4_EN_AUTO_CONF)
|
||||
tx_ring_size2 = MLX4_EN_DEF_TX_RING_SIZE;
|
||||
params->prof[2].tx_ring_size =
|
||||
(tx_ring_size2 < MLX4_EN_MIN_TX_SIZE) ?
|
||||
MLX4_EN_MIN_TX_SIZE : roundup_pow_of_two(tx_ring_size2);
|
||||
|
||||
if (rx_ring_size1 == MLX4_EN_AUTO_CONF)
|
||||
rx_ring_size1 = MLX4_EN_DEF_RX_RING_SIZE;
|
||||
params->prof[1].rx_ring_size =
|
||||
(rx_ring_size1 < MLX4_EN_MIN_RX_SIZE) ?
|
||||
MLX4_EN_MIN_RX_SIZE : roundup_pow_of_two(rx_ring_size1);
|
||||
|
||||
if (rx_ring_size2 == MLX4_EN_AUTO_CONF)
|
||||
rx_ring_size2 = MLX4_EN_DEF_RX_RING_SIZE;
|
||||
params->prof[2].rx_ring_size =
|
||||
(rx_ring_size2 < MLX4_EN_MIN_RX_SIZE) ?
|
||||
MLX4_EN_MIN_RX_SIZE : roundup_pow_of_two(rx_ring_size2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -417,6 +385,54 @@ static void mlx4_en_get_pauseparam(struct net_device *dev,
|
|||
pause->rx_pause = priv->prof->rx_pause;
|
||||
}
|
||||
|
||||
static int mlx4_en_set_ringparam(struct net_device *dev,
|
||||
struct ethtool_ringparam *param)
|
||||
{
|
||||
struct mlx4_en_priv *priv = netdev_priv(dev);
|
||||
struct mlx4_en_dev *mdev = priv->mdev;
|
||||
u32 rx_size, tx_size;
|
||||
int port_up = 0;
|
||||
int err = 0;
|
||||
|
||||
if (param->rx_jumbo_pending || param->rx_mini_pending)
|
||||
return -EINVAL;
|
||||
|
||||
rx_size = roundup_pow_of_two(param->rx_pending);
|
||||
rx_size = max_t(u32, rx_size, MLX4_EN_MIN_RX_SIZE);
|
||||
tx_size = roundup_pow_of_two(param->tx_pending);
|
||||
tx_size = max_t(u32, tx_size, MLX4_EN_MIN_TX_SIZE);
|
||||
|
||||
if (rx_size == priv->prof->rx_ring_size &&
|
||||
tx_size == priv->prof->tx_ring_size)
|
||||
return 0;
|
||||
|
||||
mutex_lock(&mdev->state_lock);
|
||||
if (priv->port_up) {
|
||||
port_up = 1;
|
||||
mlx4_en_stop_port(dev);
|
||||
}
|
||||
|
||||
mlx4_en_free_resources(priv);
|
||||
|
||||
priv->prof->tx_ring_size = tx_size;
|
||||
priv->prof->rx_ring_size = rx_size;
|
||||
|
||||
err = mlx4_en_alloc_resources(priv);
|
||||
if (err) {
|
||||
mlx4_err(mdev, "Failed reallocating port resources\n");
|
||||
goto out;
|
||||
}
|
||||
if (port_up) {
|
||||
err = mlx4_en_start_port(dev);
|
||||
if (err)
|
||||
mlx4_err(mdev, "Failed starting port\n");
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&mdev->state_lock);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void mlx4_en_get_ringparam(struct net_device *dev,
|
||||
struct ethtool_ringparam *param)
|
||||
{
|
||||
|
|
@ -456,6 +472,7 @@ const struct ethtool_ops mlx4_en_ethtool_ops = {
|
|||
.get_pauseparam = mlx4_en_get_pauseparam,
|
||||
.set_pauseparam = mlx4_en_set_pauseparam,
|
||||
.get_ringparam = mlx4_en_get_ringparam,
|
||||
.set_ringparam = mlx4_en_set_ringparam,
|
||||
.get_flags = ethtool_op_get_flags,
|
||||
.set_flags = ethtool_op_set_flags,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -489,6 +489,12 @@ void mlx4_en_destroy_netdev(struct net_device *dev);
|
|||
int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
|
||||
struct mlx4_en_port_profile *prof);
|
||||
|
||||
int mlx4_en_start_port(struct net_device *dev);
|
||||
void mlx4_en_stop_port(struct net_device *dev);
|
||||
|
||||
void mlx4_en_free_resources(struct mlx4_en_priv *priv);
|
||||
int mlx4_en_alloc_resources(struct mlx4_en_priv *priv);
|
||||
|
||||
int mlx4_en_get_profile(struct mlx4_en_dev *mdev);
|
||||
|
||||
int mlx4_en_create_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq,
|
||||
|
|
|
|||
|
|
@ -954,7 +954,6 @@ static irqreturn_t pasemi_mac_rx_intr(int irq, void *data)
|
|||
{
|
||||
const struct pasemi_mac_rxring *rxring = data;
|
||||
struct pasemi_mac *mac = rxring->mac;
|
||||
struct net_device *dev = mac->netdev;
|
||||
const struct pasemi_dmachan *chan = &rxring->chan;
|
||||
unsigned int reg;
|
||||
|
||||
|
|
@ -1634,7 +1633,6 @@ static void pasemi_mac_set_rx_mode(struct net_device *dev)
|
|||
static int pasemi_mac_poll(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct pasemi_mac *mac = container_of(napi, struct pasemi_mac, napi);
|
||||
struct net_device *dev = mac->netdev;
|
||||
int pkts;
|
||||
|
||||
pasemi_mac_clean_tx(tx_ring(mac));
|
||||
|
|
|
|||
|
|
@ -1484,13 +1484,13 @@ static irqreturn_t smsc911x_irqhandler(int irq, void *dev_id)
|
|||
}
|
||||
|
||||
if (likely(intsts & inten & INT_STS_RSFL_)) {
|
||||
if (likely(netif_rx_schedule_prep(dev, &pdata->napi))) {
|
||||
if (likely(netif_rx_schedule_prep(&pdata->napi))) {
|
||||
/* Disable Rx interrupts */
|
||||
temp = smsc911x_reg_read(pdata, INT_EN);
|
||||
temp &= (~INT_EN_RSFL_EN_);
|
||||
smsc911x_reg_write(pdata, INT_EN, temp);
|
||||
/* Schedule a NAPI poll */
|
||||
__netif_rx_schedule(dev, &pdata->napi);
|
||||
__netif_rx_schedule(&pdata->napi);
|
||||
} else {
|
||||
SMSC_WARNING(RX_ERR,
|
||||
"netif_rx_schedule_prep failed");
|
||||
|
|
|
|||
|
|
@ -1277,7 +1277,6 @@ bad_desc:
|
|||
static int spider_net_poll(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct spider_net_card *card = container_of(napi, struct spider_net_card, napi);
|
||||
struct net_device *netdev = card->netdev;
|
||||
int packets_done = 0;
|
||||
|
||||
while (packets_done < budget) {
|
||||
|
|
|
|||
|
|
@ -343,7 +343,7 @@ static void tun_net_init(struct net_device *dev)
|
|||
break;
|
||||
|
||||
case TUN_TAP_DEV:
|
||||
dev->netdev_ops = &tun_netdev_ops;
|
||||
dev->netdev_ops = &tap_netdev_ops;
|
||||
/* Ethernet TAP Device */
|
||||
ether_setup(dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -2831,7 +2831,7 @@ static struct usb_endpoint_descriptor *hso_get_ep(struct usb_interface *intf,
|
|||
for (i = 0; i < iface->desc.bNumEndpoints; i++) {
|
||||
endp = &iface->endpoint[i].desc;
|
||||
if (((endp->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == dir) &&
|
||||
((endp->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == type))
|
||||
(usb_endpoint_type(endp) == type))
|
||||
return endp;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -654,7 +654,7 @@ static int hss_hdlc_poll(struct napi_struct *napi, int budget)
|
|||
netif_rx_complete(dev, napi);
|
||||
qmgr_enable_irq(rxq);
|
||||
if (!qmgr_stat_empty(rxq) &&
|
||||
netif_rx_reschedule(dev, napi)) {
|
||||
netif_rx_reschedule(napi)) {
|
||||
#if DEBUG_RX
|
||||
printk(KERN_DEBUG "%s: hss_hdlc_poll"
|
||||
" netif_rx_reschedule succeeded\n",
|
||||
|
|
|
|||
|
|
@ -1065,8 +1065,7 @@ static int eject_installer(struct usb_interface *intf)
|
|||
/* Find bulk out endpoint */
|
||||
endpoint = &iface_desc->endpoint[1].desc;
|
||||
if ((endpoint->bEndpointAddress & USB_TYPE_MASK) == USB_DIR_OUT &&
|
||||
(endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
||||
USB_ENDPOINT_XFER_BULK) {
|
||||
usb_endpoint_xfer_bulk(endpoint)) {
|
||||
bulk_out_ep = endpoint->bEndpointAddress;
|
||||
} else {
|
||||
dev_err(&udev->dev,
|
||||
|
|
|
|||
Loading…
Reference in a new issue