[roll] Roll fuchsia [zircon][interrupt] Fix an issue with virtual interrupt triggering.

When a user triggers a virtual interrupt which is configured as a wake
source, it may need to poke the boot CPU in the case that the boot CPU
is either on its way into suspend, or just starting to come out of it.

Part of poking the CPU will involve setting the pending-preempt flag
on it to make sure that a reschedule takes place.  Doing this involves
an ASSERT that the per-cpu blocking-disallowed flag is set.

This happens automatically at the start of a hard IRQ handler, so for
hardware interrupt wake-sources, this is a given.  Virtual interrupts
need to hold a spinlock during this poke, so with interrupts off and a
spinlock held, blocking is effectively disabled.

The per-cpu flag is not set, however, because there exist edge cases
where blocking _is_ logically allowed while holding a spinlock with
interrupts off.  Most notably, when calling into Scheduler::Block.

So, when calling the IdlePowerThread trigger function, make sure that
interrupts are disabled (as they always should be) and manually set
the flag, before setting it back to its previous state during the
unwind.

Also, add the regression test that Gemini wrote which discovered the
issue in the first place.

Original-Original-Fixed: 511517231
Original-Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1632018
Original-Original-Revision: 0c86847e7808b66b1314c4dcc1e71442075a102b
GitOrigin-RevId: 2b2b2fac682c6781d9d343a690b8f719ef28ad66
Change-Id: Ic28101f1e4f88f6b8af3b99cd7c10c491d32bec3
Reviewed-on: https://fuchsia-review.googlesource.com/c/integration/+/1644075
Cr-Commit-Position: refs/heads/main@{#194360}
1 file changed
tree: 10a4f0e45623f21ede16a05b6e7d623921033fc5
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. cobalt
  6. flower
  7. jiri.lock
  8. MILESTONE
  9. minimal
  10. prebuilts
  11. README.md
  12. stem
  13. 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.