]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/rxe: Replace netdev dev addr with raw_gid
authorZhu Yanjun <yanjun.zhu@linux.dev>
Sun, 19 Jan 2025 17:28:29 +0000 (18:28 +0100)
committerLeon Romanovsky <leon@kernel.org>
Mon, 3 Feb 2025 11:38:43 +0000 (06:38 -0500)
Because TUN device does not have dev_addr, but a gid in rdma is needed,
as such, a raw_gid is generated to act as the gid. The similar commit is
in SIW. This commit learns from the similar commit bad5b6e34ffb
("RDMA/siw: Fabricate a GID on tun and loopback devices") in SIW.

Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Link: https://patch.msgid.link/20250119172831.3123110-2-yanjun.zhu@linux.dev
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/sw/rxe/rxe.c
drivers/infiniband/sw/rxe/rxe_verbs.c
drivers/infiniband/sw/rxe/rxe_verbs.h

index 1ba4a0c8726aedde82d7ec3faeb918ba08779d0e..432e54a29b990ae6afda151ccbae8b3f52ea6134 100644 (file)
@@ -78,8 +78,19 @@ static void rxe_init_device_param(struct rxe_dev *rxe)
        if (!ndev)
                return;
 
+       if (ndev->addr_len) {
+               memcpy(rxe->raw_gid, ndev->dev_addr,
+                       min_t(unsigned int, ndev->addr_len, ETH_ALEN));
+       } else {
+               /*
+                * This device does not have a HW address, but
+                * connection mangagement requires a unique gid.
+                */
+               eth_random_addr(rxe->raw_gid);
+       }
+
        addrconf_addr_eui48((unsigned char *)&rxe->attr.sys_image_guid,
-                       ndev->dev_addr);
+                       rxe->raw_gid);
 
        dev_put(ndev);
 
@@ -125,7 +136,7 @@ static void rxe_init_ports(struct rxe_dev *rxe)
        if (!ndev)
                return;
        addrconf_addr_eui48((unsigned char *)&port->port_guid,
-                           ndev->dev_addr);
+                           rxe->raw_gid);
        dev_put(ndev);
        spin_lock_init(&port->port_lock);
 }
index 6152a0fdfc8caa0026bc0b888edb8dbfb8cfdf50..c46e94f7e86ee83ed905273c0116ec9d80c53ba4 100644 (file)
@@ -1523,7 +1523,7 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name,
        dev->num_comp_vectors = num_possible_cpus();
        dev->local_dma_lkey = 0;
        addrconf_addr_eui48((unsigned char *)&dev->node_guid,
-                           ndev->dev_addr);
+                           rxe->raw_gid);
 
        dev->uverbs_cmd_mask |= BIT_ULL(IB_USER_VERBS_CMD_POST_SEND) |
                                BIT_ULL(IB_USER_VERBS_CMD_REQ_NOTIFY_CQ);
index 6573ceec0ef5835079dabc08a5ed9d58f0850ed4..729a6ada46af27bf74de12d479c8b89d3b1d1ea5 100644 (file)
@@ -376,7 +376,9 @@ struct rxe_dev {
        struct ib_device_attr   attr;
        int                     max_ucontext;
        int                     max_inline_data;
-       struct mutex    usdev_lock;
+       struct mutex            usdev_lock;
+
+       char                    raw_gid[ETH_ALEN];
 
        struct rxe_pool         uc_pool;
        struct rxe_pool         pd_pool;