Page MenuHomeFreeBSD

aq: Invalidate the descriptor cache after stopping all rings
ClosedPublic

Authored by kbowling on Sun, Sep 20, 12:41 AM.
Tags
None
Referenced Files
F175758945: D59852.id187645.diff
Tue, Oct 13, 2:58 AM
F175727279: D59852.diff
Mon, Oct 12, 8:17 PM
Unknown Object (File)
Sun, Oct 11, 3:23 AM
Unknown Object (File)
Fri, Oct 9, 4:16 PM
Unknown Object (File)
Fri, Oct 9, 4:16 PM
Unknown Object (File)
Fri, Oct 9, 12:57 AM
Unknown Object (File)
Fri, Oct 9, 12:42 AM
Unknown Object (File)
Thu, Oct 8, 12:00 PM
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

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable