diff options
author | Steve Wise <swise@opengridcomputing.com> | 2014-04-14 15:22:43 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-04-14 16:26:48 -0400 |
commit | bfae23249955819a42aa6c23d93708c818eff5c9 (patch) | |
tree | 6fcf7cedfbc7e8dcdecb4a594eb85726c6f1d3fb /drivers/net | |
parent | 8c482cdc358ef931ee02262e0a4ef0f29946aa0c (diff) |
cxgb4: Save the correct mac addr for hw-loopback connections in the L2T
Hardware needs the local device mac address to support hw loopback for
rdma loopback connections.
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/l2t.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c index 81e8402a74b4..8a96572fdde0 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c +++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c | |||
@@ -154,7 +154,7 @@ static int write_l2e(struct adapter *adap, struct l2t_entry *e, int sync) | |||
154 | req->params = htons(L2T_W_PORT(e->lport) | L2T_W_NOREPLY(!sync)); | 154 | req->params = htons(L2T_W_PORT(e->lport) | L2T_W_NOREPLY(!sync)); |
155 | req->l2t_idx = htons(e->idx); | 155 | req->l2t_idx = htons(e->idx); |
156 | req->vlan = htons(e->vlan); | 156 | req->vlan = htons(e->vlan); |
157 | if (e->neigh) | 157 | if (e->neigh && !(e->neigh->dev->flags & IFF_LOOPBACK)) |
158 | memcpy(e->dmac, e->neigh->ha, sizeof(e->dmac)); | 158 | memcpy(e->dmac, e->neigh->ha, sizeof(e->dmac)); |
159 | memcpy(req->dst_mac, e->dmac, sizeof(req->dst_mac)); | 159 | memcpy(req->dst_mac, e->dmac, sizeof(req->dst_mac)); |
160 | 160 | ||
@@ -394,6 +394,8 @@ struct l2t_entry *cxgb4_l2t_get(struct l2t_data *d, struct neighbour *neigh, | |||
394 | if (e) { | 394 | if (e) { |
395 | spin_lock(&e->lock); /* avoid race with t4_l2t_free */ | 395 | spin_lock(&e->lock); /* avoid race with t4_l2t_free */ |
396 | e->state = L2T_STATE_RESOLVING; | 396 | e->state = L2T_STATE_RESOLVING; |
397 | if (neigh->dev->flags & IFF_LOOPBACK) | ||
398 | memcpy(e->dmac, physdev->dev_addr, sizeof(e->dmac)); | ||
397 | memcpy(e->addr, addr, addr_len); | 399 | memcpy(e->addr, addr, addr_len); |
398 | e->ifindex = ifidx; | 400 | e->ifindex = ifidx; |
399 | e->hash = hash; | 401 | e->hash = hash; |