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

Re: [Xen-devel] [PATCH] Xen/MCE: stick all 1's to MCi_CTL of vMCE



Keir, Ian

As Jan take leave recently, and Xen 4.2 would release, so would you
please add this patch to Xen upstream and merged it into Xen4.2?

This patch just change a little to current vMCE (remove mci_ctl, and
stick all 1's to MCi_CTL). With it, Xen 4.2 would have no semantics
difference with future new vMCE. This patch is an uncontroversial
patch agreed by Jan.

Thanks,
Jinsong


Jan Beulich wrote:
>>>> On 05.07.12 at 20:27, "Liu, Jinsong" <jinsong.liu@xxxxxxxxx> wrote:
>> This patch just used to stick all 1's to MCi_CTL, it should not
>> involve much argue, so I sent it separately.
> 
> Yes, this one is definitely fine.
> 
> Jan
> 
>> ====================
>> Xen/MCE: stick all 1's to MCi_CTL of vMCE
>> 
>> This patch is a middle-work patch, prepare for future new vMCE model.
>> It remove mci_ctl array, and keep MCi_CTL all 1's.
>> 
>> Signed-off-by: Liu, Jinsong <jinsong.liu@xxxxxxxxx>
>> 
>> diff -r 4f92bdf3370c xen/arch/x86/cpu/mcheck/vmce.c
>> --- a/xen/arch/x86/cpu/mcheck/vmce.c Wed Jun 27 09:36:43 2012 +0200
>> +++ b/xen/arch/x86/cpu/mcheck/vmce.c Fri Jul 06 10:05:46 2012 +0800
>> @@ -25,7 +25,6 @@ 
>> 
>>  /* Real value in physical CTL MSR */
>>  static uint64_t __read_mostly h_mcg_ctl;
>> -static uint64_t *__read_mostly h_mci_ctrl;
>> 
>>  int vmce_init_msr(struct domain *d)
>>  {
>> @@ -33,15 +32,6 @@
>>      if ( !dom_vmce(d) )
>>          return -ENOMEM;
>> 
>> -    dom_vmce(d)->mci_ctl = xmalloc_array(uint64_t, nr_mce_banks);
>> -    if ( !dom_vmce(d)->mci_ctl )
>> -    {
>> -        xfree(dom_vmce(d));
>> -        return -ENOMEM;
>> -    }
>> -    memset(dom_vmce(d)->mci_ctl, ~0,
>> -           nr_mce_banks * sizeof(*dom_vmce(d)->mci_ctl)); -
>>      dom_vmce(d)->mcg_status = 0x0;
>>      dom_vmce(d)->mcg_ctl = ~(uint64_t)0x0;
>>      dom_vmce(d)->nr_injection = 0;
>> @@ -56,7 +46,6 @@
>>  {
>>      if ( !dom_vmce(d) )
>>          return;
>> -    xfree(dom_vmce(d)->mci_ctl);
>>      xfree(dom_vmce(d));
>>      dom_vmce(d) = NULL;
>>  }
>> @@ -93,9 +82,8 @@
>>      switch ( msr & (MSR_IA32_MC0_CTL | 3) )
>>      {
>>      case MSR_IA32_MC0_CTL:
>> -        if ( bank < nr_mce_banks )
>> -            *val = vmce->mci_ctl[bank] &
>> -                   (h_mci_ctrl ? h_mci_ctrl[bank] : ~0UL);
>> +        /* stick all 1's to MCi_CTL */
>> +        *val = ~0UL;
>>          mce_printk(MCE_VERBOSE, "MCE: rdmsr MC%u_CTL 0x%"PRIx64"\n",
>>                     bank, *val);
>>          break;
>> @@ -220,8 +208,10 @@
>>      switch ( msr & (MSR_IA32_MC0_CTL | 3) )
>>      {
>>      case MSR_IA32_MC0_CTL:
>> -        if ( bank < nr_mce_banks )
>> -            vmce->mci_ctl[bank] = val;
>> +        /*
>> +         * if guest crazy clear any bit of MCi_CTL,
>> +         * treat it as not implement and ignore write change it. + 
>>          */ break;
>>      case MSR_IA32_MC0_STATUS:
>>          if ( entry && (entry->bank == bank) )
>> @@ -523,22 +513,6 @@
>>  int vmce_init(struct cpuinfo_x86 *c)
>>  {
>>      u64 value;
>> -    unsigned int i;
>> -
>> -    if ( !h_mci_ctrl )
>> -    {
>> -        h_mci_ctrl = xmalloc_array(uint64_t, nr_mce_banks);
>> -        if (!h_mci_ctrl)
>> -        {
>> -            dprintk(XENLOG_INFO, "Failed to alloc h_mci_ctrl\n");
>> -            return -ENOMEM;
>> -        }
>> -        /* Don't care banks before firstbank */
>> -        memset(h_mci_ctrl, ~0,
>> -               min(firstbank, nr_mce_banks) * sizeof(*h_mci_ctrl));
>> -        for (i = firstbank; i < nr_mce_banks; i++)
>> -            rdmsrl(MSR_IA32_MCx_CTL(i), h_mci_ctrl[i]);
>> -    }
>> 
>>      rdmsrl(MSR_IA32_MCG_CAP, value);
>>      /* For Guest vMCE usage */
>> @@ -551,18 +525,13 @@
>> 
>>  static int mca_ctl_conflict(struct mcinfo_bank *bank, struct domain
>> *d)  { 
>> -    int bank_nr;
>> -
>> -    if ( !bank || !d || !h_mci_ctrl )
>> +    if ( !bank || !d )
>>          return 1;
>> 
>>      /* Will MCE happen in host if If host mcg_ctl is 0? */
>>      if ( ~d->arch.vmca_msrs->mcg_ctl & h_mcg_ctl )          return
>> 1; 
>> 
>> -    bank_nr = bank->mc_bank;
>> -    if (~d->arch.vmca_msrs->mci_ctl[bank_nr] & h_mci_ctrl[bank_nr] )
>> -        return 1;
>>      return 0;
>>  }
>> 
>> diff -r 4f92bdf3370c xen/include/asm-x86/mce.h
>> --- a/xen/include/asm-x86/mce.h      Wed Jun 27 09:36:43 2012 +0200
>> +++ b/xen/include/asm-x86/mce.h      Fri Jul 06 10:05:46 2012 +0800 @@
>>      -18,7 +18,6 @@ /* Guest should not change below values after
>>      DOM boot up */      uint64_t mcg_ctl; uint64_t mcg_status;
>> -    uint64_t *mci_ctl;
>>      uint16_t nr_injection;
>>      struct list_head impact_header;
>>      spinlock_t lock;

Attachment: remove_mci_ctl_1.patch
Description: remove_mci_ctl_1.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

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