Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Documentation: hyperv: Update VMBus doc with new features and info

Starting in the 6.15 kernel, VMBus interrupts are automatically
assigned away from a CPU that is being taken offline. Add documentation
describing this case.

Also add details of Hyper-V behavior when the primary channel of
a VMBus device is closed as the result of unbinding the device's
driver. This behavior has not changed, but it was not previously
documented.

Signed-off-by: Michael Kelley <mhklinux@outlook.com>
Link: https://lore.kernel.org/r/20250520044435.7734-1-mhklinux@outlook.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
Message-ID: <20250520044435.7734-1-mhklinux@outlook.com>

authored by

Michael Kelley and committed by
Wei Liu
f77276d1 dd1af0c4

+24 -4
+24 -4
Documentation/virt/hyperv/vmbus.rst
··· 250 250 or /proc/irq corresponding to individual VMBus channel interrupts. 251 251 252 252 An online CPU in a Linux guest may not be taken offline if it has 253 - VMBus channel interrupts assigned to it. Any such channel 254 - interrupts must first be manually reassigned to another CPU as 255 - described above. When no channel interrupts are assigned to the 256 - CPU, it can be taken offline. 253 + VMBus channel interrupts assigned to it. Starting in kernel v6.15, 254 + any such interrupts are automatically reassigned to some other CPU 255 + at the time of offlining. The "other" CPU is chosen by the 256 + implementation and is not load balanced or otherwise intelligently 257 + determined. If the CPU is onlined again, channel interrupts previously 258 + assigned to it are not moved back. As a result, after multiple CPUs 259 + have been offlined, and perhaps onlined again, the interrupt-to-CPU 260 + mapping may be scrambled and non-optimal. In such a case, optimal 261 + assignments must be re-established manually. For kernels v6.14 and 262 + earlier, any conflicting channel interrupts must first be manually 263 + reassigned to another CPU as described above. Then when no channel 264 + interrupts are assigned to the CPU, it can be taken offline. 257 265 258 266 The VMBus channel interrupt handling code is designed to work 259 267 correctly even if an interrupt is received on a CPU other than the ··· 332 324 its previous existence. Such a device might be re-added later, 333 325 in which case it is treated as an entirely new device. See 334 326 vmbus_onoffer_rescind(). 327 + 328 + For some devices, such as the KVP device, Hyper-V automatically 329 + sends a rescind message when the primary channel is closed, 330 + likely as a result of unbinding the device from its driver. 331 + The rescind causes Linux to remove the device. But then Hyper-V 332 + immediately reoffers the device to the guest, causing a new 333 + instance of the device to be created in Linux. For other 334 + devices, such as the synthetic SCSI and NIC devices, closing the 335 + primary channel does *not* result in Hyper-V sending a rescind 336 + message. The device continues to exist in Linux on the VMBus, 337 + but with no driver bound to it. The same driver or a new driver 338 + can subsequently be bound to the existing instance of the device.