Lines Matching refs:entry
236 struct kvm_cpuid_entry2 *entry; in kvm_get_hypervisor_cpuid() local
240 entry = kvm_find_cpuid_entry(vcpu, base); in kvm_get_hypervisor_cpuid()
242 if (entry) { in kvm_get_hypervisor_cpuid()
245 signature[0] = entry->ebx; in kvm_get_hypervisor_cpuid()
246 signature[1] = entry->ecx; in kvm_get_hypervisor_cpuid()
247 signature[2] = entry->edx; in kvm_get_hypervisor_cpuid()
251 cpuid.limit = entry->eax; in kvm_get_hypervisor_cpuid()
295 struct kvm_cpuid_entry2 *entry, in kvm_update_feature_runtime() argument
299 cpuid_entry_change(entry, x86_feature, has_feature); in kvm_update_feature_runtime()
341 struct kvm_cpuid_entry2 *entry; in kvm_cpuid_has_hyperv() local
343 entry = kvm_find_cpuid_entry(vcpu, HYPERV_CPUID_INTERFACE); in kvm_cpuid_has_hyperv()
344 return entry && entry->eax == HYPERV_CPUID_SIGNATURE_EAX; in kvm_cpuid_has_hyperv()
352 struct kvm_cpuid_entry2 *entry; in guest_cpuid_is_amd_or_hygon() local
354 entry = kvm_find_cpuid_entry(vcpu, 0); in guest_cpuid_is_amd_or_hygon()
355 if (!entry) in guest_cpuid_is_amd_or_hygon()
358 return is_guest_vendor_amd(entry->ebx, entry->ecx, entry->edx) || in guest_cpuid_is_amd_or_hygon()
359 is_guest_vendor_hygon(entry->ebx, entry->ecx, entry->edx); in guest_cpuid_is_amd_or_hygon()
367 static u32 cpuid_get_reg_unsafe(struct kvm_cpuid_entry2 *entry, u32 reg) in cpuid_get_reg_unsafe() argument
371 return entry->eax; in cpuid_get_reg_unsafe()
373 return entry->ebx; in cpuid_get_reg_unsafe()
375 return entry->ecx; in cpuid_get_reg_unsafe()
377 return entry->edx; in cpuid_get_reg_unsafe()
384 static int cpuid_func_emulated(struct kvm_cpuid_entry2 *entry, u32 func,
391 struct kvm_cpuid_entry2 *entry; in kvm_vcpu_after_set_cpuid() local
410 entry = kvm_find_cpuid_entry_index(vcpu, cpuid.function, cpuid.index); in kvm_vcpu_after_set_cpuid()
411 if (!entry) in kvm_vcpu_after_set_cpuid()
423 vcpu->arch.cpu_caps[i] &= cpuid_get_reg_unsafe(entry, cpuid.reg); in kvm_vcpu_after_set_cpuid()
659 struct kvm_cpuid_entry2 entry; in raw_cpuid_get() local
675 &entry.eax, &entry.ebx, &entry.ecx, &entry.edx); in raw_cpuid_get()
677 return *__cpuid_entry_get_reg(&entry, cpuid.reg); in raw_cpuid_get()
1250 struct kvm_cpuid_entry2 *entry = get_next_cpuid(array); in do_host_cpuid() local
1252 if (!entry) in do_host_cpuid()
1255 memset(entry, 0, sizeof(*entry)); in do_host_cpuid()
1256 entry->function = function; in do_host_cpuid()
1257 entry->index = index; in do_host_cpuid()
1261 return entry; in do_host_cpuid()
1273 return entry; in do_host_cpuid()
1281 cpuid_count(entry->function, entry->index, in do_host_cpuid()
1282 &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); in do_host_cpuid()
1285 entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; in do_host_cpuid()
1287 return entry; in do_host_cpuid()
1290 static int cpuid_func_emulated(struct kvm_cpuid_entry2 *entry, u32 func, in cpuid_func_emulated() argument
1293 memset(entry, 0, sizeof(*entry)); in cpuid_func_emulated()
1295 entry->function = func; in cpuid_func_emulated()
1296 entry->index = 0; in cpuid_func_emulated()
1297 entry->flags = 0; in cpuid_func_emulated()
1301 entry->eax = 7; in cpuid_func_emulated()
1304 entry->ecx = feature_bit(MOVBE); in cpuid_func_emulated()
1314 entry->ecx |= feature_bit(MWAIT); in cpuid_func_emulated()
1317 entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; in cpuid_func_emulated()
1318 entry->eax = 0; in cpuid_func_emulated()
1320 entry->ecx = feature_bit(RDPID); in cpuid_func_emulated()
1338 struct kvm_cpuid_entry2 *entry; in __do_cpuid_func() local
1346 entry = do_host_cpuid(array, function, 0); in __do_cpuid_func()
1347 if (!entry) in __do_cpuid_func()
1353 entry->eax = min(entry->eax, 0x24U); in __do_cpuid_func()
1356 cpuid_entry_override(entry, CPUID_1_EDX); in __do_cpuid_func()
1357 cpuid_entry_override(entry, CPUID_1_ECX); in __do_cpuid_func()
1375 WARN_ON_ONCE((entry->eax & 0xff) > 1); in __do_cpuid_func()
1384 for (i = 1; entry->eax & 0x1f; ++i) { in __do_cpuid_func()
1385 entry = do_host_cpuid(array, function, i); in __do_cpuid_func()
1386 if (!entry) in __do_cpuid_func()
1391 entry->eax = 0x4; /* allow ARAT */ in __do_cpuid_func()
1392 entry->ebx = 0; in __do_cpuid_func()
1393 entry->ecx = 0; in __do_cpuid_func()
1394 entry->edx = 0; in __do_cpuid_func()
1398 max_idx = entry->eax = min(entry->eax, 2u); in __do_cpuid_func()
1399 cpuid_entry_override(entry, CPUID_7_0_EBX); in __do_cpuid_func()
1400 cpuid_entry_override(entry, CPUID_7_ECX); in __do_cpuid_func()
1401 cpuid_entry_override(entry, CPUID_7_EDX); in __do_cpuid_func()
1405 entry = do_host_cpuid(array, function, 1); in __do_cpuid_func()
1406 if (!entry) in __do_cpuid_func()
1409 cpuid_entry_override(entry, CPUID_7_1_EAX); in __do_cpuid_func()
1410 cpuid_entry_override(entry, CPUID_7_1_EDX); in __do_cpuid_func()
1411 entry->ebx = 0; in __do_cpuid_func()
1412 entry->ecx = 0; in __do_cpuid_func()
1415 entry = do_host_cpuid(array, function, 2); in __do_cpuid_func()
1416 if (!entry) in __do_cpuid_func()
1419 cpuid_entry_override(entry, CPUID_7_2_EDX); in __do_cpuid_func()
1420 entry->ecx = 0; in __do_cpuid_func()
1421 entry->ebx = 0; in __do_cpuid_func()
1422 entry->eax = 0; in __do_cpuid_func()
1430 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1446 entry->eax = eax.full; in __do_cpuid_func()
1447 entry->ebx = kvm_pmu_cap.events_mask; in __do_cpuid_func()
1448 entry->ecx = 0; in __do_cpuid_func()
1449 entry->edx = edx.full; in __do_cpuid_func()
1458 entry->eax = entry->ebx = entry->ecx = 0; in __do_cpuid_func()
1464 entry->eax &= permitted_xcr0; in __do_cpuid_func()
1465 entry->ebx = xstate_required_size(permitted_xcr0, false); in __do_cpuid_func()
1466 entry->ecx = entry->ebx; in __do_cpuid_func()
1467 entry->edx &= permitted_xcr0 >> 32; in __do_cpuid_func()
1471 entry = do_host_cpuid(array, function, 1); in __do_cpuid_func()
1472 if (!entry) in __do_cpuid_func()
1475 cpuid_entry_override(entry, CPUID_D_1_EAX); in __do_cpuid_func()
1476 if (entry->eax & (feature_bit(XSAVES) | feature_bit(XSAVEC))) in __do_cpuid_func()
1477 entry->ebx = xstate_required_size(permitted_xcr0 | permitted_xss, in __do_cpuid_func()
1481 entry->ebx = 0; in __do_cpuid_func()
1483 entry->ecx &= permitted_xss; in __do_cpuid_func()
1484 entry->edx &= permitted_xss >> 32; in __do_cpuid_func()
1495 entry = do_host_cpuid(array, function, i); in __do_cpuid_func()
1496 if (!entry) in __do_cpuid_func()
1507 if (WARN_ON_ONCE(!entry->eax || (entry->ecx & 0x1) != s_state)) { in __do_cpuid_func()
1513 entry->ecx &= ~BIT_ULL(2); in __do_cpuid_func()
1514 entry->edx = 0; in __do_cpuid_func()
1521 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1531 cpuid_entry_override(entry, CPUID_12_EAX); in __do_cpuid_func()
1532 entry->ebx &= SGX_MISC_EXINFO; in __do_cpuid_func()
1534 entry = do_host_cpuid(array, function, 1); in __do_cpuid_func()
1535 if (!entry) in __do_cpuid_func()
1545 entry->eax &= SGX_ATTR_PRIV_MASK | SGX_ATTR_UNPRIV_MASK; in __do_cpuid_func()
1546 entry->ebx &= 0; in __do_cpuid_func()
1551 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1555 for (i = 1, max_idx = entry->eax; i <= max_idx; ++i) { in __do_cpuid_func()
1563 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1567 for (i = 1, max_idx = entry->eax; i <= max_idx; ++i) { in __do_cpuid_func()
1574 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1582 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1591 avx10_version = min_t(u8, entry->ebx & 0xff, 1); in __do_cpuid_func()
1592 cpuid_entry_override(entry, CPUID_24_0_EBX); in __do_cpuid_func()
1593 entry->ebx |= avx10_version; in __do_cpuid_func()
1595 entry->eax = 0; in __do_cpuid_func()
1596 entry->ecx = 0; in __do_cpuid_func()
1597 entry->edx = 0; in __do_cpuid_func()
1602 entry->eax = KVM_CPUID_FEATURES; in __do_cpuid_func()
1603 entry->ebx = sigptr[0]; in __do_cpuid_func()
1604 entry->ecx = sigptr[1]; in __do_cpuid_func()
1605 entry->edx = sigptr[2]; in __do_cpuid_func()
1609 entry->eax = (1 << KVM_FEATURE_CLOCKSOURCE) | in __do_cpuid_func()
1624 entry->eax |= (1 << KVM_FEATURE_STEAL_TIME); in __do_cpuid_func()
1626 entry->ebx = 0; in __do_cpuid_func()
1627 entry->ecx = 0; in __do_cpuid_func()
1628 entry->edx = 0; in __do_cpuid_func()
1631 entry->eax = min(entry->eax, 0x80000022); in __do_cpuid_func()
1645 if (entry->eax >= 0x8000001d && in __do_cpuid_func()
1648 entry->eax = max(entry->eax, 0x80000021); in __do_cpuid_func()
1651 entry->ebx &= ~GENMASK(27, 16); in __do_cpuid_func()
1652 cpuid_entry_override(entry, CPUID_8000_0001_EDX); in __do_cpuid_func()
1653 cpuid_entry_override(entry, CPUID_8000_0001_ECX); in __do_cpuid_func()
1660 entry->edx &= ~GENMASK(17, 16); in __do_cpuid_func()
1663 cpuid_entry_override(entry, CPUID_8000_0007_EDX); in __do_cpuid_func()
1666 entry->edx &= boot_cpu_data.x86_power; in __do_cpuid_func()
1667 entry->eax = entry->ebx = entry->ecx = 0; in __do_cpuid_func()
1684 unsigned int virt_as = max((entry->eax >> 8) & 0xff, 48U); in __do_cpuid_func()
1704 phys_as = entry->eax & 0xff; in __do_cpuid_func()
1710 entry->eax = phys_as | (virt_as << 8) | (g_phys_as << 16); in __do_cpuid_func()
1711 entry->ecx &= ~(GENMASK(31, 16) | GENMASK(11, 8)); in __do_cpuid_func()
1712 entry->edx = 0; in __do_cpuid_func()
1713 cpuid_entry_override(entry, CPUID_8000_0008_EBX); in __do_cpuid_func()
1718 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1721 entry->eax = 1; /* SVM revision 1 */ in __do_cpuid_func()
1722 entry->ebx = 8; /* Lets support 8 ASIDs in case we add proper in __do_cpuid_func()
1724 entry->ecx = 0; /* Reserved */ in __do_cpuid_func()
1725 cpuid_entry_override(entry, CPUID_8000_000A_EDX); in __do_cpuid_func()
1728 entry->ecx = entry->edx = 0; in __do_cpuid_func()
1731 entry->eax &= GENMASK(2, 0); in __do_cpuid_func()
1732 entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1736 entry->eax = entry->ebx = entry->ecx = 0; in __do_cpuid_func()
1737 entry->edx = 0; /* reserved */ in __do_cpuid_func()
1741 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1743 cpuid_entry_override(entry, CPUID_8000_001F_EAX); in __do_cpuid_func()
1745 entry->ebx &= ~GENMASK(31, 12); in __do_cpuid_func()
1750 entry->ebx &= ~GENMASK(11, 6); in __do_cpuid_func()
1754 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1757 entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1758 cpuid_entry_override(entry, CPUID_8000_0021_EAX); in __do_cpuid_func()
1764 entry->ecx = entry->edx = 0; in __do_cpuid_func()
1766 entry->eax = entry->ebx = 0; in __do_cpuid_func()
1770 cpuid_entry_override(entry, CPUID_8000_0022_EAX); in __do_cpuid_func()
1779 entry->ebx = ebx.full; in __do_cpuid_func()
1785 entry->eax = min(entry->eax, 0xC0000004); in __do_cpuid_func()
1788 cpuid_entry_override(entry, CPUID_C000_0001_EDX); in __do_cpuid_func()
1796 entry->eax = entry->ebx = entry->ecx = entry->edx = 0; in __do_cpuid_func()
1985 struct kvm_cpuid_entry2 *entry; in kvm_cpuid() local
1988 entry = kvm_find_cpuid_entry_index(vcpu, function, index); in kvm_cpuid()
1989 exact = !!entry; in kvm_cpuid()
1991 if (!entry && !exact_only) { in kvm_cpuid()
1992 entry = get_out_of_range_cpuid_entry(vcpu, &function, index); in kvm_cpuid()
1993 used_max_basic = !!entry; in kvm_cpuid()
1996 if (entry) { in kvm_cpuid()
1997 *eax = entry->eax; in kvm_cpuid()
1998 *ebx = entry->ebx; in kvm_cpuid()
1999 *ecx = entry->ecx; in kvm_cpuid()
2000 *edx = entry->edx; in kvm_cpuid()
2020 entry = kvm_find_cpuid_entry_index(vcpu, function, 1); in kvm_cpuid()
2021 if (entry) { in kvm_cpuid()
2023 *edx = entry->edx; in kvm_cpuid()