KVM_X86_CPU_FEATURE(HYPERV_CPUID_FEATURES, 0, EBX, 11)
 #define HV_CPU_MANAGEMENT                      \
        KVM_X86_CPU_FEATURE(HYPERV_CPUID_FEATURES, 0, EBX, 12)
+#define HV_ENABLE_EXTENDED_HYPERCALLS          \
+       KVM_X86_CPU_FEATURE(HYPERV_CPUID_FEATURES, 0, EBX, 20)
 #define HV_ISOLATION                           \
        KVM_X86_CPU_FEATURE(HYPERV_CPUID_FEATURES, 0, EBX, 22)
 
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE 0x00af
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST 0x00b0
 
+/* Extended hypercalls */
+#define HV_EXT_CALL_QUERY_CAPABILITIES         0x8001
+
 #define HV_FLUSH_ALL_PROCESSORS                        BIT(0)
 #define HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES    BIT(1)
 #define HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY      BIT(2)
 
                        hcall->expect = HV_STATUS_SUCCESS;
                        break;
                case 19:
+                       hcall->control = HV_EXT_CALL_QUERY_CAPABILITIES;
+                       hcall->expect = HV_STATUS_ACCESS_DENIED;
+                       break;
+               case 20:
+                       vcpu_set_cpuid_feature(vcpu, HV_ENABLE_EXTENDED_HYPERCALLS);
+                       hcall->control = HV_EXT_CALL_QUERY_CAPABILITIES | HV_HYPERCALL_FAST_BIT;
+                       hcall->expect = HV_STATUS_INVALID_PARAMETER;
+                       break;
+               case 21:
                        kvm_vm_free(vm);
                        return;
                }