[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [PATCH 4/6] MCE: Fix the vMCE address translation for HVM guest.



On Thursday 28 January 2010 10:44:28 Jiang, Yunhong wrote:
> >-----Original Message-----
> >From: Christoph Egger [mailto:Christoph.Egger@xxxxxxx]
> >Sent: Thursday, January 28, 2010 4:14 PM
> >To: Jiang, Yunhong
> >Cc: Keir Fraser; Frank.Vanderlinden@xxxxxxx; Jan Beulich;
> >xen-devel@xxxxxxxxxxxxxxxxxxx
> >Subject: Re: [PATCH 4/6] MCE: Fix the vMCE address translation for HVM
> > guest.
> >
> >On Thursday 28 January 2010 06:55:58 Jiang, Yunhong wrote:
> >> Fix the vMCE address translation for HVM guest.
> >>
> >> Fix address translation when we inject a virtual MCE to HVM guest.
> >
> >IMO, the whole address translation should be x86 generic with hooks
> >to handle AMD/Intel specific registers.
>
> Agree.
> I think Frank/Jan has done a lot of work to merge the MCE staff. And still
> something left to merge the MCE handler (Frank triedto merge the handler
> before, I remember) . With the broadcast checking patch, it will be easier
> to merge.
>
> I have a patch on-hand that try to do some clean-up and prepare for merge.
> The main change is to change the mcheck_mca_logout, to pass-in a ops
> pointer and data pointer, as code below.
>
> --jyh
>
> +
> +struct mca_ops {
> +    mctelem_class_t queue;
> +    /* return 0 if no extended information created */
> +    int (*global_extended)(struct mcinfo_extended *gext,
> +                           struct mcinfo_global *mcg, void *data);
> +    int (*parse_global)(struct mcinfo_global *mcg,
> +                        struct mcinfo_extended *gext, void *data);
> +    int (*bank_extended)(struct mcinfo_extended *bext, struct mcinfo_back
> *mcb, +                         void *data);
> +    /* Return 1 if owned error happens */
> +    int (*parse_bank)(struct mcinfo_bank *mcb,
> +                       struct mcinfo_global *mcg,
> +                       struct mcinfo_extended *gext,
> +                       struct mcinfo_extended *bext,
> +                       void *data);
> +    int (*clear_bank)(struct mcinfo_bank *mcb,
> +                       struct mcinfo_global *mcg,
> +                       struct mcinfo_extended *gext,
> +                       struct mcinfo_extended *bext,
> +                       void *data);
>  };

IMO, a single struct mc_info argument for each hook does its job.
This is more flexible and extensible.

Christoph


> ....
>
> -mctelem_cookie_t mcheck_mca_logout(enum mca_source who, cpu_banks_t
> bankmask, -    struct mca_summary *sp, cpu_banks_t* clear_bank)
> -{
> -   struct vcpu *v = current;
> -   struct domain *d;
> -   uint64_t gstatus, status, addr, misc;
> +mctelem_cookie_t mcheck_mca_logout(cpu_banks_t bankmask, struct mca_ops
> *handler, void *data) +{
>
> >Christoph
> >
> >> Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>
> >>
> >> diff -r ac2951705a86 xen/arch/x86/cpu/mcheck/mce_intel.c
> >> --- a/xen/arch/x86/cpu/mcheck/mce_intel.c  Tue Jan 26 20:04:51 2010 +0800
> >> +++ b/xen/arch/x86/cpu/mcheck/mce_intel.c  Tue Jan 26 22:49:11 2010 +0800
> >> @@ -371,8 +371,8 @@ static void intel_UCR_handler(struct mci
> >>
> >>                            gfn =
> >>                                mfn_to_gmfn(d, ((bank->mc_addr) >>
> >> PAGE_SHIFT)); -                          bank->mc_addr =
> >> -                              gfn << PAGE_SHIFT | (bank->mc_addr &
> >> PAGE_MASK); +                          bank->mc_addr =  gfn <<
> >
> >PAGE_SHIFT |
> >
> >> +                                        (bank->mc_addr & (PAGE_SIZE
> >
> >-1 ));
> >
> >>                            if (fill_vmsr_data(bank, global->mc_gstatus)
> >> == -1) {
> >>                                mce_printk(MCE_QUIET, "Fill vMCE# data
> >
> >for
> >
> >> DOM%d "
> >
> >--
> >---to satisfy European Law for business letters:
> >Advanced Micro Devices GmbH
> >Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
> >Geschaeftsfuehrer: Andrew Bowd, Thomas M. McCoy, Giuliano Meroni
> >Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
> >Registergericht Muenchen, HRB Nr. 43632



-- 
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Andrew Bowd, Thomas M. McCoy, Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.