linux/drivers/hv
Andrea Parri (Microsoft) 7527810573 Drivers: hv: vmbus: Introduce the CHANNELMSG_MODIFYCHANNEL message type
VMBus version 4.1 and later support the CHANNELMSG_MODIFYCHANNEL(22)
message type which can be used to request Hyper-V to change the vCPU
that a channel will interrupt.

Introduce the CHANNELMSG_MODIFYCHANNEL message type, and define the
vmbus_send_modifychannel() function to send CHANNELMSG_MODIFYCHANNEL
requests to the host via a hypercall.  The function is then used to
define a sysfs "store" operation, which allows to change the (v)CPU
the channel will interrupt by using the sysfs interface.  The feature
can be used for load balancing or other purposes.

One interesting catch here is that Hyper-V can *not* currently ACK
CHANNELMSG_MODIFYCHANNEL messages with the promise that (after the ACK
is sent) the channel won't send any more interrupts to the "old" CPU.

The peculiarity of the CHANNELMSG_MODIFYCHANNEL messages is problematic
if the user want to take a CPU offline, since we don't want to take a
CPU offline (and, potentially, "lose" channel interrupts on such CPU)
if the host is still processing a CHANNELMSG_MODIFYCHANNEL message
associated to that CPU.

It is worth mentioning, however, that we have been unable to observe
the above mentioned "race": in all our tests, CHANNELMSG_MODIFYCHANNEL
requests appeared *as if* they were processed synchronously by the host.

Suggested-by: Michael Kelley <mikelley@microsoft.com>
Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@gmail.com>
Link: https://lore.kernel.org/r/20200406001514.19876-11-parri.andrea@gmail.com
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
[ wei: fix conflict in channel_mgmt.c ]
Signed-off-by: Wei Liu <wei.liu@kernel.org>
2020-04-23 13:17:12 +00:00
..
channel_mgmt.c Drivers: hv: vmbus: Introduce the CHANNELMSG_MODIFYCHANNEL message type 2020-04-23 13:17:12 +00:00
channel.c Drivers: hv: vmbus: Introduce the CHANNELMSG_MODIFYCHANNEL message type 2020-04-23 13:17:12 +00:00
connection.c Drivers: hv: vmbus: Replace the per-CPU channel lists with a global array of channels 2020-04-23 13:17:11 +00:00
hv_balloon.c hv_balloon: don't check for memhp_auto_online manually 2020-04-07 10:43:40 -07:00
hv_debugfs.c hv_debugfs: Make hv_debug_root static 2020-04-04 17:47:43 +01:00
hv_fcopy.c hv_utils: Always execute the fcopy and vss callbacks in a tasklet 2020-04-23 13:17:11 +00:00
hv_kvp.c hv_utils: Add the support of hibernation 2020-01-26 22:10:17 -05:00
hv_snapshot.c hv_utils: Always execute the fcopy and vss callbacks in a tasklet 2020-04-23 13:17:11 +00:00
hv_trace_balloon.h hv_balloon: trace post_status 2018-03-06 09:57:17 -08:00
hv_trace.c hv: add SPDX license to trace 2018-03-28 13:24:56 +02:00
hv_trace.h Drivers: hv: vmbus: Introduce the CHANNELMSG_MODIFYCHANNEL message type 2020-04-23 13:17:12 +00:00
hv_util.c - Most of the commits here are work to enable host-initiated hibernation 2020-02-03 14:42:03 +00:00
hv_utils_transport.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 280 2019-06-05 17:36:36 +02:00
hv_utils_transport.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 280 2019-06-05 17:36:36 +02:00
hv.c Drivers: hv: vmbus: Synchronize init_vp_index() vs. CPU hotplug 2020-04-23 13:17:12 +00:00
hyperv_vmbus.h hv_utils: Always execute the fcopy and vss callbacks in a tasklet 2020-04-23 13:17:11 +00:00
Kconfig clocksource/drivers/hyperv: Enable TSC page clocksource on 32bit 2019-08-23 16:59:54 +02:00
Makefile drivers: hv: vmbus: Introduce latency testing 2019-11-21 20:10:44 -05:00
ring_buffer.c drivers: hv: vmbus: Introduce latency testing 2019-11-21 20:10:44 -05:00
vmbus_drv.c Drivers: hv: vmbus: Introduce the CHANNELMSG_MODIFYCHANNEL message type 2020-04-23 13:17:12 +00:00