On Fri, Jun 1, 2012 at 8:04 PM, Marcelo Tosatti <mtosatti at redhat.com> wrote: > On Fri, May 25, 2012 at 12:22:59PM -0400, Christoffer Dall wrote: >> Introduces a couple of print functions, which are essentially wrappers >> around standard printk functions, with a KVM: prefix. >> >> Functions introduced or modified are: >> ?- kvm_err(fmt, ...) >> ?- kvm_info(fmt, ...) >> ?- kvm_debug(fmt, ...) >> ?- kvm_pr_unimpl(fmt, ...) >> ?- pr_unimpl(vcpu, fmt, ...) -> vcpu_unimpl(vcpu, fmt, ...) >> >> Applies to kvm-next >> >> Changelog[2]: >> ?- Added PID to print functions >> ?- Renamed vcpu_pr_unimpl to vcpu_unimpl >> >> ?Signed-off-by: Christoffer Dall <c.dall at virtualopensystems.com> >> --- >> ?arch/x86/kvm/svm.c ? ? ? | ? ?6 +++-- >> ?arch/x86/kvm/vmx.c ? ? ? | ? ?2 +- >> ?arch/x86/kvm/x86.c ? ? ? | ? 54 +++++++++++++++++++++++----------------------- >> ?include/linux/kvm_host.h | ? 17 +++++++++----- >> ?4 files changed, 42 insertions(+), 37 deletions(-) >> >> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c >> index f75af40..7a41878 100644 >> --- a/arch/x86/kvm/svm.c >> +++ b/arch/x86/kvm/svm.c >> @@ -3185,8 +3185,8 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data) >> ? ? ? ? ? ? ? break; >> ? ? ? case MSR_IA32_DEBUGCTLMSR: >> ? ? ? ? ? ? ? if (!boot_cpu_has(X86_FEATURE_LBRV)) { >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTL 0x%llx, nop\n", >> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? __func__, data); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTL 0x%llx, nop\n", >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? __func__, data); >> ? ? ? ? ? ? ? ? ? ? ? break; >> ? ? ? ? ? ? ? } >> ? ? ? ? ? ? ? if (data & DEBUGCTL_RESERVED_BITS) >> @@ -3205,7 +3205,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data) >> ? ? ? case MSR_VM_CR: >> ? ? ? ? ? ? ? return svm_set_vm_cr(vcpu, data); >> ? ? ? case MSR_VM_IGNNE: >> - ? ? ? ? ? ? pr_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data); >> ? ? ? ? ? ? ? break; >> ? ? ? default: >> ? ? ? ? ? ? ? return kvm_set_msr_common(vcpu, ecx, data); >> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c >> index 32eb588..c6b2d25 100644 >> --- a/arch/x86/kvm/vmx.c >> +++ b/arch/x86/kvm/vmx.c >> @@ -4489,7 +4489,7 @@ static int handle_cr(struct kvm_vcpu *vcpu) >> ? ? ? ? ? ? ? break; >> ? ? ? } >> ? ? ? vcpu->run->exit_reason = 0; >> - ? ? pr_unimpl(vcpu, "unhandled control register: op %d cr %d\n", >> + ? ? vcpu_unimpl(vcpu, "unhandled control register: op %d cr %d\n", >> ? ? ? ? ? ? ?(int)(exit_qualification >> 4) & 3, cr); >> ? ? ? return 0; >> ?} >> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c >> index b78f89d..0aac0bc 100644 >> --- a/arch/x86/kvm/x86.c >> +++ b/arch/x86/kvm/x86.c >> @@ -1437,8 +1437,8 @@ static int set_msr_hyperv_pw(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? ? ? ? ? break; >> ? ? ? } >> ? ? ? default: >> - ? ? ? ? ? ? pr_unimpl(vcpu, "HYPER-V unimplemented wrmsr: 0x%x " >> - ? ? ? ? ? ? ? ? ? ? ? "data 0x%llx\n", msr, data); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "HYPER-V unimplemented wrmsr: 0x%x " >> + ? ? ? ? ? ? ? ? ? ? ? ? "data 0x%llx\n", msr, data); >> ? ? ? ? ? ? ? return 1; >> ? ? ? } >> ? ? ? return 0; >> @@ -1470,8 +1470,8 @@ static int set_msr_hyperv(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? case HV_X64_MSR_TPR: >> ? ? ? ? ? ? ? return kvm_hv_vapic_msr_write(vcpu, APIC_TASKPRI, data); >> ? ? ? default: >> - ? ? ? ? ? ? pr_unimpl(vcpu, "HYPER-V unimplemented wrmsr: 0x%x " >> - ? ? ? ? ? ? ? ? ? ? ? "data 0x%llx\n", msr, data); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "HYPER-V unimplemented wrmsr: 0x%x " >> + ? ? ? ? ? ? ? ? ? ? ? ? "data 0x%llx\n", msr, data); >> ? ? ? ? ? ? ? return 1; >> ? ? ? } >> >> @@ -1551,15 +1551,15 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? ? ? ? ? data &= ~(u64)0x100; ? ?/* ignore ignne emulation enable */ >> ? ? ? ? ? ? ? data &= ~(u64)0x8; ? ? ?/* ignore TLB cache disable */ >> ? ? ? ? ? ? ? if (data != 0) { >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "unimplemented HWCR wrmsr: 0x%llx\n", >> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? data); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "unimplemented HWCR wrmsr: 0x%llx\n", >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? data); >> ? ? ? ? ? ? ? ? ? ? ? return 1; >> ? ? ? ? ? ? ? } >> ? ? ? ? ? ? ? break; >> ? ? ? case MSR_FAM10H_MMIO_CONF_BASE: >> ? ? ? ? ? ? ? if (data != 0) { >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "unimplemented MMIO_CONF_BASE wrmsr: " >> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? "0x%llx\n", data); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "unimplemented MMIO_CONF_BASE wrmsr: " >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "0x%llx\n", data); >> ? ? ? ? ? ? ? ? ? ? ? return 1; >> ? ? ? ? ? ? ? } >> ? ? ? ? ? ? ? break; >> @@ -1574,8 +1574,8 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? ? ? ? ? ? ? ? ? ? ?thus reserved and should throw a #GP */ >> ? ? ? ? ? ? ? ? ? ? ? return 1; >> ? ? ? ? ? ? ? } >> - ? ? ? ? ? ? pr_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTLMSR 0x%llx, nop\n", >> - ? ? ? ? ? ? ? ? ? ? __func__, data); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTLMSR 0x%llx, nop\n", >> + ? ? ? ? ? ? ? ? ? ? ? ? __func__, data); >> ? ? ? ? ? ? ? break; >> ? ? ? case MSR_IA32_UCODE_REV: >> ? ? ? case MSR_IA32_UCODE_WRITE: >> @@ -1671,8 +1671,8 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? case MSR_K7_EVNTSEL2: >> ? ? ? case MSR_K7_EVNTSEL3: >> ? ? ? ? ? ? ? if (data != 0) >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "unimplemented perfctr wrmsr: " >> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? "0x%x data 0x%llx\n", msr, data); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "unimplemented perfctr wrmsr: " >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "0x%x data 0x%llx\n", msr, data); >> ? ? ? ? ? ? ? break; >> ? ? ? /* at least RHEL 4 unconditionally writes to the perfctr registers, >> ? ? ? ?* so we ignore writes to make it happy. >> @@ -1681,8 +1681,8 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? case MSR_K7_PERFCTR1: >> ? ? ? case MSR_K7_PERFCTR2: >> ? ? ? case MSR_K7_PERFCTR3: >> - ? ? ? ? ? ? pr_unimpl(vcpu, "unimplemented perfctr wrmsr: " >> - ? ? ? ? ? ? ? ? ? ? "0x%x data 0x%llx\n", msr, data); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "unimplemented perfctr wrmsr: " >> + ? ? ? ? ? ? ? ? ? ? ? ? "0x%x data 0x%llx\n", msr, data); >> ? ? ? ? ? ? ? break; >> ? ? ? case MSR_P6_PERFCTR0: >> ? ? ? case MSR_P6_PERFCTR1: >> @@ -1693,8 +1693,8 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? ? ? ? ? ? ? ? ? return kvm_pmu_set_msr(vcpu, msr, data); >> >> ? ? ? ? ? ? ? if (pr || data != 0) >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "disabled perfctr wrmsr: " >> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? "0x%x data 0x%llx\n", msr, data); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "disabled perfctr wrmsr: " >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "0x%x data 0x%llx\n", msr, data); >> ? ? ? ? ? ? ? break; >> ? ? ? case MSR_K7_CLK_CTL: >> ? ? ? ? ? ? ? /* >> @@ -1720,7 +1720,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? ? ? ? ? /* Drop writes to this legacy MSR -- see rdmsr >> ? ? ? ? ? ? ? ?* counterpart for further detail. >> ? ? ? ? ? ? ? ?*/ >> - ? ? ? ? ? ? pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", msr, data); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", msr, data); >> ? ? ? ? ? ? ? break; >> ? ? ? case MSR_AMD64_OSVW_ID_LENGTH: >> ? ? ? ? ? ? ? if (!guest_cpuid_has_osvw(vcpu)) >> @@ -1738,12 +1738,12 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) >> ? ? ? ? ? ? ? if (kvm_pmu_msr(vcpu, msr)) >> ? ? ? ? ? ? ? ? ? ? ? return kvm_pmu_set_msr(vcpu, msr, data); >> ? ? ? ? ? ? ? if (!ignore_msrs) { >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "unhandled wrmsr: 0x%x data %llx\n", >> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? msr, data); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "unhandled wrmsr: 0x%x data %llx\n", >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? msr, data); >> ? ? ? ? ? ? ? ? ? ? ? return 1; >> ? ? ? ? ? ? ? } else { >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", >> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? msr, data); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? msr, data); >> ? ? ? ? ? ? ? ? ? ? ? break; >> ? ? ? ? ? ? ? } >> ? ? ? } >> @@ -1846,7 +1846,7 @@ static int get_msr_hyperv_pw(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) >> ? ? ? ? ? ? ? data = kvm->arch.hv_hypercall; >> ? ? ? ? ? ? ? break; >> ? ? ? default: >> - ? ? ? ? ? ? pr_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); >> ? ? ? ? ? ? ? return 1; >> ? ? ? } >> >> @@ -1877,7 +1877,7 @@ static int get_msr_hyperv(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) >> ? ? ? ? ? ? ? data = vcpu->arch.hv_vapic; >> ? ? ? ? ? ? ? break; >> ? ? ? default: >> - ? ? ? ? ? ? pr_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); >> + ? ? ? ? ? ? vcpu_unimpl(vcpu, "Hyper-V unhandled rdmsr: 0x%x\n", msr); >> ? ? ? ? ? ? ? return 1; >> ? ? ? } >> ? ? ? *pdata = data; >> @@ -2030,10 +2030,10 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) >> ? ? ? ? ? ? ? if (kvm_pmu_msr(vcpu, msr)) >> ? ? ? ? ? ? ? ? ? ? ? return kvm_pmu_get_msr(vcpu, msr, pdata); >> ? ? ? ? ? ? ? if (!ignore_msrs) { >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "unhandled rdmsr: 0x%x\n", msr); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "unhandled rdmsr: 0x%x\n", msr); >> ? ? ? ? ? ? ? ? ? ? ? return 1; >> ? ? ? ? ? ? ? } else { >> - ? ? ? ? ? ? ? ? ? ? pr_unimpl(vcpu, "ignored rdmsr: 0x%x\n", msr); >> + ? ? ? ? ? ? ? ? ? ? vcpu_unimpl(vcpu, "ignored rdmsr: 0x%x\n", msr); >> ? ? ? ? ? ? ? ? ? ? ? data = 0; >> ? ? ? ? ? ? ? } >> ? ? ? ? ? ? ? break; >> @@ -4116,7 +4116,7 @@ static unsigned long emulator_get_cr(struct x86_emulate_ctxt *ctxt, int cr) >> ? ? ? ? ? ? ? value = kvm_get_cr8(vcpu); >> ? ? ? ? ? ? ? break; >> ? ? ? default: >> - ? ? ? ? ? ? vcpu_printf(vcpu, "%s: unexpected cr %u\n", __func__, cr); >> + ? ? ? ? ? ? kvm_err("%s: unexpected cr %u\n", __func__, cr); >> ? ? ? ? ? ? ? return 0; >> ? ? ? } >> >> @@ -4145,7 +4145,7 @@ static int emulator_set_cr(struct x86_emulate_ctxt *ctxt, int cr, ulong val) >> ? ? ? ? ? ? ? res = kvm_set_cr8(vcpu, val); >> ? ? ? ? ? ? ? break; >> ? ? ? default: >> - ? ? ? ? ? ? vcpu_printf(vcpu, "%s: unexpected cr %u\n", __func__, cr); >> + ? ? ? ? ? ? kvm_err("%s: unexpected cr %u\n", __func__, cr); >> ? ? ? ? ? ? ? res = -1; >> ? ? ? } >> >> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h >> index c446435..7825f1d 100644 >> --- a/include/linux/kvm_host.h >> +++ b/include/linux/kvm_host.h >> @@ -314,13 +314,18 @@ struct kvm { >> ? ? ? long tlbs_dirty; >> ?}; >> >> -/* The guest did something we don't support. */ >> -#define pr_unimpl(vcpu, fmt, ...) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\ >> - ? ? pr_err_ratelimited("kvm: %i: cpu%i " fmt, ? ? ? ? ? ? ? ? ? ? ? \ >> - ? ? ? ? ? ? ? ? ? ? ? ?current->tgid, (vcpu)->vcpu_id , ## __VA_ARGS__) >> +#define kvm_err(fmt, ...) \ >> + ? ? pr_err("kvm [%i]: " fmt, current->pid, ## __VA_ARGS__) > > Use task_pid_nr() wrapper. > >> +#define kvm_info(fmt, ...) \ >> + ? ? pr_info("kvm [%i]: " fmt, current->pid, ## __VA_ARGS__) >> +#define kvm_debug(fmt, ...) \ >> + ? ? pr_debug("kvm [%i]: " fmt, current->pid, ## __VA_ARGS__) >> +#define kvm_pr_unimpl(fmt, ...) \ >> + ? ? pr_err_ratelimited("kvm [%i]: " fmt, current->tgid, ## __VA_ARGS__) >> >> -#define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) >> -#define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) >> +/* The guest did something we don't support. */ >> +#define vcpu_unimpl(vcpu, fmt, ...) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\ >> + ? ? kvm_pr_unimpl("cpu%i " fmt, (vcpu)->vcpu_id, ## __VA_ARGS__) > > While at it, change "cpu" to "vcpu" (avoids confusion with pcpus). > thanks, new patch submitted.