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 | |
| 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>
| -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; |
