All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/5] bnx2x: Bug fixes patch series
@ 2014-01-05 16:33 Yuval Mintz
  2014-01-05 16:33 ` [PATCH net 1/5] bnx2x: limit number of interrupt vectors for 57711 Yuval Mintz
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Yuval Mintz @ 2014-01-05 16:33 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele

Hi Dave,

Most of what this parch series contains is SR-IOV related bug fixes.
Additionally, it contains some small fixes for legacy devices/modes.

Please consider applying these patches to `net'.

Thanks,
Yuval Mintz

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH net 1/5] bnx2x: limit number of interrupt vectors for 57711
  2014-01-05 16:33 [PATCH net 0/5] bnx2x: Bug fixes patch series Yuval Mintz
@ 2014-01-05 16:33 ` Yuval Mintz
  2014-01-06 13:47   ` Sergei Shtylyov
  2014-01-05 16:33 ` [PATCH net 2/5] bnx2x: Correct number of MSI-X vectors for VFs Yuval Mintz
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Yuval Mintz @ 2014-01-05 16:33 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, Dmitry Kravkov, Yuval Mintz

From: Dmitry Kravkov <dmitry@broadcom.com>

Original straightforward division may lead to zeroing number of SB and
null-pointer dereference when device is short of MSIX vectors or lacks
MSIX capabilities.

Reported-by: Vladislav Zolotarov <vladz@cloudius-systems.com>
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h      | 2 ++
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 6 +++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index a1f66e2..cb30d1a 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -2499,4 +2499,6 @@ void bnx2x_set_local_cmng(struct bnx2x *bp);
 #define MCPR_SCRATCH_BASE(bp) \
 	(CHIP_IS_E1x(bp) ? MCP_REG_MCPR_SCRATCH : MCP_A_REG_MCPR_SCRATCH)
 
+#define E1H_MAX_MF_SB_COUNT (HC_SB_MAX_SB_E1X/(E1HVN_MAX * PORT_MAX))
+
 #endif /* bnx2x.h */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 814d0ec..8b3107b 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -11447,9 +11447,9 @@ static int bnx2x_get_hwinfo(struct bnx2x *bp)
 		}
 	}
 
-	/* adjust igu_sb_cnt to MF for E1x */
-	if (CHIP_IS_E1x(bp) && IS_MF(bp))
-		bp->igu_sb_cnt /= E1HVN_MAX;
+	/* adjust igu_sb_cnt to MF for E1H */
+	if (CHIP_IS_E1H(bp) && IS_MF(bp))
+		bp->igu_sb_cnt = min_t(u8, bp->igu_sb_cnt, E1H_MAX_MF_SB_COUNT);
 
 	/* port info */
 	bnx2x_get_port_hwinfo(bp);
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net 2/5] bnx2x: Correct number of MSI-X vectors for VFs
  2014-01-05 16:33 [PATCH net 0/5] bnx2x: Bug fixes patch series Yuval Mintz
  2014-01-05 16:33 ` [PATCH net 1/5] bnx2x: limit number of interrupt vectors for 57711 Yuval Mintz
