When running nested, these hypercalls must be sent to the L0 hypervisor or vmbus will fail. Only relevant for x86; nested functionality is not available in ARM64. Signed-off-by: Nuno Das Neves <nunodasneves@xxxxxxxxxxxxxxxxxxx> --- drivers/hv/connection.c | 4 ++++ drivers/hv/hv.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c index 9dc27e5d367a..04bf7f168976 100644 --- a/drivers/hv/connection.c +++ b/drivers/hv/connection.c @@ -539,6 +539,10 @@ void vmbus_set_event(struct vmbus_channel *channel) if (hv_isolation_type_snp()) hv_ghcb_hypercall(HVCALL_SIGNAL_EVENT, &channel->sig_event, NULL, sizeof(channel->sig_event)); +#if defined(CONFIG_X86_64) + else if (hv_nested) + hv_do_fast_nested_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event); +#endif else hv_do_fast_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event); } diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index 8b0dd8e5244d..c7f7652932ca 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -102,6 +102,11 @@ int hv_post_message(union hv_connection_id connection_id, status = hv_ghcb_hypercall(HVCALL_POST_MESSAGE, (void *)aligned_msg, NULL, sizeof(*aligned_msg)); +#if defined(CONFIG_X86_64) + else if (hv_nested) + status = hv_do_nested_hypercall(HVCALL_POST_MESSAGE, + aligned_msg, NULL); +#endif else status = hv_do_hypercall(HVCALL_POST_MESSAGE, aligned_msg, NULL); -- 2.25.1