]> xenbits.xensource.com Git - xen.git/commit
x86/dpci: do not leak pending interrupts on CPU offline
authorRoger Pau Monné <roger.pau@citrix.com>
Mon, 7 Oct 2024 09:10:21 +0000 (11:10 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 7 Oct 2024 09:10:21 +0000 (11:10 +0200)
commit29555668b5725b9d5393b72bfe7ff9a3fa606714
treedaec21e55fe119b1137adbeca1b73dbb71c94988
parenta7201c021174efc908d939079db5bb2f89962a0d
x86/dpci: do not leak pending interrupts on CPU offline

The current dpci logic relies on a softirq being executed as a side effect of
the cpu_notifier_call_chain() call in the code path that offlines the target
CPU.  However the call to cpu_notifier_call_chain() won't trigger any softirq
processing, and even if it did, such processing should be done after all
interrupts have been migrated off the current CPU, otherwise new pending dpci
interrupts could still appear.

Currently the ASSERT() in the cpu callback notifier is fairly easy to trigger
by doing CPU offline from a PVH dom0.

Solve this by instead moving out any dpci interrupts pending processing once
the CPU is dead.  This might introduce more latency than attempting to drain
before the CPU is put offline, but it's less complex, and CPU online/offline is
not a common action.  Any extra introduced latency should be tolerable.

Fixes: f6dd295381f4 ('dpci: replace tasklet with softirq')
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/drivers/passthrough/x86/hvm.c