[roll] Roll fuchsia [kernel][riscv] sfence.vma when mapping pages

Synchronize hardware when mapping a page in addition to unmap/protect.
It appears that some hardware has some sort of one entry cache of sorts
that causes a page fault loop when mapping a page as a result of a
fault.

According to the architecture this is correct, since the sfence.vma
instruction description is vague enough to cover additional
synchronization that may be needed other than simple TLB flushes.

To avoid a full cross-cpu shootdown on mapping, only shootdown when
updating kernel entries and locally TLB flush when mapping user pages,
which are the vast majority of mappings. Since it's possible another cpu
can spuriously fault on this mapping, add a sfence.vma to the top of the
page fault handler to try to avoid the secondary cpu getting into a page
fault loop.

Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/940164
Original-Revision: fcf1f9187789ecff536fbfa270047a6453833458
GitOrigin-RevId: 2f402c6dd181f1cea3bf80b41c24752fcdb90c50
Change-Id: I10698d289cf22bc1cdf2c02ae686e7006ae974c2
1 file changed
tree: a36e2962978a316456ca3fd80339ad0a282cbcfa
  1. git-hooks/
  2. infra/
  3. third_party/
  4. cts
  5. firmware
  6. flower
  7. jiri.lock
  8. MILESTONE
  9. minimal
  10. prebuilts
  11. README.md
  12. stem
  13. test_durations
  14. toolchain
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.