Page MenuHomeFreeBSD

aq: Invalidate the descriptor cache after stopping all rings
Needs ReviewPublic

Authored by kbowling on Sun, Sep 20, 12:41 AM.
Tags
None
Referenced Files
F172672137: D59852.diff
Sun, Sep 20, 2:45 AM
F172667474: D59852.id187253.diff
Sun, Sep 20, 2:03 AM
F172666368: D59852.diff
Sun, Sep 20, 1:51 AM
Subscribers

Details

Summary
Atlantic controllers can retain receive descriptors and their data
addresses after their rings are disabled. Reusing or releasing those
mappings without invalidating the device cache has caused observed
IOMMU and SMMU faults in Linux upstream reports (7a1bb49461b1,
ed4d81c4b3f2 and 7526183cfdbe).

Move global cache invalidation out of the per-ring stop routine. Disable
every ring first, toggle invalidation once, and wait for its completion
indication. Exclude Atlantic A0, as in the Linux workaround. Report
a completion timeout rather than silently discarding it.

Diff Detail

Lint
Lint Skipped
Unit
Tests Skipped