mirror of https://gitee.com/openkylin/linux.git
Merge branch '1GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue
Jeff Kirsher says: ==================== 1GbE Intel Wired LAN Driver Updates 2016-04-06 This series contains updates to e1000, e1000e, igb and Kconfig. Alex fixes igb where we were casting the MAC address as __beXX and then passing it into le32_to_cpu, when we could simply cast as __lexx to maintain consistency since it is already little endian. Then enabled bulk free in transmit cleanup for igb. John Holland enables igb to pickup the MAC address from a device tree blob when CONFIG_OF has been enabled. Doron Shikmoni fixes a bug in the output of "ethtool -m ethX" where the data byte appeared duplicated. Stefan fixes up e1000 and e1000e ethtool offline tests which were calling dev_close() which causes IFF_UP to be cleared which removes teh interface routes and some addresses, so use ndo_stop() instead. Jiri Benc cleans up some old links in the Kconfig for Intel drivers where we referred to a URL which is no longer valid. I am so glad Jiri has the time in his day to spend clicking on and testing all the URL links in the the kernel. Arika Chen reverts the addition of a 'rtnl_unlock()' which had a unmatched 'rtnl_lock()' call before it. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
94ab1ea94c
|
@ -25,16 +25,13 @@ config E100
|
|||
on the adapter. Look for a label that has a barcode and a number
|
||||
in the format 123456-001 (six digits hyphen three digits).
|
||||
|
||||
Use the above information and the Adapter & Driver ID Guide at:
|
||||
Use the above information and the Adapter & Driver ID Guide that
|
||||
can be located at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
<http://support.intel.com>
|
||||
|
||||
to identify the adapter.
|
||||
|
||||
For the latest Intel PRO/100 network driver for Linux, see:
|
||||
|
||||
<http://www.intel.com/p/en_US/support/highlights/network/pro100plus>
|
||||
|
||||
More specific information on configuring the driver is in
|
||||
<file:Documentation/networking/e100.txt>.
|
||||
|
||||
|
@ -47,12 +44,7 @@ config E1000
|
|||
---help---
|
||||
This driver supports Intel(R) PRO/1000 gigabit ethernet family of
|
||||
adapters. For more information on how to identify your adapter, go
|
||||
to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
to the Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -71,12 +63,8 @@ config E1000E
|
|||
This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
|
||||
ethernet family of adapters. For PCI or PCI-X e1000 adapters,
|
||||
use the regular e1000 driver For more information on how to
|
||||
identify your adapter, go to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
identify your adapter, go to the Adapter & Driver ID Guide that
|
||||
can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -101,12 +89,7 @@ config IGB
|
|||
---help---
|
||||
This driver supports Intel(R) 82575/82576 gigabit ethernet family of
|
||||
adapters. For more information on how to identify your adapter, go
|
||||
to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
to the Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -142,12 +125,7 @@ config IGBVF
|
|||
---help---
|
||||
This driver supports Intel(R) 82576 virtual functions. For more
|
||||
information on how to identify your adapter, go to the Adapter &
|
||||
Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -164,12 +142,7 @@ config IXGB
|
|||
This driver supports Intel(R) PRO/10GbE family of adapters for
|
||||
PCI-X type cards. For PCI-E type cards, use the "ixgbe" driver
|
||||
instead. For more information on how to identify your adapter, go
|
||||
to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
to the Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -187,12 +160,7 @@ config IXGBE
|
|||
---help---
|
||||
This driver supports Intel(R) 10GbE PCI Express family of
|
||||
adapters. For more information on how to identify your adapter, go
|
||||
to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
to the Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -243,12 +211,7 @@ config IXGBEVF
|
|||
---help---
|
||||
This driver supports Intel(R) PCI Express virtual functions for the
|
||||
Intel(R) ixgbe driver. For more information on how to identify your
|
||||
adapter, go to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/sb/CS-008441.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
adapter, go to the Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -266,12 +229,7 @@ config I40E
|
|||
---help---
|
||||
This driver supports Intel(R) Ethernet Controller XL710 Family of
|
||||
devices. For more information on how to identify your adapter, go
|
||||
to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/adapter/pro100/21397.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
to the Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -326,12 +284,7 @@ config I40EVF
|
|||
---help---
|
||||
This driver supports Intel(R) XL710 and X710 virtual functions.
|
||||
For more information on how to identify your adapter, go to the
|
||||
Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/sb/CS-008441.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
@ -347,12 +300,7 @@ config FM10K
|
|||
---help---
|
||||
This driver supports Intel(R) FM10000 Ethernet Switch Host
|
||||
Interface. For more information on how to identify your adapter,
|
||||
go to the Adapter & Driver ID Guide at:
|
||||
|
||||
<http://support.intel.com/support/network/sb/CS-008441.htm>
|
||||
|
||||
For general information and support, go to the Intel support
|
||||
website at:
|
||||
go to the Adapter & Driver ID Guide that can be located at:
|
||||
|
||||
<http://support.intel.com>
|
||||
|
||||
|
|
|
@ -358,6 +358,8 @@ struct net_device *e1000_get_hw_dev(struct e1000_hw *hw);
|
|||
extern char e1000_driver_name[];
|
||||
extern const char e1000_driver_version[];
|
||||
|
||||
int e1000_open(struct net_device *netdev);
|
||||
int e1000_close(struct net_device *netdev);
|
||||
int e1000_up(struct e1000_adapter *adapter);
|
||||
void e1000_down(struct e1000_adapter *adapter);
|
||||
void e1000_reinit_locked(struct e1000_adapter *adapter);
|
||||
|
|
|
@ -1553,7 +1553,7 @@ static void e1000_diag_test(struct net_device *netdev,
|
|||
|
||||
if (if_running)
|
||||
/* indicate we're in test mode */
|
||||
dev_close(netdev);
|
||||
e1000_close(netdev);
|
||||
else
|
||||
e1000_reset(adapter);
|
||||
|
||||
|
@ -1582,7 +1582,7 @@ static void e1000_diag_test(struct net_device *netdev,
|
|||
e1000_reset(adapter);
|
||||
clear_bit(__E1000_TESTING, &adapter->flags);
|
||||
if (if_running)
|
||||
dev_open(netdev);
|
||||
e1000_open(netdev);
|
||||
} else {
|
||||
e_info(hw, "online testing starting\n");
|
||||
/* Online tests */
|
||||
|
|
|
@ -114,8 +114,8 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
|
|||
static void e1000_remove(struct pci_dev *pdev);
|
||||
static int e1000_alloc_queues(struct e1000_adapter *adapter);
|
||||
static int e1000_sw_init(struct e1000_adapter *adapter);
|
||||
static int e1000_open(struct net_device *netdev);
|
||||
static int e1000_close(struct net_device *netdev);
|
||||
int e1000_open(struct net_device *netdev);
|
||||
int e1000_close(struct net_device *netdev);
|
||||
static void e1000_configure_tx(struct e1000_adapter *adapter);
|
||||
static void e1000_configure_rx(struct e1000_adapter *adapter);
|
||||
static void e1000_setup_rctl(struct e1000_adapter *adapter);
|
||||
|
@ -1360,7 +1360,7 @@ static int e1000_alloc_queues(struct e1000_adapter *adapter)
|
|||
* handler is registered with the OS, the watchdog task is started,
|
||||
* and the stack is notified that the interface is ready.
|
||||
**/
|
||||
static int e1000_open(struct net_device *netdev)
|
||||
int e1000_open(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
@ -1437,7 +1437,7 @@ static int e1000_open(struct net_device *netdev)
|
|||
* needs to be disabled. A global MAC reset is issued to stop the
|
||||
* hardware, and all transmit and receive resources are freed.
|
||||
**/
|
||||
static int e1000_close(struct net_device *netdev)
|
||||
int e1000_close(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
|
|
@ -480,6 +480,8 @@ extern const char e1000e_driver_version[];
|
|||
void e1000e_check_options(struct e1000_adapter *adapter);
|
||||
void e1000e_set_ethtool_ops(struct net_device *netdev);
|
||||
|
||||
int e1000e_open(struct net_device *netdev);
|
||||
int e1000e_close(struct net_device *netdev);
|
||||
void e1000e_up(struct e1000_adapter *adapter);
|
||||
void e1000e_down(struct e1000_adapter *adapter, bool reset);
|
||||
void e1000e_reinit_locked(struct e1000_adapter *adapter);
|
||||
|
|
|
@ -1816,7 +1816,7 @@ static void e1000_diag_test(struct net_device *netdev,
|
|||
|
||||
if (if_running)
|
||||
/* indicate we're in test mode */
|
||||
dev_close(netdev);
|
||||
e1000e_close(netdev);
|
||||
|
||||
if (e1000_reg_test(adapter, &data[0]))
|
||||
eth_test->flags |= ETH_TEST_FL_FAILED;
|
||||
|
@ -1849,7 +1849,7 @@ static void e1000_diag_test(struct net_device *netdev,
|
|||
|
||||
clear_bit(__E1000_TESTING, &adapter->state);
|
||||
if (if_running)
|
||||
dev_open(netdev);
|
||||
e1000e_open(netdev);
|
||||
} else {
|
||||
/* Online tests */
|
||||
|
||||
|
|
|
@ -4495,7 +4495,7 @@ static int e1000_test_msi(struct e1000_adapter *adapter)
|
|||
}
|
||||
|
||||
/**
|
||||
* e1000_open - Called when a network interface is made active
|
||||
* e1000e_open - Called when a network interface is made active
|
||||
* @netdev: network interface device structure
|
||||
*
|
||||
* Returns 0 on success, negative value on failure
|
||||
|
@ -4506,7 +4506,7 @@ static int e1000_test_msi(struct e1000_adapter *adapter)
|
|||
* handler is registered with the OS, the watchdog timer is started,
|
||||
* and the stack is notified that the interface is ready.
|
||||
**/
|
||||
static int e1000_open(struct net_device *netdev)
|
||||
int e1000e_open(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
@ -4604,7 +4604,7 @@ static int e1000_open(struct net_device *netdev)
|
|||
}
|
||||
|
||||
/**
|
||||
* e1000_close - Disables a network interface
|
||||
* e1000e_close - Disables a network interface
|
||||
* @netdev: network interface device structure
|
||||
*
|
||||
* Returns 0, this is not allowed to fail
|
||||
|
@ -4614,7 +4614,7 @@ static int e1000_open(struct net_device *netdev)
|
|||
* needs to be disabled. A global MAC reset is issued to stop the
|
||||
* hardware, and all transmit and receive resources are freed.
|
||||
**/
|
||||
static int e1000_close(struct net_device *netdev)
|
||||
int e1000e_close(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
|
@ -6920,8 +6920,8 @@ static int e1000_set_features(struct net_device *netdev,
|
|||
}
|
||||
|
||||
static const struct net_device_ops e1000e_netdev_ops = {
|
||||
.ndo_open = e1000_open,
|
||||
.ndo_stop = e1000_close,
|
||||
.ndo_open = e1000e_open,
|
||||
.ndo_stop = e1000e_close,
|
||||
.ndo_start_xmit = e1000_xmit_frame,
|
||||
.ndo_get_stats64 = e1000e_get_stats64,
|
||||
.ndo_set_rx_mode = e1000e_set_rx_mode,
|
||||
|
|
|
@ -2831,7 +2831,8 @@ static int igb_get_module_eeprom(struct net_device *netdev,
|
|||
|
||||
/* Read EEPROM block, SFF-8079/SFF-8472, word at a time */
|
||||
for (i = 0; i < last_word - first_word + 1; i++) {
|
||||
status = igb_read_phy_reg_i2c(hw, first_word + i, &dataword[i]);
|
||||
status = igb_read_phy_reg_i2c(hw, (first_word + i) * 2,
|
||||
&dataword[i]);
|
||||
if (status) {
|
||||
/* Error occurred while reading module */
|
||||
kfree(dataword);
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
#include <linux/aer.h>
|
||||
#include <linux/prefetch.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#ifdef CONFIG_IGB_DCA
|
||||
#include <linux/dca.h>
|
||||
#endif
|
||||
|
@ -150,7 +151,7 @@ static void igb_update_dca(struct igb_q_vector *);
|
|||
static void igb_setup_dca(struct igb_adapter *);
|
||||
#endif /* CONFIG_IGB_DCA */
|
||||
static int igb_poll(struct napi_struct *, int);
|
||||
static bool igb_clean_tx_irq(struct igb_q_vector *);
|
||||
static bool igb_clean_tx_irq(struct igb_q_vector *, int);
|
||||
static int igb_clean_rx_irq(struct igb_q_vector *, int);
|
||||
static int igb_ioctl(struct net_device *, struct ifreq *, int cmd);
|
||||
static void igb_tx_timeout(struct net_device *);
|
||||
|
@ -2442,9 +2443,11 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
break;
|
||||
}
|
||||
|
||||
/* copy the MAC address out of the NVM */
|
||||
if (hw->mac.ops.read_mac_addr(hw))
|
||||
dev_err(&pdev->dev, "NVM Read Error\n");
|
||||
if (eth_platform_get_mac_address(&pdev->dev, hw->mac.addr)) {
|
||||
/* copy the MAC address out of the NVM */
|
||||
if (hw->mac.ops.read_mac_addr(hw))
|
||||
dev_err(&pdev->dev, "NVM Read Error\n");
|
||||
}
|
||||
|
||||
memcpy(netdev->dev_addr, hw->mac.addr, netdev->addr_len);
|
||||
|
||||
|
@ -6522,13 +6525,14 @@ static int igb_poll(struct napi_struct *napi, int budget)
|
|||
igb_update_dca(q_vector);
|
||||
#endif
|
||||
if (q_vector->tx.ring)
|
||||
clean_complete = igb_clean_tx_irq(q_vector);
|
||||
clean_complete = igb_clean_tx_irq(q_vector, budget);
|
||||
|
||||
if (q_vector->rx.ring) {
|
||||
int cleaned = igb_clean_rx_irq(q_vector, budget);
|
||||
|
||||
work_done += cleaned;
|
||||
clean_complete &= (cleaned < budget);
|
||||
if (cleaned >= budget)
|
||||
clean_complete = false;
|
||||
}
|
||||
|
||||
/* If all work not completed, return budget and keep polling */
|
||||
|
@ -6545,10 +6549,11 @@ static int igb_poll(struct napi_struct *napi, int budget)
|
|||
/**
|
||||
* igb_clean_tx_irq - Reclaim resources after transmit completes
|
||||
* @q_vector: pointer to q_vector containing needed info
|
||||
* @napi_budget: Used to determine if we are in netpoll
|
||||
*
|
||||
* returns true if ring is completely cleaned
|
||||
**/
|
||||
static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
|
||||
static bool igb_clean_tx_irq(struct igb_q_vector *q_vector, int napi_budget)
|
||||
{
|
||||
struct igb_adapter *adapter = q_vector->adapter;
|
||||
struct igb_ring *tx_ring = q_vector->tx.ring;
|
||||
|
@ -6587,7 +6592,7 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
|
|||
total_packets += tx_buffer->gso_segs;
|
||||
|
||||
/* free the skb */
|
||||
dev_consume_skb_any(tx_buffer->skb);
|
||||
napi_consume_skb(tx_buffer->skb, napi_budget);
|
||||
|
||||
/* unmap skb header data */
|
||||
dma_unmap_single(tx_ring->dev,
|
||||
|
@ -7574,7 +7579,6 @@ static int igb_resume(struct device *dev)
|
|||
|
||||
if (igb_init_interrupt_scheme(adapter, true)) {
|
||||
dev_err(&pdev->dev, "Unable to allocate memory for queues\n");
|
||||
rtnl_unlock();
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -7845,11 +7849,13 @@ static void igb_rar_set_qsel(struct igb_adapter *adapter, u8 *addr, u32 index,
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 rar_low, rar_high;
|
||||
|
||||
/* HW expects these in little endian so we reverse the byte order
|
||||
* from network order (big endian) to CPU endian
|
||||
/* HW expects these to be in network order when they are plugged
|
||||
* into the registers which are little endian. In order to guarantee
|
||||
* that ordering we need to do an leXX_to_cpup here in order to be
|
||||
* ready for the byteswap that occurs with writel
|
||||
*/
|
||||
rar_low = le32_to_cpup((__be32 *)(addr));
|
||||
rar_high = le16_to_cpup((__be16 *)(addr + 4));
|
||||
rar_low = le32_to_cpup((__le32 *)(addr));
|
||||
rar_high = le16_to_cpup((__le16 *)(addr + 4));
|
||||
|
||||
/* Indicate to hardware the Address is Valid. */
|
||||
rar_high |= E1000_RAH_AV;
|
||||
|
|
Loading…
Reference in New Issue