@ 2014-01-05 16:33 ` Yuval Mintz
  2014-01-06 16:28   ` [BUG] bnx2x : lockdep assertion Eric Dumazet
  2014-01-05 16:33 ` [PATCH net 3/5] bnx2x: Clean before update RSS arrives Yuval Mintz
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Yuval Mintz @ 2014-01-05 16:33 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, Michal Kalderon, Yuval Mintz

From: Michal Kalderon <michals@broadcom.com>

Number of VFs in PCIe configuration space is zero-based. Driver incorrectly
sets the number of VFs to be larger by one than what actually is feasible by
HW, which might cause later VFs to fail to allocate their MSI-X interrupts.

Signed-off-by: Michal Kalderon <michals@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index 2e46c28..ddd95b9 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -3202,13 +3202,16 @@ int bnx2x_enable_sriov(struct bnx2x *bp)
 		bnx2x_iov_static_resc(bp, vf);
 	}
 
-	/* prepare msix vectors in VF configuration space */
+	/* prepare msix vectors in VF configuration space - the value in the
+	 * PCI configuration space should be the index of the last entry,
+	 * namely one less than the actual size of the table
+	 */
 	for (vf_idx = first_vf; vf_idx < first_vf + req_vfs; vf_idx++) {
 		bnx2x_pretend_func(bp, HW_VF_HANDLE(bp, vf_idx));
 		REG_WR(bp, PCICFG_OFFSET + GRC_CONFIG_REG_VF_MSIX_CONTROL,
-		       num_vf_queues);
+		       num_vf_queues - 1);
 		DP(BNX2X_MSG_IOV, "set msix vec num in VF %d cfg space to %d\n",
-		   vf_idx, num_vf_queues);
+		   vf_idx, num_vf_queues - 1);
 	}
 	bnx2x_pretend_func(bp, BP_ABS_FUNC(bp));
 
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net 3/5] bnx2x: Clean before update RSS arrives
  2014-01-05 16:33 [PATCH net 0/5] bnx2x: Bug fixes patch series Yuval Mintz
  2014-01-05 16:33 ` [PATCH net 1/5] bnx2x: limit number of interrupt vectors for 57711 Yuval Mintz
  2014-01-05 16:33 ` [PATCH net 2/5] bnx2x: Correct number of MSI-X vectors for VFs Yuval Mintz
@ 2014-01-05 16:33 ` Yuval Mintz
  2014-01-05 16:33 ` [PATCH net 4/5] bnx2x: fix AFEX memory overflow Yuval Mintz
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Yuval Mintz @ 2014-01-05 16:33 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, Michal Kalderon, Yuval Mintz

From: Michal Kalderon <michals@broadcom.com>

When a PF receives a VF message indicating a change in RSS properties
it should clean the flags' bit-fields; Otherwise, it's possible that
some random values will be considered as flags by the lower layers configuring
the RSS in FW.

Signed-off-by: Michal Kalderon <michals@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c   | 5 ++++-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c | 3 +++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
index 32c92ab..95feada 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
@@ -4382,8 +4382,11 @@ int bnx2x_config_rss(struct bnx2x *bp,
 	struct bnx2x_raw_obj *r = &o->raw;
 
 	/* Do nothing if only driver cleanup was requested */
-	if (test_bit(RAMROD_DRV_CLR_ONLY, &p->ramrod_flags))
+	if (test_bit(RAMROD_DRV_CLR_ONLY, &p->ramrod_flags)) {
+		DP(BNX2X_MSG_SP, "Not configuring RSS ramrod_flags=%lx\n",
+		   p->ramrod_flags);
 		return 0;
+	}
 
 	r->set_pending(r);
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
index 3dc2537..26fcba2 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
@@ -1805,6 +1805,9 @@ static void bnx2x_vf_mbx_update_rss(struct bnx2x *bp, struct bnx2x_virtf *vf,
 	vf_op_params->rss_result_mask = rss_tlv->rss_result_mask;
 
 	/* flags handled individually for backward/forward compatability */
+	vf_op_params->rss_flags = 0;
+	vf_op_params->ramrod_flags = 0;
+
 	if (rss_tlv->rss_flags & VFPF_RSS_MODE_DISABLED)
 		__set_bit(BNX2X_RSS_MODE_DISABLED, &vf_op_params->rss_flags);
 	if (rss_tlv->rss_flags & VFPF_RSS_MODE_REGULAR)
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net 4/5] bnx2x: fix AFEX memory overflow
  2014-01-05 16:33 [PATCH net 0/5] bnx2x: Bug fixes patch series Yuval Mintz
                   ` (2 preceding siblings ...)
  2014-01-05 16:33 ` [PATCH net 3/5] bnx2x: Clean before update RSS arrives Yuval Mintz
@ 2014-01-05 16:33 ` Yuval Mintz
  2014-01-05 16:33 ` [PATCH net 5/5] bnx2x: fix VLAN configuration for VFs Yuval Mintz
  2014-01-06  1:23 ` [PATCH net 0/5] bnx2x: Bug fixes patch series David Miller
  5 siblings, 0 replies; 13+ messages in thread
From: Yuval Mintz @ 2014-01-05 16:33 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, Yuval Mintz

There are 2 different (related) flows in the slowpath configuration
that utilize the same pointer and cast it to different structs;
This is obviously incorrect as the intended allocated memory is that
of the smaller struct, possibly causing the flow utilizing the larger
struct to corrupt other slowpath configuration.

Since both flows are exclusive, set the allocated memory to be a union
of both structs.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index cb30d1a..2d5fce4 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -1250,7 +1250,10 @@ struct bnx2x_slowpath {
 	 * Therefore, if they would have been defined in the same union,
 	 * data can get corrupted.
 	 */
-	struct afex_vif_list_ramrod_data func_afex_rdata;
+	union {
+		struct afex_vif_list_ramrod_data	viflist_data;
+		struct function_update_data		func_update;
+	} func_afex_rdata;
 
 	/* used by dmae command executer */
 	struct dmae_command		dmae[MAX_DMAE_C];
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net 5/5] bnx2x: fix VLAN configuration for VFs.
  2014-01-05 16:33 [PATCH net 0/5] bnx2x: Bug fixes patch series Yuval Mintz
                   ` (3 preceding siblings ...)
  2014-01-05 16:33 ` [PATCH net 4/5] bnx2x: fix AFEX memory overflow Yuval Mintz
