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, u64 input1)
 {
-       u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT;
+       u64 hv_status;
 
 #ifdef CONFIG_X86_64
        {
                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, 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, 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, u64 input1, u64 input2)
 {
-       u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT;
+       u64 hv_status;
 
 #ifdef CONFIG_X86_64
        {
        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, 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, 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)
 
 #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)