Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [High] Lockless gate reopening in `mana_rdma_probe()` exposes a race window that can silently drop hardware service events. --
commit 92507b04de784a341e9ea7d0275d9b3dbe00e839 Author: Long Li <[email protected]> net: mana: Clear RDMA teardown and suspend state in mana_rdma_probe() This commit clears the rdma_teardown and is_suspended flags during probe to ensure hardware service events are handled correctly after a reset cycle. Link: https://lore.kernel.org/all/[email protected]/ > diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c > b/drivers/net/ethernet/microsoft/mana/mana_en.c > index 7a1ac853e3abc..56f426da72864 100644 > --- a/drivers/net/ethernet/microsoft/mana/mana_en.c > +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c [ ... ] > @@ -4279,6 +4280,17 @@ int mana_rdma_probe(struct gdma_dev *gd) > if (err) > return err; > > + /* Clear the state left by a previous mana_rdma_remove() so servicing > + * events are handled again after a reset cycle. > + */ > + gd->is_suspended = false; > + > + /* Publish is_suspended before re-opening the gate, so the handler > + * cannot act on a stale value. Pairs with the smp_load_acquire() > + * in mana_rdma_service_handle(). > + */ > + smp_store_release(&gd->rdma_teardown, false); > + > err = add_adev(gd, "rdma"); [Severity: High] Does opening the rdma_teardown gate here create a race window where hardware service events can be silently dropped? Because mana_gd_register_device(gd) was called earlier in this function, the hardware can now generate events. If an event like GDMA_SERVICE_TYPE_RDMA_SUSPEND fires immediately after smp_store_release() clears rdma_teardown, the ordered workqueue will run mana_rdma_service_handle(). The handler will pass the rdma_teardown check but evaluate !gd->adev as true because add_adev() hasn't completed yet: drivers/net/ethernet/microsoft/mana/mana_en.c:mana_rdma_service_handle() { ... case GDMA_SERVICE_TYPE_RDMA_SUSPEND: if (!gd->adev || gd->is_suspended) break; ... } This causes the event to be dropped, which could create a permanent state inconsistency between the OS and the hardware. Should the gate be opened after add_adev() successfully assigns gd->adev? > if (err) > mana_gd_deregister_device(gd); -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=1
