All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@linux.vnet.ibm.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	Avi Kivity <avi@redhat.com>
Subject: Re: [PATCH 05/10] kvm: x86: add mce support
Date: Wed, 20 Oct 2010 14:58:10 -0500	[thread overview]
Message-ID: <4CBF49D2.3030808@linux.vnet.ibm.com> (raw)
In-Reply-To: <fe5cc14e49b921edfbc7db35397db9fb02ad0c90.1287596626.git.mtosatti@redhat.com>

On 10/20/2010 12:43 PM, Marcelo Tosatti wrote:
> Port qemu-kvm's MCE support
>
> commit c68b2374c9048812f488e00ffb95db66c0bc07a7
> Author: Huang Ying<ying.huang@intel.com>
> Date:   Mon Jul 20 10:00:53 2009 +0800
>
>      Add MCE simulation support to qemu/kvm
>
>      KVM ioctls are used to initialize MCE simulation and inject MCE. The
>      real MCE simulation is implemented in Linux kernel. The Kernel part
>      has been merged.
>
> Signed-off-by: Marcelo Tosatti<mtosatti@redhat.com>
> Signed-off-by: Avi Kivity<avi@redhat.com>
> ---
>   target-i386/helper.c  |    6 +++
>   target-i386/kvm.c     |   84 +++++++++++++++++++++++++++++++++++++++++++++++++
>   target-i386/kvm_x86.h |   21 ++++++++++++
>   3 files changed, 111 insertions(+), 0 deletions(-)
>   create mode 100644 target-i386/kvm_x86.h
>
> diff --git a/target-i386/helper.c b/target-i386/helper.c
> index e134340..4b430dd 100644
> --- a/target-i386/helper.c
> +++ b/target-i386/helper.c
> @@ -27,6 +27,7 @@
>   #include "exec-all.h"
>   #include "qemu-common.h"
>   #include "kvm.h"
> +#include "kvm_x86.h"
>
>   //#define DEBUG_MMU
>
> @@ -1030,6 +1031,11 @@ void cpu_inject_x86_mce(CPUState *cenv, int bank, uint64_t status,
>       if (bank>= bank_num || !(status&  MCI_STATUS_VAL))
>           return;
>
> +    if (kvm_enabled()) {
> +        kvm_inject_x86_mce(cenv, bank, status, mcg_status, addr, misc);
> +        return;
> +    }
> +
>       /*
>        * if MSR_MCG_CTL is not all 1s, the uncorrected error
>        * reporting is disabled
> diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> index 74e7b4f..343fb02 100644
> --- a/target-i386/kvm.c
> +++ b/target-i386/kvm.c
> @@ -27,6 +27,7 @@
>   #include "hw/pc.h"
>   #include "hw/apic.h"
>   #include "ioport.h"
> +#include "kvm_x86.h"
>
>   #ifdef CONFIG_KVM_PARA
>   #include<linux/kvm_para.h>
> @@ -167,6 +168,67 @@ static int get_para_features(CPUState *env)
>   }
>   #endif
>
> +#ifdef KVM_CAP_MCE
> +static int kvm_get_mce_cap_supported(KVMState *s, uint64_t *mce_cap,
> +                                     int *max_banks)
> +{
> +    int r;
> +
> +    r = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_MCE);
> +    if (r>  0) {
> +        *max_banks = r;
> +        return kvm_ioctl(s, KVM_X86_GET_MCE_CAP_SUPPORTED, mce_cap);
> +    }
> +    return -ENOSYS;
> +}
> +
> +static int kvm_setup_mce(CPUState *env, uint64_t *mcg_cap)
> +{
> +    return kvm_vcpu_ioctl(env, KVM_X86_SETUP_MCE, mcg_cap);
> +}
> +
> +static int kvm_set_mce(CPUState *env, struct kvm_x86_mce *m)
> +{
> +    return kvm_vcpu_ioctl(env, KVM_X86_SET_MCE, m);
> +}
> +
> +struct kvm_x86_mce_data
> +{
> +    CPUState *env;
> +    struct kvm_x86_mce *mce;
> +};
>    

CODING_STYLE.

> +static void kvm_do_inject_x86_mce(void *_data)
> +{
> +    struct kvm_x86_mce_data *data = _data;
> +    int r;
> +
> +    r = kvm_set_mce(data->env, data->mce);
> +    if (r<  0)
> +        perror("kvm_set_mce FAILED");
>    

CODING_STYLE.

> +}
> +#endif
> +
> +void kvm_inject_x86_mce(CPUState *cenv, int bank, uint64_t status,
> +                        uint64_t mcg_status, uint64_t addr, uint64_t misc)
> +{
> +#ifdef KVM_CAP_MCE
> +    struct kvm_x86_mce mce = {
> +        .bank = bank,
> +        .status = status,
> +        .mcg_status = mcg_status,
> +        .addr = addr,
> +        .misc = misc,
> +    };
> +    struct kvm_x86_mce_data data = {
> +            .env = cenv,
> +            .mce =&mce,
> +    };
> +
> +    run_on_cpu(cenv, kvm_do_inject_x86_mce,&data);
> +#endif
> +}
> +
>   int kvm_arch_init_vcpu(CPUState *env)
>   {
>       struct {
> @@ -277,6 +339,28 @@ int kvm_arch_init_vcpu(CPUState *env)
>
>       cpuid_data.cpuid.nent = cpuid_i;
>
> +#ifdef KVM_CAP_MCE
> +    if (((env->cpuid_version>>  8)&0xF)>= 6
> +&&  (env->cpuid_features&(CPUID_MCE|CPUID_MCA)) == (CPUID_MCE|CPUID_MCA)
> +&&  kvm_check_extension(env->kvm_state, KVM_CAP_MCE)>  0) {
> +        uint64_t mcg_cap;
> +        int banks;
> +
> +        if (kvm_get_mce_cap_supported(env->kvm_state,&mcg_cap,&banks))
> +            perror("kvm_get_mce_cap_supported FAILED");
> +        else {
> +            if (banks>  MCE_BANKS_DEF)
> +                banks = MCE_BANKS_DEF;
> +            mcg_cap&= MCE_CAP_DEF;
> +            mcg_cap |= banks;
> +            if (kvm_setup_mce(env,&mcg_cap))
> +                perror("kvm_setup_mce FAILED");
> +            else
> +                env->mcg_cap = mcg_cap;
>    

CODING_STYLE.

> +        }
> +    }
> +#endif
> +
>       return kvm_vcpu_ioctl(env, KVM_SET_CPUID2,&cpuid_data);
>   }
>
> diff --git a/target-i386/kvm_x86.h b/target-i386/kvm_x86.h
> new file mode 100644
> index 0000000..c1ebd24
> --- /dev/null
> +++ b/target-i386/kvm_x86.h
> @@ -0,0 +1,21 @@
> +/*
> + * QEMU KVM support
> + *
> + * Copyright (C) 2009 Red Hat Inc.
> + * Copyright IBM, Corp. 2008
> + *
> + * Authors:
> + *  Anthony Liguori<aliguori@us.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> + * See the COPYING file in the top-level directory.
> + *
> + */
> +
> +#ifndef __KVM_X86_H__
> +#define __KVM_X86_H__
> +
> +void kvm_inject_x86_mce(CPUState *cenv, int bank, uint64_t status,
> +                        uint64_t mcg_status, uint64_t addr, uint64_t misc);
> +
> +#endif
>    


  reply	other threads:[~2010-10-20 19:58 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-20 17:43 [PATCH 00/10] [PULL] qemu-kvm.git uq/master queue Marcelo Tosatti
2010-10-20 17:43 ` [PATCH 01/10] Set cpuid definition to 0 before initializing it Marcelo Tosatti
2010-10-20 17:43 ` [PATCH 02/10] Add svm cpuid features Marcelo Tosatti
2010-10-20 17:43 ` [PATCH 03/10] signalfd compatibility Marcelo Tosatti
2010-10-20 17:43 ` [PATCH 04/10] iothread: use signalfd Marcelo Tosatti
2010-10-20 17:43 ` [PATCH 05/10] kvm: x86: add mce support Marcelo Tosatti
2010-10-20 19:58   ` Anthony Liguori [this message]
2010-10-20 17:43 ` [PATCH 06/10] Export qemu_ram_addr_from_host Marcelo Tosatti
2010-10-20 17:43 ` [PATCH 07/10] Add RAM -> physical addr mapping in MCE simulation Marcelo Tosatti
2010-10-20 19:56   ` Anthony Liguori
2010-10-20 17:43 ` [PATCH 08/10] MCE: Relay UCR MCE to guest Marcelo Tosatti
2010-10-20 19:51   ` Anthony Liguori
2010-10-20 20:59     ` Anthony Liguori
2010-10-20 21:33       ` [Qemu-devel] " Marcelo Tosatti
2010-10-20 21:28     ` Marcelo Tosatti
2010-10-20 21:56     ` Paolo Bonzini
2010-10-20 22:03       ` Anthony Liguori
2010-10-21  7:41         ` Paolo Bonzini
2010-10-20 17:43 ` [PATCH 09/10] Add savevm/loadvm support for MCE Marcelo Tosatti
2010-10-20 19:54   ` Anthony Liguori
2010-10-20 17:43 ` [PATCH 10/10] Fix memory leak in register save load due to xsave support Marcelo Tosatti
2010-10-20 19:01 ` [PATCH 00/10] [PULL] qemu-kvm.git uq/master queue Anthony Liguori
2010-10-20 19:05   ` Marcelo Tosatti
2010-10-20 19:15     ` Anthony Liguori
2010-10-20 19:52 ` Anthony Liguori
2010-10-20 21:59 ` Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CBF49D2.3030808@linux.vnet.ibm.com \
    --to=aliguori@linux.vnet.ibm.com \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.