View | Details | Raw Unified | Return to bug 276421 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/x86/x86/identcpu.c (-3 / +15 lines)
Lines 1385-1390 identify_hypervisor_cpuid_base(void) Link Here
1385
			regs[0] = leaf + 1;
1385
			regs[0] = leaf + 1;
1386
1386
1387
		if (regs[0] >= leaf) {
1387
		if (regs[0] >= leaf) {
1388
			enum VM_GUEST prev_vm_guest = vm_guest;
1389
1388
			for (i = 0; i < nitems(vm_cpuids); i++)
1390
			for (i = 0; i < nitems(vm_cpuids); i++)
1389
				if (strncmp((const char *)&regs[1],
1391
				if (strncmp((const char *)&regs[1],
1390
				    vm_cpuids[i].vm_cpuid, 12) == 0) {
1392
				    vm_cpuids[i].vm_cpuid, 12) == 0) {
Lines 1397-1403 identify_hypervisor_cpuid_base(void) Link Here
1397
			 * specific hypervisor, record the base, high value,
1399
			 * specific hypervisor, record the base, high value,
1398
			 * and vendor identifier.
1400
			 * and vendor identifier.
1399
			 */
1401
			 */
1400
			if (vm_guest != VM_GUEST_VM || leaf == 0x40000000) {
1402
			if (vm_guest != prev_vm_guest || leaf == 0x40000000) {
1401
				hv_base = leaf;
1403
				hv_base = leaf;
1402
				hv_high = regs[0];
1404
				hv_high = regs[0];
1403
				((u_int *)&hv_vendor)[0] = regs[1];
1405
				((u_int *)&hv_vendor)[0] = regs[1];
Lines 1409-1415 identify_hypervisor_cpuid_base(void) Link Here
1409
				 * If we found a specific hypervisor, then
1411
				 * If we found a specific hypervisor, then
1410
				 * we are finished.
1412
				 * we are finished.
1411
				 */
1413
				 */
1412
				if (vm_guest != VM_GUEST_VM)
1414
				if (vm_guest != VM_GUEST_VM &&
1415
				    /*
1416
				     * Xen and other hypervisors can expose the
1417
				     * HyperV signature in addition to the
1418
				     * native one in order to support Viridian
1419
				     * extensions for Windows guests.
1420
				     *
1421
				     * Do the full cpuid scan if HyperV is
1422
				     * detected, as the native hypervisor is
1423
				     * preferred.
1424
				     */
1425
				    vm_guest != VM_GUEST_HV)
1413
					return;
1426
					return;
1414
			}
1427
			}
1415
		}
1428
		}
1416
- 

Return to bug 276421