Date: Mon, 03 Aug 2026 20:45:31 +0000 From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Ariel Ehrenberg <aehrenberg@nvidia.com> Subject: git: d8afb9b13f41 - main - sys/ofed: don't stop removing stale RoCE GIDs at the first hole Message-ID: <6a70fdeb.36a95.12915ee7@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=d8afb9b13f4141dc42fb1eb1c7c6a45bd2cd0bc4 commit d8afb9b13f4141dc42fb1eb1c7c6a45bd2cd0bc4 Author: Ariel Ehrenberg <aehrenberg@nvidia.com> AuthorDate: 2026-07-23 07:32:05 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2026-08-03 20:38:49 +0000 sys/ofed: don't stop removing stale RoCE GIDs at the first hole When cleaning up stale GIDs the scan stopped as soon as rdma_get_gid_attr() failed. But that can also happen for empty entries in the middle of the table, so a single gap left everything after it behind and the GID entries could eventually run out. Now the whole table is scanned and the empty slots are simply skipped. Reviewed by: kib, jhb Sponsored by: Nvidia networking Fixes: 6a75471dbcf0 ("OFED: Various changes from Linux 4.19") Differential revision: https://reviews.freebsd.org/D58510 --- sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c index e24a6645e8e4..d6d882dd59b3 100644 --- a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c +++ b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c @@ -213,6 +213,7 @@ roce_gid_update_addr_callback(struct ib_device *device, u8 port, union ib_gid gid; if_t ifp; int default_gids; + int gid_tbl_len; int i; struct ipx_queue ipx_head; @@ -271,13 +272,15 @@ roce_gid_update_addr_callback(struct ib_device *device, u8 port, update_gid(GID_ADD, device, port, &gid, entry->ndev); } + gid_tbl_len = device->port_immutable[port].gid_tbl_len; + /* remove stale GIDs, if any */ - for (i = default_gids;; i++) { + for (i = default_gids; i < gid_tbl_len; i++) { union ipx_addr ipx; sgid_attr = rdma_get_gid_attr(device, port, i); if (IS_ERR(sgid_attr)) - break; + continue; ndev = sgid_attr->ndev; gid = sgid_attr->gid;home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a70fdeb.36a95.12915ee7>
