* [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
@ 2012-10-27 0:08 Jeff Kirsher
2012-10-27 0:08 ` [net-next 01/12] ixgbe: Add support for pipeline reset Jeff Kirsher
` (11 more replies)
0 siblings, 12 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann
This series contains updates to ixgbe, ixgbevf, igbvf, igb and
networking core (bridge). Most notably is the addition of support
for local link multicast addresses in SR-IOV mode to the networking
core.
Also note, the ixgbe patch "ixgbe: Add support for pipeline reset" is
revised based on community feedback.
v1- 14 patches series submitted for pull request
v2- Dropped the following patches because changes were requested:
ixgbe: eliminate Smatch warnings in ixgbe_debugfs.c
ixgbevf: make sure probe fails on MSI-X enable error
The following are changes since commit f019948dbb388eacbc0fb61db1d30e686224df77:
Merge branch 'master' of git://1984.lsi.us.es/nf-next
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master
Alexander Duyck (2):
ixgbe: Do not decrement budget in ixgbe_clean_rx_irq
igb: Fix sparse warning in igb_ptp_rx_pktstamp
Carolyn Wyborny (1):
igb: Update firmware version info for ethtool output.
Don Skidmore (1):
ixgbe: Add support for pipeline reset
Emil Tantilov (1):
ixgbe: clean up the condition for turning on/off the laser
Greg Rose (4):
ixgbe: Fix return value from macvlan filter function
ixgbe: Return success or failure on VF MAC filter set
ixgbevf: Do not forward LLDP type frames
igbvf: Check for error on dma_map_single call
John Fastabend (1):
net, ixgbe: handle link local multicast addresses in SR-IOV mode
Josh Hay (1):
ixgbe: add/update descriptor maps in comments
Matthew Vick (1):
igb: Enable auto-crossover during forced operation on 82580 and
above.
drivers/net/ethernet/intel/igb/e1000_defines.h | 14 +++
drivers/net/ethernet/intel/igb/e1000_mac.c | 4 +
drivers/net/ethernet/intel/igb/e1000_nvm.c | 70 +++++++++++++
drivers/net/ethernet/intel/igb/e1000_nvm.h | 16 +++
drivers/net/ethernet/intel/igb/e1000_phy.c | 29 +++---
drivers/net/ethernet/intel/igb/igb_main.c | 76 +++++----------
drivers/net/ethernet/intel/igb/igb_ptp.c | 2 +-
drivers/net/ethernet/intel/igbvf/netdev.c | 13 +++
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 1 +
drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 114 ++++++++++++++++------
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 70 ++++++++++++-
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 103 ++++++++++++-------
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 5 +-
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 5 +
drivers/net/ethernet/intel/ixgbevf/vf.c | 3 +
include/linux/etherdevice.h | 19 ++++
net/bridge/br_device.c | 2 +-
net/bridge/br_input.c | 15 ---
net/bridge/br_private.h | 1 -
net/bridge/br_sysfs_br.c | 3 +-
20 files changed, 415 insertions(+), 150 deletions(-)
--
1.7.11.7
^ permalink raw reply [flat|nested] 22+ messages in thread
* [net-next 01/12] ixgbe: Add support for pipeline reset
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 02/12] ixgbe: Fix return value from macvlan filter function Jeff Kirsher
` (10 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Don Skidmore, netdev, gospo, sassmann, Martin Josefsson,
Jeff Kirsher
From: Don Skidmore <donald.c.skidmore@intel.com>
Calling the ixgbe_reset_pipeline_82599 function will ensure a full pipeline
reset on all 82599 devices. This is necessary to avoid possible link issues.
Since this patch accomplishes this by modifying AUTOC.LMS we need to wrap
all AUTOC writes when LESM is enabled.
v2- fix LMS behaviour based on feedback by Martin Josefsson
CC: Martin Josefsson <gandalf@mjufs.se>
Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 1 +
drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 114 ++++++++++++++++++------
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 70 ++++++++++++++-
3 files changed, 153 insertions(+), 32 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index c64a777..a17116b 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -693,6 +693,7 @@ extern s32 ixgbe_fdir_erase_perfect_filter_82599(struct ixgbe_hw *hw,
u16 soft_id);
extern void ixgbe_atr_compute_perfect_hash_82599(union ixgbe_atr_input *input,
union ixgbe_atr_input *mask);
+extern bool ixgbe_verify_lesm_fw_enabled_82599(struct ixgbe_hw *hw);
extern void ixgbe_set_rx_mode(struct net_device *netdev);
#ifdef CONFIG_IXGBE_DCB
extern void ixgbe_set_rx_drop_en(struct ixgbe_adapter *adapter);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
index b527813..e75f5a4 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
@@ -62,7 +62,6 @@ static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
bool autoneg,
bool autoneg_wait_to_complete);
static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
-static bool ixgbe_verify_lesm_fw_enabled_82599(struct ixgbe_hw *hw);
static void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
{
@@ -99,9 +98,8 @@ static void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
{
s32 ret_val = 0;
- u32 reg_anlp1 = 0;
- u32 i = 0;
u16 list_offset, data_offset, data_value;
+ bool got_lock = false;
if (hw->phy.sfp_type != ixgbe_sfp_type_unknown) {
ixgbe_init_mac_link_ops_82599(hw);
@@ -137,28 +135,36 @@ static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
usleep_range(hw->eeprom.semaphore_delay * 1000,
hw->eeprom.semaphore_delay * 2000);
- /* Now restart DSP by setting Restart_AN and clearing LMS */
- IXGBE_WRITE_REG(hw, IXGBE_AUTOC, ((IXGBE_READ_REG(hw,
- IXGBE_AUTOC) & ~IXGBE_AUTOC_LMS_MASK) |
- IXGBE_AUTOC_AN_RESTART));
-
- /* Wait for AN to leave state 0 */
- for (i = 0; i < 10; i++) {
- usleep_range(4000, 8000);
- reg_anlp1 = IXGBE_READ_REG(hw, IXGBE_ANLP1);
- if (reg_anlp1 & IXGBE_ANLP1_AN_STATE_MASK)
- break;
+ /* Need SW/FW semaphore around AUTOC writes if LESM on,
+ * likewise reset_pipeline requires lock as it also writes
+ * AUTOC.
+ */
+ if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+ ret_val = hw->mac.ops.acquire_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ if (ret_val)
+ goto setup_sfp_out;
+
+ got_lock = true;
+ }
+
+ /* Restart DSP and set SFI mode */
+ IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (IXGBE_READ_REG(hw,
+ IXGBE_AUTOC) | IXGBE_AUTOC_LMS_10G_SERIAL));
+
+ ret_val = ixgbe_reset_pipeline_82599(hw);
+
+ if (got_lock) {
+ hw->mac.ops.release_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ got_lock = false;
}
- if (!(reg_anlp1 & IXGBE_ANLP1_AN_STATE_MASK)) {
- hw_dbg(hw, "sfp module setup not complete\n");
+
+ if (ret_val) {
+ hw_dbg(hw, " sfp module setup not complete\n");
ret_val = IXGBE_ERR_SFP_SETUP_NOT_COMPLETE;
goto setup_sfp_out;
}
-
- /* Restart DSP by setting Restart_AN and return to SFI mode */
- IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (IXGBE_READ_REG(hw,
- IXGBE_AUTOC) | IXGBE_AUTOC_LMS_10G_SERIAL |
- IXGBE_AUTOC_AN_RESTART));
}
setup_sfp_out:
@@ -394,14 +400,26 @@ static s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
u32 links_reg;
u32 i;
s32 status = 0;
+ bool got_lock = false;
+
+ if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+ status = hw->mac.ops.acquire_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ if (status)
+ goto out;
+
+ got_lock = true;
+ }
/* Restart link */
- autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
- autoc_reg |= IXGBE_AUTOC_AN_RESTART;
- IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
+ ixgbe_reset_pipeline_82599(hw);
+
+ if (got_lock)
+ hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
/* Only poll for autoneg to complete if specified to do so */
if (autoneg_wait_to_complete) {
+ autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
IXGBE_AUTOC_LMS_KX4_KX_KR ||
(autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
@@ -425,6 +443,7 @@ static s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
/* Add delay to filter out noises during initial link setup */
msleep(50);
+out:
return status;
}
@@ -779,6 +798,7 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
u32 links_reg;
u32 i;
ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
+ bool got_lock = false;
/* Check to see if speed passed in is supported. */
status = hw->mac.ops.get_link_capabilities(hw, &link_capabilities,
@@ -836,9 +856,26 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
}
if (autoc != start_autoc) {
+ /* Need SW/FW semaphore around AUTOC writes if LESM is on,
+ * likewise reset_pipeline requires us to hold this lock as
+ * it also writes to AUTOC.
+ */
+ if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+ status = hw->mac.ops.acquire_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ if (status != 0)
+ goto out;
+
+ got_lock = true;
+ }
+
/* Restart link */
- autoc |= IXGBE_AUTOC_AN_RESTART;
IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
+ ixgbe_reset_pipeline_82599(hw);
+
+ if (got_lock)
+ hw->mac.ops.release_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
/* Only poll for autoneg to complete if specified to do so */
if (autoneg_wait_to_complete) {
@@ -994,9 +1031,28 @@ mac_reset_top:
hw->mac.orig_autoc2 = autoc2;
hw->mac.orig_link_settings_stored = true;
} else {
- if (autoc != hw->mac.orig_autoc)
- IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (hw->mac.orig_autoc |
- IXGBE_AUTOC_AN_RESTART));
+ if (autoc != hw->mac.orig_autoc) {
+ /* Need SW/FW semaphore around AUTOC writes if LESM is
+ * on, likewise reset_pipeline requires us to hold
+ * this lock as it also writes to AUTOC.
+ */
+ bool got_lock = false;
+ if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+ status = hw->mac.ops.acquire_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ if (status)
+ goto reset_hw_out;
+
+ got_lock = true;
+ }
+
+ IXGBE_WRITE_REG(hw, IXGBE_AUTOC, hw->mac.orig_autoc);
+ ixgbe_reset_pipeline_82599(hw);
+
+ if (got_lock)
+ hw->mac.ops.release_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ }
if ((autoc2 & IXGBE_AUTOC2_UPPER_MASK) !=
(hw->mac.orig_autoc2 & IXGBE_AUTOC2_UPPER_MASK)) {
@@ -1983,7 +2039,7 @@ fw_version_out:
* Returns true if the LESM FW module is present and enabled. Otherwise
* returns false. Smart Speed must be disabled if LESM FW module is enabled.
**/
-static bool ixgbe_verify_lesm_fw_enabled_82599(struct ixgbe_hw *hw)
+bool ixgbe_verify_lesm_fw_enabled_82599(struct ixgbe_hw *hw)
{
bool lesm_enabled = false;
u16 fw_offset, fw_lesm_param_offset, fw_lesm_state;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
index a2a9bcc..8f285ed 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
@@ -90,6 +90,7 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
s32 ret_val = 0;
u32 reg = 0, reg_bp = 0;
u16 reg_cu = 0;
+ bool got_lock = false;
/*
* Validate the requested mode. Strict IEEE mode does not allow
@@ -210,8 +211,29 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
*
*/
if (hw->phy.media_type == ixgbe_media_type_backplane) {
- reg_bp |= IXGBE_AUTOC_AN_RESTART;
+ /* Need the SW/FW semaphore around AUTOC writes if 82599 and
+ * LESM is on, likewise reset_pipeline requries the lock as
+ * it also writes AUTOC.
+ */
+ if ((hw->mac.type == ixgbe_mac_82599EB) &&
+ ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+ ret_val = hw->mac.ops.acquire_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ if (ret_val)
+ goto out;
+
+ got_lock = true;
+ }
+
IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg_bp);
+
+ if (hw->mac.type == ixgbe_mac_82599EB)
+ ixgbe_reset_pipeline_82599(hw);
+
+ if (got_lock)
+ hw->mac.ops.release_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+
} else if ((hw->phy.media_type == ixgbe_media_type_copper) &&
(ixgbe_device_supports_autoneg_fc(hw) == 0)) {
hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE,
@@ -2616,6 +2638,7 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
bool link_up = false;
u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
+ s32 ret_val = 0;
/*
* Link must be up to auto-blink the LEDs;
@@ -2624,10 +2647,28 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
hw->mac.ops.check_link(hw, &speed, &link_up, false);
if (!link_up) {
+ /* Need the SW/FW semaphore around AUTOC writes if 82599 and
+ * LESM is on.
+ */
+ bool got_lock = false;
+
+ if ((hw->mac.type == ixgbe_mac_82599EB) &&
+ ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+ ret_val = hw->mac.ops.acquire_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ if (ret_val)
+ goto out;
+
+ got_lock = true;
+ }
autoc_reg |= IXGBE_AUTOC_AN_RESTART;
autoc_reg |= IXGBE_AUTOC_FLU;
IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
IXGBE_WRITE_FLUSH(hw);
+
+ if (got_lock)
+ hw->mac.ops.release_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
usleep_range(10000, 20000);
}
@@ -2636,7 +2677,8 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
IXGBE_WRITE_FLUSH(hw);
- return 0;
+out:
+ return ret_val;
}
/**
@@ -2648,18 +2690,40 @@ s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
{
u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
+ s32 ret_val = 0;
+ bool got_lock = false;
+
+ /* Need the SW/FW semaphore around AUTOC writes if 82599 and
+ * LESM is on.
+ */
+ if ((hw->mac.type == ixgbe_mac_82599EB) &&
+ ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+ ret_val = hw->mac.ops.acquire_swfw_sync(hw,
+ IXGBE_GSSR_MAC_CSR_SM);
+ if (ret_val)
+ goto out;
+
+ got_lock = true;
+ }
autoc_reg &= ~IXGBE_AUTOC_FLU;
autoc_reg |= IXGBE_AUTOC_AN_RESTART;
IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
+ if (hw->mac.type == ixgbe_mac_82599EB)
+ ixgbe_reset_pipeline_82599(hw);
+
+ if (got_lock)
+ hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
+
led_reg &= ~IXGBE_LED_MODE_MASK(index);
led_reg &= ~IXGBE_LED_BLINK(index);
led_reg |= IXGBE_LED_LINK_ACTIVE << IXGBE_LED_MODE_SHIFT(index);
IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
IXGBE_WRITE_FLUSH(hw);
- return 0;
+out:
+ return ret_val;
}
/**
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 02/12] ixgbe: Fix return value from macvlan filter function
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2012-10-27 0:08 ` [net-next 01/12] ixgbe: Add support for pipeline reset Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 18:36 ` Konstantin Stepanyuk
2012-10-27 0:08 ` [net-next 03/12] net, ixgbe: handle link local multicast addresses in SR-IOV mode Jeff Kirsher
` (9 subsequent siblings)
11 siblings, 1 reply; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Greg Rose, netdev, gospo, sassmann, Jeff Kirsher
From: Greg Rose <gregory.v.rose@intel.com>
The function to set the macvlan filter should return success or failure
instead of the index of the filter. The message processing function was
misinterpreting the index as a non-zero return code indicating failure and
NACKing MAC filter set messages that actually succeeded.
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Tested-by: Robert Garrett <robertx.e.garrett@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index 96876b7..b68bf0f 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -742,7 +742,8 @@ static int ixgbe_set_vf_macvlan_msg(struct ixgbe_adapter *adapter,
e_warn(drv,
"VF %d has requested a MACVLAN filter but there is no space for it\n",
vf);
- return err;
+
+ return !!err < 0;
}
static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 03/12] net, ixgbe: handle link local multicast addresses in SR-IOV mode
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2012-10-27 0:08 ` [net-next 01/12] ixgbe: Add support for pipeline reset Jeff Kirsher
2012-10-27 0:08 ` [net-next 02/12] ixgbe: Fix return value from macvlan filter function Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 04/12] ixgbe: clean up the condition for turning on/off the laser Jeff Kirsher
` (8 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: John Fastabend, netdev, gospo, sassmann, Jeff Kirsher
From: John Fastabend <john.r.fastabend@intel.com>
In SR-IOV mode the PF driver acts as the uplink port and is
used to send control packets e.g. lldpad, stp, etc.
eth0.1 eth0.2 eth0
VF VF PF
| | | <-- stand-in for uplink
| | |
--------------------------
| Embedded Switch |
--------------------------
|
MAC <-- uplink
But the embedded switch is setup to forward multicast addresses
to all interfaces both VFs and PF and onto the physical link.
This results in reserved MAC addresses used by control protocols
to be forwarded over the switch onto the VF.
In the LLDP case the PF sends an LLDPDU and it is currently
being forwarded to all the VFs who then see the PF as a peer.
This is incorrect.
This patch adds the multicast addresses to the RAR table in the
hardware to prevent this behavior.
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +-
drivers/net/ethernet/intel/ixgbevf/vf.c | 3 +++
include/linux/etherdevice.h | 19 +++++++++++++++++++
net/bridge/br_device.c | 2 +-
net/bridge/br_input.c | 15 ---------------
net/bridge/br_private.h | 1 -
net/bridge/br_sysfs_br.c | 3 ++-
7 files changed, 26 insertions(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 88d636a..97bab45 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -6967,7 +6967,7 @@ static int ixgbe_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
return -EINVAL;
}
- if (is_unicast_ether_addr(addr)) {
+ if (is_unicast_ether_addr(addr) || is_link_local(addr)) {
u32 rar_uc_entries = IXGBE_MAX_PF_MACVLANS;
if (netdev_uc_count(dev) < rar_uc_entries)
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c
index 5fa397b..c0fd1ef 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.c
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.c
@@ -331,6 +331,9 @@ static s32 ixgbevf_update_mc_addr_list_vf(struct ixgbe_hw *hw,
netdev_for_each_mc_addr(ha, netdev) {
if (i == cnt)
break;
+ if (is_link_local(ha->addr))
+ continue;
+
vector_list[i++] = ixgbevf_mta_vector(hw, ha->addr);
}
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index b006ba0..45ded4b 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -51,6 +51,25 @@ extern struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs,
#define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1)
#define alloc_etherdev_mq(sizeof_priv, count) alloc_etherdev_mqs(sizeof_priv, count, count)
+/* Reserved Ethernet Addresses per IEEE 802.1Q */
+static const u8 br_reserved_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
+
+/**
+ * is_link_local - Determine if given Eth addr is a link local mcast address.
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Return true if address is link local reserved addr (01:80:c2:00:00:0X) per
+ * IEEE 802.1Q 8.6.3 Frame filtering.
+ */
+static inline int is_link_local(const unsigned char *dest)
+{
+ __be16 *a = (__be16 *)dest;
+ static const __be16 *b = (const __be16 *)br_reserved_address;
+ static const __be16 m = cpu_to_be16(0xfff0);
+
+ return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | ((a[2] ^ b[2]) & m)) == 0;
+}
+
/**
* is_zero_ether_addr - Determine if give Ethernet address is all zeros.
* @addr: Pointer to a six-byte array containing the Ethernet address
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index 070e8a6..d41b6f9 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -356,7 +356,7 @@ void br_dev_setup(struct net_device *dev)
br->bridge_id.prio[0] = 0x80;
br->bridge_id.prio[1] = 0x00;
- memcpy(br->group_addr, br_group_address, ETH_ALEN);
+ memcpy(br->group_addr, br_reserved_address, ETH_ALEN);
br->stp_enabled = BR_NO_STP;
br->group_fwd_mask = BR_GROUPFWD_DEFAULT;
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 76f15fd..d047978 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -19,9 +19,6 @@
#include <linux/export.h>
#include "br_private.h"
-/* Bridge group multicast address 802.1d (pg 51). */
-const u8 br_group_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
-
/* Hook for brouter */
br_should_route_hook_t __rcu *br_should_route_hook __read_mostly;
EXPORT_SYMBOL(br_should_route_hook);
@@ -127,18 +124,6 @@ static int br_handle_local_finish(struct sk_buff *skb)
return 0; /* process further */
}
-/* Does address match the link local multicast address.
- * 01:80:c2:00:00:0X
- */
-static inline int is_link_local(const unsigned char *dest)
-{
- __be16 *a = (__be16 *)dest;
- static const __be16 *b = (const __be16 *)br_group_address;
- static const __be16 m = cpu_to_be16(0xfff0);
-
- return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | ((a[2] ^ b[2]) & m)) == 0;
-}
-
/*
* Return NULL if skb is handled
* note: already called with rcu_read_lock
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 9b278c4..65b191a 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -288,7 +288,6 @@ struct br_input_skb_cb {
pr_debug("%s: " format, (br)->dev->name, ##args)
extern struct notifier_block br_device_notifier;
-extern const u8 br_group_address[ETH_ALEN];
/* called under bridge lock */
static inline int br_is_root_bridge(const struct net_bridge *br)
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c
index c5c0593..e157b0d 100644
--- a/net/bridge/br_sysfs_br.c
+++ b/net/bridge/br_sysfs_br.c
@@ -14,6 +14,7 @@
#include <linux/capability.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
#include <linux/if_bridge.h>
#include <linux/rtnetlink.h>
#include <linux/spinlock.h>
@@ -310,7 +311,7 @@ static ssize_t store_group_addr(struct device *d,
/* Must be 01:80:c2:00:00:0X */
for (i = 0; i < 5; i++)
- if (new_addr[i] != br_group_address[i])
+ if (new_addr[i] != br_reserved_address[i])
return -EINVAL;
if (new_addr[5] & ~0xf)
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 04/12] ixgbe: clean up the condition for turning on/off the laser
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (2 preceding siblings ...)
2012-10-27 0:08 ` [net-next 03/12] net, ixgbe: handle link local multicast addresses in SR-IOV mode Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 05/12] ixgbe: Return success or failure on VF MAC filter set Jeff Kirsher
` (7 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Emil Tantilov, netdev, gospo, sassmann, Jeff Kirsher
From: Emil Tantilov <emil.s.tantilov@intel.com>
This patch simplifies the check for calling en/disable_tx_laser() function
pointer. The pointer is only set on parts that can use it.
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 31 +++++++--------------------
1 file changed, 8 insertions(+), 23 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 97bab45..ceab142 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -4087,11 +4087,8 @@ static void ixgbe_up_complete(struct ixgbe_adapter *adapter)
else
ixgbe_configure_msi_and_legacy(adapter);
- /* enable the optics for both mult-speed fiber and 82599 SFP+ fiber */
- if (hw->mac.ops.enable_tx_laser &&
- ((hw->phy.multispeed_fiber) ||
- ((hw->mac.ops.get_media_type(hw) == ixgbe_media_type_fiber) &&
- (hw->mac.type == ixgbe_mac_82599EB))))
+ /* enable the optics for 82599 SFP+ fiber */
+ if (hw->mac.ops.enable_tx_laser)
hw->mac.ops.enable_tx_laser(hw);
clear_bit(__IXGBE_DOWN, &adapter->state);
@@ -4413,11 +4410,8 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
if (!pci_channel_offline(adapter->pdev))
ixgbe_reset(adapter);
- /* power down the optics for multispeed fiber and 82599 SFP+ fiber */
- if (hw->mac.ops.disable_tx_laser &&
- ((hw->phy.multispeed_fiber) ||
- ((hw->mac.ops.get_media_type(hw) == ixgbe_media_type_fiber) &&
- (hw->mac.type == ixgbe_mac_82599EB))))
+ /* power down the optics for 82599 SFP+ fiber */
+ if (hw->mac.ops.disable_tx_laser)
hw->mac.ops.disable_tx_laser(hw);
ixgbe_clean_all_tx_rings(adapter);
@@ -5050,14 +5044,8 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
if (wufc) {
ixgbe_set_rx_mode(netdev);
- /*
- * enable the optics for both mult-speed fiber and
- * 82599 SFP+ fiber as we can WoL.
- */
- if (hw->mac.ops.enable_tx_laser &&
- (hw->phy.multispeed_fiber ||
- (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_fiber &&
- hw->mac.type == ixgbe_mac_82599EB)))
+ /* enable the optics for 82599 SFP+ fiber as we can WoL */
+ if (hw->mac.ops.enable_tx_laser)
hw->mac.ops.enable_tx_laser(hw);
/* turn on all-multi mode if wake on multicast is enabled */
@@ -7468,11 +7456,8 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
if (err)
goto err_register;
- /* power down the optics for multispeed fiber and 82599 SFP+ fiber */
- if (hw->mac.ops.disable_tx_laser &&
- ((hw->phy.multispeed_fiber) ||
- ((hw->mac.ops.get_media_type(hw) == ixgbe_media_type_fiber) &&
- (hw->mac.type == ixgbe_mac_82599EB))))
+ /* power down the optics for 82599 SFP+ fiber */
+ if (hw->mac.ops.disable_tx_laser)
hw->mac.ops.disable_tx_laser(hw);
/* carrier off reporting is important to ethtool even BEFORE open */
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 05/12] ixgbe: Return success or failure on VF MAC filter set
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (3 preceding siblings ...)
2012-10-27 0:08 ` [net-next 04/12] ixgbe: clean up the condition for turning on/off the laser Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 06/12] ixgbe: Do not decrement budget in ixgbe_clean_rx_irq Jeff Kirsher
` (6 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Greg Rose, netdev, gospo, sassmann, Jeff Kirsher
From: Greg Rose <gregory.v.rose@intel.com>
When setting a MAC filter for the VF the function should return a success
or failure code, not the index of the new filter. It causes spurious NACK
returns to the VF driver.
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index b68bf0f..2037d8c 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -675,7 +675,7 @@ static int ixgbe_set_vf_mac_addr(struct ixgbe_adapter *adapter,
return -1;
}
- return ixgbe_set_vf_mac(adapter, vf, new_mac);
+ return ixgbe_set_vf_mac(adapter, vf, new_mac) < 0;
}
static int ixgbe_set_vf_vlan_msg(struct ixgbe_adapter *adapter,
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 06/12] ixgbe: Do not decrement budget in ixgbe_clean_rx_irq
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (4 preceding siblings ...)
2012-10-27 0:08 ` [net-next 05/12] ixgbe: Return success or failure on VF MAC filter set Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 07/12] ixgbe: add/update descriptor maps in comments Jeff Kirsher
` (5 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Jeff Kirsher
From: Alexander Duyck <alexander.h.duyck@intel.com>
This change makes it so that compare the total_rx_packets cleaned to budget
instead of decrementing budget. The advantage to this approach is that budget
can now be const and we only end up modifying total_rx_packets instead of
modifying both it and budget.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index ceab142..a34ee7d 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1794,7 +1794,7 @@ dma_sync:
**/
static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
struct ixgbe_ring *rx_ring,
- int budget)
+ const int budget)
{
unsigned int total_rx_bytes = 0, total_rx_packets = 0;
#ifdef IXGBE_FCOE
@@ -1845,7 +1845,6 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
/* probably a little skewed due to removing CRC */
total_rx_bytes += skb->len;
- total_rx_packets++;
/* populate checksum, timestamp, VLAN, and protocol */
ixgbe_process_skb_fields(rx_ring, rx_desc, skb);
@@ -1878,8 +1877,8 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
ixgbe_rx_skb(q_vector, skb);
/* update budget accounting */
- budget--;
- } while (likely(budget));
+ total_rx_packets++;
+ } while (likely(total_rx_packets < budget));
u64_stats_update_begin(&rx_ring->syncp);
rx_ring->stats.packets += total_rx_packets;
@@ -1891,7 +1890,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
if (cleaned_count)
ixgbe_alloc_rx_buffers(rx_ring, cleaned_count);
- return !!budget;
+ return (total_rx_packets < budget);
}
/**
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 07/12] ixgbe: add/update descriptor maps in comments
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (5 preceding siblings ...)
2012-10-27 0:08 ` [net-next 06/12] ixgbe: Do not decrement budget in ixgbe_clean_rx_irq Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 08/12] ixgbevf: Do not forward LLDP type frames Jeff Kirsher
` (4 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Josh Hay, netdev, gospo, sassmann, Jeff Kirsher
From: Josh Hay <joshua.a.hay@intel.com>
Adds/updates ASCII descriptor maps for 82598 and 82599 Tx/Rx descriptors.
Current descriptor maps were out of date for 82598 and incorrect for
82599.
Signed-off-by: Josh Hay <joshua.a.hay@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 61 ++++++++++++++++++++++++---
1 file changed, 55 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index a34ee7d..6035674 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -355,13 +355,37 @@ static void ixgbe_dump(struct ixgbe_adapter *adapter)
/* Transmit Descriptor Formats
*
- * Advanced Transmit Descriptor
+ * 82598 Advanced Transmit Descriptor
* +--------------------------------------------------------------+
* 0 | Buffer Address [63:0] |
* +--------------------------------------------------------------+
- * 8 | PAYLEN | PORTS | IDX | STA | DCMD |DTYP | RSV | DTALEN |
+ * 8 | PAYLEN | POPTS | IDX | STA | DCMD |DTYP | RSV | DTALEN |
* +--------------------------------------------------------------+
* 63 46 45 40 39 36 35 32 31 24 23 20 19 0
+ *
+ * 82598 Advanced Transmit Descriptor (Write-Back Format)
+ * +--------------------------------------------------------------+
+ * 0 | RSV [63:0] |
+ * +--------------------------------------------------------------+
+ * 8 | RSV | STA | NXTSEQ |
+ * +--------------------------------------------------------------+
+ * 63 36 35 32 31 0
+ *
+ * 82599+ Advanced Transmit Descriptor
+ * +--------------------------------------------------------------+
+ * 0 | Buffer Address [63:0] |
+ * +--------------------------------------------------------------+
+ * 8 |PAYLEN |POPTS|CC|IDX |STA |DCMD |DTYP |MAC |RSV |DTALEN |
+ * +--------------------------------------------------------------+
+ * 63 46 45 40 39 38 36 35 32 31 24 23 20 19 18 17 16 15 0
+ *
+ * 82599+ Advanced Transmit Descriptor (Write-Back Format)
+ * +--------------------------------------------------------------+
+ * 0 | RSV [63:0] |
+ * +--------------------------------------------------------------+
+ * 8 | RSV | STA | RSV |
+ * +--------------------------------------------------------------+
+ * 63 36 35 32 31 0
*/
for (n = 0; n < adapter->num_tx_queues; n++) {
@@ -422,7 +446,9 @@ rx_ring_summary:
dev_info(&adapter->pdev->dev, "RX Rings Dump\n");
- /* Advanced Receive Descriptor (Read) Format
+ /* Receive Descriptor Formats
+ *
+ * 82598 Advanced Receive Descriptor (Read) Format
* 63 1 0
* +-----------------------------------------------------+
* 0 | Packet Buffer Address [63:1] |A0/NSE|
@@ -431,17 +457,40 @@ rx_ring_summary:
* +-----------------------------------------------------+
*
*
- * Advanced Receive Descriptor (Write-Back) Format
+ * 82598 Advanced Receive Descriptor (Write-Back) Format
*
* 63 48 47 32 31 30 21 20 16 15 4 3 0
* +------------------------------------------------------+
- * 0 | Packet IP |SPH| HDR_LEN | RSV|Packet| RSS |
- * | Checksum Ident | | | | Type | Type |
+ * 0 | RSS Hash / |SPH| HDR_LEN | RSV |Packet| RSS |
+ * | Packet | IP | | | | Type | Type |
+ * | Checksum | Ident | | | | | |
* +------------------------------------------------------+
* 8 | VLAN Tag | Length | Extended Error | Extended Status |
* +------------------------------------------------------+
* 63 48 47 32 31 20 19 0
+ *
+ * 82599+ Advanced Receive Descriptor (Read) Format
+ * 63 1 0
+ * +-----------------------------------------------------+
+ * 0 | Packet Buffer Address [63:1] |A0/NSE|
+ * +----------------------------------------------+------+
+ * 8 | Header Buffer Address [63:1] | DD |
+ * +-----------------------------------------------------+
+ *
+ *
+ * 82599+ Advanced Receive Descriptor (Write-Back) Format
+ *
+ * 63 48 47 32 31 30 21 20 17 16 4 3 0
+ * +------------------------------------------------------+
+ * 0 |RSS / Frag Checksum|SPH| HDR_LEN |RSC- |Packet| RSS |
+ * |/ RTT / PCoE_PARAM | | | CNT | Type | Type |
+ * |/ Flow Dir Flt ID | | | | | |
+ * +------------------------------------------------------+
+ * 8 | VLAN Tag | Length |Extended Error| Xtnd Status/NEXTP |
+ * +------------------------------------------------------+
+ * 63 48 47 32 31 20 19 0
*/
+
for (n = 0; n < adapter->num_rx_queues; n++) {
rx_ring = adapter->rx_ring[n];
pr_info("------------------------------------\n");
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 08/12] ixgbevf: Do not forward LLDP type frames
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (6 preceding siblings ...)
2012-10-27 0:08 ` [net-next 07/12] ixgbe: add/update descriptor maps in comments Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 09/12] igbvf: Check for error on dma_map_single call Jeff Kirsher
` (3 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Greg Rose, netdev, gospo, sassmann, Jeff Kirsher
From: Greg Rose <gregory.v.rose@intel.com>
The driver should not forward LLDP type frames. Inspect the ether type and
do not send if it is an LLDP ethertype frame.
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 07d7eab..b5979ba 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -2968,6 +2968,11 @@ static int ixgbevf_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
#if PAGE_SIZE > IXGBE_MAX_DATA_PER_TXD
unsigned short f;
#endif
+ u8 *dst_mac = skb_header_pointer(skb, 0, 0, NULL);
+ if (!dst_mac || is_link_local(dst_mac)) {
+ dev_kfree_skb(skb);
+ return NETDEV_TX_OK;
+ }
tx_ring = &adapter->tx_ring[r_idx];
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 09/12] igbvf: Check for error on dma_map_single call
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (7 preceding siblings ...)
2012-10-27 0:08 ` [net-next 08/12] ixgbevf: Do not forward LLDP type frames Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 10/12] igb: Enable auto-crossover during forced operation on 82580 and above Jeff Kirsher
` (2 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Greg Rose, netdev, gospo, sassmann, Jeff Kirsher
From: Greg Rose <gregory.v.rose@intel.com>
Ignoring the return value from a call to the kernel dma_map API functions
can cause data corruption and system instability. Check the return value
and take appropriate action.
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/igbvf/netdev.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
index 0ac11f5..4051ec4 100644
--- a/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/drivers/net/ethernet/intel/igbvf/netdev.c
@@ -184,6 +184,13 @@ static void igbvf_alloc_rx_buffers(struct igbvf_ring *rx_ring,
buffer_info->page_offset,
PAGE_SIZE / 2,
DMA_FROM_DEVICE);
+ if (dma_mapping_error(&pdev->dev,
+ buffer_info->page_dma)) {
+ __free_page(buffer_info->page);
+ buffer_info->page = NULL;
+ dev_err(&pdev->dev, "RX DMA map failed\n");
+ break;
+ }
}
if (!buffer_info->skb) {
@@ -197,6 +204,12 @@ static void igbvf_alloc_rx_buffers(struct igbvf_ring *rx_ring,
buffer_info->dma = dma_map_single(&pdev->dev, skb->data,
bufsz,
DMA_FROM_DEVICE);
+ if (dma_mapping_error(&pdev->dev, buffer_info->dma)) {
+ dev_kfree_skb(buffer_info->skb);
+ buffer_info->skb = NULL;
+ dev_err(&pdev->dev, "RX DMA map failed\n");
+ goto no_buffers;
+ }
}
/* Refresh the desc even if buffer_addrs didn't change because
* each write-back erases this info. */
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 10/12] igb: Enable auto-crossover during forced operation on 82580 and above.
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (8 preceding siblings ...)
2012-10-27 0:08 ` [net-next 09/12] igbvf: Check for error on dma_map_single call Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 11/12] igb: Update firmware version info for ethtool output Jeff Kirsher
2012-10-27 0:08 ` [net-next 12/12] igb: Fix sparse warning in igb_ptp_rx_pktstamp Jeff Kirsher
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Matthew Vick, netdev, gospo, sassmann, Jeff Kirsher
From: Matthew Vick <matthew.vick@intel.com>
Newer devices supported by igb can support auto-crossover detection in
forced operation modes. Enable this in the driver, rather than clobbering
this functionality in forced operation.
Signed-off-by: Matthew Vick <matthew.vick@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/igb/e1000_mac.c | 4 ++++
drivers/net/ethernet/intel/igb/e1000_phy.c | 29 +++++++++++++++++------------
2 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/drivers/net/ethernet/intel/igb/e1000_mac.c b/drivers/net/ethernet/intel/igb/e1000_mac.c
index 819c145..7acddfe 100644
--- a/drivers/net/ethernet/intel/igb/e1000_mac.c
+++ b/drivers/net/ethernet/intel/igb/e1000_mac.c
@@ -1391,6 +1391,10 @@ s32 igb_validate_mdi_setting(struct e1000_hw *hw)
{
s32 ret_val = 0;
+ /* All MDI settings are supported on 82580 and newer. */
+ if (hw->mac.type >= e1000_82580)
+ goto out;
+
if (!hw->mac.autoneg && (hw->phy.mdix == 0 || hw->phy.mdix == 3)) {
hw_dbg("Invalid MDI setting detected\n");
hw->phy.mdix = 1;
diff --git a/drivers/net/ethernet/intel/igb/e1000_phy.c b/drivers/net/ethernet/intel/igb/e1000_phy.c
index c62a4c3..fe76004 100644
--- a/drivers/net/ethernet/intel/igb/e1000_phy.c
+++ b/drivers/net/ethernet/intel/igb/e1000_phy.c
@@ -1207,20 +1207,25 @@ s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw)
u16 phy_data;
bool link;
- /*
- * Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
- * forced whenever speed and duplex are forced.
- */
- ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
- if (ret_val)
- goto out;
+ /* I210 and I211 devices support Auto-Crossover in forced operation. */
+ if (phy->type != e1000_phy_i210) {
+ /*
+ * Clear Auto-Crossover to force MDI manually. M88E1000
+ * requires MDI forced whenever speed and duplex are forced.
+ */
+ ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL,
+ &phy_data);
+ if (ret_val)
+ goto out;
- phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
- ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
- if (ret_val)
- goto out;
+ phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
+ ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL,
+ phy_data);
+ if (ret_val)
+ goto out;
- hw_dbg("M88E1000 PSCR: %X\n", phy_data);
+ hw_dbg("M88E1000 PSCR: %X\n", phy_data);
+ }
ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
if (ret_val)
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 11/12] igb: Update firmware version info for ethtool output.
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (9 preceding siblings ...)
2012-10-27 0:08 ` [net-next 10/12] igb: Enable auto-crossover during forced operation on 82580 and above Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
2012-10-27 0:08 ` [net-next 12/12] igb: Fix sparse warning in igb_ptp_rx_pktstamp Jeff Kirsher
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Carolyn Wyborny, netdev, gospo, sassmann, Jeff Kirsher
From: Carolyn Wyborny <carolyn.wyborny@intel.com>
There are multiple places in our device nvm where the version is stored.
This update fixes some output errors with some types of images and
refactors the way the version data is gathered and stored for ethtool output.
Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/igb/e1000_defines.h | 14 +++++
drivers/net/ethernet/intel/igb/e1000_nvm.c | 70 ++++++++++++++++++++++++
drivers/net/ethernet/intel/igb/e1000_nvm.h | 16 ++++++
drivers/net/ethernet/intel/igb/igb_main.c | 76 +++++++++-----------------
4 files changed, 126 insertions(+), 50 deletions(-)
diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h
index de4b41e..e647cff 100644
--- a/drivers/net/ethernet/intel/igb/e1000_defines.h
+++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
@@ -636,6 +636,7 @@
/* NVM Word Offsets */
#define NVM_COMPAT 0x0003
#define NVM_ID_LED_SETTINGS 0x0004 /* SERDES output amplitude */
+#define NVM_VERSION 0x0005
#define NVM_INIT_CONTROL2_REG 0x000F
#define NVM_INIT_CONTROL3_PORT_B 0x0014
#define NVM_INIT_CONTROL3_PORT_A 0x0024
@@ -653,6 +654,19 @@
#define NVM_LED_1_CFG 0x001C
#define NVM_LED_0_2_CFG 0x001F
+/* NVM version defines */
+#define NVM_ETRACK_WORD 0x0042
+#define NVM_COMB_VER_OFF 0x0083
+#define NVM_COMB_VER_PTR 0x003d
+#define NVM_MAJOR_MASK 0xF000
+#define NVM_MINOR_MASK 0x0FF0
+#define NVM_BUILD_MASK 0x000F
+#define NVM_COMB_VER_MASK 0x00FF
+#define NVM_MAJOR_SHIFT 12
+#define NVM_MINOR_SHIFT 4
+#define NVM_COMB_VER_SHFT 8
+#define NVM_VER_INVALID 0xFFFF
+#define NVM_ETRACK_SHIFT 16
#define E1000_NVM_CFG_DONE_PORT_0 0x040000 /* MNG config cycle done */
#define E1000_NVM_CFG_DONE_PORT_1 0x080000 /* ...for second port */
diff --git a/drivers/net/ethernet/intel/igb/e1000_nvm.c b/drivers/net/ethernet/intel/igb/e1000_nvm.c
index aa5fcdf..54ff539 100644
--- a/drivers/net/ethernet/intel/igb/e1000_nvm.c
+++ b/drivers/net/ethernet/intel/igb/e1000_nvm.c
@@ -710,3 +710,73 @@ s32 igb_update_nvm_checksum(struct e1000_hw *hw)
out:
return ret_val;
}
+
+/**
+ * igb_get_fw_version - Get firmware version information
+ * @hw: pointer to the HW structure
+ * @fw_vers: pointer to output structure
+ *
+ * unsupported MAC types will return all 0 version structure
+ **/
+void igb_get_fw_version(struct e1000_hw *hw, struct e1000_fw_version *fw_vers)
+{
+ u16 eeprom_verh, eeprom_verl, comb_verh, comb_verl, comb_offset;
+ u16 fw_version;
+
+ memset(fw_vers, 0, sizeof(struct e1000_fw_version));
+
+ switch (hw->mac.type) {
+ case e1000_i211:
+ return;
+ case e1000_82575:
+ case e1000_82576:
+ case e1000_82580:
+ case e1000_i350:
+ case e1000_i210:
+ break;
+ default:
+ return;
+ }
+ /* basic eeprom version numbers */
+ hw->nvm.ops.read(hw, NVM_VERSION, 1, &fw_version);
+ fw_vers->eep_major = (fw_version & NVM_MAJOR_MASK) >> NVM_MAJOR_SHIFT;
+ fw_vers->eep_minor = (fw_version & NVM_MINOR_MASK);
+
+ /* etrack id */
+ hw->nvm.ops.read(hw, NVM_ETRACK_WORD, 1, &eeprom_verl);
+ hw->nvm.ops.read(hw, (NVM_ETRACK_WORD + 1), 1, &eeprom_verh);
+ fw_vers->etrack_id = (eeprom_verh << NVM_ETRACK_SHIFT) | eeprom_verl;
+
+ switch (hw->mac.type) {
+ case e1000_i210:
+ case e1000_i350:
+ /* find combo image version */
+ hw->nvm.ops.read(hw, NVM_COMB_VER_PTR, 1, &comb_offset);
+ if ((comb_offset != 0x0) && (comb_offset != NVM_VER_INVALID)) {
+
+ hw->nvm.ops.read(hw, (NVM_COMB_VER_OFF + comb_offset
+ + 1), 1, &comb_verh);
+ hw->nvm.ops.read(hw, (NVM_COMB_VER_OFF + comb_offset),
+ 1, &comb_verl);
+
+ /* get Option Rom version if it exists and is valid */
+ if ((comb_verh && comb_verl) &&
+ ((comb_verh != NVM_VER_INVALID) &&
+ (comb_verl != NVM_VER_INVALID))) {
+
+ fw_vers->or_valid = true;
+ fw_vers->or_major =
+ comb_verl >> NVM_COMB_VER_SHFT;
+ fw_vers->or_build =
+ ((comb_verl << NVM_COMB_VER_SHFT)
+ | (comb_verh >> NVM_COMB_VER_SHFT));
+ fw_vers->or_patch =
+ comb_verh & NVM_COMB_VER_MASK;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ return;
+}
diff --git a/drivers/net/ethernet/intel/igb/e1000_nvm.h b/drivers/net/ethernet/intel/igb/e1000_nvm.h
index 825b022..7012d45 100644
--- a/drivers/net/ethernet/intel/igb/e1000_nvm.h
+++ b/drivers/net/ethernet/intel/igb/e1000_nvm.h
@@ -40,4 +40,20 @@ s32 igb_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data);
s32 igb_validate_nvm_checksum(struct e1000_hw *hw);
s32 igb_update_nvm_checksum(struct e1000_hw *hw);
+struct e1000_fw_version {
+ u32 etrack_id;
+ u16 eep_major;
+ u16 eep_minor;
+
+ u8 invm_major;
+ u8 invm_minor;
+ u8 invm_img_type;
+
+ bool or_valid;
+ u16 or_major;
+ u16 or_build;
+ u16 or_patch;
+};
+void igb_get_fw_version(struct e1000_hw *hw, struct e1000_fw_version *fw_vers);
+
#endif
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index b07d679..df1e790 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -1785,58 +1785,34 @@ static const struct net_device_ops igb_netdev_ops = {
void igb_set_fw_version(struct igb_adapter *adapter)
{
struct e1000_hw *hw = &adapter->hw;
- u16 eeprom_verh, eeprom_verl, comb_verh, comb_verl, comb_offset;
- u16 major, build, patch, fw_version;
- u32 etrack_id;
-
- hw->nvm.ops.read(hw, 5, 1, &fw_version);
- if (adapter->hw.mac.type != e1000_i211) {
- hw->nvm.ops.read(hw, NVM_ETRACK_WORD, 1, &eeprom_verh);
- hw->nvm.ops.read(hw, (NVM_ETRACK_WORD + 1), 1, &eeprom_verl);
- etrack_id = (eeprom_verh << IGB_ETRACK_SHIFT) | eeprom_verl;
-
- /* combo image version needs to be found */
- hw->nvm.ops.read(hw, NVM_COMB_VER_PTR, 1, &comb_offset);
- if ((comb_offset != 0x0) &&
- (comb_offset != IGB_NVM_VER_INVALID)) {
- hw->nvm.ops.read(hw, (NVM_COMB_VER_OFF + comb_offset
- + 1), 1, &comb_verh);
- hw->nvm.ops.read(hw, (NVM_COMB_VER_OFF + comb_offset),
- 1, &comb_verl);
-
- /* Only display Option Rom if it exists and is valid */
- if ((comb_verh && comb_verl) &&
- ((comb_verh != IGB_NVM_VER_INVALID) &&
- (comb_verl != IGB_NVM_VER_INVALID))) {
- major = comb_verl >> IGB_COMB_VER_SHFT;
- build = (comb_verl << IGB_COMB_VER_SHFT) |
- (comb_verh >> IGB_COMB_VER_SHFT);
- patch = comb_verh & IGB_COMB_VER_MASK;
- snprintf(adapter->fw_version,
- sizeof(adapter->fw_version),
- "%d.%d%d, 0x%08x, %d.%d.%d",
- (fw_version & IGB_MAJOR_MASK) >>
- IGB_MAJOR_SHIFT,
- (fw_version & IGB_MINOR_MASK) >>
- IGB_MINOR_SHIFT,
- (fw_version & IGB_BUILD_MASK),
- etrack_id, major, build, patch);
- goto out;
- }
- }
- snprintf(adapter->fw_version, sizeof(adapter->fw_version),
- "%d.%d%d, 0x%08x",
- (fw_version & IGB_MAJOR_MASK) >> IGB_MAJOR_SHIFT,
- (fw_version & IGB_MINOR_MASK) >> IGB_MINOR_SHIFT,
- (fw_version & IGB_BUILD_MASK), etrack_id);
- } else {
+ struct e1000_fw_version fw;
+
+ igb_get_fw_version(hw, &fw);
+
+ switch (hw->mac.type) {
+ case e1000_i211:
snprintf(adapter->fw_version, sizeof(adapter->fw_version),
- "%d.%d%d",
- (fw_version & IGB_MAJOR_MASK) >> IGB_MAJOR_SHIFT,
- (fw_version & IGB_MINOR_MASK) >> IGB_MINOR_SHIFT,
- (fw_version & IGB_BUILD_MASK));
+ "%2d.%2d-%d",
+ fw.invm_major, fw.invm_minor, fw.invm_img_type);
+ break;
+
+ default:
+ /* if option is rom valid, display its version too */
+ if (fw.or_valid) {
+ snprintf(adapter->fw_version,
+ sizeof(adapter->fw_version),
+ "%d.%d, 0x%08x, %d.%d.%d",
+ fw.eep_major, fw.eep_minor, fw.etrack_id,
+ fw.or_major, fw.or_build, fw.or_patch);
+ /* no option rom */
+ } else {
+ snprintf(adapter->fw_version,
+ sizeof(adapter->fw_version),
+ "%d.%d, 0x%08x",
+ fw.eep_major, fw.eep_minor, fw.etrack_id);
+ }
+ break;
}
-out:
return;
}
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [net-next 12/12] igb: Fix sparse warning in igb_ptp_rx_pktstamp
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
` (10 preceding siblings ...)
2012-10-27 0:08 ` [net-next 11/12] igb: Update firmware version info for ethtool output Jeff Kirsher
@ 2012-10-27 0:08 ` Jeff Kirsher
11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-10-27 0:08 UTC (permalink / raw)
To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Jeff Kirsher
From: Alexander Duyck <alexander.h.duyck@intel.com>
This change fixes a sparse warning triggered by us casting the timestamp in
the packet as a u64 instead of as a __le64. This change corrects that in
order to resolve the sparse warning.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
drivers/net/ethernet/intel/igb/igb_ptp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c
index a7db4ce..aa10f69 100644
--- a/drivers/net/ethernet/intel/igb/igb_ptp.c
+++ b/drivers/net/ethernet/intel/igb/igb_ptp.c
@@ -455,7 +455,7 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector,
unsigned char *va,
struct sk_buff *skb)
{
- u64 *regval = (u64 *)va;
+ __le64 *regval = (__le64 *)va;
/*
* The timestamp is recorded in little endian format.
--
1.7.11.7
^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [net-next 02/12] ixgbe: Fix return value from macvlan filter function
2012-10-27 0:08 ` [net-next 02/12] ixgbe: Fix return value from macvlan filter function Jeff Kirsher
@ 2012-10-27 18:36 ` Konstantin Stepanyuk
2012-10-29 16:27 ` Rose, Gregory V
0 siblings, 1 reply; 22+ messages in thread
From: Konstantin Stepanyuk @ 2012-10-27 18:36 UTC (permalink / raw)
To: Jeff Kirsher; +Cc: davem, Greg Rose, netdev, gospo, sassmann
On Fri, Oct 26, 2012 at 6:08 PM, Jeff Kirsher
<jeffrey.t.kirsher@intel.com> wrote:
> From: Greg Rose <gregory.v.rose@intel.com>
>
> The function to set the macvlan filter should return success or failure
> instead of the index of the filter. The message processing function was
> misinterpreting the index as a non-zero return code indicating failure and
> NACKing MAC filter set messages that actually succeeded.
>
> Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
> Tested-by: Robert Garrett <robertx.e.garrett@intel.com>
> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> ---
> drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> index 96876b7..b68bf0f 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> @@ -742,7 +742,8 @@ static int ixgbe_set_vf_macvlan_msg(struct ixgbe_adapter *adapter,
> e_warn(drv,
> "VF %d has requested a MACVLAN filter but there is no space for it\n",
> vf);
> - return err;
> +
> + return !!err < 0;
This expression always resolves to false, either 0 < 0 or 1 < 0,
because '!' has higher precedence than '<'.
Thanks,
Konstantin
^ permalink raw reply [flat|nested] 22+ messages in thread
* RE: [net-next 02/12] ixgbe: Fix return value from macvlan filter function
2012-10-27 18:36 ` Konstantin Stepanyuk
@ 2012-10-29 16:27 ` Rose, Gregory V
0 siblings, 0 replies; 22+ messages in thread
From: Rose, Gregory V @ 2012-10-29 16:27 UTC (permalink / raw)
To: Konstantin Stepanyuk, Kirsher, Jeffrey T
Cc: davem@davemloft.net, netdev@vger.kernel.org, gospo@redhat.com,
sassmann@redhat.com
> -----Original Message-----
> From: Konstantin Stepanyuk [mailto:konstantin.stepanyuk@gmail.com]
> Sent: Saturday, October 27, 2012 11:37 AM
> To: Kirsher, Jeffrey T
> Cc: davem@davemloft.net; Rose, Gregory V; netdev@vger.kernel.org;
> gospo@redhat.com; sassmann@redhat.com
> Subject: Re: [net-next 02/12] ixgbe: Fix return value from macvlan filter
> function
>
> On Fri, Oct 26, 2012 at 6:08 PM, Jeff Kirsher
> <jeffrey.t.kirsher@intel.com> wrote:
> > From: Greg Rose <gregory.v.rose@intel.com>
> >
> > The function to set the macvlan filter should return success or
> > failure instead of the index of the filter. The message processing
> > function was misinterpreting the index as a non-zero return code
> > indicating failure and NACKing MAC filter set messages that actually
> succeeded.
> >
> > Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
> > Tested-by: Robert Garrett <robertx.e.garrett@intel.com>
> > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> > ---
> > drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> > b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> > index 96876b7..b68bf0f 100644
> > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> > @@ -742,7 +742,8 @@ static int ixgbe_set_vf_macvlan_msg(struct
> ixgbe_adapter *adapter,
> > e_warn(drv,
> > "VF %d has requested a MACVLAN filter but there
> is no space for it\n",
> > vf);
> > - return err;
> > +
> > + return !!err < 0;
> This expression always resolves to false, either 0 < 0 or 1 < 0, because
> '!' has higher precedence than '<'.
It's a typo. I'll fix it.
- Greg
>
> Thanks,
> Konstantin
^ permalink raw reply [flat|nested] 22+ messages in thread
* [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
@ 2013-01-18 15:04 Jeff Kirsher
2013-01-18 19:11 ` David Miller
0 siblings, 1 reply; 22+ messages in thread
From: Jeff Kirsher @ 2013-01-18 15:04 UTC (permalink / raw)
To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann
This series contains updates to e1000e and igb. Most notably is the
added timestamp support in e1000e and additional software timestamp
support in igb. As well as, the added thermal data support and SR-IOV
configuration support in igb.
v2- dropped the following patches from the previous 14 patch series
because changes were requested from the community:
e1000e: add support for IEEE-1588 PTP
igb: Report L4 Rx hash via skb->l4_rxhash
The following are changes since commit 887c95cc1da53f66a5890fdeab13414613010097:
ipv6: Complete neighbour entry removal from dst_entry.
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master
Bjorn Helgaas (1):
e1000e: Use standard #defines for PCIe Capability ASPM fields
Bruce Allan (2):
e1000e: add ethtool .get_eee/.set_eee
e1000e: add support for hardware timestamping on some devices
Carolyn Wyborny (3):
igb: Add i2c interface to igb.
igb: Add support functions to access thermal data.
igb: Enable hwmon data output for thermal sensors via I2C.
Greg Rose (1):
igb: Enable SR-IOV configuration via PCI sysfs interface
Matthew Vick (5):
igb: Add support for SW timestamping
igb: Add timeout for PTP Tx work item
igb: Add mechanism for detecting latched hardware Rx timestamp
igb: Free any held skb that should have been timestamped on remove
igb: Use in-kernel PTP_EV_PORT #define
drivers/net/ethernet/intel/Kconfig | 13 +
drivers/net/ethernet/intel/e1000e/82571.c | 2 +
drivers/net/ethernet/intel/e1000e/defines.h | 44 ++
drivers/net/ethernet/intel/e1000e/e1000.h | 47 +-
drivers/net/ethernet/intel/e1000e/ethtool.c | 159 ++++++-
drivers/net/ethernet/intel/e1000e/hw.h | 11 +
drivers/net/ethernet/intel/e1000e/ich8lan.c | 26 +-
drivers/net/ethernet/intel/e1000e/netdev.c | 382 ++++++++++++++-
drivers/net/ethernet/intel/igb/Makefile | 2 +-
drivers/net/ethernet/intel/igb/e1000_82575.c | 140 ++++++
drivers/net/ethernet/intel/igb/e1000_82575.h | 17 +-
drivers/net/ethernet/intel/igb/e1000_defines.h | 13 +
drivers/net/ethernet/intel/igb/e1000_hw.h | 20 +
drivers/net/ethernet/intel/igb/e1000_regs.h | 16 +
drivers/net/ethernet/intel/igb/igb.h | 46 +-
drivers/net/ethernet/intel/igb/igb_ethtool.c | 11 +
drivers/net/ethernet/intel/igb/igb_hwmon.c | 242 ++++++++++
drivers/net/ethernet/intel/igb/igb_main.c | 632 +++++++++++++++++++++----
drivers/net/ethernet/intel/igb/igb_ptp.c | 65 ++-
19 files changed, 1747 insertions(+), 141 deletions(-)
create mode 100644 drivers/net/ethernet/intel/igb/igb_hwmon.c
--
1.7.11.7
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
2013-01-18 15:04 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
@ 2013-01-18 19:11 ` David Miller
0 siblings, 0 replies; 22+ messages in thread
From: David Miller @ 2013-01-18 19:11 UTC (permalink / raw)
To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Fri, 18 Jan 2013 07:04:35 -0800
> This series contains updates to e1000e and igb. Most notably is the
> added timestamp support in e1000e and additional software timestamp
> support in igb. As well as, the added thermal data support and SR-IOV
> configuration support in igb.
>
> v2- dropped the following patches from the previous 14 patch series
> because changes were requested from the community:
> e1000e: add support for IEEE-1588 PTP
> igb: Report L4 Rx hash via skb->l4_rxhash
Pulled, thanks Jeff.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
@ 2013-12-16 9:38 Jeff Kirsher
2013-12-17 19:31 ` David Miller
0 siblings, 1 reply; 22+ messages in thread
From: Jeff Kirsher @ 2013-12-16 9:38 UTC (permalink / raw)
To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann, sergei.shtylyov,
bhutchings
This series contains updates to i40e only (again).
Jesse provides a fix for when tx_rings structure is NULL and we do not want
to panic. Then refactors the flow control set up and disables L2 flow control
by default. Provides some trivial fixes as well as prevent compiler warnings.
Then to align to similar behaviour in ixgbe, use the total number of CPUs in
the system to suggest the number of transmit and receive queue pairs.
Shannon provides a i40e ethtool fix to get some more reasonable information
reports back out to the ethtool. In addition, fixes PF reset after offline
test, where it reorders the test to put the register test last as it is the
only one that needs a reset, and we wait to trigger the reset until after we
clear the testing bit. Lastly provides basic support for handling suspend
and resume for now, later on Wake-On-LAN support will be added.
Anjali provides changes to tell the stack about our actual number of queues
in order for RFS/RPS/XFS to work correctly. Then provides several patches to
implement dynamically changing the queue count for the main VSI. Adds
basic support for get/set channels for RSS so that the number of receive and
transmit queue pair can be changed via ethtool. Cleans up the use of
rtnl_lock in the reset patch since it runs from a work time.
Neerav Parikh cleans up the VF interface to remove FCoE code as this
feature will not be supported on VF interfaces.
v2:
- submitted patch 1 to net (since it was a fix needed for net), so dropped
from this series (this patch will get added to net-next when Dave syncs
his trees)
- Dropped patches 4 & 11 from previous submission because of feedback
received from Ben Hutchings and Sergei Shtylyov.
The following are changes since commit 810c23a3553cbb4602edf9534b548d2616ba5520:
net-ipv6: Fix alleged compiler warning in ipv6_exthdrs_len()
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master
Anjali Singhai Jain (5):
i40e: Tell the stack about our actual number of queues
i40e: reinit flow for the main VSI
i40e: function to reconfigure RSS queues and rebuild
i40e: Add basic support for get/set channels for RSS
i40e: rtnl_lock in reset path fixes
Jesse Brandeburg (4):
i40e: fix up some of the ethtool connection reporting
i40e: init flow control settings to disabled
i40e: trivial fixes
i40e: use same number of queues as CPUs
Neerav Parikh (1):
i40e: Remove FCoE in i40e_virtchnl_pf.c code
Shannon Nelson (2):
i40e: fix pf reset after offline test
i40e: support for suspend and resume
drivers/net/ethernet/intel/i40e/i40e.h | 4 +
drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 8 +-
drivers/net/ethernet/intel/i40e/i40e_diag.c | 2 +-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 146 ++++++++-
drivers/net/ethernet/intel/i40e/i40e_hmc.c | 2 +-
drivers/net/ethernet/intel/i40e/i40e_main.c | 364 ++++++++++++++++++---
drivers/net/ethernet/intel/i40e/i40e_type.h | 4 +
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 29 +-
8 files changed, 469 insertions(+), 90 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
2013-12-16 9:38 Jeff Kirsher
@ 2013-12-17 19:31 ` David Miller
0 siblings, 0 replies; 22+ messages in thread
From: David Miller @ 2013-12-17 19:31 UTC (permalink / raw)
To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann, sergei.shtylyov, bhutchings
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Mon, 16 Dec 2013 01:38:46 -0800
> This series contains updates to i40e only (again).
Pulled, thanks Jeff.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
@ 2014-03-07 2:59 Jeff Kirsher
2014-03-07 21:19 ` David Miller
0 siblings, 1 reply; 22+ messages in thread
From: Jeff Kirsher @ 2014-03-07 2:59 UTC (permalink / raw)
To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann
This series contains updates to i40e and i40evf.
Most notable are:
Joseph completes the implementation of the ethtool ntuple rule
management interface by adding the get, update and delete interface
reset.
Akeem provides a fix to prevent a possible overflow due to multiplication
of number and size by using kzalloc, so use kcalloc.
Jesse provides an implementation for skb_set_hash() and adds the L4 type
return when we know it is an L4 hash. He also adds a counter to
statistics for Tx timeouts to help users. Lastly he provides a change
to stay away from the cache line where the done bit may be getting
written back for the transmit ring since the hardware may be writing the
whole cache line for a partial update.
Shannon cleans up code comments.
Anjali removes a firmware workaround for newer firmware since the number
of MSIx vectors are being reported correctly.
v2:
- dropped patch 01 of the series based on feedback from the author
Joe Perches and Shannon Nelson.
The following are changes since commit 28f084cca35a73698568d8c060bbb98193021db5:
bonding: fix const in options processing
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master
Akeem G Abodunrin (1):
i40e: Prevent overflow due to kzalloc
Anjali Singhai Jain (2):
i40e: Remove a FW workaround for Number of MSIX vectors
i40e: Remove a redundant filter addition
Catherine Sullivan (1):
i40e/i40evf: Bump pf&vf build versions
Greg Rose (1):
i40evf: Enable the ndo_set_features netdev op
Jesse Brandeburg (4):
i40e/i40evf: i40e implementation for skb_set_hash
i40e: count timeout events
i40e: fix nvm version and remove firmware report
i40e/i40evf: carefully fill tx ring
Joseph Gasparakis (1):
i40e: Flow Director sideband accounting
Neerav Parikh (1):
i40e: Fix static checker warning
Shannon Nelson (1):
i40e: clean up comment style
drivers/net/ethernet/intel/i40e/i40e.h | 37 +-
drivers/net/ethernet/intel/i40e/i40e_common.c | 366 ++++++++++++++++++
drivers/net/ethernet/intel/i40e/i40e_dcb.c | 9 +-
drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 27 +-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 429 +++++++++------------
drivers/net/ethernet/intel/i40e/i40e_main.c | 70 +++-
drivers/net/ethernet/intel/i40e/i40e_nvm.c | 117 +++---
drivers/net/ethernet/intel/i40e/i40e_prototype.h | 7 +
drivers/net/ethernet/intel/i40e/i40e_txrx.c | 310 ++++++++++++++-
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 2 +-
drivers/net/ethernet/intel/i40evf/i40e_common.c | 366 ++++++++++++++++++
drivers/net/ethernet/intel/i40evf/i40e_prototype.h | 7 +
drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 33 +-
drivers/net/ethernet/intel/i40evf/i40evf_main.c | 7 +-
14 files changed, 1432 insertions(+), 355 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
2014-03-07 2:59 Jeff Kirsher
@ 2014-03-07 21:19 ` David Miller
2014-03-07 21:37 ` Jeff Kirsher
0 siblings, 1 reply; 22+ messages in thread
From: David Miller @ 2014-03-07 21:19 UTC (permalink / raw)
To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Thu, 6 Mar 2014 18:59:12 -0800
> This series contains updates to i40e and i40evf.
>
> Most notable are:
> Joseph completes the implementation of the ethtool ntuple rule
> management interface by adding the get, update and delete interface
> reset.
>
> Akeem provides a fix to prevent a possible overflow due to multiplication
> of number and size by using kzalloc, so use kcalloc.
>
> Jesse provides an implementation for skb_set_hash() and adds the L4 type
> return when we know it is an L4 hash. He also adds a counter to
> statistics for Tx timeouts to help users. Lastly he provides a change
> to stay away from the cache line where the done bit may be getting
> written back for the transmit ring since the hardware may be writing the
> whole cache line for a partial update.
>
> Shannon cleans up code comments.
>
> Anjali removes a firmware workaround for newer firmware since the number
> of MSIx vectors are being reported correctly.
>
> v2:
> - dropped patch 01 of the series based on feedback from the author
> Joe Perches and Shannon Nelson.
Pulled, thanks Jeff.
And I'd like to make a broad long-term comment, actually about vf
drivers in general....
There is so much common code between pf and vf drivers, as a quick
example even in this patch set the skb_set_hash() stuff is pretty
much the same for i40e and i40evf.
I realize there are subtle differences between vf and pf, however
you can't say that there isn't a metric ton of common code.
Please consider seriously making a common layer for these kinds of
driver pairs. I absolutely do not care, as an initial step, if the
common code just gets linked directly into the final module object
for the two drivers. Although eventually it would be nice if the
common layer driver was a shared module object on it's own that is
simply depended upon by the pf and vf drivers.
Thanks.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates
2014-03-07 21:19 ` David Miller
@ 2014-03-07 21:37 ` Jeff Kirsher
0 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2014-03-07 21:37 UTC (permalink / raw)
To: David Miller; +Cc: netdev, gospo, sassmann
[-- Attachment #1: Type: text/plain, Size: 2231 bytes --]
On Fri, 2014-03-07 at 16:19 -0500, David Miller wrote:
> From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> Date: Thu, 6 Mar 2014 18:59:12 -0800
>
> > This series contains updates to i40e and i40evf.
> >
> > Most notable are:
> > Joseph completes the implementation of the ethtool ntuple rule
> > management interface by adding the get, update and delete interface
> > reset.
> >
> > Akeem provides a fix to prevent a possible overflow due to multiplication
> > of number and size by using kzalloc, so use kcalloc.
> >
> > Jesse provides an implementation for skb_set_hash() and adds the L4 type
> > return when we know it is an L4 hash. He also adds a counter to
> > statistics for Tx timeouts to help users. Lastly he provides a change
> > to stay away from the cache line where the done bit may be getting
> > written back for the transmit ring since the hardware may be writing the
> > whole cache line for a partial update.
> >
> > Shannon cleans up code comments.
> >
> > Anjali removes a firmware workaround for newer firmware since the number
> > of MSIx vectors are being reported correctly.
> >
> > v2:
> > - dropped patch 01 of the series based on feedback from the author
> > Joe Perches and Shannon Nelson.
>
> Pulled, thanks Jeff.
>
> And I'd like to make a broad long-term comment, actually about vf
> drivers in general....
>
> There is so much common code between pf and vf drivers, as a quick
> example even in this patch set the skb_set_hash() stuff is pretty
> much the same for i40e and i40evf.
>
> I realize there are subtle differences between vf and pf, however
> you can't say that there isn't a metric ton of common code.
>
> Please consider seriously making a common layer for these kinds of
> driver pairs. I absolutely do not care, as an initial step, if the
> common code just gets linked directly into the final module object
> for the two drivers. Although eventually it would be nice if the
> common layer driver was a shared module object on it's own that is
> simply depended upon by the pf and vf drivers.
>
> Thanks.
Thanks Dave! I will work with i40e developers to get a solution put
together for the shared code.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2014-03-07 21:38 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-27 0:08 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2012-10-27 0:08 ` [net-next 01/12] ixgbe: Add support for pipeline reset Jeff Kirsher
2012-10-27 0:08 ` [net-next 02/12] ixgbe: Fix return value from macvlan filter function Jeff Kirsher
2012-10-27 18:36 ` Konstantin Stepanyuk
2012-10-29 16:27 ` Rose, Gregory V
2012-10-27 0:08 ` [net-next 03/12] net, ixgbe: handle link local multicast addresses in SR-IOV mode Jeff Kirsher
2012-10-27 0:08 ` [net-next 04/12] ixgbe: clean up the condition for turning on/off the laser Jeff Kirsher
2012-10-27 0:08 ` [net-next 05/12] ixgbe: Return success or failure on VF MAC filter set Jeff Kirsher
2012-10-27 0:08 ` [net-next 06/12] ixgbe: Do not decrement budget in ixgbe_clean_rx_irq Jeff Kirsher
2012-10-27 0:08 ` [net-next 07/12] ixgbe: add/update descriptor maps in comments Jeff Kirsher
2012-10-27 0:08 ` [net-next 08/12] ixgbevf: Do not forward LLDP type frames Jeff Kirsher
2012-10-27 0:08 ` [net-next 09/12] igbvf: Check for error on dma_map_single call Jeff Kirsher
2012-10-27 0:08 ` [net-next 10/12] igb: Enable auto-crossover during forced operation on 82580 and above Jeff Kirsher
2012-10-27 0:08 ` [net-next 11/12] igb: Update firmware version info for ethtool output Jeff Kirsher
2012-10-27 0:08 ` [net-next 12/12] igb: Fix sparse warning in igb_ptp_rx_pktstamp Jeff Kirsher
-- strict thread matches above, loose matches on Subject: below --
2013-01-18 15:04 [net-next v2 00/12][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2013-01-18 19:11 ` David Miller
2013-12-16 9:38 Jeff Kirsher
2013-12-17 19:31 ` David Miller
2014-03-07 2:59 Jeff Kirsher
2014-03-07 21:19 ` David Miller
2014-03-07 21:37 ` Jeff Kirsher
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).