[roll] Roll fuchsia [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
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1415574
Original-Revision: d87d35461fc1ca3cd2c246be25fecf0e93c2d109
GitOrigin-RevId: 732eea9cc1a82abb16ee0b380359a9945a8f0f2b
Change-Id: I5075e5944349f8414766a6191b495f3a4802d205
1 file changed
tree: 00c39b0a8f92359fe220b3b9d3f92cde5270a521
  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.