From: Michael Kelley <mhklinux@xxxxxxxxxxx> Because Hyper-V doesn't know ahead-of-time what operating system will be running in a guest VM, it may offer to Linux guests VMBus devices that are intended for use only in Windows guests. Currently in Linux, VMBus channels are created for these devices, and they are processed by vmbus_device_register(). While nothing further happens because no matching driver is found, the channel continues to exist. To avoid having the spurious channel, drop such devices immediately in vmbus_onoffer(), based on identifying the device in the vmbus_unsupported_devs table. If Hyper-V should issue a rescind request for the device, no matching channel will be found and the rescind will also be ignored. Since unsupported devices are dropped early, the check for unsupported devices in hv_get_dev_type() is redundant. Remove it. Signed-off-by: Michael Kelley <mhklinux@xxxxxxxxxxx> --- drivers/hv/channel_mgmt.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index 3c6011a48dab..a216a0aede73 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -203,7 +203,7 @@ static u16 hv_get_dev_type(const struct vmbus_channel *channel) const guid_t *guid = &channel->offermsg.offer.if_type; u16 i; - if (is_hvsock_channel(channel) || is_unsupported_vmbus_devs(guid)) + if (is_hvsock_channel(channel)) return HV_UNKNOWN; for (i = HV_IDE; i < HV_UNKNOWN; i++) { @@ -1036,6 +1036,16 @@ static void vmbus_onoffer(struct vmbus_channel_message_header *hdr) trace_vmbus_onoffer(offer); + /* + * Hyper-V may offer pseudo-devices with functionality intended for + * Windows guests. Silently ignore them. There's no value in + * cluttering dmesg with error messages. + */ + if (is_unsupported_vmbus_devs(&offer->offer.if_type)) { + atomic_dec(&vmbus_connection.offer_in_progress); + return; + } + if (!vmbus_is_valid_offer(offer)) { pr_err_ratelimited("Invalid offer %d from the host supporting isolation\n", offer->child_relid); -- 2.25.1