@ 2014-01-05 16:33 ` Yuval Mintz
  2014-01-05 19:19   ` Or Gerlitz
  2014-01-06  1:23 ` [PATCH net 0/5] bnx2x: Bug fixes patch series David Miller
  5 siblings, 1 reply; 13+ messages in thread
From: Yuval Mintz @ 2014-01-05 16:33 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, Yuval Mintz

If the hypervisor configures a vlan for the VF via the PF, the expected
result is that only packets tagged by said vlan will be received by the VF
(and that vlan will be silently removed).
Do to an incorrect manipulation of vlan filters in the driver, the
VF can receive untagged traffic even if the hypervisor configured
some vlan for it.

This patch corrects the behaviour.

Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c    |  10 +-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h    |   7 +
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 245 ++++++++++++----------
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h |   1 +
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c  |  23 +-
 5 files changed, 174 insertions(+), 112 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
index 95feada..18438a5 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
@@ -2038,6 +2038,7 @@ static int bnx2x_vlan_mac_del_all(struct bnx2x *bp,
 	struct bnx2x_vlan_mac_ramrod_params p;
 	struct bnx2x_exe_queue_obj *exeq = &o->exe_queue;
 	struct bnx2x_exeq_elem *exeq_pos, *exeq_pos_n;
+	unsigned long flags;
 	int read_lock;
 	int rc = 0;
 
@@ -2046,8 +2047,9 @@ static int bnx2x_vlan_mac_del_all(struct bnx2x *bp,
 	spin_lock_bh(&exeq->lock);
 
 	list_for_each_entry_safe(exeq_pos, exeq_pos_n, &exeq->exe_queue, link) {
-		if (exeq_pos->cmd_data.vlan_mac.vlan_mac_flags ==
-		    *vlan_mac_flags) {
+		flags = exeq_pos->cmd_data.vlan_mac.vlan_mac_flags;
+		if (BNX2X_VLAN_MAC_CMP_FLAGS(flags) ==
+		    BNX2X_VLAN_MAC_CMP_FLAGS(*vlan_mac_flags)) {
 			rc = exeq->remove(bp, exeq->owner, exeq_pos);
 			if (rc) {
 				BNX2X_ERR("Failed to remove command\n");
@@ -2080,7 +2082,9 @@ static int bnx2x_vlan_mac_del_all(struct bnx2x *bp,
 		return read_lock;
 
 	list_for_each_entry(pos, &o->head, link) {
-		if (pos->vlan_mac_flags == *vlan_mac_flags) {
+		flags = pos->vlan_mac_flags;
+		if (BNX2X_VLAN_MAC_CMP_FLAGS(flags) ==
+		    BNX2X_VLAN_MAC_CMP_FLAGS(*vlan_mac_flags)) {
 			p.user_req.vlan_mac_flags = pos->vlan_mac_flags;
 			memcpy(&p.user_req.u, &pos->u, sizeof(pos->u));
 			rc = bnx2x_config_vlan_mac(bp, &p);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
index 658f4e3..6a53c15 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
@@ -266,6 +266,13 @@ enum {
 	BNX2X_DONT_CONSUME_CAM_CREDIT,
 	BNX2X_DONT_CONSUME_CAM_CREDIT_DEST,
 };
+/* When looking for matching filters, some flags are not interesting */
+#define BNX2X_VLAN_MAC_CMP_MASK	(1 << BNX2X_UC_LIST_MAC | \
+				 1 << BNX2X_ETH_MAC | \
+				 1 << BNX2X_ISCSI_ETH_MAC | \
+				 1 << BNX2X_NETQ_ETH_MAC)
+#define BNX2X_VLAN_MAC_CMP_FLAGS(flags) \
+	((flags) & BNX2X_VLAN_MAC_CMP_MASK)
 
 struct bnx2x_vlan_mac_ramrod_params {
 	/* Object to run the command from */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index ddd95b9..e7845e5 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -1209,6 +1209,11 @@ static void bnx2x_vfop_rxmode(struct bnx2x *bp, struct bnx2x_virtf *vf)
 		/* next state */
 		vfop->state = BNX2X_VFOP_RXMODE_DONE;
 
+		/* record the accept flags in vfdb so hypervisor can modify them
+		 * if necessary
+		 */
+		bnx2x_vfq(vf, ramrod->cl_id - vf->igu_base_id, accept_flags) =
+			ramrod->rx_accept_flags;
 		vfop->rc = bnx2x_config_rx_mode(bp, ramrod);
 		bnx2x_vfop_finalize(vf, vfop->rc, VFOP_DONE);
 op_err:
@@ -1224,39 +1229,43 @@ op_pending:
 	return;
 }
 
+static void bnx2x_vf_prep_rx_mode(struct bnx2x *bp, u8 qid,
+				  struct bnx2x_rx_mode_ramrod_params *ramrod,
+				  struct bnx2x_virtf *vf,
+				  unsigned long accept_flags)
+{
+	struct bnx2x_vf_queue *vfq = vfq_get(vf, qid);
+
+	memset(ramrod, 0, sizeof(*ramrod));
+	ramrod->cid = vfq->cid;
+	ramrod->cl_id = vfq_cl_id(vf, vfq);
+	ramrod->rx_mode_obj = &bp->rx_mode_obj;
+	ramrod->func_id = FW_VF_HANDLE(vf->abs_vfid);
+	ramrod->rx_accept_flags = accept_flags;
+	ramrod->tx_accept_flags = accept_flags;
+	ramrod->pstate = &vf->filter_state;
+	ramrod->state = BNX2X_FILTER_RX_MODE_PENDING;
+
+	set_bit(BNX2X_FILTER_RX_MODE_PENDING, &vf->filter_state);
+	set_bit(RAMROD_RX, &ramrod->ramrod_flags);
+	set_bit(RAMROD_TX, &ramrod->ramrod_flags);
+
+	ramrod->rdata = bnx2x_vf_sp(bp, vf, rx_mode_rdata.e2);
+	ramrod->rdata_mapping = bnx2x_vf_sp_map(bp, vf, rx_mode_rdata.e2);
+}
+
 int bnx2x_vfop_rxmode_cmd(struct bnx2x *bp,
 			  struct bnx2x_virtf *vf,
 			  struct bnx2x_vfop_cmd *cmd,
 			  int qid, unsigned long accept_flags)
 {
-	struct bnx2x_vf_queue *vfq = vfq_get(vf, qid);
 	struct bnx2x_vfop *vfop = bnx2x_vfop_add(bp, vf);
 
 	if (vfop) {
 		struct bnx2x_rx_mode_ramrod_params *ramrod =
 			&vf->op_params.rx_mode;
 
-		memset(ramrod, 0, sizeof(*ramrod));
-
-		/* Prepare ramrod parameters */
-		ramrod->cid = vfq->cid;
-		ramrod->cl_id = vfq_cl_id(vf, vfq);
-		ramrod->rx_mode_obj = &bp->rx_mode_obj;
-		ramrod->func_id = FW_VF_HANDLE(vf->abs_vfid);
-
-		ramrod->rx_accept_flags = accept_flags;
-		ramrod->tx_accept_flags = accept_flags;
-		ramrod->pstate = &vf->filter_state;
-		ramrod->state = BNX2X_FILTER_RX_MODE_PENDING;
-
-		set_bit(BNX2X_FILTER_RX_MODE_PENDING, &vf->filter_state);
-		set_bit(RAMROD_RX, &ramrod->ramrod_flags);
-		set_bit(RAMROD_TX, &ramrod->ramrod_flags);
-
-		ramrod->rdata =
-			bnx2x_vf_sp(bp, vf, rx_mode_rdata.e2);
-		ramrod->rdata_mapping =
-			bnx2x_vf_sp_map(bp, vf, rx_mode_rdata.e2);
+		bnx2x_vf_prep_rx_mode(bp, qid, ramrod, vf, accept_flags);
 
 		bnx2x_vfop_opset(BNX2X_VFOP_RXMODE_CONFIG,
 				 bnx2x_vfop_rxmode, cmd->done);
@@ -3439,10 +3448,18 @@ out:
 
 int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos)
 {
+	struct bnx2x_queue_state_params q_params = {NULL};
+	struct bnx2x_vlan_mac_ramrod_params ramrod_param;
+	struct bnx2x_queue_update_params *update_params;
+	struct pf_vf_bulletin_content *bulletin = NULL;
+	struct bnx2x_rx_mode_ramrod_params rx_ramrod;
 	struct bnx2x *bp = netdev_priv(dev);
-	int rc, q_logical_state;
+	struct bnx2x_vlan_mac_obj *vlan_obj;
+	unsigned long vlan_mac_flags = 0;
+	unsigned long ramrod_flags = 0;
 	struct bnx2x_virtf *vf = NULL;
-	struct pf_vf_bulletin_content *bulletin = NULL;
+	unsigned long accept_flags;
+	int rc;
 
 	/* sanity and init */
 	rc = bnx2x_vf_ndo_prep(bp, vfidx, &vf, &bulletin);
@@ -3460,104 +3477,118 @@ int bnx2x_set_vf_vlan(struct net_device *dev, int vfidx, u16 vlan, u8 qos)
 	/* update PF's copy of the VF's bulletin. No point in posting the vlan
 	 * to the VF since it doesn't have anything to do with it. But it useful
 	 * to store it here in case the VF is not up yet and we can only
-	 * configure the vlan later when it does.
+	 * configure the vlan later when it does. Treat vlan id 0 as remove the
+	 * Host tag.
 	 */
-	bulletin->valid_bitmap |= 1 << VLAN_VALID;
+	if (vlan > 0)
+		bulletin->valid_bitmap |= 1 << VLAN_VALID;
+	else
+		bulletin->valid_bitmap &= ~(1 << VLAN_VALID);
 	bulletin->vlan = vlan;
 
 	/* is vf initialized and queue set up? */
-	q_logical_state =
-		bnx2x_get_q_logical_state(bp, &bnx2x_leading_vfq(vf, sp_obj));
-	if (vf->state == VF_ENABLED &&
-	    q_logical_state == BNX2X_Q_LOGICAL_STATE_ACTIVE) {
-		/* configure the vlan in device on this vf's queue */
-		unsigned long ramrod_flags = 0;
-		unsigned long vlan_mac_flags = 0;
-		struct bnx2x_vlan_mac_obj *vlan_obj =
-			&bnx2x_leading_vfq(vf, vlan_obj);
-		struct bnx2x_vlan_mac_ramrod_params ramrod_param;
-		struct bnx2x_queue_state_params q_params = {NULL};
-		struct bnx2x_queue_update_params *update_params;
+	if (vf->state != VF_ENABLED ||
+	    bnx2x_get_q_logical_state(bp, &bnx2x_leading_vfq(vf, sp_obj)) !=
+	    BNX2X_Q_LOGICAL_STATE_ACTIVE)
+		return rc;
 
-		rc = validate_vlan_mac(bp, &bnx2x_leading_vfq(vf, mac_obj));
-		if (rc)
-			return rc;
-		memset(&ramrod_param, 0, sizeof(ramrod_param));
+	/* configure the vlan in device on this vf's queue */
+	vlan_obj = &bnx2x_leading_vfq(vf, vlan_obj);
+	rc = validate_vlan_mac(bp, &bnx2x_leading_vfq(vf, mac_obj));
+	if (rc)
+		return rc;
 
-		/* must lock vfpf channel to protect against vf flows */
-		bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);
+	/* must lock vfpf channel to protect against vf flows */
+	bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);
 
-		/* remove existing vlans */
-		__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
-		rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_mac_flags,
-					  &ramrod_flags);
-		if (rc) {
-			BNX2X_ERR("failed to delete vlans\n");
-			rc = -EINVAL;
-			goto out;
-		}
+	/* remove existing vlans */
+	__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
+	rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_mac_flags,
+				  &ramrod_flags);
+	if (rc) {
+		BNX2X_ERR("failed to delete vlans\n");
+		rc = -EINVAL;
+		goto out;
+	}
+
+	/* need to remove/add the VF's accept_any_vlan bit */
+	accept_flags = bnx2x_leading_vfq(vf, accept_flags);
+	if (vlan)
+		clear_bit(BNX2X_ACCEPT_ANY_VLAN, &accept_flags);
+	else
+		set_bit(BNX2X_ACCEPT_ANY_VLAN, &accept_flags);
+
+	bnx2x_vf_prep_rx_mode(bp, LEADING_IDX, &rx_ramrod, vf,
+			      accept_flags);
+	bnx2x_leading_vfq(vf, accept_flags) = accept_flags;
+	bnx2x_config_rx_mode(bp, &rx_ramrod);
+
+	/* configure the new vlan to device */
+	memset(&ramrod_param, 0, sizeof(ramrod_param));
+	__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
+	ramrod_param.vlan_mac_obj = vlan_obj;
+	ramrod_param.ramrod_flags = ramrod_flags;
+	set_bit(BNX2X_DONT_CONSUME_CAM_CREDIT,
+		&ramrod_param.user_req.vlan_mac_flags);
+	ramrod_param.user_req.u.vlan.vlan = vlan;
+	ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
+	rc = bnx2x_config_vlan_mac(bp, &ramrod_param);
+	if (rc) {
+		BNX2X_ERR("failed to configure vlan\n");
+		rc =  -EINVAL;
+		goto out;
+	}
 
-		/* send queue update ramrod to configure default vlan and silent
-		 * vlan removal
+	/* send queue update ramrod to configure default vlan and silent
+	 * vlan removal
+	 */
+	__set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags);
+	q_params.cmd = BNX2X_Q_CMD_UPDATE;
+	q_params.q_obj = &bnx2x_leading_vfq(vf, sp_obj);
+	update_params = &q_params.params.update;
+	__set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN_CHNG,
+		  &update_params->update_flags);
+	__set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM_CHNG,
+		  &update_params->update_flags);
+	if (vlan == 0) {
+		/* if vlan is 0 then we want to leave the VF traffic
+		 * untagged, and leave the incoming traffic untouched
+		 * (i.e. do not remove any vlan tags).
 		 */
-		__set_bit(RAMROD_COMP_WAIT, &q_params.ramrod_flags);
-		q_params.cmd = BNX2X_Q_CMD_UPDATE;
-		q_params.q_obj = &bnx2x_leading_vfq(vf, sp_obj);
-		update_params = &q_params.params.update;
-		__set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN_CHNG,
+		__clear_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN,
+			    &update_params->update_flags);
+		__clear_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
+			    &update_params->update_flags);
+	} else {
+		/* configure default vlan to vf queue and set silent
+		 * vlan removal (the vf remains unaware of this vlan).
+		 */
+		__set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN,
 			  &update_params->update_flags);
-		__set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM_CHNG,
+		__set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
 			  &update_params->update_flags);
+		update_params->def_vlan = vlan;
+		update_params->silent_removal_value =
+			vlan & VLAN_VID_MASK;
+		update_params->silent_removal_mask = VLAN_VID_MASK;
+	}
 
-		if (vlan == 0) {
-			/* if vlan is 0 then we want to leave the VF traffic
-			 * untagged, and leave the incoming traffic untouched
-			 * (i.e. do not remove any vlan tags).
-			 */
-			__clear_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN,
-				    &update_params->update_flags);
-			__clear_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
-				    &update_params->update_flags);
-		} else {
-			/* configure the new vlan to device */
-			__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
-			ramrod_param.vlan_mac_obj = vlan_obj;
-			ramrod_param.ramrod_flags = ramrod_flags;
-			ramrod_param.user_req.u.vlan.vlan = vlan;
-			ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
-			rc = bnx2x_config_vlan_mac(bp, &ramrod_param);
-			if (rc) {
-				BNX2X_ERR("failed to configure vlan\n");
-				rc =  -EINVAL;
-				goto out;
-			}
-
-			/* configure default vlan to vf queue and set silent
-			 * vlan removal (the vf remains unaware of this vlan).
-			 */
-			update_params = &q_params.params.update;
-			__set_bit(BNX2X_Q_UPDATE_DEF_VLAN_EN,
-				  &update_params->update_flags);
-			__set_bit(BNX2X_Q_UPDATE_SILENT_VLAN_REM,
-				  &update_params->update_flags);
-			update_params->def_vlan = vlan;
-		}
+	/* Update the Queue state */
+	rc = bnx2x_queue_state_change(bp, &q_params);
+	if (rc) {
+		BNX2X_ERR("Failed to configure default VLAN\n");
+		goto out;
+	}
 
-		/* Update the Queue state */
-		rc = bnx2x_queue_state_change(bp, &q_params);
-		if (rc) {
-			BNX2X_ERR("Failed to configure default VLAN\n");
-			goto out;
-		}
 
-		/* clear the flag indicating that this VF needs its vlan
-		 * (will only be set if the HV configured the Vlan before vf was
-		 * up and we were called because the VF came up later
-		 */
+	/* clear the flag indicating that this VF needs its vlan
+	 * (will only be set if the HV configured the Vlan before vf was
+	 * up and we were called because the VF came up later
+	 */
 out:
-		vf->cfg_flags &= ~VF_CFG_VLAN;
-		bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);
-	}
+	vf->cfg_flags &= ~VF_CFG_VLAN;
+	bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN);
+
 	return rc;
 }
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
index 1ff6a93..8c213fa52 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
@@ -74,6 +74,7 @@ struct bnx2x_vf_queue {
 	/* VLANs object */
 	struct bnx2x_vlan_mac_obj	vlan_obj;
 	atomic_t vlan_count;		/* 0 means vlan-0 is set  ~ untagged */
+	unsigned long accept_flags;	/* last accept flags configured */
 
 	/* Queue Slow-path State object */
 	struct bnx2x_queue_sp_obj	sp_obj;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
index 26fcba2..0756d7d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
@@ -1598,6 +1598,8 @@ static void bnx2x_vfop_mbx_qfilters(struct bnx2x *bp, struct bnx2x_virtf *vf)
 
 		if (msg->flags & VFPF_SET_Q_FILTERS_RX_MASK_CHANGED) {
 			unsigned long accept = 0;
+			struct pf_vf_bulletin_content *bulletin =
+				BP_VF_BULLETIN(bp, vf->index);
 
 			/* covert VF-PF if mask to bnx2x accept flags */
 			if (msg->rx_mask & VFPF_RX_MASK_ACCEPT_MATCHED_UNICAST)
@@ -1617,9 +1619,11 @@ static void bnx2x_vfop_mbx_qfilters(struct bnx2x *bp, struct bnx2x_virtf *vf)
 				__set_bit(BNX2X_ACCEPT_BROADCAST, &accept);
 
 			/* A packet arriving the vf's mac should be accepted
-			 * with any vlan
+			 * with any vlan, unless a vlan has already been
+			 * configured.
 			 */
-			__set_bit(BNX2X_ACCEPT_ANY_VLAN, &accept);
+			if (!(bulletin->valid_bitmap & (1 << VLAN_VALID)))
+				__set_bit(BNX2X_ACCEPT_ANY_VLAN, &accept);
 
 			/* set rx-mode */
 			rc = bnx2x_vfop_rxmode_cmd(bp, vf, &cmd,
@@ -1710,6 +1714,21 @@ static void bnx2x_vf_mbx_set_q_filters(struct bnx2x *bp,
 			goto response;
 		}
 	}
+	/* if vlan was set by hypervisor we don't allow guest to config vlan */
+	if (bulletin->valid_bitmap & 1 << VLAN_VALID) {
+		int i;
+
+		/* search for vlan filters */
+		for (i = 0; i < filters->n_mac_vlan_filters; i++) {
+			if (filters->filters[i].flags &
+			    VFPF_Q_FILTER_VLAN_TAG_VALID) {
+				BNX2X_ERR("VF[%d] attempted to configure vlan but one was already set by Hypervisor. Aborting request\n",
+					  vf->abs_vfid);
+				vf->op_rc = -EPERM;
+				goto response;
+			}
+		}
+	}
 
 	/* verify vf_qid */
 	if (filters->vf_qid > vf_rxq_count(vf))
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH net 5/5] bnx2x: fix VLAN configuration for VFs.
  2014-01-05 16:33 ` [PATCH net 5/5] bnx2x: fix VLAN configuration for VFs Yuval Mintz
