Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/intel/e1000e/param.c drivers/net/wireless/iwlwifi/iwl-agn-rx.c drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c drivers/net/wireless/iwlwifi/iwl-trans.h Resolved the iwlwifi conflict with mainline using 3-way diff posted by John Linville and Stephen Rothwell. In 'net' we added a bug fix to make iwlwifi report a more accurate skb->truesize but this conflicted with RX path changes that happened meanwhile in net-next. In e1000e a conflict arose in the validation code for settings of adapter->itr. 'net-next' had more sophisticated logic so that logic was used. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -3400,7 +3400,7 @@ static void e1000_dump(struct e1000_adapter *adapter)
|
||||
for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) {
|
||||
struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*tx_ring, i);
|
||||
struct e1000_buffer *buffer_info = &tx_ring->buffer_info[i];
|
||||
struct my_u { u64 a; u64 b; };
|
||||
struct my_u { __le64 a; __le64 b; };
|
||||
struct my_u *u = (struct my_u *)tx_desc;
|
||||
const char *type;
|
||||
|
||||
@@ -3444,7 +3444,7 @@ rx_ring_summary:
|
||||
for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) {
|
||||
struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rx_ring, i);
|
||||
struct e1000_buffer *buffer_info = &rx_ring->buffer_info[i];
|
||||
struct my_u { u64 a; u64 b; };
|
||||
struct my_u { __le64 a; __le64 b; };
|
||||
struct my_u *u = (struct my_u *)rx_desc;
|
||||
const char *type;
|
||||
|
||||
|
@@ -3778,7 +3778,7 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)
|
||||
/* fire an unusual interrupt on the test handler */
|
||||
ew32(ICS, E1000_ICS_RXSEQ);
|
||||
e1e_flush();
|
||||
msleep(50);
|
||||
msleep(100);
|
||||
|
||||
e1000_irq_disable(adapter);
|
||||
|
||||
|
@@ -106,7 +106,7 @@ E1000_PARAM(RxAbsIntDelay, "Receive Absolute Interrupt Delay");
|
||||
/*
|
||||
* Interrupt Throttle Rate (interrupts/sec)
|
||||
*
|
||||
* Valid Range: 100-100000 (0=off, 1=dynamic, 3=dynamic conservative)
|
||||
* Valid Range: 100-100000 or one of: 0=off, 1=dynamic, 3=dynamic conservative
|
||||
*/
|
||||
E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate");
|
||||
#define DEFAULT_ITR 3
|
||||
@@ -389,8 +389,49 @@ void __devinit e1000e_check_options(struct e1000_adapter *adapter)
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
adapter->itr_setting = opt.def;
|
||||
/*
|
||||
* If no option specified, use default value and go
|
||||
* through the logic below to adjust itr/itr_setting
|
||||
*/
|
||||
adapter->itr = opt.def;
|
||||
|
||||
/*
|
||||
* Make sure a message is printed for non-special
|
||||
* default values
|
||||
*/
|
||||
if (adapter->itr > 40)
|
||||
e_info("%s set to default %d\n", opt.name,
|
||||
adapter->itr);
|
||||
}
|
||||
|
||||
adapter->itr_setting = adapter->itr;
|
||||
switch (adapter->itr) {
|
||||
case 0:
|
||||
e_info("%s turned off\n", opt.name);
|
||||
break;
|
||||
case 1:
|
||||
e_info("%s set to dynamic mode\n", opt.name);
|
||||
adapter->itr = 20000;
|
||||
break;
|
||||
case 3:
|
||||
e_info("%s set to dynamic conservative mode\n",
|
||||
opt.name);
|
||||
adapter->itr = 20000;
|
||||
break;
|
||||
case 4:
|
||||
e_info("%s set to simplified (2000-8000 ints) mode\n",
|
||||
opt.name);
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* Save the setting, because the dynamic bits
|
||||
* change itr.
|
||||
*
|
||||
* Clear the lower two bits because
|
||||
* they are used as control.
|
||||
*/
|
||||
adapter->itr_setting &= ~3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
{ /* Interrupt Mode */
|
||||
|
@@ -2649,8 +2649,6 @@ void igb_configure_tx_ring(struct igb_adapter *adapter,
|
||||
|
||||
txdctl |= E1000_TXDCTL_QUEUE_ENABLE;
|
||||
wr32(E1000_TXDCTL(reg_idx), txdctl);
|
||||
|
||||
netdev_tx_reset_queue(txring_txq(ring));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3160,6 +3158,8 @@ static void igb_clean_tx_ring(struct igb_ring *tx_ring)
|
||||
igb_unmap_and_free_tx_resource(tx_ring, buffer_info);
|
||||
}
|
||||
|
||||
netdev_tx_reset_queue(txring_txq(tx_ring));
|
||||
|
||||
size = sizeof(struct igb_tx_buffer) * tx_ring->count;
|
||||
memset(tx_ring->tx_buffer_info, 0, size);
|
||||
|
||||
|
@@ -2731,14 +2731,14 @@ static int __devinit igbvf_probe(struct pci_dev *pdev,
|
||||
netdev->addr_len);
|
||||
}
|
||||
|
||||
if (!is_valid_ether_addr(netdev->perm_addr)) {
|
||||
if (!is_valid_ether_addr(netdev->dev_addr)) {
|
||||
dev_err(&pdev->dev, "Invalid MAC Address: %pM\n",
|
||||
netdev->dev_addr);
|
||||
err = -EIO;
|
||||
goto err_hw_init;
|
||||
}
|
||||
|
||||
memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len);
|
||||
memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
|
||||
|
||||
setup_timer(&adapter->watchdog_timer, &igbvf_watchdog,
|
||||
(unsigned long) adapter);
|
||||
|
@@ -598,9 +598,6 @@ extern struct ixgbe_info ixgbe_82599_info;
|
||||
extern struct ixgbe_info ixgbe_X540_info;
|
||||
#ifdef CONFIG_IXGBE_DCB
|
||||
extern const struct dcbnl_rtnl_ops dcbnl_ops;
|
||||
extern int ixgbe_copy_dcb_cfg(struct ixgbe_dcb_config *src_dcb_cfg,
|
||||
struct ixgbe_dcb_config *dst_dcb_cfg,
|
||||
int tc_max);
|
||||
#endif
|
||||
|
||||
extern char ixgbe_driver_name[];
|
||||
|
@@ -44,18 +44,26 @@
|
||||
#define DCB_NO_HW_CHG 1 /* DCB configuration did not change */
|
||||
#define DCB_HW_CHG 2 /* DCB configuration changed, no reset */
|
||||
|
||||
int ixgbe_copy_dcb_cfg(struct ixgbe_dcb_config *scfg,
|
||||
struct ixgbe_dcb_config *dcfg, int tc_max)
|
||||
static int ixgbe_copy_dcb_cfg(struct ixgbe_adapter *adapter, int tc_max)
|
||||
{
|
||||
struct ixgbe_dcb_config *scfg = &adapter->temp_dcb_cfg;
|
||||
struct ixgbe_dcb_config *dcfg = &adapter->dcb_cfg;
|
||||
struct tc_configuration *src = NULL;
|
||||
struct tc_configuration *dst = NULL;
|
||||
int i, j;
|
||||
int tx = DCB_TX_CONFIG;
|
||||
int rx = DCB_RX_CONFIG;
|
||||
int changes = 0;
|
||||
#ifdef IXGBE_FCOE
|
||||
struct dcb_app app = {
|
||||
.selector = DCB_APP_IDTYPE_ETHTYPE,
|
||||
.protocol = ETH_P_FCOE,
|
||||
};
|
||||
u8 up = dcb_getapp(adapter->netdev, &app);
|
||||
|
||||
if (!scfg || !dcfg)
|
||||
return changes;
|
||||
if (up && !(up & (1 << adapter->fcoe.up)))
|
||||
changes |= BIT_APP_UPCHG;
|
||||
#endif
|
||||
|
||||
for (i = DCB_PG_ATTR_TC_0; i < tc_max + DCB_PG_ATTR_TC_0; i++) {
|
||||
src = &scfg->tc_config[i - DCB_PG_ATTR_TC_0];
|
||||
@@ -332,28 +340,12 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
int ret = DCB_NO_HW_CHG;
|
||||
int i;
|
||||
#ifdef IXGBE_FCOE
|
||||
struct dcb_app app = {
|
||||
.selector = DCB_APP_IDTYPE_ETHTYPE,
|
||||
.protocol = ETH_P_FCOE,
|
||||
};
|
||||
u8 up;
|
||||
|
||||
/* In IEEE mode, use the IEEE Ethertype selector value */
|
||||
if (adapter->dcbx_cap & DCB_CAP_DCBX_VER_IEEE) {
|
||||
app.selector = IEEE_8021QAZ_APP_SEL_ETHERTYPE;
|
||||
up = dcb_ieee_getapp_mask(netdev, &app);
|
||||
} else {
|
||||
up = dcb_getapp(netdev, &app);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Fail command if not in CEE mode */
|
||||
if (!(adapter->dcbx_cap & DCB_CAP_DCBX_VER_CEE))
|
||||
return ret;
|
||||
|
||||
adapter->dcb_set_bitmap |= ixgbe_copy_dcb_cfg(&adapter->temp_dcb_cfg,
|
||||
&adapter->dcb_cfg,
|
||||
adapter->dcb_set_bitmap |= ixgbe_copy_dcb_cfg(adapter,
|
||||
MAX_TRAFFIC_CLASS);
|
||||
if (!adapter->dcb_set_bitmap)
|
||||
return ret;
|
||||
@@ -440,8 +432,13 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
|
||||
* FCoE is using changes. This happens if the APP info
|
||||
* changes or the up2tc mapping is updated.
|
||||
*/
|
||||
if ((up && !(up & (1 << adapter->fcoe.up))) ||
|
||||
(adapter->dcb_set_bitmap & BIT_APP_UPCHG)) {
|
||||
if (adapter->dcb_set_bitmap & BIT_APP_UPCHG) {
|
||||
struct dcb_app app = {
|
||||
.selector = DCB_APP_IDTYPE_ETHTYPE,
|
||||
.protocol = ETH_P_FCOE,
|
||||
};
|
||||
u8 up = dcb_getapp(netdev, &app);
|
||||
|
||||
adapter->fcoe.up = ffs(up) - 1;
|
||||
ixgbe_dcbnl_devreset(netdev);
|
||||
ret = DCB_HW_CHG_RST;
|
||||
|
@@ -1780,6 +1780,8 @@ static u16 ixgbe_clean_test_rings(struct ixgbe_ring *rx_ring,
|
||||
rx_desc = IXGBE_RX_DESC(rx_ring, rx_ntc);
|
||||
}
|
||||
|
||||
netdev_tx_reset_queue(txring_txq(tx_ring));
|
||||
|
||||
/* re-map buffers to ring, store next to clean values */
|
||||
ixgbe_alloc_rx_buffers(rx_ring, count);
|
||||
rx_ring->next_to_clean = rx_ntc;
|
||||
|
@@ -437,6 +437,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
|
||||
*/
|
||||
if ((fh->fh_r_ctl == FC_RCTL_DD_SOL_DATA) &&
|
||||
(fctl & FC_FC_END_SEQ)) {
|
||||
skb_linearize(skb);
|
||||
crc = (struct fcoe_crc_eof *)skb_put(skb, sizeof(*crc));
|
||||
crc->fcoe_eof = FC_EOF_T;
|
||||
}
|
||||
|
@@ -2675,8 +2675,6 @@ void ixgbe_configure_tx_ring(struct ixgbe_adapter *adapter,
|
||||
/* enable queue */
|
||||
IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(reg_idx), txdctl);
|
||||
|
||||
netdev_tx_reset_queue(txring_txq(ring));
|
||||
|
||||
/* TXDCTL.EN will return 0 on 82598 if link is down, so skip it */
|
||||
if (hw->mac.type == ixgbe_mac_82598EB &&
|
||||
!(IXGBE_READ_REG(hw, IXGBE_LINKS) & IXGBE_LINKS_UP))
|
||||
@@ -4144,6 +4142,8 @@ static void ixgbe_clean_tx_ring(struct ixgbe_ring *tx_ring)
|
||||
ixgbe_unmap_and_free_tx_resource(tx_ring, tx_buffer_info);
|
||||
}
|
||||
|
||||
netdev_tx_reset_queue(txring_txq(tx_ring));
|
||||
|
||||
size = sizeof(struct ixgbe_tx_buffer) * tx_ring->count;
|
||||
memset(tx_ring->tx_buffer_info, 0, size);
|
||||
|
||||
@@ -4395,8 +4395,8 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
|
||||
adapter->dcb_cfg.pfc_mode_enable = false;
|
||||
adapter->dcb_set_bitmap = 0x00;
|
||||
adapter->dcbx_cap = DCB_CAP_DCBX_HOST | DCB_CAP_DCBX_VER_CEE;
|
||||
ixgbe_copy_dcb_cfg(&adapter->dcb_cfg, &adapter->temp_dcb_cfg,
|
||||
MAX_TRAFFIC_CLASS);
|
||||
memcpy(&adapter->temp_dcb_cfg, &adapter->dcb_cfg,
|
||||
sizeof(adapter->temp_dcb_cfg));
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4843,17 +4843,15 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
|
||||
netif_device_detach(netdev);
|
||||
|
||||
if (netif_running(netdev)) {
|
||||
rtnl_lock();
|
||||
ixgbe_down(adapter);
|
||||
ixgbe_free_irq(adapter);
|
||||
ixgbe_free_all_tx_resources(adapter);
|
||||
ixgbe_free_all_rx_resources(adapter);
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
ixgbe_clear_interrupt_scheme(adapter);
|
||||
#ifdef CONFIG_DCB
|
||||
kfree(adapter->ixgbe_ieee_pfc);
|
||||
kfree(adapter->ixgbe_ieee_ets);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
retval = pci_save_state(pdev);
|
||||
@@ -7299,6 +7297,11 @@ static void __devexit ixgbe_remove(struct pci_dev *pdev)
|
||||
|
||||
ixgbe_release_hw_control(adapter);
|
||||
|
||||
#ifdef CONFIG_DCB
|
||||
kfree(adapter->ixgbe_ieee_pfc);
|
||||
kfree(adapter->ixgbe_ieee_ets);
|
||||
|
||||
#endif
|
||||
iounmap(adapter->hw.hw_addr);
|
||||
pci_release_selected_regions(pdev, pci_select_bars(pdev,
|
||||
IORESOURCE_MEM));
|
||||
|
Reference in New Issue
Block a user