From: Andrea Parri (Microsoft) <parri.andrea@xxxxxxxxx> Sent: Sunday, April 5, 2020 5:15 PM > > 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@xxxxxxxxxxxxx> > Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@xxxxxxxxx> > --- > drivers/hv/channel.c | 28 ++++++++++ > drivers/hv/channel_mgmt.c | 2 +- > drivers/hv/hv_trace.h | 19 +++++++ > drivers/hv/vmbus_drv.c | 108 +++++++++++++++++++++++++++++++++++++- > include/linux/hyperv.h | 10 +++- > 5 files changed, 163 insertions(+), 4 deletions(-) > Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>