@ 2014-01-05 19:19   ` Or Gerlitz
  2014-01-05 19:24     ` Yuval Mintz
  0 siblings, 1 reply; 13+ messages in thread
From: Or Gerlitz @ 2014-01-05 19:19 UTC (permalink / raw)
  To: Yuval Mintz; +Cc: David Miller, netdev, ariele

On Sun, Jan 5, 2014 at 6:33 PM, Yuval Mintz <yuvalmin@broadcom.com> wrote:
> If the hypervisor configures a vlan for the VF via the PF, the expected
> result is that only packets tagged by said vlan will be received by the VF
> (and that vlan will be silently removed).
> Do to an incorrect manipulation of vlan filters in the driver, the

Did you want to say "Due to an incorrect"?

> VF can receive untagged traffic even if the hypervisor configured
> some vlan for it.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [PATCH net 5/5] bnx2x: fix VLAN configuration for VFs.
  2014-01-05 19:19   ` Or Gerlitz
@ 2014-01-05 19:24     ` Yuval Mintz
  0 siblings, 0 replies; 13+ messages in thread
From: Yuval Mintz @ 2014-01-05 19:24 UTC (permalink / raw)
  To: Or Gerlitz; +Cc: David Miller, netdev, Ariel Elior

> On Sun, Jan 5, 2014 at 6:33 PM, Yuval Mintz <yuvalmin@broadcom.com>
> wrote:
> > If the hypervisor configures a vlan for the VF via the PF, the expected
> > result is that only packets tagged by said vlan will be received by the VF
> > (and that vlan will be silently removed).
> > Do to an incorrect manipulation of vlan filters in the driver, the
> 
> Did you want to say "Due to an incorrect"?

Yeps... Typo, obviously.

> 
> > VF can receive untagged traffic even if the hypervisor configured
> > some vlan for it.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 0/5] bnx2x: Bug fixes patch series
  2014-01-05 16:33 [PATCH net 0/5] bnx2x: Bug fixes patch series Yuval Mintz
                   ` (4 preceding siblings ...)
  2014-01-05 16:33 ` [PATCH net 5/5] bnx2x: fix VLAN configuration for VFs Yuval Mintz
@ 2014-01-06  1:23 ` David Miller
  5 siblings, 0 replies; 13+ messages in thread
From: David Miller @ 2014-01-06  1:23 UTC (permalink / raw)
  To: yuvalmin; +Cc: netdev, ariele

From: Yuval Mintz <yuvalmin@broadcom.com>
Date: Sun, 5 Jan 2014 18:33:49 +0200

> Most of what this parch series contains is SR-IOV related bug fixes.
> Additionally, it contains some small fixes for legacy devices/modes.
> 
> Please consider applying these patches to `net'.

Series applied with the typo in the commit message of patch #5 fixed.

Thanks.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 1/5] bnx2x: limit number of interrupt vectors for 57711
  2014-01-05 16:33 ` [PATCH net 1/5] bnx2x: limit number of interrupt vectors for 57711 Yuval Mintz
@ 2014-01-06 13:47   ` Sergei Shtylyov
  0 siblings, 0 replies; 13+ messages in thread
From: Sergei Shtylyov @ 2014-01-06 13:47 UTC (permalink / raw)
  To: Yuval Mintz, davem, netdev, Dmitry Kravkov; +Cc: ariele

Hello.

On 05-01-2014 20:33, Yuval Mintz wrote:

> From: Dmitry Kravkov <dmitry@broadcom.com>

> Original straightforward division may lead to zeroing number of SB and
> null-pointer dereference when device is short of MSIX vectors or lacks
> MSIX capabilities.

> Reported-by: Vladislav Zolotarov <vladz@cloudius-systems.com>
> Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
> Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
> Signed-off-by: Ariel Elior <ariele@broadcom.com>
> ---
>   drivers/net/ethernet/broadcom/bnx2x/bnx2x.h      | 2 ++
>   drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 6 +++---
>   2 files changed, 5 insertions(+), 3 deletions(-)

> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> index a1f66e2..cb30d1a 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> @@ -2499,4 +2499,6 @@ void bnx2x_set_local_cmng(struct bnx2x *bp);
>   #define MCPR_SCRATCH_BASE(bp) \
>   	(CHIP_IS_E1x(bp) ? MCP_REG_MCPR_SCRATCH : MCP_A_REG_MCPR_SCRATCH)
>
> +#define E1H_MAX_MF_SB_COUNT (HC_SB_MAX_SB_E1X/(E1HVN_MAX * PORT_MAX))

    Be consistent and put spaces around / too, please.

WBR, Sergei

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [BUG] bnx2x : lockdep assertion
  2014-01-05 16:33 ` [PATCH net 2/5] bnx2x: Correct number of MSI-X vectors for VFs Yuval Mintz
@ 2014-01-06 16:28   ` Eric Dumazet
  2014-01-06 16:35     ` Ariel Elior
  0 siblings, 1 reply; 13+ messages in thread
From: Eric Dumazet @ 2014-01-06 16:28 UTC (permalink / raw)
  To: Yuval Mintz; +Cc: davem, netdev, ariele, Michal Kalderon

Caught this with latest net-next tree :

Does this ring a bell to you guys ?


[   27.339221] BUG: sleeping function called from invalid context at include/linux/netdevice.h:486
[   27.347927] in_atomic(): 1, irqs_disabled(): 0, pid: 5672, name: ethtool
[   27.354628] 1 lock held by ethtool/5672:
[   27.354629]  #0:  (rtnl_mutex){+.+.+.}, at: [<ffffffff814f3b97>] rtnl_lock+0x17/0x20
[   27.354641] CPU: 6 PID: 5672 Comm: ethtool Not tainted 3.13.0-dbg-DEV #430
[   27.354644]  0000000000000000 ffff880656881aa8 ffffffff81594454 0000000000000002
[   27.354648]  ffff88065d7f4ad0 ffff880656881ac8 ffffffff810c37af ffff880656881ac8
[   27.354651]  ffff880c50df8000 ffff880656881b18 ffffffffa00b8c18 ffff880c50df0940
[   27.354655] Call Trace:
[   27.354661]  [<ffffffff81594454>] dump_stack+0x4e/0x68
[   27.354666]  [<ffffffff810c37af>] __might_sleep+0xdf/0x110
[   27.354680]  [<ffffffffa00b8c18>] bnx2x_napi_disable.isra.84+0x58/0x130 [bnx2x]
[   27.354689]  [<ffffffffa00bdf65>] bnx2x_netif_stop+0x25/0x40 [bnx2x]
[   27.354696]  [<ffffffffa009123d>] bnx2x_chip_cleanup+0x24d/0x630 [bnx2x]
[   27.354700]  [<ffffffff810a2c55>] ? del_timer_sync+0x5/0xd0
[   27.354708]  [<ffffffffa00c0b40>] bnx2x_nic_unload+0x1f0/0x7f0 [bnx2x]
[   27.354714]  [<ffffffff8118e1af>] ? might_fault+0x5f/0xb0
[   27.354722]  [<ffffffffa00c3a0c>] bnx2x_reload_if_running+0x2c/0x50 [bnx2x]
[   27.354730]  [<ffffffffa00c57e4>] bnx2x_set_ringparam+0x2a4/0x400 [bnx2x]
[   27.354735]  [<ffffffff814ea242>] dev_ethtool+0x752/0x1b30
[   27.354741]  [<ffffffff810e3e1d>] ? trace_hardirqs_on+0xd/0x10
[   27.354743]  [<ffffffff814f3b97>] ? rtnl_lock+0x17/0x20
[   27.354747]  [<ffffffff814fa31d>] dev_ioctl+0x25d/0x5a0
[   27.354752]  [<ffffffff814c9746>] compat_sock_ioctl+0x4e6/0xa50
[   27.354757]  [<ffffffff815a0334>] ? __do_page_fault+0x2c4/0x560
[   27.354763]  [<ffffffff81224c08>] compat_sys_ioctl+0xc8/0x1500
[   27.354765]  [<ffffffff814c832b>] ? sock_map_fd+0x4b/0x70
[   27.354768]  [<ffffffff8159c989>] ? retint_swapgs+0xe/0x13
[   27.354771]  [<ffffffff810e3d45>] ? trace_hardirqs_on_caller+0x105/0x1d0
[   27.354774]  [<ffffffff813207ad>] ? trace_hardirqs_off_thunk+0x3a/0x3c
[   27.354779]  [<ffffffff815a65e5>] sysenter_dispatch+0x7/0x1f
[   27.354781]  [<ffffffff8132076e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
[   28.096865] bnx2x 0000:03:00.0 eth0: using MSI-X  IRQs: sp 41  fp[0] 43 ... fp[3] 46
[   28.211869] bnx2x 0000:03:00.0 eth0: NIC Link is Up, 10000 Mbps full duplex, Flow control: ON - receive

^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [BUG] bnx2x : lockdep assertion
  2014-01-06 16:28   ` [BUG] bnx2x : lockdep assertion Eric Dumazet
@ 2014-01-06 16:35     ` Ariel Elior
  2014-01-06 16:49       ` Eric Dumazet
  0 siblings, 1 reply; 13+ messages in thread
From: Ariel Elior @ 2014-01-06 16:35 UTC (permalink / raw)
  To: Eric Dumazet, Yuval Mintz; +Cc: davem, netdev, Michal Kalderon

> -----Original Message-----
> From: Eric Dumazet [mailto:eric.dumazet@gmail.com]
> Sent: Monday, January 06, 2014 6:28 PM
> To: Yuval Mintz
> Cc: davem@davemloft.net; netdev@vger.kernel.org; Ariel Elior; Michal
> Kalderon
> Subject: [BUG] bnx2x : lockdep assertion
> 
> Caught this with latest net-next tree :
> 
> Does this ring a bell to you guys ?
> 

Hi Eric,
This was introduced by the low latency patch which added a 'might_sleep()' to napi_disable a while ago.
There is a fix in the works.
Thanks,
Ariel 


^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [BUG] bnx2x : lockdep assertion
  2014-01-06 16:35     ` Ariel Elior
@ 2014-01-06 16:49       ` Eric Dumazet
  0 siblings, 0 replies; 13+ messages in thread
From: Eric Dumazet @ 2014-01-06 16:49 UTC (permalink / raw)
  To: Ariel Elior; +Cc: Yuval Mintz, davem, netdev, Michal Kalderon

On Mon, 2014-01-06 at 16:35 +0000, Ariel Elior wrote:

> Hi Eric,
> This was introduced by the low latency patch which added a 'might_sleep()' to napi_disable a while ago.
> There is a fix in the works.
> Thanks,

Hmm, commit 80c33ddd31d0e801953 is 3 months old.

Do you have an idea of ETA for the fix ?

Thanks !

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-01-06 16:49 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-05 16:33 [PATCH net 0/5] bnx2x: Bug fixes patch series Yuval Mintz
2014-01-05 16:33 ` [PATCH net 1/5] bnx2x: limit number of interrupt vectors for 57711 Yuval Mintz
2014-01-06 13:47   ` Sergei Shtylyov
2014-01-05 16:33 ` [PATCH net 2/5] bnx2x: Correct number of MSI-X vectors for VFs Yuval Mintz
2014-01-06 16:28   ` [BUG] bnx2x : lockdep assertion Eric Dumazet
2014-01-06 16:35     ` Ariel Elior
2014-01-06 16:49       ` Eric Dumazet
2014-01-05 16:33 ` [PATCH net 3/5] bnx2x: Clean before update RSS arrives Yuval Mintz
2014-01-05 16:33 ` [PATCH net 4/5] bnx2x: fix AFEX memory overflow Yuval Mintz
2014-01-05 16:33 ` [PATCH net 5/5] bnx2x: fix VLAN configuration for VFs Yuval Mintz
2014-01-05 19:19   ` Or Gerlitz
2014-01-05 19:24     ` Yuval Mintz
2014-01-06  1:23 ` [PATCH net 0/5] bnx2x: Bug fixes patch series David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.