[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Dump information about viridian enlightenments
Sometimes, for diagnosis, it's useful to have a log of what viridian enlightenments are visiable to a VM. This patch adds new code into the XEN system module to dump relevant information at boot time. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xen/hypercall.c | 4 + src/xen/system.c | 231 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 235 insertions(+) diff --git a/src/xen/hypercall.c b/src/xen/hypercall.c index 5f14caa..7003687 100644 --- a/src/xen/hypercall.c +++ b/src/xen/hypercall.c @@ -107,6 +107,10 @@ HypercallInitialize( goto fail1; } + LogPrintf(LOG_LEVEL_INFO, + "XEN: BASE CPUID LEAF @ %08x\n", + XenBaseLeaf); + if ((ULONG_PTR)__Section & (PAGE_SIZE - 1)) Hypercall = (PVOID)(((ULONG_PTR)__Section + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)); else diff --git a/src/xen/system.c b/src/xen/system.c index 1a788ce..1934011 100644 --- a/src/xen/system.c +++ b/src/xen/system.c @@ -329,6 +329,222 @@ SystemApicIDToProcessorID( #pragma warning(pop) +static VOID +SystemViridianInformation( + IN ULONG Count + ) +{ + ULONG EAX; + ULONG EBX; + CHAR Signature[5]; + ULONG Bit; + + Info("====>\n"); + + if (Count < 1) + goto done; + + RtlZeroMemory(Signature, sizeof (Signature)); + + __CpuId(0x40000001, &EAX, NULL, NULL, NULL); + + *((PULONG)(Signature + 0)) = EAX; + + Info("Interface Identifier: %s\n", Signature); + + if (strcmp(Signature, "Hv#1") != 0) + goto done; + + if (Count < 3) + goto done; + + __CpuId(0x40000003, &EAX, NULL, NULL, NULL); + + Info("Hypervisor Features:\n"); + + for (Bit = 0; Bit < sizeof (ULONG) * 8; Bit++) { + if (EAX == 0) + break; + + if (EAX & 1) { + switch (Bit) { + case 0: + Info(" - VP Runtime\n"); + break; + + case 1: + Info(" - Partition Reference Counter\n"); + break; + + case 2: + Info(" - Basic SynIC MSRs\n"); + break; + + case 3: + Info(" - Synthetic Timer MSRs\n"); + break; + + case 4: + Info(" - APIC Access MSRs\n"); + break; + + case 5: + Info(" - Hypercall MSRs\n"); + break; + + case 6: + Info(" - Virtual Processor Index MSR\n"); + break; + + case 7: + Info(" - Virtual System Reset MSR\n"); + break; + + case 8: + Info(" - Statistics Pages MSRs\n"); + break; + + case 9: + Info(" - Partition Reference TSC MSR\n"); + break; + + case 10: + Info(" - Guest Idle State MSR\n"); + break; + + case 11: + Info(" - Timer Frequency MSR\n"); + break; + + case 12: + Info(" - Debug MSRs\n"); + break; + + default: + break; + } + } + + EAX >>= 1; + } + + if (Count < 4) + goto done; + + __CpuId(0x40000004, &EAX, &EBX, NULL, NULL); + + Info("Recommendations:\n"); + + for (Bit = 0; Bit < sizeof (ULONG) * 8; Bit++) { + if (EAX == 0) + break; + + if (EAX & 1) { + switch (Bit) { + case 0: + Info(" - Address space switch via hypercall\n"); + break; + + case 1: + Info(" - Local TLB flush via hypercall\n"); + break; + + case 2: + Info(" - Remote TLB flush via hypercall\n"); + break; + + case 3: + Info(" - EOI, ICR and TPR access via MSR\n"); + break; + + case 4: + Info(" - Reset via MSR\n"); + break; + + case 5: + Info(" - Use relaxed timing\n"); + break; + + case 6: + Info(" - Use DMA remapping\n"); + break; + + case 7: + Info(" - Use interrupt remapping\n"); + break; + + case 8: + Info(" - Use x2APIC MSRs\n"); + break; + + case 9: + Info(" - Deprecate AutoEOI\n"); + break; + + default: + break; + } + } + + EAX >>= 1; + } + + if (EBX != 0xFFFFFFFF) + Info(" - Retry spinlocks %u times\n", EBX); + + if (Count < 6) + goto done; + + __CpuId(0x40000006, &EAX, NULL, NULL, NULL); + + Info("Hardware Features:\n"); + + for (Bit = 0; Bit < sizeof (ULONG) * 8; Bit++) { + if (EAX == 0) + break; + + if (EAX & 1) { + switch (Bit) { + case 0: + Info(" - APIC overlay assist\n"); + break; + + case 1: + Info(" - MSR bitmaps\n"); + break; + + case 2: + Info(" - Architectural performance counters\n"); + break; + + case 3: + Info(" - Second Level Address Translation (SLAT)\n"); + break; + + case 4: + Info(" - DMA remapping\n"); + break; + + case 5: + Info(" - Interrupt remapping\n"); + break; + + case 6: + Info(" - Memory Patrol Scrubber\n"); + break; + + default: + break; + } + } + + EAX >>= 1; + } + +done: + Info("<====\n"); +} + static _Function_class_(KDEFERRED_ROUTINE) _IRQL_requires_max_(DISPATCH_LEVEL) @@ -348,6 +564,7 @@ SystemProcessorInformation( ULONG Index; PROCESSOR_NUMBER ProcNumber; PSYSTEM_PROCESSOR Processor; + ULONG EAX; ULONG EBX; ULONG ECX; ULONG EDX; @@ -361,6 +578,20 @@ SystemProcessorInformation( Processor = &Context->Processor[Index]; + if (Index == 0) { + CHAR Signature[13]; + + RtlZeroMemory(Signature, sizeof (Signature)); + + __CpuId(0x40000000, &EAX, &EBX, &ECX, &EDX); + *((PULONG)(Signature + 0)) = EBX; + *((PULONG)(Signature + 4)) = ECX; + *((PULONG)(Signature + 8)) = EDX; + + if (strcmp(Signature, "Microsoft Hv") == 0) + SystemViridianInformation(EAX - 0x40000000); + } + Info("====> (%u:%u)\n", ProcNumber.Group, ProcNumber.Number); __CpuId(0, NULL, &EBX, &ECX, &EDX); -- 2.1.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |