From patchwork Wed Nov 2 14:00:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jinank Jain X-Patchwork-Id: 14244 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp3637526wru; Wed, 2 Nov 2022 07:03:23 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6dq6JPTtYNG7Xosm1eXPcZR1LCXPQFE9xYHPqPN7BQTqmrzYV0wfuVNLf3UiCR81e4tIrc X-Received: by 2002:a17:902:cccc:b0:178:a9b3:43e6 with SMTP id z12-20020a170902cccc00b00178a9b343e6mr24529287ple.92.1667397802668; Wed, 02 Nov 2022 07:03:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667397802; cv=none; d=google.com; s=arc-20160816; b=xoqUoPYsPYpXh3/WYXVBk88VPwMu7fiyvXHOY5wG5LPzZobPjrg3EiIx/AtMEVTsI6 RvTs9RSfhuDhSqpM7dT3CVd03F7pA/JOGcdXBnNXV3y+B2kVJHIpAlWTyqeoP95XMQnJ pzqfE2uTw1BoXc6Bv/mF7uZixgnLUHFjQr2OlXxyd7xx7pf1x+sozAO5QUc8bwDrYrUW wlBN/7RW7GG1c3m7Dvb1lLBvuwSD8seeg7KBNxoct0jq69C0/0Mr6NLlV/5EGARrkCWo q9XopK9y+WIw+L2Bz5X1j9ktH2ZABilNQiywcHKXJDW6hY8uXslhSN3IUvY46Q8oT8H2 2nCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature:dkim-filter; bh=/YZWZdxfDMb1xs+CDsX06JFCs/GpFoJjAs73k7p3+Og=; b=WIFDHbz5w1QCTnGb2M5y0UNSX1AG1jRXiQ+YK0n1FtBtekDyre9U2UQ275pnljAK7h ua3wZVsyv7eQd6D4wmOfQ7/CS6GqzfmS+a1+tucFMvtnA6tKbEAApV8P+I5KgLdYmZ6j tMMKPrUqXWnidFRmkRTvlxPvXoRbdNq4HRf8H0U39BBeMc8d5XWsqY/6pb4wSuQEwniv pZODxUH+5vEQv4jmqHHx8PnoHYKaSMkUXSYI/lC3ClokwWwUSKI85vHQM8YBWm2lYb0a AGXK180iSAQJGFVysJkeci/zNTVeD2FkyHdf8hv6tug2uVrUJyRieeXNcw8sx76AzFM9 wTEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=bn4Biivz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q21-20020a63e215000000b0045d60c88ad2si16219046pgh.164.2022.11.02.07.03.07; Wed, 02 Nov 2022 07:03:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=bn4Biivz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230087AbiKBOAi (ORCPT + 99 others); Wed, 2 Nov 2022 10:00:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230505AbiKBOA3 (ORCPT ); Wed, 2 Nov 2022 10:00:29 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C6C92BE3C; Wed, 2 Nov 2022 07:00:27 -0700 (PDT) Received: from jinankjain-dranzer.zrrkmle5drku1h0apvxbr2u2ee.ix.internal.cloudapp.net (unknown [20.188.121.5]) by linux.microsoft.com (Postfix) with ESMTPSA id C243E205DA23; Wed, 2 Nov 2022 07:00:23 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C243E205DA23 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1667397627; bh=/YZWZdxfDMb1xs+CDsX06JFCs/GpFoJjAs73k7p3+Og=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bn4BiivzKpICql1DRkRPma0jcs03pY5eWa72Q75lZYcmUzMKxNnrN1Rz9LCbjk6Ae fxKefwazsuKiKUnqlk5w//DLflNt93gCkhdM8hr/iuep0lQcoqFj9lCsULefELjRcc +gRd5NcFanIWF01Q0+Q4BjJj68klyDug7NZdU01I= From: Jinank Jain Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, arnd@arndb.de, peterz@infradead.org, jpoimboe@kernel.org, jinankjain@linux.microsoft.com, seanjc@google.com, kirill.shutemov@linux.intel.com, ak@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Subject: [PATCH 1/6] mshv: Add support for detecting nested hypervisor Date: Wed, 2 Nov 2022 14:00:12 +0000 Message-Id: <8f7173a7454f0a87d9bc0afccf9857851a804901.1667394408.git.jinankjain@microsoft.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748393318221475502?= X-GMAIL-MSGID: =?utf-8?q?1748393318221475502?= When Linux runs as a root partition for Microsoft Hypervisor. It is possible to detect if it is running as nested hypervisor using hints exposed by mshv. While at it expose a new variable called hv_nested which can be used later for making decisions specific to nested use case. Signed-off-by: Jinank Jain --- arch/x86/include/asm/hyperv-tlfs.h | 3 +++ arch/x86/kernel/cpu/mshyperv.c | 7 +++++++ include/asm-generic/mshyperv.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h index 3089ec352743..d9a611565859 100644 --- a/arch/x86/include/asm/hyperv-tlfs.h +++ b/arch/x86/include/asm/hyperv-tlfs.h @@ -114,6 +114,9 @@ /* Recommend using the newer ExProcessorMasks interface */ #define HV_X64_EX_PROCESSOR_MASKS_RECOMMENDED BIT(11) +/* Indicates that the hypervisor is nested within a Hyper-V partition. */ +#define HV_X64_HYPERV_NESTED BIT(12) + /* Recommend using enlightened VMCS */ #define HV_X64_ENLIGHTENED_VMCS_RECOMMENDED BIT(14) diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 831613959a92..2555535f5237 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -37,6 +37,8 @@ /* Is Linux running as the root partition? */ bool hv_root_partition; +/* Is Linux running on nested Microsoft Hypervisor */ +bool hv_nested; struct ms_hyperv_info ms_hyperv; #if IS_ENABLED(CONFIG_HYPERV) @@ -301,6 +303,11 @@ static void __init ms_hyperv_init_platform(void) pr_info("Hyper-V: running as root partition\n"); } + if (ms_hyperv.hints & HV_X64_HYPERV_NESTED) { + hv_nested = true; + pr_info("Hyper-V: Linux running on a nested hypervisor\n"); + } + /* * Extract host information. */ diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h index bfb9eb9d7215..49d2e9274379 100644 --- a/include/asm-generic/mshyperv.h +++ b/include/asm-generic/mshyperv.h @@ -115,6 +115,8 @@ static inline u64 hv_generate_guest_id(u64 kernel_version) return guest_id; } +extern bool hv_nested; + /* Free the message slot and signal end-of-message if required */ static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type) { From patchwork Wed Nov 2 14:00:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jinank Jain X-Patchwork-Id: 14242 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp3637389wru; Wed, 2 Nov 2022 07:03:12 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7LrIvQflQNIYWEZMUJDQEJNqBskaJtOx2ctjQuepSvxsTBMrkytQkUp0UQZXLjE5b6hbRk X-Received: by 2002:aa7:c744:0:b0:461:a144:e94d with SMTP id c4-20020aa7c744000000b00461a144e94dmr24946670eds.236.1667397792527; Wed, 02 Nov 2022 07:03:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667397792; cv=none; d=google.com; s=arc-20160816; b=cKGzC2e5RrREFvdljuDh2KHajXufdo7sKYiMC4eeN7HHbH5CgPQpiCbELo4nd5txqU dUVkF98b0ouMaLJKH4nEmhrG7ygERj6U1lB4IjawgURVWYmkqKF8LpEQG7j1mpylMAFN CHbD2BjXlgUIXv2l6+DgpoIAXYGT0iCsaGmLZw0hdqVPJfp3SzG0Bj5ECQgV86MhfUk7 tzTbVYlDtRfrlWZO//j19Nb++cjQtBfpgFLktwMf+TyuBpVzGvsjk7YRPkjuPGl91lWS bpFQKdt+pp9LXjrSOYJ/2dLdkX2nFvIl3azeotlQSeJBbTrCXuNaoxdyLCxodJFVN/Z1 OGFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature:dkim-filter; bh=4/+ExXsC1haU+bI0bHrq9yooOCa5AAvNAd0MIvdOGEA=; b=mOxLF7l26s2KdzxXS8ciWndAeJTRYydxf0/Oxf+IusfFCxsMbrKz5cvDpow2n7LVs0 JOcc1xLYwi4KrB3rmtmFXP/86nt7WhIOzg1kV0PC9lyCLiPLpPTSmW2PjuoTYJBe0ChD Jx3VXaekuoHdjDsVXIP7yf15ChvpNPjeGBnVyGkfz4y25Y2pqK7o0A7CvmsbPHrfAMrk cRo1Ib8Nf4ylZqq0vAOCM+UYTKPLPH+NAGhk7/aV2E6071Vwd9qazI0Ff4gLCwmXbHgG ZFn2fdmmxYnl11xaMiPdEu7XrdPzFCwSg1BmVtEa5Wk2ij5tpieElOtNX/ME/SkZxOFI 0ywA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=b1AVgHWs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gb10-20020a170907960a00b0078306c5c48asi17348509ejc.250.2022.11.02.07.02.49; Wed, 02 Nov 2022 07:03:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=b1AVgHWs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230505AbiKBOAo (ORCPT + 99 others); Wed, 2 Nov 2022 10:00:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52926 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231134AbiKBOAh (ORCPT ); Wed, 2 Nov 2022 10:00:37 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 05FB8DF9D; Wed, 2 Nov 2022 07:00:32 -0700 (PDT) Received: from jinankjain-dranzer.zrrkmle5drku1h0apvxbr2u2ee.ix.internal.cloudapp.net (unknown [20.188.121.5]) by linux.microsoft.com (Postfix) with ESMTPSA id 05DCE205DA26; Wed, 2 Nov 2022 07:00:27 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 05DCE205DA26 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1667397631; bh=4/+ExXsC1haU+bI0bHrq9yooOCa5AAvNAd0MIvdOGEA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b1AVgHWspNSa60xR9ZhNH4xXrePrjy6xiI69x6bJFJP+TL/xHDy2FpvK5mVf16ljA aiPagMU1Q+bGXOkm0fvnDmt+pA03SNVQtFJdwVrQdWUjfBjq24m9wbxz20SOK9qCkc 53CXtVC4FwyYHDjtjxl3ms/lPcrcr2nKHYoVScc4= From: Jinank Jain Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, arnd@arndb.de, peterz@infradead.org, jpoimboe@kernel.org, jinankjain@linux.microsoft.com, seanjc@google.com, kirill.shutemov@linux.intel.com, ak@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Subject: [PATCH 2/6] hv: Setup synic registers in case of nested root partition Date: Wed, 2 Nov 2022 14:00:13 +0000 Message-Id: <78973f0cfed8a19fced95875c0142a08386e66ed.1667394408.git.jinankjain@microsoft.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748393307939485553?= X-GMAIL-MSGID: =?utf-8?q?1748393307939485553?= Child partitions are free to allocate SynIC message and event page but in case of root partition it must use the pages allocated by Microsoft Hypervisor (MSHV). Base address for these pages can be found using synthetic MSRs exposed by MSHV. There is a slight difference in those MSRs for nested vs non-nested root partition. Signed-off-by: Jinank Jain --- arch/x86/include/asm/hyperv-tlfs.h | 11 ++++++ drivers/hv/hv.c | 55 ++++++++++++++++++------------ 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h index d9a611565859..0319091e2019 100644 --- a/arch/x86/include/asm/hyperv-tlfs.h +++ b/arch/x86/include/asm/hyperv-tlfs.h @@ -225,6 +225,17 @@ enum hv_isolation_type { #define HV_REGISTER_SINT14 0x4000009E #define HV_REGISTER_SINT15 0x4000009F +/* + * Define synthetic interrupt controller model specific registers for + * nested hypervisor. + */ +#define HV_REGISTER_NESTED_SCONTROL 0x40001080 +#define HV_REGISTER_NESTED_SVERSION 0x40001081 +#define HV_REGISTER_NESTED_SIEFP 0x40001082 +#define HV_REGISTER_NESTED_SIMP 0x40001083 +#define HV_REGISTER_NESTED_EOM 0x40001084 +#define HV_REGISTER_NESTED_SINT0 0x40001090 + /* * Synthetic Timer MSRs. Four timers per vcpu. */ diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index 4d6480d57546..92ee910561c4 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -25,6 +25,11 @@ /* The one and only */ struct hv_context hv_context; +#define REG_SIMP (hv_nested ? HV_REGISTER_NESTED_SIMP : HV_REGISTER_SIMP) +#define REG_SIEFP (hv_nested ? HV_REGISTER_NESTED_SIEFP : HV_REGISTER_SIEFP) +#define REG_SCTRL (hv_nested ? HV_REGISTER_NESTED_SCONTROL : HV_REGISTER_SCONTROL) +#define REG_SINT0 (hv_nested ? HV_REGISTER_NESTED_SINT0 : HV_REGISTER_SINT0) + /* * hv_init - Main initialization routine. * @@ -147,7 +152,7 @@ int hv_synic_alloc(void) * Synic message and event pages are allocated by paravisor. * Skip these pages allocation here. */ - if (!hv_isolation_type_snp()) { + if (!hv_isolation_type_snp() && !hv_root_partition) { hv_cpu->synic_message_page = (void *)get_zeroed_page(GFP_ATOMIC); if (hv_cpu->synic_message_page == NULL) { @@ -188,8 +193,16 @@ void hv_synic_free(void) struct hv_per_cpu_context *hv_cpu = per_cpu_ptr(hv_context.cpu_context, cpu); - free_page((unsigned long)hv_cpu->synic_event_page); - free_page((unsigned long)hv_cpu->synic_message_page); + if (hv_root_partition) { + if (hv_cpu->synic_event_page != NULL) + memunmap(hv_cpu->synic_event_page); + + if (hv_cpu->synic_message_page != NULL) + memunmap(hv_cpu->synic_message_page); + } else { + free_page((unsigned long)hv_cpu->synic_event_page); + free_page((unsigned long)hv_cpu->synic_message_page); + } free_page((unsigned long)hv_cpu->post_msg_page); } @@ -213,10 +226,10 @@ void hv_synic_enable_regs(unsigned int cpu) union hv_synic_scontrol sctrl; /* Setup the Synic's message page */ - simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP); + simp.as_uint64 = hv_get_register(REG_SIMP); simp.simp_enabled = 1; - if (hv_isolation_type_snp()) { + if (hv_isolation_type_snp() || hv_root_partition) { hv_cpu->synic_message_page = memremap(simp.base_simp_gpa << HV_HYP_PAGE_SHIFT, HV_HYP_PAGE_SIZE, MEMREMAP_WB); @@ -227,13 +240,13 @@ void hv_synic_enable_regs(unsigned int cpu) >> HV_HYP_PAGE_SHIFT; } - hv_set_register(HV_REGISTER_SIMP, simp.as_uint64); + hv_set_register(REG_SIMP, simp.as_uint64); /* Setup the Synic's event page */ - siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP); + siefp.as_uint64 = hv_get_register(REG_SIEFP); siefp.siefp_enabled = 1; - if (hv_isolation_type_snp()) { + if (hv_isolation_type_snp() || hv_root_partition) { hv_cpu->synic_event_page = memremap(siefp.base_siefp_gpa << HV_HYP_PAGE_SHIFT, HV_HYP_PAGE_SIZE, MEMREMAP_WB); @@ -245,12 +258,12 @@ void hv_synic_enable_regs(unsigned int cpu) >> HV_HYP_PAGE_SHIFT; } - hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64); + hv_set_register(REG_SIEFP, siefp.as_uint64); /* Setup the shared SINT. */ if (vmbus_irq != -1) enable_percpu_irq(vmbus_irq, 0); - shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 + + shared_sint.as_uint64 = hv_get_register(REG_SINT0 + VMBUS_MESSAGE_SINT); shared_sint.vector = vmbus_interrupt; @@ -266,14 +279,14 @@ void hv_synic_enable_regs(unsigned int cpu) #else shared_sint.auto_eoi = 0; #endif - hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT, + hv_set_register(REG_SINT0 + VMBUS_MESSAGE_SINT, shared_sint.as_uint64); /* Enable the global synic bit */ - sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL); + sctrl.as_uint64 = hv_get_register(REG_SCTRL); sctrl.enable = 1; - hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64); + hv_set_register(REG_SCTRL, sctrl.as_uint64); } int hv_synic_init(unsigned int cpu) @@ -297,17 +310,17 @@ void hv_synic_disable_regs(unsigned int cpu) union hv_synic_siefp siefp; union hv_synic_scontrol sctrl; - shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 + + shared_sint.as_uint64 = hv_get_register(REG_SINT0 + VMBUS_MESSAGE_SINT); shared_sint.masked = 1; /* Need to correctly cleanup in the case of SMP!!! */ /* Disable the interrupt */ - hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT, + hv_set_register(REG_SINT0 + VMBUS_MESSAGE_SINT, shared_sint.as_uint64); - simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP); + simp.as_uint64 = hv_get_register(REG_SIMP); /* * In Isolation VM, sim and sief pages are allocated by * paravisor. These pages also will be used by kdump @@ -320,9 +333,9 @@ void hv_synic_disable_regs(unsigned int cpu) else simp.base_simp_gpa = 0; - hv_set_register(HV_REGISTER_SIMP, simp.as_uint64); + hv_set_register(REG_SIMP, simp.as_uint64); - siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP); + siefp.as_uint64 = hv_get_register(REG_SIEFP); siefp.siefp_enabled = 0; if (hv_isolation_type_snp()) @@ -330,12 +343,12 @@ void hv_synic_disable_regs(unsigned int cpu) else siefp.base_siefp_gpa = 0; - hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64); + hv_set_register(REG_SIEFP, siefp.as_uint64); /* Disable the global synic bit */ - sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL); + sctrl.as_uint64 = hv_get_register(REG_SCTRL); sctrl.enable = 0; - hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64); + hv_set_register(REG_SCTRL, sctrl.as_uint64); if (vmbus_irq != -1) disable_percpu_irq(vmbus_irq); From patchwork Wed Nov 2 14:00:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jinank Jain X-Patchwork-Id: 14243 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp3637450wru; Wed, 2 Nov 2022 07:03:16 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5A5uE+r0F7zBn0FgpxlVgKaSek3pG6BuKZLaos2byxJajg4CAnHexbUHPam+zo060ya2Yc X-Received: by 2002:a17:907:2d29:b0:7ad:b388:df3c with SMTP id gs41-20020a1709072d2900b007adb388df3cmr22213753ejc.45.1667397796702; Wed, 02 Nov 2022 07:03:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667397796; cv=none; d=google.com; s=arc-20160816; b=OrPPeMYs6iegMYLndqUsY61igALqiaVRM7ZqKHeDduTBxTfYiDybyTEcIgEAlTQth9 C2vz3OnTkEoyi5TRY87Cqo5gEHYnOHGkbPo8Q5pJkX6jCAf3q+kTjyuumLGIjGEWmXWJ qeuS0m7qOL0627Ey/NFNNCi+oWAKMpEz9LJjx9cAMOPoOIlajjYb7GC3xaPCuQFb74f1 OjS9sfU7CSiK0Qmp9j0kXdDMauwUqfVInZTyjP1K7WTSbK+d+BZZs1sPF6IEeYmpwHBl uxdfw8gl2aX4BaoLK/H6Q3LV6XowNTbrn8qX/GbZl+BgjrX/NldGnJvlBIh3t5BW6AEs yyCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature:dkim-filter; bh=hQvX71dZTg8r443N5HSX0bVXJGKvJGEvfRFm+V5S45M=; b=UeOC7VtcMbeg9INNdG2eMxCzJ7bR/hFhkcQ2qPq7bNZcuoPZze2w+GNYbCMWA9UaCP 2E1Xy4tLGlR2rh8zUxOJl01H1fxtsjN/CgkiLXsuqhHj4dD1mjZAMnnD4pZtY0KcHRU/ ftfxqnOZI8f2/W+cJjv+ugA+1R1+3O+HrDpK68GE0FnGwigtn1waLIC3XFVHpqMfDSyu u9KdQ3KAY7wAFD6m6tmvKYMjazaIwz/SGtOmi77pM/Feia50U/5JIbfHjNMvZtEzy4nt Lv50/QcL8aascPf9/Z9eYgSVbONh2vkKHv3X41X+N2zPwcXmqOOk1mufcWYMxbIIzL/i tLjA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=LqxtouOn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ho18-20020a1709070e9200b007ad8140c60asi18494662ejc.492.2022.11.02.07.02.53; Wed, 02 Nov 2022 07:03:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=LqxtouOn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231158AbiKBOBA (ORCPT + 99 others); Wed, 2 Nov 2022 10:01:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229939AbiKBOAk (ORCPT ); Wed, 2 Nov 2022 10:00:40 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 4480AE0E4; Wed, 2 Nov 2022 07:00:36 -0700 (PDT) Received: from jinankjain-dranzer.zrrkmle5drku1h0apvxbr2u2ee.ix.internal.cloudapp.net (unknown [20.188.121.5]) by linux.microsoft.com (Postfix) with ESMTPSA id 3D5B7205DA28; Wed, 2 Nov 2022 07:00:32 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 3D5B7205DA28 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1667397636; bh=hQvX71dZTg8r443N5HSX0bVXJGKvJGEvfRFm+V5S45M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LqxtouOnwBJK6y0fNOpFoGhMMib9T0KbPoQoSpWN/kmqKzXvLn+x46Kn/2awV72JX F757r/NgZB6b+hsdx86YFXZhWEKVfE68ZHnJlawg93QoLIW6os4snaenNDjeWgtsWE Ee5vb6XNOXqBSKqEDQNs8BBHT6Nab/oD2zCBko7Q= From: Jinank Jain Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, arnd@arndb.de, peterz@infradead.org, jpoimboe@kernel.org, jinankjain@linux.microsoft.com, seanjc@google.com, kirill.shutemov@linux.intel.com, ak@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Subject: [PATCH 3/6] hv: Set the correct EOM register in case of nested hypervisor Date: Wed, 2 Nov 2022 14:00:14 +0000 Message-Id: <96b72c2ce5434414acff11548ce4776959a7d3b7.1667394408.git.jinankjain@microsoft.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748393312003554331?= X-GMAIL-MSGID: =?utf-8?q?1748393312003554331?= Currently we are using the default EOM register value. But this needs to changes when running under nested MSHV setup. Signed-off-by: Jinank Jain --- include/asm-generic/mshyperv.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h index 49d2e9274379..7256e2cb7b67 100644 --- a/include/asm-generic/mshyperv.h +++ b/include/asm-generic/mshyperv.h @@ -117,6 +117,8 @@ static inline u64 hv_generate_guest_id(u64 kernel_version) extern bool hv_nested; +#define REG_EOM (hv_nested ? HV_REGISTER_NESTED_EOM : HV_REGISTER_EOM) + /* Free the message slot and signal end-of-message if required */ static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type) { @@ -148,7 +150,7 @@ static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type) * possibly deliver another msg from the * hypervisor */ - hv_set_register(HV_REGISTER_EOM, 0); + hv_set_register(REG_EOM, 0); } } From patchwork Wed Nov 2 14:00:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jinank Jain X-Patchwork-Id: 14246 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp3637656wru; Wed, 2 Nov 2022 07:03:34 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7IleUu/EFbDmOkv0jufunack86qYgBQsuNUOB/cV52OW3U0xZY+OdmrQOHZg1YojvfiPjf X-Received: by 2002:a17:906:8a4b:b0:7a7:3e17:7f91 with SMTP id gx11-20020a1709068a4b00b007a73e177f91mr23965381ejc.331.1667397814600; Wed, 02 Nov 2022 07:03:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667397814; cv=none; d=google.com; s=arc-20160816; b=Xy7imWcb+Vl70bkhOr20XsRTafGuR4eThw0ibV5yrBppVH8az5sNnZTohSp0f2C8R9 ItttfrmBtHBqe0but2FIAduD+ZScOlVY96FsIEmFN9NSh2zYhRKP8u6/pADe3ylaONg4 0+8YrzGdBlmyDcbTuVrpkygjGOSlYTAyoXsfu/DwkYIPCWBV92ajyPHaUD9WRgLieWOh GSMYZ3vYbfTptkx75bsJdUvpHKX6qmBh57kfCSP9lydq43A4bXWg21F99NJbHq4HQXK5 i2SAry5/gt7ozDFLfDshM7tOcQJlry6HzN2nnpGjN1mI+aBxJmeWd1mJRHXeZn8Gx+oa JJiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature:dkim-filter; bh=MyBVSH3Ll+JQcfxsQR5E214HQaujrBVenBGi5YJLMdk=; b=IEkgl8q9M5yzaPJL8iYQ4Dp2XEkPsl8A1RHRfqTQXSlZ62XCwsNbNTiY33H2954MmH uQlGw6fX0W5hhxeqVb5k06O9tWsUrv6zsdvsLY7BW/mg3LWQtn5EdZ1tPb7msZkUrLHp huh+CaEGSmVPZz/0nTzJPL/ahvRQAZMyeePi0lZHD10tGCCz2KCwv8MJ+YBI9D9+F7Qk NvcEPl10gJunNHNHtNJS+9VZ06hUPss4hm+murwilQ40BUIEA8HILsIC8fkgyJUayva1 pXeBkwaIfChEwI7uj4wkB9s4XIxo4i5rCBln9H6dy3FPuGSyKmX6q0Z6pQEADBxbKvUG Z2Ng== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b="IgZqv3/G"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ds16-20020a0564021cd000b00463c5c32c65si4765705edb.457.2022.11.02.07.03.10; Wed, 02 Nov 2022 07:03:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b="IgZqv3/G"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231330AbiKBOBN (ORCPT + 99 others); Wed, 2 Nov 2022 10:01:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231178AbiKBOAw (ORCPT ); Wed, 2 Nov 2022 10:00:52 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7D61FDEE4; Wed, 2 Nov 2022 07:00:40 -0700 (PDT) Received: from jinankjain-dranzer.zrrkmle5drku1h0apvxbr2u2ee.ix.internal.cloudapp.net (unknown [20.188.121.5]) by linux.microsoft.com (Postfix) with ESMTPSA id 763AB20C28B1; Wed, 2 Nov 2022 07:00:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 763AB20C28B1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1667397640; bh=MyBVSH3Ll+JQcfxsQR5E214HQaujrBVenBGi5YJLMdk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IgZqv3/GyWH6b9VFX48CzmYFuvbr0PhFfEqBwVJrfk5uqr7ymTJiBMEn+Qri8UmE+ 4l33XEu3qCthDq3/Ux/NkEYE2ZtqjDs9b8cwZxy42aAEV36pCW9sBUC+68i6mFR+pS i0wTK0ccxnzWF2mbOHAeI7RyRzshRz0DX4IcQfjk= From: Jinank Jain Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, arnd@arndb.de, peterz@infradead.org, jpoimboe@kernel.org, jinankjain@linux.microsoft.com, seanjc@google.com, kirill.shutemov@linux.intel.com, ak@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Subject: [PATCH 4/6] hv: Add an interface to do nested hypercalls Date: Wed, 2 Nov 2022 14:00:15 +0000 Message-Id: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748393330943175400?= X-GMAIL-MSGID: =?utf-8?q?1748393330943175400?= According to TLFS, in order to communicate to L0 hypervisor there needs to be an additional bit set in the control register. This communication is required to perform priviledged instructions which can only be performed by L0 hypervisor. An example of that could be setting up the VMBus infrastructure. Signed-off-by: Jinank Jain --- arch/x86/include/asm/hyperv-tlfs.h | 3 ++- arch/x86/include/asm/mshyperv.h | 42 +++++++++++++++++++++++++++--- include/asm-generic/hyperv-tlfs.h | 1 + include/asm-generic/mshyperv.h | 1 + 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h index 0319091e2019..fd066226f12b 100644 --- a/arch/x86/include/asm/hyperv-tlfs.h +++ b/arch/x86/include/asm/hyperv-tlfs.h @@ -380,7 +380,8 @@ struct hv_nested_enlightenments_control { __u32 reserved:31; } features; struct { - __u32 reserved; + __u32 inter_partition_comm:1; + __u32 reserved:31; } hypercallControls; } __packed; diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h index 61f0c206bff0..4ce9c3c9025d 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -74,10 +74,16 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output) return hv_status; } +/* Hypercall to the L0 hypervisor */ +static inline u64 hv_do_nested_hypercall(u64 control, void *input, void *output) +{ + return hv_do_hypercall(control | HV_HYPERCALL_NESTED, input, output); +} + /* Fast hypercall with 8 bytes of input and no output */ -static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1) +static inline u64 _hv_do_fast_hypercall8(u64 control, u16 code, u64 input1) { - u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT; + u64 hv_status; #ifdef CONFIG_X86_64 { @@ -105,10 +111,24 @@ static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1) return hv_status; } +static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1) +{ + u64 control = (u64)code | HV_HYPERCALL_FAST_BIT; + + return _hv_do_fast_hypercall8(control, code, input1); +} + +static inline u64 hv_do_fast_nested_hypercall8(u16 code, u64 input1) +{ + u64 control = (u64)code | HV_HYPERCALL_FAST_BIT | HV_HYPERCALL_NESTED; + + return _hv_do_fast_hypercall8(control, code, input1); +} + /* Fast hypercall with 16 bytes of input */ -static inline u64 hv_do_fast_hypercall16(u16 code, u64 input1, u64 input2) +static inline u64 _hv_do_fast_hypercall16(u64 control, u16 code, u64 input1, u64 input2) { - u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT; + u64 hv_status; #ifdef CONFIG_X86_64 { @@ -139,6 +159,20 @@ static inline u64 hv_do_fast_hypercall16(u16 code, u64 input1, u64 input2) return hv_status; } +static inline u64 hv_do_fast_hypercall16(u16 code, u64 input1, u64 input2) +{ + u64 control = (u64)code | HV_HYPERCALL_FAST_BIT; + + return _hv_do_fast_hypercall16(control, code, input1, input2); +} + +static inline u64 hv_do_fast_nested_hypercall16(u16 code, u64 input1, u64 input2) +{ + u64 control = (u64)code | HV_HYPERCALL_FAST_BIT | HV_HYPERCALL_NESTED; + + return _hv_do_fast_hypercall16(control, code, input1, input2); +} + extern struct hv_vp_assist_page **hv_vp_assist_page; static inline struct hv_vp_assist_page *hv_get_vp_assist_page(unsigned int cpu) diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h index fdce7a4cfc6f..c67836dd8468 100644 --- a/include/asm-generic/hyperv-tlfs.h +++ b/include/asm-generic/hyperv-tlfs.h @@ -185,6 +185,7 @@ enum HV_GENERIC_SET_FORMAT { #define HV_HYPERCALL_VARHEAD_OFFSET 17 #define HV_HYPERCALL_VARHEAD_MASK GENMASK_ULL(26, 17) #define HV_HYPERCALL_RSVD0_MASK GENMASK_ULL(31, 27) +#define HV_HYPERCALL_NESTED BIT(31) #define HV_HYPERCALL_REP_COMP_OFFSET 32 #define HV_HYPERCALL_REP_COMP_1 BIT_ULL(32) #define HV_HYPERCALL_REP_COMP_MASK GENMASK_ULL(43, 32) diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h index 7256e2cb7b67..86297ca74399 100644 --- a/include/asm-generic/mshyperv.h +++ b/include/asm-generic/mshyperv.h @@ -53,6 +53,7 @@ extern void * __percpu *hyperv_pcpu_input_arg; extern void * __percpu *hyperv_pcpu_output_arg; extern u64 hv_do_hypercall(u64 control, void *inputaddr, void *outputaddr); +extern u64 hv_do_nested_hypercall(u64 control, void *inputaddr, void *outputaddr); extern u64 hv_do_fast_hypercall8(u16 control, u64 input8); extern bool hv_isolation_type_snp(void); From patchwork Wed Nov 2 14:00:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jinank Jain X-Patchwork-Id: 14245 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp3637627wru; Wed, 2 Nov 2022 07:03:31 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7udAhsYSISjMyo1Leg2O9tsWzp2t400c5y8ImfrdRJWVgVE3yItW+k6xnNy8gp2Dbahxkc X-Received: by 2002:a65:458a:0:b0:46f:33df:46b0 with SMTP id o10-20020a65458a000000b0046f33df46b0mr21444296pgq.564.1667397811555; Wed, 02 Nov 2022 07:03:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667397811; cv=none; d=google.com; s=arc-20160816; b=I7sAM8YQIJMidY02dMbuSQmwQWw2K7wTBcvsxHsl+xS4tEbwsivmgp5HFpmFSYQsgc Al2NLWHLTcazL8GuUQ+B5T0Gdgiu6BxgxRQN/7Pc0wtRZ6epKtCC6H6GKUSDHeHvk13b 9R112M5iHwifvaP1cGxfnPaXgNr1LDoCX1wa7OXTcaxWsde1lEvtjQGqVVoy9Wx+S2uT mogc4YaZJ9828wV9HumrrnVtWJMe01qp/hznIpl6vG/2uSRwWDDIZQPPOIfpI8Hy9zb5 2DgV4vDxSZ0c7L12qbPRcly+DTHbH3EBJL1X2zJKNa9OnO3Ss/V1qSWJS9w73thuioQz A/Fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature:dkim-filter; bh=1B9p6pFN0yHl6pLuVEuKSNR9XxSBhvzkr5T1mlusw7Q=; b=mAqfyBTFt9dnVqwDEJWWO2G32oPRtq8V4amKDC5Rh/NNNdFSgqVzZjttdIf2hCkVcI dFXpfoHLQ4kTKmSiL5uHuL8Tmj3kcG7u/ejHEqS3ckf/AFdNewHn8rtigLwv9O+ybzRF xd3olMjQSxYDdv3x8o13EV6/UCLXkELw8UrFkX2pRlVYCHhCrzhlQ8750oSJYTrThnuC CC5X/MAq2Vs6/VrT0RuqV6XZGrCyaa3Sb/xAXZ1SmsAZiANy/DVGxFE0jhT2B0YkeL5P nFlz8LURZsTm1ZA1LJfnZqzlSutM3u2irCGZjQ1C41x0NH8/333KR4lIqTaxf2Ge4725 0tdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=aA8F1YqB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i14-20020a17090acf8e00b00212221d926bsi2286768pju.150.2022.11.02.07.03.17; Wed, 02 Nov 2022 07:03:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=aA8F1YqB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230013AbiKBOBY (ORCPT + 99 others); Wed, 2 Nov 2022 10:01:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231251AbiKBOA6 (ORCPT ); Wed, 2 Nov 2022 10:00:58 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id CF533F009; Wed, 2 Nov 2022 07:00:44 -0700 (PDT) Received: from jinankjain-dranzer.zrrkmle5drku1h0apvxbr2u2ee.ix.internal.cloudapp.net (unknown [20.188.121.5]) by linux.microsoft.com (Postfix) with ESMTPSA id ADDDF20B9F81; Wed, 2 Nov 2022 07:00:40 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com ADDDF20B9F81 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1667397644; bh=1B9p6pFN0yHl6pLuVEuKSNR9XxSBhvzkr5T1mlusw7Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aA8F1YqBGYt4Jz+EAdsr7+jrQQDPc/t71mULllyKGzjdBTWgc9SMmZgGei6yVD9TS rJAyFc2cSqy3/Ua+ubKUGhDoYzW1aIizgRgdo4CyIJ7jTNWmKqRb+V1BkwrjmCNkm5 XJ5WyYMVmINhplBTP4UBICNLB+eoleSxA+UzUnvs= From: Jinank Jain Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, arnd@arndb.de, peterz@infradead.org, jpoimboe@kernel.org, jinankjain@linux.microsoft.com, seanjc@google.com, kirill.shutemov@linux.intel.com, ak@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Subject: [PATCH 5/6] hv: Enable vmbus driver for nested root partition Date: Wed, 2 Nov 2022 14:00:16 +0000 Message-Id: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748393327603923043?= X-GMAIL-MSGID: =?utf-8?q?1748393327603923043?= Currently VMBus driver is not initialized for root partition but we need to enable the VMBus driver for nested root partition. This is required to expose VMBus devices to the L2 guest in the nested setup. Signed-off-by: Jinank Jain --- drivers/hv/vmbus_drv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 8b2e413bf19c..2f0cf75e811b 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2723,7 +2723,7 @@ static int __init hv_acpi_init(void) if (!hv_is_hyperv_initialized()) return -ENODEV; - if (hv_root_partition) + if (hv_root_partition && !hv_nested) return 0; /* From patchwork Wed Nov 2 14:00:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jinank Jain X-Patchwork-Id: 14247 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp3639052wru; Wed, 2 Nov 2022 07:05:27 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5bY8LYNSaEcRttWzwP7dlKVULrSd3+VuntnoRgZf/f4Cpq8ladQz/PoYW4JVXxj1jdUw3Q X-Received: by 2002:a05:6a00:1483:b0:56b:ab8e:f44a with SMTP id v3-20020a056a00148300b0056bab8ef44amr25412721pfu.85.1667397927601; Wed, 02 Nov 2022 07:05:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667397927; cv=none; d=google.com; s=arc-20160816; b=X7X3ejmkzI8650tafxu0J1La6tvFpI4afw/OGIHNuUtawEwRzFyWh31QfdLW+2gScE HN5MG0vatPtn6SYcWxYr/4iZfWrCHqghMvMQuKP4QwAvwiN1olqKrerGef3TJ6wGVPPk DQ6JqOjC0i7X5OjmoBDc+ylZKFzXncJUr77MHluC6kO/C4lISquhhi7VOT6pdFsG3F3u 8ApYgIvuCjp4lKGz1pcRBGTZOlUgt1xaUjpNnuaEDcdYKkjsOxJ7xgtJWmUMoZvzzcnv 6UKyVpz1Ypoyvb9bLFpvZljKHWBxCGZUSnHJNjdqpmbIShaODOKKaiIPuyxTNF87/XpT Rxyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature:dkim-filter; bh=J4DNJwZlTDLqAsrM8lj5O6r1qnyNqnGW9RCCuM0lraM=; b=AL0e0u2aYZHmg5taY9daEx4RTD1FWtwKg6B6LGqNMjAw5W3/2jAckdddnwE5GIjpEB TIXrrpiSh23WaIc4/dID/DGgSLLwzIjLH2M3KnieR+ZCwrPj/aETuJpvjoWb2S7HOX1R drxdKRWWQi0zNIQ3SPAC3CclKuh9MHQDAbCwIR7oZTNMRII7DAHfxzyI9EQ8bF6Ecjy8 pujp6q0OKGOxiHroDUFEXMrgPI82KvfhQbDBAjGBnJaREAD4+2DyL6U81t8GPhbiNUyW +fGfX2sSTkaMGUIuqYrlbyKHgJ2JS1CurSPY4O4dQXQH4CND/pO7UmFCzdrbFCNL4QEJ wP+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=k+t8SwzD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o26-20020a634e5a000000b004639c772888si16615359pgl.225.2022.11.02.07.05.13; Wed, 02 Nov 2022 07:05:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@linux.microsoft.com header.s=default header.b=k+t8SwzD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231236AbiKBOBq (ORCPT + 99 others); Wed, 2 Nov 2022 10:01:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53292 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231187AbiKBOBN (ORCPT ); Wed, 2 Nov 2022 10:01:13 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id F2B441006B; Wed, 2 Nov 2022 07:00:48 -0700 (PDT) Received: from jinankjain-dranzer.zrrkmle5drku1h0apvxbr2u2ee.ix.internal.cloudapp.net (unknown [20.188.121.5]) by linux.microsoft.com (Postfix) with ESMTPSA id E5565205DA2A; Wed, 2 Nov 2022 07:00:44 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com E5565205DA2A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1667397648; bh=J4DNJwZlTDLqAsrM8lj5O6r1qnyNqnGW9RCCuM0lraM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k+t8SwzDmvpqc/NMa3N2qQmq/uulPf1lhHLNJrGiVeRSi7T0UCW0RC6+aG9FPMQEq cRTvlZQCa6xjJgvkpnvB+TP7ZlMUcoHAF9u2KK+/nBhslGzXIyVWwSVfO7NTV7+tQ/ xKxq7J8zHbeHcGoeWi/FHQTHYmC6I23YtCpTrqMM= From: Jinank Jain Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, arnd@arndb.de, peterz@infradead.org, jpoimboe@kernel.org, jinankjain@linux.microsoft.com, seanjc@google.com, kirill.shutemov@linux.intel.com, ak@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Subject: [PATCH 6/6] hv, mshv : Change interrupt vector for nested root partition Date: Wed, 2 Nov 2022 14:00:17 +0000 Message-Id: <22b6428cc90efb4ed970d61249c877b373a7002a.1667394408.git.jinankjain@microsoft.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748393449386841298?= X-GMAIL-MSGID: =?utf-8?q?1748393449386841298?= Traditionally we have been using the HYPERVISOR_CALLBACK_VECTOR to relay the VMBus interrupt. But this does not work in case of nested hypervisor. Microsoft Hypervisor reserves 0x31 to 0x34 as the interrupt vector range for VMBus and thus we have to use one of the vectors from that range and setup the IDT accordingly. Signed-off-by: Jinank Jain --- arch/x86/include/asm/idtentry.h | 2 ++ arch/x86/include/asm/irq_vectors.h | 6 ++++++ arch/x86/kernel/cpu/mshyperv.c | 15 +++++++++++++++ arch/x86/kernel/idt.c | 9 +++++++++ drivers/hv/vmbus_drv.c | 3 ++- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/idtentry.h b/arch/x86/include/asm/idtentry.h index 72184b0b2219..c0648e3e4d4a 100644 --- a/arch/x86/include/asm/idtentry.h +++ b/arch/x86/include/asm/idtentry.h @@ -686,6 +686,8 @@ DECLARE_IDTENTRY_SYSVEC(POSTED_INTR_NESTED_VECTOR, sysvec_kvm_posted_intr_nested DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_CALLBACK_VECTOR, sysvec_hyperv_callback); DECLARE_IDTENTRY_SYSVEC(HYPERV_REENLIGHTENMENT_VECTOR, sysvec_hyperv_reenlightenment); DECLARE_IDTENTRY_SYSVEC(HYPERV_STIMER0_VECTOR, sysvec_hyperv_stimer0); +DECLARE_IDTENTRY_SYSVEC(HYPERV_INTR_NESTED_VMBUS_VECTOR, + sysvec_hyperv_nested_vmbus_intr); #endif #if IS_ENABLED(CONFIG_ACRN_GUEST) diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_vectors.h index 43dcb9284208..729d19eab7f5 100644 --- a/arch/x86/include/asm/irq_vectors.h +++ b/arch/x86/include/asm/irq_vectors.h @@ -102,6 +102,12 @@ #if IS_ENABLED(CONFIG_HYPERV) #define HYPERV_REENLIGHTENMENT_VECTOR 0xee #define HYPERV_STIMER0_VECTOR 0xed +/* + * FIXME: Change this, once Microsoft Hypervisor changes its assumption + * around VMBus interrupt vector allocation for nested root partition. + * Or provides a better interface to detect this instead of hardcoding. + */ +#define HYPERV_INTR_NESTED_VMBUS_VECTOR 0x31 #endif #define LOCAL_TIMER_VECTOR 0xec diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 2555535f5237..83aab88bf298 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -61,6 +61,21 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_hyperv_callback) set_irq_regs(old_regs); } +DEFINE_IDTENTRY_SYSVEC(sysvec_hyperv_nested_vmbus_intr) +{ + struct pt_regs *old_regs = set_irq_regs(regs); + + inc_irq_stat(irq_hv_callback_count); + + if (vmbus_handler) + vmbus_handler(); + + if (ms_hyperv.hints & HV_DEPRECATING_AEOI_RECOMMENDED) + ack_APIC_irq(); + + set_irq_regs(old_regs); +} + void hv_setup_vmbus_handler(void (*handler)(void)) { vmbus_handler = handler; diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c index a58c6bc1cd68..ace648856a0b 100644 --- a/arch/x86/kernel/idt.c +++ b/arch/x86/kernel/idt.c @@ -160,6 +160,15 @@ static const __initconst struct idt_data apic_idts[] = { # endif INTG(SPURIOUS_APIC_VECTOR, asm_sysvec_spurious_apic_interrupt), INTG(ERROR_APIC_VECTOR, asm_sysvec_error_interrupt), +#ifdef CONFIG_HYPERV + /* + * This is a hack because we cannot install this interrupt handler via alloc_intr_gate + * as it does not allow interrupt vector less than FIRST_SYSTEM_VECTORS. And hyperv + * does not want anything other than 0x31-0x34 as the interrupt vector for vmbus + * interrupt in case of nested setup. + */ + INTG(HYPERV_INTR_NESTED_VMBUS_VECTOR, asm_sysvec_hyperv_nested_vmbus_intr), +#endif #endif }; diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 2f0cf75e811b..e6fb77fb44b9 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2746,7 +2746,8 @@ static int __init hv_acpi_init(void) * normal Linux IRQ mechanism is not used in this case. */ #ifdef HYPERVISOR_CALLBACK_VECTOR - vmbus_interrupt = HYPERVISOR_CALLBACK_VECTOR; + vmbus_interrupt = hv_nested ? HYPERV_INTR_NESTED_VMBUS_VECTOR : + HYPERVISOR_CALLBACK_VECTOR; vmbus_irq = -1; #endif