Page MenuHomeFreeBSD

Add missing pmap dsb instructions
ClosedPublic

Authored by andrew on Feb 7 2019, 9:53 AM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, Sep 28, 2:56 AM
Unknown Object (File)
Wed, Sep 17, 10:09 PM
Unknown Object (File)
Wed, Sep 17, 3:59 AM
Unknown Object (File)
Mon, Sep 15, 3:45 PM
Unknown Object (File)
Fri, Sep 12, 4:15 AM
Unknown Object (File)
Sep 2 2025, 4:23 AM
Unknown Object (File)
Aug 29 2025, 10:24 PM
Unknown Object (File)
Aug 18 2025, 4:16 PM
Subscribers

Details

Summary

We need them in arm64_tlb_flushID when clearing the TLB and after pagetable
stores when moving from an invalid to valid entry. The latter don't call
any of the pmap_invalidate_* functions.

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 22371
Build 21541: arc lint + arc unit

Event Timeline

This fixes the failure on ThunderX2 when INVARIANTS are turned off. The failure was:

panic: vm_fault_hold: fault on nofault entry, addr: 0xffff000040c11000
cpuid = 0
time = 1

Tested with overnight 'make -j 224 buildworld' without failures.
This is more of a 'Tested by' - I don't have enough background here to do a full review. My understanding of ARM spec is you need a dsb after a update of valid pte/pde, before access to the page. ThunderX2 has full out of order execution with weakly ordered loads and stores - so the failure above points to a missing barrier.

This revision is now accepted and ready to land.Feb 7 2019, 6:52 PM

Tested with overnight 'make -j 224 buildworld' without failures.

How long does that take?

This is more of a 'Tested by' - I don't have enough background here to do a full review. My understanding of ARM spec is you need a dsb after a update of valid pte/pde, before access to the page. ThunderX2 has full out of order execution with weakly ordered loads and stores - so the failure above points to a missing barrier.

We need one whenever we create a valid page. In many cases there was one because of the call to pmap_invalidate_* functions, however a few were missed.

This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state Needs Review.Feb 7 2019, 8:59 PM
This revision was automatically updated to reflect the committed changes.

Tested with overnight 'make -j 224 buildworld' without failures.

How long does that take?

buildworld takes around 30 minutes now, but I don't see the CPUs getting fully loaded. I think this can be improved quite a bit with some profiling.