linux-hyperv.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jinank Jain <jinankjain@linux.microsoft.com>
To: jinankjain@microsoft.com
Cc: kys@microsoft.com, haiyangz@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, anrayabh@linux.microsoft.com,
	mikelley@microsoft.com
Subject: [PATCH v7 3/5] x86/hyperv: Add an interface to do nested hypercalls
Date: Thu,  1 Dec 2022 11:03:37 +0000	[thread overview]
Message-ID: <0714327373829ec0fc372b78ac3f55c23b1417af.1669788587.git.jinankjain@linux.microsoft.com> (raw)
In-Reply-To: <cover.1669788587.git.jinankjain@linux.microsoft.com>

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 privileged 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 <jinankjain@linux.microsoft.com>
---
 arch/x86/include/asm/hyperv-tlfs.h |  3 ++-
 arch/x86/include/asm/mshyperv.h    | 42 +++++++++++++++++++++++++++---
 include/asm-generic/hyperv-tlfs.h  |  1 +
 3 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
index b5019becb618..7758c495541d 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 3197d49c888c..fbd7a9589b0d 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 b17c6eeb9afa..e61ee461c4fc 100644
--- a/include/asm-generic/hyperv-tlfs.h
+++ b/include/asm-generic/hyperv-tlfs.h
@@ -194,6 +194,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_ULL(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)
-- 
2.25.1


  parent reply	other threads:[~2022-12-01 11:05 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <https://lore.kernel.org/linux-hyperv/cover.1667394408.git.jinankjain@microsoft.com/T/#t>
2022-11-02 16:35 ` [PATCH v2 0/5] Add support running nested Microsoft Hypervisor Jinank Jain
2022-11-02 16:35   ` [PATCH v2 1/5] mshv: Add support for detecting nested hypervisor Jinank Jain
2022-11-03  3:29     ` Michael Kelley (LINUX)
2022-11-02 16:35   ` [PATCH v2 2/5] hv: Setup synic registers in case of nested root partition Jinank Jain
2022-11-03  3:29     ` Michael Kelley (LINUX)
2022-11-02 16:36   ` [PATCH v2 3/5] hv: Add an interface to do nested hypercalls Jinank Jain
2022-11-03  3:30     ` Michael Kelley (LINUX)
2022-11-02 16:36   ` [PATCH v2 4/5] hv: Enable vmbus driver for nested root partition Jinank Jain
2022-11-03  3:30     ` Michael Kelley (LINUX)
2022-11-03 14:16       ` Wei Liu
2022-11-03  7:02     ` Anirudh Rayabharam
2022-11-02 16:36   ` [PATCH v2 5/5] hv, mshv : Change interrupt vector " Jinank Jain
2022-11-17  3:27   ` [PATCH v4 0/5] Add support running nested Microsoft Hypervisor Jinank Jain
2022-11-17  3:27     ` [PATCH v4 1/5] x86/hyperv: Add support for detecting nested hypervisor Jinank Jain
2022-11-18 15:24       ` Michael Kelley (LINUX)
2022-11-17  3:27     ` [PATCH v4 2/5] Drivers: hv: Setup synic registers in case of nested root partition Jinank Jain
2022-11-18 15:34       ` Michael Kelley (LINUX)
2022-11-19  1:39       ` Nuno Das Neves
2022-11-17  3:27     ` [PATCH v4 3/5] x86/hyperv: Add an interface to do nested hypercalls Jinank Jain
2022-11-18 15:35       ` Michael Kelley (LINUX)
2022-11-17  3:27     ` [PATCH v4 4/5] Drivers: hv: Enable vmbus driver for nested root partition Jinank Jain
2022-11-18 15:36       ` Michael Kelley (LINUX)
2022-11-17  3:27     ` [PATCH v4 5/5] x86/hyperv: Change interrupt vector " Jinank Jain
2022-11-18 15:41       ` Michael Kelley (LINUX)
2022-11-24  6:02   ` [PATCH v6 0/5] Add support running nested Microsoft Hypervisor Jinank Jain
2022-11-24  6:02     ` [PATCH v6 1/5] x86/hyperv: Add support for detecting nested hypervisor Jinank Jain
2022-11-24  6:02     ` [PATCH v6 2/5] Drivers: hv: Setup synic registers in case of nested root partition Jinank Jain
2022-11-28 19:45       ` Michael Kelley (LINUX)
2022-11-24  6:02     ` [PATCH v6 3/5] x86/hyperv: Add an interface to do nested hypercalls Jinank Jain
2022-11-24  6:02     ` [PATCH v6 4/5] Drivers: hv: Enable vmbus driver for nested root partition Jinank Jain
2022-11-24  6:02     ` [PATCH v6 5/5] x86/hyperv: Change interrupt vector " Jinank Jain
2022-12-01 11:03   ` [PATCH v7 0/5] Add support running nested Microsoft Hypervisor Jinank Jain
2022-12-01 11:03     ` [PATCH v7 1/5] x86/hyperv: Add support for detecting nested hypervisor Jinank Jain
2022-12-01 11:03     ` [PATCH v7 2/5] Drivers: hv: Setup synic registers in case of nested root partition Jinank Jain
2022-12-02  4:00       ` Michael Kelley (LINUX)
2022-12-02  7:05         ` Jinank Jain
2022-12-02 15:27           ` Michael Kelley (LINUX)
2022-12-01 11:03     ` Jinank Jain [this message]
2022-12-01 11:03     ` [PATCH v7 4/5] Drivers: hv: Enable vmbus driver for " Jinank Jain
2022-12-01 11:03     ` [PATCH v7 5/5] x86/hyperv: Change interrupt vector " Jinank Jain
2022-12-09  5:32   ` [PATCH v8 0/5] Add support running nested Microsoft Hypervisor Jinank Jain
2022-12-09  5:32     ` [PATCH v8 1/5] x86/hyperv: Add support for detecting nested hypervisor Jinank Jain
2022-12-09 17:58       ` Nuno Das Neves
2022-12-09  5:32     ` [PATCH v8 2/5] Drivers: hv: Setup synic registers in case of nested root partition Jinank Jain
2022-12-09 17:56       ` Michael Kelley (LINUX)
2022-12-09  5:32     ` [PATCH v8 3/5] x86/hyperv: Add an interface to do nested hypercalls Jinank Jain
2022-12-09 18:16       ` Nuno Das Neves
2022-12-09  5:32     ` [PATCH v8 4/5] Drivers: hv: Enable vmbus driver for nested root partition Jinank Jain
2022-12-09 18:16       ` Nuno Das Neves
2022-12-09  5:32     ` [PATCH v8 5/5] x86/hyperv: Change interrupt vector " Jinank Jain
2022-12-14  6:32   ` [PATCH v9 0/5] Add support running nested Microsoft Hypervisor Jinank Jain
2022-12-14  6:33     ` [PATCH v9 1/5] x86/hyperv: Add support for detecting nested hypervisor Jinank Jain
2022-12-14  6:33     ` [PATCH v9 2/5] Drivers: hv: Setup synic registers in case of nested root partition Jinank Jain
2022-12-29 20:57       ` Michael Kelley (LINUX)
2022-12-14  6:33     ` [PATCH v9 3/5] x86/hyperv: Add an interface to do nested hypercalls Jinank Jain
2022-12-14 17:25       ` Nuno Das Neves
2022-12-14  6:33     ` [PATCH v9 4/5] Drivers: hv: Enable vmbus driver for nested root partition Jinank Jain
2022-12-14  6:33     ` [PATCH v9 5/5] x86/hyperv: Change interrupt vector " Jinank Jain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0714327373829ec0fc372b78ac3f55c23b1417af.1669788587.git.jinankjain@linux.microsoft.com \
    --to=jinankjain@linux.microsoft.com \
    --cc=ak@linux.intel.com \
    --cc=anrayabh@linux.microsoft.com \
    --cc=arnd@arndb.de \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=decui@microsoft.com \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=jinankjain@microsoft.com \
    --cc=jpoimboe@kernel.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kys@microsoft.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mikelley@microsoft.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=wei.liu@kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).