Lines Matching refs:entry
166 struct kvm_cpuid_entry2 *e, *entry; in cpuid_fix_nx_cap() local
168 entry = NULL; in cpuid_fix_nx_cap()
172 entry = e; in cpuid_fix_nx_cap()
176 if (entry && (entry->edx & F(NX)) && !is_efer_nx()) { in cpuid_fix_nx_cap()
177 entry->edx &= ~F(NX); in cpuid_fix_nx_cap()
289 static void do_host_cpuid(struct kvm_cpuid_entry2 *entry, u32 function, in do_host_cpuid() argument
292 entry->function = function; in do_host_cpuid()
293 entry->index = index; in do_host_cpuid()
294 entry->flags = 0; in do_host_cpuid()
296 cpuid_count(entry->function, entry->index, in do_host_cpuid()
297 &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); in do_host_cpuid()
301 entry->flags |= KVM_CPUID_FLAG_STATEFUL_FUNC; in do_host_cpuid()
315 entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; in do_host_cpuid()
320 static int __do_cpuid_func_emulated(struct kvm_cpuid_entry2 *entry, in __do_cpuid_func_emulated() argument
323 entry->function = func; in __do_cpuid_func_emulated()
324 entry->index = 0; in __do_cpuid_func_emulated()
325 entry->flags = 0; in __do_cpuid_func_emulated()
329 entry->eax = 7; in __do_cpuid_func_emulated()
333 entry->ecx = F(MOVBE); in __do_cpuid_func_emulated()
337 entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; in __do_cpuid_func_emulated()
338 entry->eax = 0; in __do_cpuid_func_emulated()
339 entry->ecx = F(RDPID); in __do_cpuid_func_emulated()
348 static inline void do_cpuid_7_mask(struct kvm_cpuid_entry2 *entry, int index) in do_cpuid_7_mask() argument
383 entry->eax = min(entry->eax, 1u); in do_cpuid_7_mask()
384 entry->ebx &= kvm_cpuid_7_0_ebx_x86_features; in do_cpuid_7_mask()
385 cpuid_mask(&entry->ebx, CPUID_7_0_EBX); in do_cpuid_7_mask()
387 entry->ebx |= F(TSC_ADJUST); in do_cpuid_7_mask()
389 entry->ecx &= kvm_cpuid_7_0_ecx_x86_features; in do_cpuid_7_mask()
390 f_la57 = entry->ecx & F(LA57); in do_cpuid_7_mask()
391 cpuid_mask(&entry->ecx, CPUID_7_ECX); in do_cpuid_7_mask()
393 entry->ecx |= f_la57; in do_cpuid_7_mask()
394 entry->ecx |= f_umip; in do_cpuid_7_mask()
397 entry->ecx &= ~F(PKU); in do_cpuid_7_mask()
399 entry->edx &= kvm_cpuid_7_0_edx_x86_features; in do_cpuid_7_mask()
400 cpuid_mask(&entry->edx, CPUID_7_EDX); in do_cpuid_7_mask()
402 entry->edx |= F(SPEC_CTRL); in do_cpuid_7_mask()
404 entry->edx |= F(INTEL_STIBP); in do_cpuid_7_mask()
406 entry->edx |= F(SPEC_CTRL_SSBD); in do_cpuid_7_mask()
411 entry->edx |= F(ARCH_CAPABILITIES); in do_cpuid_7_mask()
414 entry->eax &= kvm_cpuid_7_1_eax_x86_features; in do_cpuid_7_mask()
415 entry->ebx = 0; in do_cpuid_7_mask()
416 entry->ecx = 0; in do_cpuid_7_mask()
417 entry->edx = 0; in do_cpuid_7_mask()
421 entry->eax = 0; in do_cpuid_7_mask()
422 entry->ebx = 0; in do_cpuid_7_mask()
423 entry->ecx = 0; in do_cpuid_7_mask()
424 entry->edx = 0; in do_cpuid_7_mask()
429 static inline int __do_cpuid_func(struct kvm_cpuid_entry2 *entry, u32 function, in __do_cpuid_func() argument
510 do_host_cpuid(entry, function, 0); in __do_cpuid_func()
516 entry->eax = min(entry->eax, 0x1fU); in __do_cpuid_func()
519 entry->edx &= kvm_cpuid_1_edx_x86_features; in __do_cpuid_func()
520 cpuid_mask(&entry->edx, CPUID_1_EDX); in __do_cpuid_func()
521 entry->ecx &= kvm_cpuid_1_ecx_x86_features; in __do_cpuid_func()
522 cpuid_mask(&entry->ecx, CPUID_1_ECX); in __do_cpuid_func()
525 entry->ecx |= F(X2APIC); in __do_cpuid_func()
532 int t, times = entry->eax & 0xff; in __do_cpuid_func()
534 entry->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT; in __do_cpuid_func()
539 do_host_cpuid(&entry[t], function, 0); in __do_cpuid_func()
554 cache_type = entry[i - 1].eax & 0x1f; in __do_cpuid_func()
557 do_host_cpuid(&entry[i], function, i); in __do_cpuid_func()
563 entry->eax = 0x4; /* allow ARAT */ in __do_cpuid_func()
564 entry->ebx = 0; in __do_cpuid_func()
565 entry->ecx = 0; in __do_cpuid_func()
566 entry->edx = 0; in __do_cpuid_func()
573 do_cpuid_7_mask(&entry[i], i); in __do_cpuid_func()
574 if (i == entry->eax) in __do_cpuid_func()
580 do_host_cpuid(&entry[i], function, i); in __do_cpuid_func()
610 entry->eax = eax.full; in __do_cpuid_func()
611 entry->ebx = cap.events_mask; in __do_cpuid_func()
612 entry->ecx = 0; in __do_cpuid_func()
613 entry->edx = edx.full; in __do_cpuid_func()
632 for (i = 1; entry[i - 1].ecx & 0xff00; ++i) { in __do_cpuid_func()
636 do_host_cpuid(&entry[i], function, i); in __do_cpuid_func()
645 entry->eax &= supported; in __do_cpuid_func()
646 entry->ebx = xstate_required_size(supported, false); in __do_cpuid_func()
647 entry->ecx = entry->ebx; in __do_cpuid_func()
648 entry->edx &= supported >> 32; in __do_cpuid_func()
657 do_host_cpuid(&entry[i], function, idx); in __do_cpuid_func()
659 entry[i].eax &= kvm_cpuid_D_1_eax_x86_features; in __do_cpuid_func()
660 cpuid_mask(&entry[i].eax, CPUID_D_1_EAX); in __do_cpuid_func()
661 entry[i].ebx = 0; in __do_cpuid_func()
662 if (entry[i].eax & (F(XSAVES)|F(XSAVEC))) in __do_cpuid_func()
663 entry[i].ebx = in __do_cpuid_func()
667 if (entry[i].eax == 0 || !(supported & mask)) in __do_cpuid_func()
669 if (WARN_ON_ONCE(entry[i].ecx & 1)) in __do_cpuid_func()
672 entry[i].ecx = 0; in __do_cpuid_func()
673 entry[i].edx = 0; in __do_cpuid_func()
681 int t, times = entry->eax; in __do_cpuid_func()
689 do_host_cpuid(&entry[t], function, t); in __do_cpuid_func()
697 entry->eax = KVM_CPUID_FEATURES; in __do_cpuid_func()
698 entry->ebx = sigptr[0]; in __do_cpuid_func()
699 entry->ecx = sigptr[1]; in __do_cpuid_func()
700 entry->edx = sigptr[2]; in __do_cpuid_func()
704 entry->eax = (1 << KVM_FEATURE_CLOCKSOURCE) | in __do_cpuid_func()
718 entry->eax |= (1 << KVM_FEATURE_STEAL_TIME); in __do_cpuid_func()
720 entry->ebx = 0; in __do_cpuid_func()
721 entry->ecx = 0; in __do_cpuid_func()
722 entry->edx = 0; in __do_cpuid_func()
725 entry->eax = min(entry->eax, 0x8000001f); in __do_cpuid_func()
728 entry->edx &= kvm_cpuid_8000_0001_edx_x86_features; in __do_cpuid_func()
729 cpuid_mask(&entry->edx, CPUID_8000_0001_EDX); in __do_cpuid_func()
730 entry->ecx &= kvm_cpuid_8000_0001_ecx_x86_features; in __do_cpuid_func()
731 cpuid_mask(&entry->ecx, CPUID_8000_0001_ECX); in __do_cpuid_func()
735 entry->edx &= (1 << 8); in __do_cpuid_func()
737 entry->edx &= boot_cpu_data.x86_power; in __do_cpuid_func()
738 entry->eax = entry->ebx = entry->ecx = 0; in __do_cpuid_func()
741 unsigned g_phys_as = (entry->eax >> 16) & 0xff; in __do_cpuid_func()
742 unsigned virt_as = max((entry->eax >> 8) & 0xff, 48U); in __do_cpuid_func()
743 unsigned phys_as = entry->eax & 0xff; in __do_cpuid_func()
747 entry->eax = g_phys_as | (virt_as << 8); in __do_cpuid_func()
748 entry->edx = 0; in __do_cpuid_func()
749 entry->ebx &= kvm_cpuid_8000_0008_ebx_x86_features; in __do_cpuid_func()
750 cpuid_mask(&entry->ebx, CPUID_8000_0008_EBX); in __do_cpuid_func()
757 entry->ebx |= F(AMD_IBPB); in __do_cpuid_func()
759 entry->ebx |= F(AMD_IBRS); in __do_cpuid_func()
761 entry->ebx |= F(AMD_STIBP); in __do_cpuid_func()
763 entry->ebx |= F(AMD_SSBD); in __do_cpuid_func()
765 entry->ebx |= F(AMD_SSB_NO); in __do_cpuid_func()
772 entry->ebx |= F(VIRT_SSBD); in __do_cpuid_func()
776 entry->ecx = entry->edx = 0; in __do_cpuid_func()
784 entry->eax = min(entry->eax, 0xC0000004); in __do_cpuid_func()
787 entry->edx &= kvm_cpuid_C000_0001_edx_x86_features; in __do_cpuid_func()
788 cpuid_mask(&entry->edx, CPUID_C000_0001_EDX); in __do_cpuid_func()
796 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
800 kvm_x86_ops->set_supported_cpuid(function, entry); in __do_cpuid_func()
810 static int do_cpuid_func(struct kvm_cpuid_entry2 *entry, u32 func, in do_cpuid_func() argument
814 return __do_cpuid_func_emulated(entry, func, nent, maxnent); in do_cpuid_func()
816 return __do_cpuid_func(entry, func, nent, maxnent); in do_cpuid_func()
993 struct kvm_cpuid_entry2 *entry; in kvm_cpuid() local
997 entry = kvm_find_cpuid_entry(vcpu, function, index); in kvm_cpuid()
998 found = entry; in kvm_cpuid()
1005 if (!entry && check_limit && !guest_cpuid_is_amd(vcpu) && in kvm_cpuid()
1010 entry = kvm_find_cpuid_entry(vcpu, function, index); in kvm_cpuid()
1013 if (entry) { in kvm_cpuid()
1014 *eax = entry->eax; in kvm_cpuid()
1015 *ebx = entry->ebx; in kvm_cpuid()
1016 *ecx = entry->ecx; in kvm_cpuid()
1017 *edx = entry->edx; in kvm_cpuid()
1028 entry = kvm_find_cpuid_entry(vcpu, function, 1); in kvm_cpuid()
1029 if (entry) { in kvm_cpuid()
1031 *edx = entry->edx; in kvm_cpuid()