Lines Matching full:entry

109 		 * If the index isn't significant, use the first entry with a  in kvm_find_cpuid_entry2()
118 * Similarly, use the first matching entry if KVM is doing a in kvm_find_cpuid_entry2()
208 struct kvm_cpuid_entry2 *entry; in kvm_get_hypervisor_cpuid() local
212 entry = kvm_find_cpuid_entry(vcpu, base); in kvm_get_hypervisor_cpuid()
214 if (entry) { in kvm_get_hypervisor_cpuid()
217 signature[0] = entry->ebx; in kvm_get_hypervisor_cpuid()
218 signature[1] = entry->ecx; in kvm_get_hypervisor_cpuid()
219 signature[2] = entry->edx; in kvm_get_hypervisor_cpuid()
223 cpuid.limit = entry->eax; in kvm_get_hypervisor_cpuid()
278 struct kvm_cpuid_entry2 *entry, in kvm_update_feature_runtime() argument
282 cpuid_entry_change(entry, x86_feature, has_feature); in kvm_update_feature_runtime()
326 struct kvm_cpuid_entry2 *entry; in kvm_cpuid_has_hyperv() local
328 entry = kvm_find_cpuid_entry(vcpu, HYPERV_CPUID_INTERFACE); in kvm_cpuid_has_hyperv()
329 return entry && entry->eax == HYPERV_CPUID_SIGNATURE_EAX; in kvm_cpuid_has_hyperv()
337 struct kvm_cpuid_entry2 *entry; in guest_cpuid_is_amd_or_hygon() local
339 entry = kvm_find_cpuid_entry(vcpu, 0); in guest_cpuid_is_amd_or_hygon()
340 if (!entry) in guest_cpuid_is_amd_or_hygon()
343 return is_guest_vendor_amd(entry->ebx, entry->ecx, entry->edx) || in guest_cpuid_is_amd_or_hygon()
344 is_guest_vendor_hygon(entry->ebx, entry->ecx, entry->edx); in guest_cpuid_is_amd_or_hygon()
352 static u32 cpuid_get_reg_unsafe(struct kvm_cpuid_entry2 *entry, u32 reg) in cpuid_get_reg_unsafe() argument
356 return entry->eax; in cpuid_get_reg_unsafe()
358 return entry->ebx; in cpuid_get_reg_unsafe()
360 return entry->ecx; in cpuid_get_reg_unsafe()
362 return entry->edx; in cpuid_get_reg_unsafe()
369 static int cpuid_func_emulated(struct kvm_cpuid_entry2 *entry, u32 func,
376 struct kvm_cpuid_entry2 *entry; in kvm_vcpu_after_set_cpuid() local
395 entry = kvm_find_cpuid_entry_index(vcpu, cpuid.function, cpuid.index); in kvm_vcpu_after_set_cpuid()
396 if (!entry) in kvm_vcpu_after_set_cpuid()
408 vcpu->arch.cpu_caps[i] &= cpuid_get_reg_unsafe(entry, cpuid.reg); in kvm_vcpu_after_set_cpuid()
664 struct kvm_cpuid_entry2 entry; in raw_cpuid_get() local
680 &entry.eax, &entry.ebx, &entry.ecx, &entry.edx); in raw_cpuid_get()
682 return *__cpuid_entry_get_reg(&entry, cpuid.reg); in raw_cpuid_get()
1197 * Synthesize "LFENCE is serializing" into the AMD-defined entry in kvm_set_cpu_caps()
1293 struct kvm_cpuid_entry2 *entry = get_next_cpuid(array); in do_host_cpuid() local
1295 if (!entry) in do_host_cpuid()
1298 memset(entry, 0, sizeof(*entry)); in do_host_cpuid()
1299 entry->function = function; in do_host_cpuid()
1300 entry->index = index; in do_host_cpuid()
1304 return entry; in do_host_cpuid()
1316 return entry; in do_host_cpuid()
1324 cpuid_count(entry->function, entry->index, in do_host_cpuid()
1325 &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); in do_host_cpuid()
1328 entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; in do_host_cpuid()
1330 return entry; in do_host_cpuid()
1333 static int cpuid_func_emulated(struct kvm_cpuid_entry2 *entry, u32 func, in cpuid_func_emulated() argument
1336 memset(entry, 0, sizeof(*entry)); in cpuid_func_emulated()
1338 entry->function = func; in cpuid_func_emulated()
1339 entry->index = 0; in cpuid_func_emulated()
1340 entry->flags = 0; in cpuid_func_emulated()
1344 entry->eax = 7; in cpuid_func_emulated()
1347 entry->ecx = feature_bit(MOVBE); in cpuid_func_emulated()
1357 entry->ecx |= feature_bit(MWAIT); in cpuid_func_emulated()
1360 entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; in cpuid_func_emulated()
1361 entry->eax = 0; in cpuid_func_emulated()
1363 entry->ecx = feature_bit(RDPID); in cpuid_func_emulated()
1381 struct kvm_cpuid_entry2 *entry; in __do_cpuid_func() local
1389 entry = do_host_cpuid(array, function, 0); in __do_cpuid_func()
1390 if (!entry) in __do_cpuid_func()
1396 entry->eax = min(entry->eax, 0x24U); in __do_cpuid_func()
1399 cpuid_entry_override(entry, CPUID_1_EDX); in __do_cpuid_func()
1400 cpuid_entry_override(entry, CPUID_1_ECX); in __do_cpuid_func()
1418 WARN_ON_ONCE((entry->eax & 0xff) > 1); in __do_cpuid_func()
1424 * Read entries until the cache type in the previous entry is in __do_cpuid_func()
1425 * zero, i.e. indicates an invalid entry. in __do_cpuid_func()
1427 for (i = 1; entry->eax & 0x1f; ++i) { in __do_cpuid_func()
1428 entry = do_host_cpuid(array, function, i); in __do_cpuid_func()
1429 if (!entry) in __do_cpuid_func()
1434 entry->eax = 0x4; /* allow ARAT */ in __do_cpuid_func()
1435 entry->ebx = 0; in __do_cpuid_func()
1436 entry->ecx = 0; in __do_cpuid_func()
1437 entry->edx = 0; in __do_cpuid_func()
1441 max_idx = entry->eax = min(entry->eax, 2u); in __do_cpuid_func()
1442 cpuid_entry_override(entry, CPUID_7_0_EBX); in __do_cpuid_func()
1443 cpuid_entry_override(entry, CPUID_7_ECX); in __do_cpuid_func()
1444 cpuid_entry_override(entry, CPUID_7_EDX); in __do_cpuid_func()
1448 entry = do_host_cpuid(array, function, 1); in __do_cpuid_func()
1449 if (!entry) in __do_cpuid_func()
1452 cpuid_entry_override(entry, CPUID_7_1_EAX); in __do_cpuid_func()
1453 cpuid_entry_override(entry, CPUID_7_1_ECX); in __do_cpuid_func()
1454 cpuid_entry_override(entry, CPUID_7_1_EDX); in __do_cpuid_func()
1455 entry->ebx = 0; in __do_cpuid_func()
1458 entry = do_host_cpuid(array, function, 2); in __do_cpuid_func()
1459 if (!entry) in __do_cpuid_func()
1462 cpuid_entry_override(entry, CPUID_7_2_EDX); in __do_cpuid_func()
1463 entry->ecx = 0; in __do_cpuid_func()
1464 entry->ebx = 0; in __do_cpuid_func()
1465 entry->eax = 0; in __do_cpuid_func()
1473 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1487 entry->eax = eax.full; in __do_cpuid_func()
1488 entry->ebx = kvm_pmu_cap.events_mask; in __do_cpuid_func()
1489 entry->ecx = 0; in __do_cpuid_func()
1490 entry->edx = edx.full; in __do_cpuid_func()
1499 entry->eax = entry->ebx = entry->ecx = 0; in __do_cpuid_func()
1505 entry->eax &= permitted_xcr0; in __do_cpuid_func()
1506 entry->ebx = xstate_required_size(permitted_xcr0, false); in __do_cpuid_func()
1507 entry->ecx = entry->ebx; in __do_cpuid_func()
1508 entry->edx &= permitted_xcr0 >> 32; in __do_cpuid_func()
1512 entry = do_host_cpuid(array, function, 1); in __do_cpuid_func()
1513 if (!entry) in __do_cpuid_func()
1516 cpuid_entry_override(entry, CPUID_D_1_EAX); in __do_cpuid_func()
1517 if (entry->eax & (feature_bit(XSAVES) | feature_bit(XSAVEC))) in __do_cpuid_func()
1518 entry->ebx = xstate_required_size(permitted_xcr0 | permitted_xss, in __do_cpuid_func()
1522 entry->ebx = 0; in __do_cpuid_func()
1524 entry->ecx &= permitted_xss; in __do_cpuid_func()
1525 entry->edx &= permitted_xss >> 32; in __do_cpuid_func()
1536 entry = do_host_cpuid(array, function, i); in __do_cpuid_func()
1537 if (!entry) in __do_cpuid_func()
1548 if (WARN_ON_ONCE(!entry->eax || (entry->ecx & 0x1) != s_state)) { in __do_cpuid_func()
1554 entry->ecx &= ~BIT_ULL(2); in __do_cpuid_func()
1555 entry->edx = 0; in __do_cpuid_func()
1562 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1572 cpuid_entry_override(entry, CPUID_12_EAX); in __do_cpuid_func()
1573 entry->ebx &= SGX_MISC_EXINFO; in __do_cpuid_func()
1575 entry = do_host_cpuid(array, function, 1); in __do_cpuid_func()
1576 if (!entry) in __do_cpuid_func()
1586 entry->eax &= SGX_ATTR_PRIV_MASK | SGX_ATTR_UNPRIV_MASK; in __do_cpuid_func()
1587 entry->ebx &= 0; in __do_cpuid_func()
1592 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1596 for (i = 1, max_idx = entry->eax; i <= max_idx; ++i) { in __do_cpuid_func()
1604 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1608 for (i = 1, max_idx = entry->eax; i <= max_idx; ++i) { in __do_cpuid_func()
1615 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1623 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1632 avx10_version = min_t(u8, entry->ebx & 0xff, 1); in __do_cpuid_func()
1633 cpuid_entry_override(entry, CPUID_24_0_EBX); in __do_cpuid_func()
1634 entry->ebx |= avx10_version; in __do_cpuid_func()
1636 entry->eax = 0; in __do_cpuid_func()
1637 entry->ecx = 0; in __do_cpuid_func()
1638 entry->edx = 0; in __do_cpuid_func()
1643 entry->eax = KVM_CPUID_FEATURES; in __do_cpuid_func()
1644 entry->ebx = sigptr[0]; in __do_cpuid_func()
1645 entry->ecx = sigptr[1]; in __do_cpuid_func()
1646 entry->edx = sigptr[2]; in __do_cpuid_func()
1650 entry->eax = (1 << KVM_FEATURE_CLOCKSOURCE) | in __do_cpuid_func()
1665 entry->eax |= (1 << KVM_FEATURE_STEAL_TIME); in __do_cpuid_func()
1667 entry->ebx = 0; in __do_cpuid_func()
1668 entry->ecx = 0; in __do_cpuid_func()
1669 entry->edx = 0; in __do_cpuid_func()
1672 entry->eax = min(entry->eax, 0x80000022); in __do_cpuid_func()
1686 if (entry->eax >= 0x8000001d && in __do_cpuid_func()
1689 entry->eax = max(entry->eax, 0x80000021); in __do_cpuid_func()
1692 entry->ebx &= ~GENMASK(27, 16); in __do_cpuid_func()
1693 cpuid_entry_override(entry, CPUID_8000_0001_EDX); in __do_cpuid_func()
1694 cpuid_entry_override(entry, CPUID_8000_0001_ECX); in __do_cpuid_func()
1701 entry->edx &= ~GENMASK(17, 16); in __do_cpuid_func()
1704 cpuid_entry_override(entry, CPUID_8000_0007_EDX); in __do_cpuid_func()
1707 entry->edx &= boot_cpu_data.x86_power; in __do_cpuid_func()
1708 entry->eax = entry->ebx = entry->ecx = 0; in __do_cpuid_func()
1725 unsigned int virt_as = max((entry->eax >> 8) & 0xff, 48U); in __do_cpuid_func()
1745 phys_as = entry->eax & 0xff; in __do_cpuid_func()
1751 entry->eax = phys_as | (virt_as << 8) | (g_phys_as << 16); in __do_cpuid_func()
1752 entry->ecx &= ~(GENMASK(31, 16) | GENMASK(11, 8)); in __do_cpuid_func()
1753 entry->edx = 0; in __do_cpuid_func()
1754 cpuid_entry_override(entry, CPUID_8000_0008_EBX); in __do_cpuid_func()
1759 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1762 entry->eax = 1; /* SVM revision 1 */ in __do_cpuid_func()
1763 entry->ebx = 8; /* Lets support 8 ASIDs in case we add proper in __do_cpuid_func()
1765 entry->ecx = 0; /* Reserved */ in __do_cpuid_func()
1766 cpuid_entry_override(entry, CPUID_8000_000A_EDX); in __do_cpuid_func()
1769 entry->ecx = entry->edx = 0; in __do_cpuid_func()
1772 entry->eax &= GENMASK(2, 0); in __do_cpuid_func()
1773 entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1777 entry->eax = entry->ebx = entry->ecx = 0; in __do_cpuid_func()
1778 entry->edx = 0; /* reserved */ in __do_cpuid_func()
1782 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1784 cpuid_entry_override(entry, CPUID_8000_001F_EAX); in __do_cpuid_func()
1786 entry->ebx &= ~GENMASK(31, 12); in __do_cpuid_func()
1791 entry->ebx &= ~GENMASK(11, 6); in __do_cpuid_func()
1795 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1798 entry->ebx = entry->edx = 0; in __do_cpuid_func()
1799 cpuid_entry_override(entry, CPUID_8000_0021_EAX); in __do_cpuid_func()
1800 cpuid_entry_override(entry, CPUID_8000_0021_ECX); in __do_cpuid_func()
1806 entry->ecx = entry->edx = 0; in __do_cpuid_func()
1808 entry->eax = entry->ebx = 0; in __do_cpuid_func()
1812 cpuid_entry_override(entry, CPUID_8000_0022_EAX); in __do_cpuid_func()
1815 entry->ebx = ebx.full; in __do_cpuid_func()
1821 entry->eax = min(entry->eax, 0xC0000004); in __do_cpuid_func()
1824 cpuid_entry_override(entry, CPUID_C000_0001_EDX); in __do_cpuid_func()
1832 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1962 * class exists if a guest CPUID entry for its <base> leaf exists. For a given
2004 * max basic entry, e.g. if the max basic leaf is 0xb but there is no in get_out_of_range_cpuid_entry()
2005 * entry for CPUID.0xb.index (see below), then the output value for EDX in get_out_of_range_cpuid_entry()
2012 * the effective CPUID entry is the max basic leaf. Note, the index of in get_out_of_range_cpuid_entry()
2022 struct kvm_cpuid_entry2 *entry; in kvm_cpuid() local
2028 entry = kvm_find_cpuid_entry_index(vcpu, function, index); in kvm_cpuid()
2029 exact = !!entry; in kvm_cpuid()
2031 if (!entry && !exact_only) { in kvm_cpuid()
2032 entry = get_out_of_range_cpuid_entry(vcpu, &function, index); in kvm_cpuid()
2033 used_max_basic = !!entry; in kvm_cpuid()
2036 if (entry) { in kvm_cpuid()
2037 *eax = entry->eax; in kvm_cpuid()
2038 *ebx = entry->ebx; in kvm_cpuid()
2039 *ecx = entry->ecx; in kvm_cpuid()
2040 *edx = entry->edx; in kvm_cpuid()
2077 entry = kvm_find_cpuid_entry_index(vcpu, function, 1); in kvm_cpuid()
2078 if (entry) { in kvm_cpuid()
2080 *edx = entry->edx; in kvm_cpuid()