[roll] Roll fuchsia Reland "[kernel][scheduler] Use mp_reschedule_self when holding a spinlock"

This is a reland of commit d87d35461fc1ca3cd2c246be25fecf0e93c2d109

Original change's description:
> [kernel][scheduler] Use mp_reschedule_self when holding a spinlock
>
> This fixes a bug where triggering a reschedule of the calling CPU
> while holding a spinlock could result in an arbitrarily delayed
> preemption.
>
> Now, when holding one or more spinlocks, we use mp_reschedule_self in
> Reschedule and RescheduleMask to trigger a future preemption of the
> calling CPU once it has released its spinlocks and re-enabled
> interrupts.
>
> This change effectively makes holding a spinlock imply that preemption
> is disabled (deferred) and ensure that a deferred preemption will
> occur promptly upon dropping the spinlock and re-enabling interrupts.
>
> While it is now longer necessary to explicitly disable
> preemption (e.g. using AutoPreemptDisabler) around spinlock critical
> sections that are likely to reschedule, it is still a good idea to do
> so because it will likely perform better than this new approach (self
> IPI).
>
> Add kcounter to track number of self-IPI events.
>
> Original-Bug: 42143537
> Original-Bug: 457759524
> Change-Id: I758cd28bff6cb3bdcc368bcef7d66e8ba7184c70
> Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1415574
> Reviewed-by: John Grossman <johngro@google.com>
> Reviewed-by: Corey Tabaka <eieio@google.com>
> Fuchsia-Auto-Submit: Nick Maniscalco <maniscalco@google.com>
> Commit-Queue: Nick Maniscalco <maniscalco@google.com>

Original-Bug: 42143537
Original-Bug: 457759524
Run-All-Tests: true
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1422596
Original-Revision: 3945356324cf44e671f6defb63f7a20f3fdaeb0a
GitOrigin-RevId: 9548f5f34ea35a8752d6e12b196a83ffc24122a4
Change-Id: I3f0d424d8efc4cc5403596bf7bb8d27875c7d39c
1 file changed
tree: fa7d632b82caab607e63cff26834c28bd86274d4
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. flower
  6. jiri.lock
  7. MILESTONE
  8. minimal
  9. prebuilts
  10. README.md
  11. stem
  12. test_durations
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 in one of the communication channels documented at get involved.

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.