You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07: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: (33 commits) r8169: offical fix for CVE-2009-4537 (overlength frame DMAs) ipv6: Don't drop cache route entry unless timer actually expired. tulip: Add missing parens. r8169: fix broken register writes pcnet_cs: add new id bonding: fix broken multicast with round-robin mode drivers/net: Fix continuation lines e1000: do not modify tx_queue_len on link speed change net: ipmr/ip6mr: prevent out-of-bounds vif_table access ixgbe: Do not run all Diagnostic offline tests when VFs are active igb: use correct bits to identify if managability is enabled benet: Fix compile warnnings in drivers/net/benet/be_ethtool.c net: Add MSG_WAITFORONE flag to recvmmsg e1000e: do not modify tx_queue_len on link speed change igbvf: do not modify tx_queue_len on link speed change ipv4: Restart rt_intern_hash after emergency rebuild (v2) ipv4: Cleanup struct net dereference in rt_intern_hash net: fix netlink address dumping in IPv4/IPv6 tulip: Fix null dereference in uli526x_rx_packet() gianfar: fix undo of reserve() ...
This commit is contained in:
@@ -3083,6 +3083,7 @@ F: include/scsi/*iscsi*
|
||||
ISDN SUBSYSTEM
|
||||
M: Karsten Keil <isdn@linux-pingi.de>
|
||||
L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.isdn4linux.de
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/isdn-2.6.git
|
||||
S: Maintained
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
#define ATLX_DRIVER_VERSION "2.1.3"
|
||||
MODULE_AUTHOR("Xiong Huang <xiong.huang@atheros.com>, \
|
||||
Chris Snook <csnook@redhat.com>, Jay Cliburn <jcliburn@gmail.com>");
|
||||
Chris Snook <csnook@redhat.com>, Jay Cliburn <jcliburn@gmail.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION(ATLX_DRIVER_VERSION);
|
||||
|
||||
|
||||
@@ -490,7 +490,7 @@ be_test_ddr_dma(struct be_adapter *adapter)
|
||||
{
|
||||
int ret, i;
|
||||
struct be_dma_mem ddrdma_cmd;
|
||||
u64 pattern[2] = {0x5a5a5a5a5a5a5a5a, 0xa5a5a5a5a5a5a5a5};
|
||||
u64 pattern[2] = {0x5a5a5a5a5a5a5a5aULL, 0xa5a5a5a5a5a5a5a5ULL};
|
||||
|
||||
ddrdma_cmd.size = sizeof(struct be_cmd_req_ddrdma_test);
|
||||
ddrdma_cmd.va = pci_alloc_consistent(adapter->pdev, ddrdma_cmd.size,
|
||||
|
||||
@@ -1235,6 +1235,11 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active)
|
||||
write_lock_bh(&bond->curr_slave_lock);
|
||||
}
|
||||
}
|
||||
|
||||
/* resend IGMP joins since all were sent on curr_active_slave */
|
||||
if (bond->params.mode == BOND_MODE_ROUNDROBIN) {
|
||||
bond_resend_igmp_join_requests(bond);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4138,22 +4143,41 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
|
||||
struct bonding *bond = netdev_priv(bond_dev);
|
||||
struct slave *slave, *start_at;
|
||||
int i, slave_no, res = 1;
|
||||
struct iphdr *iph = ip_hdr(skb);
|
||||
|
||||
read_lock(&bond->lock);
|
||||
|
||||
if (!BOND_IS_OK(bond))
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Concurrent TX may collide on rr_tx_counter; we accept that
|
||||
* as being rare enough not to justify using an atomic op here
|
||||
* Start with the curr_active_slave that joined the bond as the
|
||||
* default for sending IGMP traffic. For failover purposes one
|
||||
* needs to maintain some consistency for the interface that will
|
||||
* send the join/membership reports. The curr_active_slave found
|
||||
* will send all of this type of traffic.
|
||||
*/
|
||||
slave_no = bond->rr_tx_counter++ % bond->slave_cnt;
|
||||
if ((iph->protocol == htons(IPPROTO_IGMP)) &&
|
||||
(skb->protocol == htons(ETH_P_IP))) {
|
||||
|
||||
bond_for_each_slave(bond, slave, i) {
|
||||
slave_no--;
|
||||
if (slave_no < 0)
|
||||
break;
|
||||
read_lock(&bond->curr_slave_lock);
|
||||
slave = bond->curr_active_slave;
|
||||
read_unlock(&bond->curr_slave_lock);
|
||||
|
||||
if (!slave)
|
||||
goto out;
|
||||
} else {
|
||||
/*
|
||||
* Concurrent TX may collide on rr_tx_counter; we accept
|
||||
* that as being rare enough not to justify using an
|
||||
* atomic op here.
|
||||
*/
|
||||
slave_no = bond->rr_tx_counter++ % bond->slave_cnt;
|
||||
|
||||
bond_for_each_slave(bond, slave, i) {
|
||||
slave_no--;
|
||||
if (slave_no < 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
start_at = slave;
|
||||
|
||||
@@ -261,7 +261,6 @@ struct e1000_adapter {
|
||||
/* TX */
|
||||
struct e1000_tx_ring *tx_ring; /* One per active queue */
|
||||
unsigned int restart_queue;
|
||||
unsigned long tx_queue_len;
|
||||
u32 txd_cmd;
|
||||
u32 tx_int_delay;
|
||||
u32 tx_abs_int_delay;
|
||||
|
||||
@@ -383,8 +383,6 @@ static void e1000_configure(struct e1000_adapter *adapter)
|
||||
adapter->alloc_rx_buf(adapter, ring,
|
||||
E1000_DESC_UNUSED(ring));
|
||||
}
|
||||
|
||||
adapter->tx_queue_len = netdev->tx_queue_len;
|
||||
}
|
||||
|
||||
int e1000_up(struct e1000_adapter *adapter)
|
||||
@@ -503,7 +501,6 @@ void e1000_down(struct e1000_adapter *adapter)
|
||||
del_timer_sync(&adapter->watchdog_timer);
|
||||
del_timer_sync(&adapter->phy_info_timer);
|
||||
|
||||
netdev->tx_queue_len = adapter->tx_queue_len;
|
||||
adapter->link_speed = 0;
|
||||
adapter->link_duplex = 0;
|
||||
netif_carrier_off(netdev);
|
||||
@@ -2316,19 +2313,15 @@ static void e1000_watchdog(unsigned long data)
|
||||
E1000_CTRL_RFCE) ? "RX" : ((ctrl &
|
||||
E1000_CTRL_TFCE) ? "TX" : "None" )));
|
||||
|
||||
/* tweak tx_queue_len according to speed/duplex
|
||||
* and adjust the timeout factor */
|
||||
netdev->tx_queue_len = adapter->tx_queue_len;
|
||||
/* adjust timeout factor according to speed/duplex */
|
||||
adapter->tx_timeout_factor = 1;
|
||||
switch (adapter->link_speed) {
|
||||
case SPEED_10:
|
||||
txb2b = false;
|
||||
netdev->tx_queue_len = 10;
|
||||
adapter->tx_timeout_factor = 16;
|
||||
break;
|
||||
case SPEED_100:
|
||||
txb2b = false;
|
||||
netdev->tx_queue_len = 100;
|
||||
/* maybe add some timeout factor ? */
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -279,7 +279,6 @@ struct e1000_adapter {
|
||||
|
||||
struct napi_struct napi;
|
||||
|
||||
unsigned long tx_queue_len;
|
||||
unsigned int restart_queue;
|
||||
u32 txd_cmd;
|
||||
|
||||
|
||||
@@ -2289,8 +2289,6 @@ static void e1000_configure_tx(struct e1000_adapter *adapter)
|
||||
ew32(TCTL, tctl);
|
||||
|
||||
e1000e_config_collision_dist(hw);
|
||||
|
||||
adapter->tx_queue_len = adapter->netdev->tx_queue_len;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2877,7 +2875,6 @@ void e1000e_down(struct e1000_adapter *adapter)
|
||||
del_timer_sync(&adapter->watchdog_timer);
|
||||
del_timer_sync(&adapter->phy_info_timer);
|
||||
|
||||
netdev->tx_queue_len = adapter->tx_queue_len;
|
||||
netif_carrier_off(netdev);
|
||||
adapter->link_speed = 0;
|
||||
adapter->link_duplex = 0;
|
||||
@@ -3588,21 +3585,15 @@ static void e1000_watchdog_task(struct work_struct *work)
|
||||
"link gets many collisions.\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* tweak tx_queue_len according to speed/duplex
|
||||
* and adjust the timeout factor
|
||||
*/
|
||||
netdev->tx_queue_len = adapter->tx_queue_len;
|
||||
/* adjust timeout factor according to speed/duplex */
|
||||
adapter->tx_timeout_factor = 1;
|
||||
switch (adapter->link_speed) {
|
||||
case SPEED_10:
|
||||
txb2b = 0;
|
||||
netdev->tx_queue_len = 10;
|
||||
adapter->tx_timeout_factor = 16;
|
||||
break;
|
||||
case SPEED_100:
|
||||
txb2b = 0;
|
||||
netdev->tx_queue_len = 100;
|
||||
adapter->tx_timeout_factor = 10;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2393,6 +2393,7 @@ struct sk_buff * gfar_new_skb(struct net_device *dev)
|
||||
* as many bytes as needed to align the data properly
|
||||
*/
|
||||
skb_reserve(skb, alignamount);
|
||||
GFAR_CB(skb)->alignamount = alignamount;
|
||||
|
||||
return skb;
|
||||
}
|
||||
@@ -2533,13 +2534,13 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue, int rx_work_limit)
|
||||
newskb = skb;
|
||||
else if (skb) {
|
||||
/*
|
||||
* We need to reset ->data to what it
|
||||
* We need to un-reserve() the skb to what it
|
||||
* was before gfar_new_skb() re-aligned
|
||||
* it to an RXBUF_ALIGNMENT boundary
|
||||
* before we put the skb back on the
|
||||
* recycle list.
|
||||
*/
|
||||
skb->data = skb->head + NET_SKB_PAD;
|
||||
skb_reserve(skb, -GFAR_CB(skb)->alignamount);
|
||||
__skb_queue_head(&priv->rx_recycle, skb);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -566,6 +566,12 @@ struct rxfcb {
|
||||
u16 vlctl; /* VLAN control word */
|
||||
};
|
||||
|
||||
struct gianfar_skb_cb {
|
||||
int alignamount;
|
||||
};
|
||||
|
||||
#define GFAR_CB(skb) ((struct gianfar_skb_cb *)((skb)->cb))
|
||||
|
||||
struct rmon_mib
|
||||
{
|
||||
u32 tr64; /* 0x.680 - Transmit and Receive 64-byte Frame Counter */
|
||||
|
||||
@@ -1367,7 +1367,8 @@ out:
|
||||
* igb_enable_mng_pass_thru - Enable processing of ARP's
|
||||
* @hw: pointer to the HW structure
|
||||
*
|
||||
* Verifies the hardware needs to allow ARPs to be processed by the host.
|
||||
* Verifies the hardware needs to leave interface enabled so that frames can
|
||||
* be directed to and from the management interface.
|
||||
**/
|
||||
bool igb_enable_mng_pass_thru(struct e1000_hw *hw)
|
||||
{
|
||||
@@ -1380,8 +1381,7 @@ bool igb_enable_mng_pass_thru(struct e1000_hw *hw)
|
||||
|
||||
manc = rd32(E1000_MANC);
|
||||
|
||||
if (!(manc & E1000_MANC_RCV_TCO_EN) ||
|
||||
!(manc & E1000_MANC_EN_MAC_ADDR_FILTER))
|
||||
if (!(manc & E1000_MANC_RCV_TCO_EN))
|
||||
goto out;
|
||||
|
||||
if (hw->mac.arc_subsystem_valid) {
|
||||
|
||||
@@ -198,7 +198,6 @@ struct igbvf_adapter {
|
||||
struct igbvf_ring *tx_ring /* One per active queue */
|
||||
____cacheline_aligned_in_smp;
|
||||
|
||||
unsigned long tx_queue_len;
|
||||
unsigned int restart_queue;
|
||||
u32 txd_cmd;
|
||||
|
||||
|
||||
@@ -1304,8 +1304,6 @@ static void igbvf_configure_tx(struct igbvf_adapter *adapter)
|
||||
|
||||
/* enable Report Status bit */
|
||||
adapter->txd_cmd |= E1000_ADVTXD_DCMD_RS;
|
||||
|
||||
adapter->tx_queue_len = adapter->netdev->tx_queue_len;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1524,7 +1522,6 @@ void igbvf_down(struct igbvf_adapter *adapter)
|
||||
|
||||
del_timer_sync(&adapter->watchdog_timer);
|
||||
|
||||
netdev->tx_queue_len = adapter->tx_queue_len;
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
/* record the stats before reset*/
|
||||
@@ -1857,21 +1854,15 @@ static void igbvf_watchdog_task(struct work_struct *work)
|
||||
&adapter->link_duplex);
|
||||
igbvf_print_link_info(adapter);
|
||||
|
||||
/*
|
||||
* tweak tx_queue_len according to speed/duplex
|
||||
* and adjust the timeout factor
|
||||
*/
|
||||
netdev->tx_queue_len = adapter->tx_queue_len;
|
||||
/* adjust timeout factor according to speed/duplex */
|
||||
adapter->tx_timeout_factor = 1;
|
||||
switch (adapter->link_speed) {
|
||||
case SPEED_10:
|
||||
txb2b = 0;
|
||||
netdev->tx_queue_len = 10;
|
||||
adapter->tx_timeout_factor = 16;
|
||||
break;
|
||||
case SPEED_100:
|
||||
txb2b = 0;
|
||||
netdev->tx_queue_len = 100;
|
||||
/* maybe add some timeout factor ? */
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -204,14 +204,17 @@ enum ixgbe_ring_f_enum {
|
||||
#define IXGBE_MAX_FDIR_INDICES 64
|
||||
#ifdef IXGBE_FCOE
|
||||
#define IXGBE_MAX_FCOE_INDICES 8
|
||||
#define MAX_RX_QUEUES (IXGBE_MAX_FDIR_INDICES + IXGBE_MAX_FCOE_INDICES)
|
||||
#define MAX_TX_QUEUES (IXGBE_MAX_FDIR_INDICES + IXGBE_MAX_FCOE_INDICES)
|
||||
#else
|
||||
#define MAX_RX_QUEUES IXGBE_MAX_FDIR_INDICES
|
||||
#define MAX_TX_QUEUES IXGBE_MAX_FDIR_INDICES
|
||||
#endif /* IXGBE_FCOE */
|
||||
struct ixgbe_ring_feature {
|
||||
int indices;
|
||||
int mask;
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
#define MAX_RX_QUEUES 128
|
||||
#define MAX_TX_QUEUES 128
|
||||
|
||||
#define MAX_RX_PACKET_BUFFERS ((adapter->flags & IXGBE_FLAG_DCB_ENABLED) \
|
||||
? 8 : 1)
|
||||
|
||||
@@ -1853,6 +1853,26 @@ static void ixgbe_diag_test(struct net_device *netdev,
|
||||
if (ixgbe_link_test(adapter, &data[4]))
|
||||
eth_test->flags |= ETH_TEST_FL_FAILED;
|
||||
|
||||
if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) {
|
||||
int i;
|
||||
for (i = 0; i < adapter->num_vfs; i++) {
|
||||
if (adapter->vfinfo[i].clear_to_send) {
|
||||
netdev_warn(netdev, "%s",
|
||||
"offline diagnostic is not "
|
||||
"supported when VFs are "
|
||||
"present\n");
|
||||
data[0] = 1;
|
||||
data[1] = 1;
|
||||
data[2] = 1;
|
||||
data[3] = 1;
|
||||
eth_test->flags |= ETH_TEST_FL_FAILED;
|
||||
clear_bit(__IXGBE_TESTING,
|
||||
&adapter->state);
|
||||
goto skip_ol_tests;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (if_running)
|
||||
/* indicate we're in test mode */
|
||||
dev_close(netdev);
|
||||
@@ -1908,6 +1928,7 @@ skip_loopback:
|
||||
|
||||
clear_bit(__IXGBE_TESTING, &adapter->state);
|
||||
}
|
||||
skip_ol_tests:
|
||||
msleep_interruptible(4 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -202,6 +202,15 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
|
||||
addr = sg_dma_address(sg);
|
||||
len = sg_dma_len(sg);
|
||||
while (len) {
|
||||
/* max number of buffers allowed in one DDP context */
|
||||
if (j >= IXGBE_BUFFCNT_MAX) {
|
||||
netif_err(adapter, drv, adapter->netdev,
|
||||
"xid=%x:%d,%d,%d:addr=%llx "
|
||||
"not enough descriptors\n",
|
||||
xid, i, j, dmacount, (u64)addr);
|
||||
goto out_noddp_free;
|
||||
}
|
||||
|
||||
/* get the offset of length of current buffer */
|
||||
thisoff = addr & ((dma_addr_t)bufflen - 1);
|
||||
thislen = min((bufflen - thisoff), len);
|
||||
@@ -227,20 +236,13 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
|
||||
len -= thislen;
|
||||
addr += thislen;
|
||||
j++;
|
||||
/* max number of buffers allowed in one DDP context */
|
||||
if (j > IXGBE_BUFFCNT_MAX) {
|
||||
DPRINTK(DRV, ERR, "xid=%x:%d,%d,%d:addr=%llx "
|
||||
"not enough descriptors\n",
|
||||
xid, i, j, dmacount, (u64)addr);
|
||||
goto out_noddp_free;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* only the last buffer may have non-full bufflen */
|
||||
lastsize = thisoff + thislen;
|
||||
|
||||
fcbuff = (IXGBE_FCBUFF_4KB << IXGBE_FCBUFF_BUFFSIZE_SHIFT);
|
||||
fcbuff |= (j << IXGBE_FCBUFF_BUFFCNT_SHIFT);
|
||||
fcbuff |= ((j & 0xff) << IXGBE_FCBUFF_BUFFCNT_SHIFT);
|
||||
fcbuff |= (firstoff << IXGBE_FCBUFF_OFFSET_SHIFT);
|
||||
fcbuff |= (IXGBE_FCBUFF_VALID);
|
||||
|
||||
@@ -520,6 +522,9 @@ void ixgbe_configure_fcoe(struct ixgbe_adapter *adapter)
|
||||
/* Enable L2 eth type filter for FCoE */
|
||||
IXGBE_WRITE_REG(hw, IXGBE_ETQF(IXGBE_ETQF_FILTER_FCOE),
|
||||
(ETH_P_FCOE | IXGBE_ETQF_FCOE | IXGBE_ETQF_FILTER_EN));
|
||||
/* Enable L2 eth type filter for FIP */
|
||||
IXGBE_WRITE_REG(hw, IXGBE_ETQF(IXGBE_ETQF_FILTER_FIP),
|
||||
(ETH_P_FIP | IXGBE_ETQF_FILTER_EN));
|
||||
if (adapter->ring_feature[RING_F_FCOE].indices) {
|
||||
/* Use multiple rx queues for FCoE by redirection table */
|
||||
for (i = 0; i < IXGBE_FCRETA_SIZE; i++) {
|
||||
@@ -530,6 +535,12 @@ void ixgbe_configure_fcoe(struct ixgbe_adapter *adapter)
|
||||
}
|
||||
IXGBE_WRITE_REG(hw, IXGBE_FCRECTL, IXGBE_FCRECTL_ENA);
|
||||
IXGBE_WRITE_REG(hw, IXGBE_ETQS(IXGBE_ETQF_FILTER_FCOE), 0);
|
||||
fcoe_i = f->mask;
|
||||
fcoe_i &= IXGBE_FCRETA_ENTRY_MASK;
|
||||
fcoe_q = adapter->rx_ring[fcoe_i]->reg_idx;
|
||||
IXGBE_WRITE_REG(hw, IXGBE_ETQS(IXGBE_ETQF_FILTER_FIP),
|
||||
IXGBE_ETQS_QUEUE_EN |
|
||||
(fcoe_q << IXGBE_ETQS_RX_QUEUE_SHIFT));
|
||||
} else {
|
||||
/* Use single rx queue for FCoE */
|
||||
fcoe_i = f->mask;
|
||||
@@ -539,6 +550,12 @@ void ixgbe_configure_fcoe(struct ixgbe_adapter *adapter)
|
||||
IXGBE_ETQS_QUEUE_EN |
|
||||
(fcoe_q << IXGBE_ETQS_RX_QUEUE_SHIFT));
|
||||
}
|
||||
/* send FIP frames to the first FCoE queue */
|
||||
fcoe_i = f->mask;
|
||||
fcoe_q = adapter->rx_ring[fcoe_i]->reg_idx;
|
||||
IXGBE_WRITE_REG(hw, IXGBE_ETQS(IXGBE_ETQF_FILTER_FIP),
|
||||
IXGBE_ETQS_QUEUE_EN |
|
||||
(fcoe_q << IXGBE_ETQS_RX_QUEUE_SHIFT));
|
||||
|
||||
IXGBE_WRITE_REG(hw, IXGBE_FCRXCTRL,
|
||||
IXGBE_FCRXCTRL_FCOELLI |
|
||||
|
||||
@@ -3056,6 +3056,14 @@ void ixgbe_reinit_locked(struct ixgbe_adapter *adapter)
|
||||
while (test_and_set_bit(__IXGBE_RESETTING, &adapter->state))
|
||||
msleep(1);
|
||||
ixgbe_down(adapter);
|
||||
/*
|
||||
* If SR-IOV enabled then wait a bit before bringing the adapter
|
||||
* back up to give the VFs time to respond to the reset. The
|
||||
* two second wait is based upon the watchdog timer cycle in
|
||||
* the VF driver.
|
||||
*/
|
||||
if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
|
||||
msleep(2000);
|
||||
ixgbe_up(adapter);
|
||||
clear_bit(__IXGBE_RESETTING, &adapter->state);
|
||||
}
|
||||
@@ -3236,13 +3244,15 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||
|
||||
/* disable receive for all VFs and wait one second */
|
||||
if (adapter->num_vfs) {
|
||||
for (i = 0 ; i < adapter->num_vfs; i++)
|
||||
adapter->vfinfo[i].clear_to_send = 0;
|
||||
|
||||
/* ping all the active vfs to let them know we are going down */
|
||||
ixgbe_ping_all_vfs(adapter);
|
||||
|
||||
/* Disable all VFTE/VFRE TX/RX */
|
||||
ixgbe_disable_tx_rx(adapter);
|
||||
|
||||
/* Mark all the VFs as inactive */
|
||||
for (i = 0 ; i < adapter->num_vfs; i++)
|
||||
adapter->vfinfo[i].clear_to_send = 0;
|
||||
}
|
||||
|
||||
/* disable receives */
|
||||
@@ -5638,7 +5648,8 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
|
||||
|
||||
#ifdef IXGBE_FCOE
|
||||
if ((adapter->flags & IXGBE_FLAG_FCOE_ENABLED) &&
|
||||
(skb->protocol == htons(ETH_P_FCOE))) {
|
||||
((skb->protocol == htons(ETH_P_FCOE)) ||
|
||||
(skb->protocol == htons(ETH_P_FIP)))) {
|
||||
txq &= (adapter->ring_feature[RING_F_FCOE].indices - 1);
|
||||
txq += adapter->ring_feature[RING_F_FCOE].mask;
|
||||
return txq;
|
||||
@@ -5685,18 +5696,25 @@ static netdev_tx_t ixgbe_xmit_frame(struct sk_buff *skb,
|
||||
|
||||
tx_ring = adapter->tx_ring[skb->queue_mapping];
|
||||
|
||||
if ((adapter->flags & IXGBE_FLAG_FCOE_ENABLED) &&
|
||||
(skb->protocol == htons(ETH_P_FCOE))) {
|
||||
tx_flags |= IXGBE_TX_FLAGS_FCOE;
|
||||
#ifdef IXGBE_FCOE
|
||||
if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) {
|
||||
#ifdef CONFIG_IXGBE_DCB
|
||||
tx_flags &= ~(IXGBE_TX_FLAGS_VLAN_PRIO_MASK
|
||||
<< IXGBE_TX_FLAGS_VLAN_SHIFT);
|
||||
tx_flags |= ((adapter->fcoe.up << 13)
|
||||
<< IXGBE_TX_FLAGS_VLAN_SHIFT);
|
||||
#endif
|
||||
/* for FCoE with DCB, we force the priority to what
|
||||
* was specified by the switch */
|
||||
if ((skb->protocol == htons(ETH_P_FCOE)) ||
|
||||
(skb->protocol == htons(ETH_P_FIP))) {
|
||||
tx_flags &= ~(IXGBE_TX_FLAGS_VLAN_PRIO_MASK
|
||||
<< IXGBE_TX_FLAGS_VLAN_SHIFT);
|
||||
tx_flags |= ((adapter->fcoe.up << 13)
|
||||
<< IXGBE_TX_FLAGS_VLAN_SHIFT);
|
||||
}
|
||||
#endif
|
||||
/* flag for FCoE offloads */
|
||||
if (skb->protocol == htons(ETH_P_FCOE))
|
||||
tx_flags |= IXGBE_TX_FLAGS_FCOE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* four things can cause us to need a context descriptor */
|
||||
if (skb_is_gso(skb) ||
|
||||
(skb->ip_summed == CHECKSUM_PARTIAL) ||
|
||||
@@ -6051,7 +6069,6 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
|
||||
indices += min_t(unsigned int, num_possible_cpus(),
|
||||
IXGBE_MAX_FCOE_INDICES);
|
||||
#endif
|
||||
indices = min_t(unsigned int, indices, MAX_TX_QUEUES);
|
||||
netdev = alloc_etherdev_mq(sizeof(struct ixgbe_adapter), indices);
|
||||
if (!netdev) {
|
||||
err = -ENOMEM;
|
||||
|
||||
@@ -1298,6 +1298,7 @@
|
||||
#define IXGBE_ETQF_FILTER_BCN 1
|
||||
#define IXGBE_ETQF_FILTER_FCOE 2
|
||||
#define IXGBE_ETQF_FILTER_1588 3
|
||||
#define IXGBE_ETQF_FILTER_FIP 4
|
||||
/* VLAN Control Bit Masks */
|
||||
#define IXGBE_VLNCTRL_VET 0x0000FFFF /* bits 0-15 */
|
||||
#define IXGBE_VLNCTRL_CFI 0x10000000 /* bit 28 */
|
||||
|
||||
@@ -2943,9 +2943,10 @@ static int ixgbevf_tx_map(struct ixgbevf_adapter *adapter,
|
||||
struct ixgbevf_tx_buffer *tx_buffer_info;
|
||||
unsigned int len;
|
||||
unsigned int total = skb->len;
|
||||
unsigned int offset = 0, size, count = 0, i;
|
||||
unsigned int offset = 0, size, count = 0;
|
||||
unsigned int nr_frags = skb_shinfo(skb)->nr_frags;
|
||||
unsigned int f;
|
||||
int i;
|
||||
|
||||
i = tx_ring->next_to_use;
|
||||
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
|
||||
#define _NETXEN_NIC_LINUX_MAJOR 4
|
||||
#define _NETXEN_NIC_LINUX_MINOR 0
|
||||
#define _NETXEN_NIC_LINUX_SUBVERSION 72
|
||||
#define NETXEN_NIC_LINUX_VERSIONID "4.0.72"
|
||||
#define _NETXEN_NIC_LINUX_SUBVERSION 73
|
||||
#define NETXEN_NIC_LINUX_VERSIONID "4.0.73"
|
||||
|
||||
#define NETXEN_VERSION_CODE(a, b, c) (((a) << 24) + ((b) << 16) + (c))
|
||||
#define _major(v) (((v) >> 24) & 0xff)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user