This series adds concurrent HWC request ownership and negotiated HWC queue depth to MANA. It starts from depth-one bootstrap queues, keeps setup private until the final channel is tested, and preserves the distinction between CPU lifetime and PF ownership of DMA mappings.
I am continuing Long Li's four-patch series. Original per-patch author identity, dates and sign-offs are retained. Changes in v8 (v7 -> v8): - Rebase onto net-next 05b5019b01fb9443b09ae4ed34af1135a80a84c8. - Withdraw the table and drain RCU readers before freeing the HWC bundle, in patch 1. Add final PCI/CDX software-only disposal of retained state without reclaiming unacknowledged PF-owned DMA. - Initialize caller state under the per-slot lock. Do not introduce a temporary channel-wide timeout latch in intermediate patch 2. - Preserve recovery signaling when abandoned responses exhaust admission, while healthy saturation remains ordinary pressure. - Include the candidate functional test in bounded bootstrap fallback and preserve a live retry budget without reviving cancellation. - Share the effective TX budget with GDMA/RDMA request producers; bound RDMA batches without changing RX allocation/indexing strides. - Preserve stopped-channel errors before admission and fail malformed doorbell initialization without depending on a later INIT_DONE. - Correct cleanup comments and commit-message rationale. Review both Sashiko report streams rather than treating either as exhaustive. This series remains independent of queue-set replacement. That work addresses individual Ethernet CQ publication/retirement. The shared CQ-table hunks must be reconciled while preserving both contracts, whichever series lands second. Neither series is silently stacked. https://lore.kernel.org/all/[email protected]/ Known separate concerns include individual RDMA/datapath CQ lifetime, malformed-response RX reposting and wider DMA failure/device-lifecycle policy. This revision does not claim to fix them. Standalone net/stable backports of older-kernel fixes require separate extraction/validation. Changes in v7 (v6 -> v7): - Rebase onto net-next d8674294aefef02266c4d47ad10131f1bffbe534, following Simon Horman's request after the v6 CI application failure. - Preserve the upstream GDMA core/PCI transport split and CDX support. Initialize the HWC lifetime lock on both transport probe paths and perform PCI recovery's timeout cancellation through a GDMA core helper which protects the published HWC pointer across the module boundary. - Retain the four-patch lineage and the v6 ownership, request, timeout, publication, depth-validation and fallback policies. Rebase request: https://lore.kernel.org/all/[email protected]/ Changes in v6 (v5 -> v6): - Keep the four-patch v5 structure while folding review-required HWC ownership, teardown, timeout, publication and fallback safety into their owning feature patches. - Serialize complete ESTABLISH_HWC and DESTROY_HWC shared-memory transactions. Record possible PF ownership before MMIO submission and clear it only after DESTROY_HWC is acknowledged. - Retain PF-visible queues after an indeterminate destroy. Fence the dedicated HWC EQ and withdraw its CQ from dispatch without freeing the mappings, then retry teardown before assigning fresh queues. - Destroy the HWC EQ before CQ and completion state. Release-publish the CQ table and wait for IRQ-side RCU readers before freeing it, without adding per-completion refcount operations. - Withdraw the caller's response buffer before return and quarantine a timed-out slot until its late response arrives or teardown cancels it. - Return -EBUSY for healthy slot pressure and reserve -ETIMEDOUT for an admitted request which receives no response. - Publish slots under the inflight lock, protect response state with the per-slot lock, and retain sender/response references until both sides finish. - Synchronize hwc_timeout updates and publish the HWC only after queues, admission state, caller contexts and the direct EQ test are ready. - Replace the goto-heavy request and channel-creation flows called out in review with focused admission, submission, wait, build, validation, rebuild and fallback helpers. - Treat reported depth as a maximum: rebuild exactly for 2 through 128, retain untouched bootstrap queues for 1 or above 128, and require the rebuilt report to repeat the selected depth. - Enforce directional request/response maxima against both the report and allocated buffers. Rebuild only for exact 4096-byte reports while permitting bootstrap operation for other nonzero maxima. - Validate BAR page geometry and every stored doorbell. Invalidate the old HWC doorbell before re-establishment and suppress MMIO while the invalid sentinel is present, without adding full validation to each data-path doorbell ring. - Remove the proposed capability bit because driver-version advertisement occurs after HWC establishment and cannot negotiate creation-time behavior. - Preserve current net-next behavior which always uses the hardware-reported dest_vrq_id and dest_vrcq_id. Changes in v5 (v4 -> v5): - Shortened comments and documented the existing error paths in patches 1 and 2. - Rejected apparent success from a response accepted before request submission. - Guarded CQ unpublication when establishment failed before cq_table allocation. - Required successful retry teardown before creating fresh bootstrap queues after an initial destroy failure. Changes in v4 (return to net-next after the v3 split): - Reworked the feature series into four standalone patches for handover, per-slot completion state, concurrency and dynamic depth. - Added bounded admission, guarded sender accounting, timeout quarantine, queue-depth bounds, message-buffer sizing and rebuild validation. - Reset routing IDs for each establish and rejected a missing doorbell. Changes in v3 (v2 -> net v3, historical fixes-only posting): - Split the combined series after maintainer feedback, posting fixes to net and deferring concurrency and dynamic depth. - Added response-buffer withdrawal and stale-response handling. - Removed pcie_flr() teardown fallback and retained resources after an unacknowledged destroy. Changes in v2 (v1 -> v2): - Bounds-checked the SGE pointer derived from inline OOB size. - Protected active-sender accounting and drained senders during teardown and failure exits. - Rebased on net-next e354f7d60f14. v1: - Combined CQ-table lifetime, queue sizing, RX validation, teardown, concurrent-request and dynamic-depth work in seven patches. Validation: Source and build qualification: Per-intermediate GCC/Clang W=1 builds, patch style checks, focused actual-source C cases and paired full kernel/image/module qualification are complete. Sparse retains a baseline warning; Smatch retains baseline frontend diagnostics and is not counted as a clean pass. Ordinary baseline/release coverage on VM5 and VM6 is complete. Each VM/fixture has 1,600 type-2 PD/MR and 320 type-3 PD/CQ/MR operations across the initial and three post-PCI rounds, native channels 8->4->8, native/upper MTUs 1500->1400->1500, three PCI remove/rescan cycles, bounded ping and three-second TCP/1Mbit UDP with positive receivers. Both VMs returned to their exact SAFE baselines. Owned fixtures/helpers and processes were removed; guest and central reservations were released. Evidence is explicitly composed, not one uninterrupted four-trial run. The completed VM5 baseline uses retained exact runtime receipts and a corrected evaluation of iperf3's duplicate, identical UDP bitrate metadata. That original harness attempt remains PROFILE_FAILED in its history. VM5 release and both VM6 fixtures completed in a new three-trial run. Fixture identity and SAFE continuity are checked across the two scopes. No measured simultaneous outstanding firmware-command count, negotiated depth proof, performance comparison, connected RDMA workload, CDX hardware, fault injection, sanitizer, DIM or queue-set qualification is claimed. The final intermediate-history correction leaves the entire final source tree identical to the release build snapshot a1454f411cdc. Evidence retains the literal build commit and kernelrelease rather than relabeling an image with a later history-only commit ID. v7: https://lore.kernel.org/all/[email protected]/ v6: https://lore.kernel.org/all/[email protected]/ v5: https://lore.kernel.org/all/[email protected]/ v4: https://lore.kernel.org/all/[email protected]/ v3: https://lore.kernel.org/all/[email protected]/ v2: https://lore.kernel.org/all/[email protected]/ v1: https://lore.kernel.org/all/[email protected]/ Long Li (4): net: mana: prepare HWC ownership for safe reinitialization net: mana: give each HWC message slot its own completion state net: mana: support concurrent HWC requests net: mana: add dynamic HWC queue depth with reinit path drivers/infiniband/hw/mana/main.c | 19 +- .../net/ethernet/microsoft/mana/gdma_cdx.c | 5 +- .../net/ethernet/microsoft/mana/gdma_main.c | 154 ++- .../net/ethernet/microsoft/mana/gdma_pci.c | 15 +- .../net/ethernet/microsoft/mana/hw_channel.c | 1019 ++++++++++++++--- .../net/ethernet/microsoft/mana/shm_channel.c | 58 +- include/net/mana/gdma.h | 17 + include/net/mana/hw_channel.h | 69 +- include/net/mana/shm_channel.h | 10 +- 9 files changed, 1150 insertions(+), 216 deletions(-) base-commit: 05b5019b01fb9443b09ae4ed34af1135a80a84c8 -- 2.43.0

