mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -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: (27 commits) bnx2x: allow device properly initialize after hotplug bnx2x: fix DMAE timeout according to hw specifications bnx2x: properly handle CFC DEL in cnic flow bnx2x: call dev_kfree_skb_any instead of dev_kfree_skb net: filter: move forward declarations to avoid compile warnings pktgen: refactor pg_init() code pktgen: use vzalloc_node() instead of vmalloc_node() + memset() net: skb_trim explicitely check the linearity instead of data_len ipv4: Give backtrace in ip_rt_bug(). net: avoid synchronize_rcu() in dev_deactivate_many net: remove synchronize_net() from netdev_set_master() rtnetlink: ignore NETDEV_RELEASE and NETDEV_JOIN event net: rename NETDEV_BONDING_DESLAVE to NETDEV_RELEASE bridge: call NETDEV_JOIN notifiers when add a slave netpoll: disable netpoll when enslave a device macvlan: Forward unicast frames in bridge mode to lowerdev net: Remove linux/prefetch.h include from linux/skbuff.h ipv4: Include linux/prefetch.h in fib_trie.c netlabel: Remove prefetches from list handlers. drivers/net: add prefetch header for prefetch users ... Fixed up prefetch parts: removed a few duplicate prefetch.h includes, fixed the location of the igb prefetch.h, took my version of the skbuff.h code without the extra parentheses etc.
This commit is contained in:
commit
53ee7569ce
22 changed files with 216 additions and 156 deletions
|
|
@ -131,7 +131,7 @@ static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fastpath *fp,
|
|||
|
||||
/* release skb */
|
||||
WARN_ON(!skb);
|
||||
dev_kfree_skb(skb);
|
||||
dev_kfree_skb_any(skb);
|
||||
tx_buf->first_bd = 0;
|
||||
tx_buf->skb = NULL;
|
||||
|
||||
|
|
@ -465,7 +465,7 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
|
|||
} else {
|
||||
DP(NETIF_MSG_RX_STATUS, "Failed to allocate new pages"
|
||||
" - dropping packet!\n");
|
||||
dev_kfree_skb(skb);
|
||||
dev_kfree_skb_any(skb);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -840,7 +840,7 @@ static inline int bnx2x_alloc_rx_skb(struct bnx2x *bp,
|
|||
mapping = dma_map_single(&bp->pdev->dev, skb->data, fp->rx_buf_size,
|
||||
DMA_FROM_DEVICE);
|
||||
if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
|
||||
dev_kfree_skb(skb);
|
||||
dev_kfree_skb_any(skb);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -571,7 +571,7 @@ static int bnx2x_issue_dmae_with_comp(struct bnx2x *bp,
|
|||
struct dmae_command *dmae)
|
||||
{
|
||||
u32 *wb_comp = bnx2x_sp(bp, wb_comp);
|
||||
int cnt = CHIP_REV_IS_SLOW(bp) ? (400000) : 40;
|
||||
int cnt = CHIP_REV_IS_SLOW(bp) ? (400000) : 4000;
|
||||
int rc = 0;
|
||||
|
||||
DP(BNX2X_MSG_OFF, "data before [0x%08x 0x%08x 0x%08x 0x%08x]\n",
|
||||
|
|
@ -3666,7 +3666,8 @@ static int bnx2x_cnic_handle_cfc_del(struct bnx2x *bp, u32 cid,
|
|||
union event_ring_elem *elem)
|
||||
{
|
||||
if (!bp->cnic_eth_dev.starting_cid ||
|
||||
cid < bp->cnic_eth_dev.starting_cid)
|
||||
(cid < bp->cnic_eth_dev.starting_cid &&
|
||||
cid != bp->cnic_eth_dev.iscsi_l2_cid))
|
||||
return 1;
|
||||
|
||||
DP(BNX2X_MSG_SP, "got delete ramrod for CNIC CID %d\n", cid);
|
||||
|
|
@ -7287,51 +7288,35 @@ static inline void bnx2x_mcp_wait_one(struct bnx2x *bp)
|
|||
msleep(MCP_ONE_TIMEOUT);
|
||||
}
|
||||
|
||||
static int bnx2x_reset_mcp_comp(struct bnx2x *bp, u32 magic_val)
|
||||
/*
|
||||
* initializes bp->common.shmem_base and waits for validity signature to appear
|
||||
*/
|
||||
static int bnx2x_init_shmem(struct bnx2x *bp)
|
||||
{
|
||||
u32 shmem, cnt, validity_offset, val;
|
||||
int rc = 0;
|
||||
int cnt = 0;
|
||||
u32 val = 0;
|
||||
|
||||
msleep(100);
|
||||
|
||||
/* Get shmem offset */
|
||||
shmem = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR);
|
||||
if (shmem == 0) {
|
||||
BNX2X_ERR("Shmem 0 return failure\n");
|
||||
rc = -ENOTTY;
|
||||
goto exit_lbl;
|
||||
}
|
||||
|
||||
validity_offset = offsetof(struct shmem_region, validity_map[0]);
|
||||
|
||||
/* Wait for MCP to come up */
|
||||
for (cnt = 0; cnt < (MCP_TIMEOUT / MCP_ONE_TIMEOUT); cnt++) {
|
||||
/* TBD: its best to check validity map of last port.
|
||||
* currently checks on port 0.
|
||||
*/
|
||||
val = REG_RD(bp, shmem + validity_offset);
|
||||
DP(NETIF_MSG_HW, "shmem 0x%x validity map(0x%x)=0x%x\n", shmem,
|
||||
shmem + validity_offset, val);
|
||||
|
||||
/* check that shared memory is valid. */
|
||||
if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB))
|
||||
== (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB))
|
||||
break;
|
||||
do {
|
||||
bp->common.shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR);
|
||||
if (bp->common.shmem_base) {
|
||||
val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]);
|
||||
if (val & SHR_MEM_VALIDITY_MB)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bnx2x_mcp_wait_one(bp);
|
||||
}
|
||||
|
||||
DP(NETIF_MSG_HW, "Cnt=%d Shmem validity map 0x%x\n", cnt, val);
|
||||
} while (cnt++ < (MCP_TIMEOUT / MCP_ONE_TIMEOUT));
|
||||
|
||||
/* Check that shared memory is valid. This indicates that MCP is up. */
|
||||
if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) !=
|
||||
(SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) {
|
||||
BNX2X_ERR("Shmem signature not present. MCP is not up !!\n");
|
||||
rc = -ENOTTY;
|
||||
goto exit_lbl;
|
||||
}
|
||||
BNX2X_ERR("BAD MCP validity signature\n");
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int bnx2x_reset_mcp_comp(struct bnx2x *bp, u32 magic_val)
|
||||
{
|
||||
int rc = bnx2x_init_shmem(bp);
|
||||
|
||||
exit_lbl:
|
||||
/* Restore the `magic' bit value */
|
||||
if (!CHIP_IS_E1(bp))
|
||||
bnx2x_clp_reset_done(bp, magic_val);
|
||||
|
|
@ -7844,10 +7829,12 @@ static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp)
|
|||
BNX2X_DEV_INFO("flash_size 0x%x (%d)\n",
|
||||
bp->common.flash_size, bp->common.flash_size);
|
||||
|
||||
bp->common.shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR);
|
||||
bnx2x_init_shmem(bp);
|
||||
|
||||
bp->common.shmem2_base = REG_RD(bp, (BP_PATH(bp) ?
|
||||
MISC_REG_GENERIC_CR_1 :
|
||||
MISC_REG_GENERIC_CR_0));
|
||||
|
||||
bp->link_params.shmem_base = bp->common.shmem_base;
|
||||
bp->link_params.shmem2_base = bp->common.shmem2_base;
|
||||
BNX2X_DEV_INFO("shmem offset 0x%x shmem2 offset 0x%x\n",
|
||||
|
|
@ -7859,11 +7846,6 @@ static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp)
|
|||
return;
|
||||
}
|
||||
|
||||
val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]);
|
||||
if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB))
|
||||
!= (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB))
|
||||
BNX2X_ERR("BAD MCP validity signature\n");
|
||||
|
||||
bp->common.hw_config = SHMEM_RD(bp, dev_info.shared_hw_config.config);
|
||||
BNX2X_DEV_INFO("hw_config 0x%08x\n", bp->common.hw_config);
|
||||
|
||||
|
|
|
|||
|
|
@ -1640,6 +1640,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
|
|||
}
|
||||
}
|
||||
|
||||
call_netdevice_notifiers(NETDEV_JOIN, slave_dev);
|
||||
|
||||
/* If this is the first slave, then we need to set the master's hardware
|
||||
* address to be the same as the slave's. */
|
||||
if (is_zero_ether_addr(bond->dev->dev_addr))
|
||||
|
|
@ -1972,7 +1974,7 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
|
|||
}
|
||||
|
||||
block_netpoll_tx();
|
||||
netdev_bonding_change(bond_dev, NETDEV_BONDING_DESLAVE);
|
||||
netdev_bonding_change(bond_dev, NETDEV_RELEASE);
|
||||
write_lock_bh(&bond->lock);
|
||||
|
||||
slave = bond_get_slave_by_dev(bond, slave_dev);
|
||||
|
|
|
|||
|
|
@ -238,10 +238,8 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
|
||||
dest = macvlan_hash_lookup(port, eth->h_dest);
|
||||
if (dest && dest->mode == MACVLAN_MODE_BRIDGE) {
|
||||
unsigned int length = skb->len + ETH_HLEN;
|
||||
int ret = dest->forward(dest->dev, skb);
|
||||
macvlan_count_rx(dest, length,
|
||||
ret == NET_RX_SUCCESS, 0);
|
||||
/* send to lowerdev first for its network taps */
|
||||
vlan->forward(vlan->lowerdev, skb);
|
||||
|
||||
return NET_XMIT_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -621,11 +621,10 @@ static int netconsole_netdev_event(struct notifier_block *this,
|
|||
bool stopped = false;
|
||||
|
||||
if (!(event == NETDEV_CHANGENAME || event == NETDEV_UNREGISTER ||
|
||||
event == NETDEV_BONDING_DESLAVE || event == NETDEV_GOING_DOWN))
|
||||
event == NETDEV_RELEASE || event == NETDEV_JOIN))
|
||||
goto done;
|
||||
|
||||
spin_lock_irqsave(&target_list_lock, flags);
|
||||
restart:
|
||||
list_for_each_entry(nt, &target_list, list) {
|
||||
netconsole_target_get(nt);
|
||||
if (nt->np.dev == dev) {
|
||||
|
|
@ -633,6 +632,8 @@ restart:
|
|||
case NETDEV_CHANGENAME:
|
||||
strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ);
|
||||
break;
|
||||
case NETDEV_RELEASE:
|
||||
case NETDEV_JOIN:
|
||||
case NETDEV_UNREGISTER:
|
||||
/*
|
||||
* rtnl_lock already held
|
||||
|
|
@ -647,11 +648,7 @@ restart:
|
|||
dev_put(nt->np.dev);
|
||||
nt->np.dev = NULL;
|
||||
netconsole_target_put(nt);
|
||||
goto restart;
|
||||
}
|
||||
/* Fall through */
|
||||
case NETDEV_GOING_DOWN:
|
||||
case NETDEV_BONDING_DESLAVE:
|
||||
nt->enabled = 0;
|
||||
stopped = true;
|
||||
break;
|
||||
|
|
@ -660,10 +657,21 @@ restart:
|
|||
netconsole_target_put(nt);
|
||||
}
|
||||
spin_unlock_irqrestore(&target_list_lock, flags);
|
||||
if (stopped && (event == NETDEV_UNREGISTER || event == NETDEV_BONDING_DESLAVE))
|
||||
if (stopped) {
|
||||
printk(KERN_INFO "netconsole: network logging stopped on "
|
||||
"interface %s as it %s\n", dev->name,
|
||||
event == NETDEV_UNREGISTER ? "unregistered" : "released slaves");
|
||||
"interface %s as it ", dev->name);
|
||||
switch (event) {
|
||||
case NETDEV_UNREGISTER:
|
||||
printk(KERN_CONT "unregistered\n");
|
||||
break;
|
||||
case NETDEV_RELEASE:
|
||||
printk(KERN_CONT "released slaves\n");
|
||||
break;
|
||||
case NETDEV_JOIN:
|
||||
printk(KERN_CONT "is joining a master device\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
return NOTIFY_DONE;
|
||||
|
|
|
|||
|
|
@ -162,8 +162,8 @@ static int rionet_queue_tx_msg(struct sk_buff *skb, struct net_device *ndev,
|
|||
rnet->tx_slot &= (RIONET_TX_RING_SIZE - 1);
|
||||
|
||||
if (netif_msg_tx_queued(rnet))
|
||||
printk(KERN_INFO "%s: queued skb %8.8x len %8.8x\n", DRV_NAME,
|
||||
(u32) skb, skb->len);
|
||||
printk(KERN_INFO "%s: queued skb len %8.8x\n", DRV_NAME,
|
||||
skb->len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue