[dpdk-dev,v2] net/e1000: fix VF received problem

Message ID 1493790692-58671-1-git-send-email-qiming.yang@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Qiming Yang May 3, 2017, 5:51 a.m. UTC
  VF default MAC address be added in PF Mac address list
instead of VF MAC address list, makes VF can't receive
packets. This patch fixes this issue.

Fixes: be2d648a2dd3 ("igb: add PF support")

Signed-off-by: Qiming Yang <qiming.yang@intel.com>
---
 drivers/net/e1000/igb_pf.c | 4 ++++
 1 file changed, 4 insertions(+)
  

Comments

Wenzhuo Lu May 3, 2017, 7:12 a.m. UTC | #1
Hi,

> -----Original Message-----
> From: Yang, Qiming
> Sent: Wednesday, May 3, 2017 1:52 PM
> To: dev@dpdk.org
> Cc: stable@dpdk.org; Lu, Wenzhuo; Yang, Qiming
> Subject: [PATCH v2] net/e1000: fix VF received problem
> 
> VF default MAC address be added in PF Mac address list instead of VF MAC
> address list, makes VF can't receive packets. This patch fixes this issue.
> 
> Fixes: be2d648a2dd3 ("igb: add PF support")
> 
> Signed-off-by: Qiming Yang <qiming.yang@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
  
Thomas Monjalon May 5, 2017, 2:56 p.m. UTC | #2
03/05/2017 09:12, Lu, Wenzhuo:
> Hi,
> 
> > VF default MAC address be added in PF Mac address list instead of VF MAC
> > address list, makes VF can't receive packets. This patch fixes this issue.
> > 
> > Fixes: be2d648a2dd3 ("igb: add PF support")
> > 
> > Signed-off-by: Qiming Yang <qiming.yang@intel.com>
> Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>

Applied, thanks
  

Patch

diff --git a/drivers/net/e1000/igb_pf.c b/drivers/net/e1000/igb_pf.c
index 67da3c2..923c78a 100644
--- a/drivers/net/e1000/igb_pf.c
+++ b/drivers/net/e1000/igb_pf.c
@@ -332,12 +332,16 @@  igb_vf_set_mac_addr(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 		*(E1000_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private));
 	int rar_entry = hw->mac.rar_entry_count - (vf + 1);
 	uint8_t *new_mac = (uint8_t *)(&msgbuf[1]);
+	int rah;
 
 	if (is_unicast_ether_addr((struct ether_addr *)new_mac)) {
 		if (!is_zero_ether_addr((struct ether_addr *)new_mac))
 			rte_memcpy(vfinfo[vf].vf_mac_addresses, new_mac,
 				sizeof(vfinfo[vf].vf_mac_addresses));
 		hw->mac.ops.rar_set(hw, new_mac, rar_entry);
+		rah = E1000_READ_REG(hw, E1000_RAH(rar_entry));
+		rah |= (0x1 << (E1000_RAH_POOLSEL_SHIFT + vf));
+		E1000_WRITE_REG(hw, E1000_RAH(rar_entry), rah);
 		return 0;
 	}
 	return -1;