|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch 3/6] Xen/MCE: vMCE emulation
Jan Beulich wrote:
>>>> On 23.07.12 at 11:40, "Liu, Jinsong" <jinsong.liu@xxxxxxxxx> wrote:
>
> From here on, I think this is to go in only after 4.2. Hence
> eventual resubmission wouldn't be necessary until after 4.2
> went out.
>
OK, agree all comments, will update accordingly and resubmit after that.
Thanks,
Jinsong
>> -int intel_mce_rdmsr(const struct vcpu *, uint32_t msr, uint64_t
>> *val);
>> -int intel_mce_wrmsr(struct vcpu *, uint32_t msr, uint64_t val);
>> +void intel_vmce_mci_ctl2_rdmsr(const struct vcpu *, uint32_t msr,
>> uint64_t *val); +void intel_vmce_mci_ctl2_wrmsr(struct vcpu *,
>> uint32_t msr, uint64_t val);
>
> I don't see a need for renaming those - they could well serve to
> deal with eventual other Intel specific additions to the MSR space
> in the future.
>
>> -int intel_mce_rdmsr(const struct vcpu *v, uint32_t msr, uint64_t
>> *val) +void intel_vmce_mci_ctl2_rdmsr(const struct vcpu *v, uint32_t
>> msr, uint64_t *val) {
>> - int ret = 0;
>> + int bank = msr - MSR_IA32_MC0_CTL2;
>
> 'unsigned int' here allows ...
>
>>
>> - if ( msr >= MSR_IA32_MC0_CTL2 &&
>> - msr < MSR_IA32_MCx_CTL2(v->arch.mcg_cap & MCG_CAP_COUNT) )
>> + if ( (bank >= 0) && (bank < GUEST_BANK_NUM) )
>
> ... the first check here to be dropped (and is more natural as
> well as in line with other code in this file).
>
>> void vmce_init_vcpu(struct vcpu *v)
>> {
>> - v->arch.mcg_cap = GUEST_MCG_CAP;
>> + int i;
>> +
>> + /* global MCA MSRs init */
>> + v->arch.vmce.mcg_cap = GUEST_MCG_CAP;
>> + v->arch.vmce.mcg_status = 0;
>> +
>> + /* per-bank MCA MSRs init */
>> + for ( i = 0; i < GUEST_BANK_NUM; i++ )
>> + {
>> + v->arch.vmce.bank[i].mci_status = 0;
>> + v->arch.vmce.bank[i].mci_addr = 0;
>> + v->arch.vmce.bank[i].mci_misc = 0;
>> + v->arch.vmce.bank[i].mci_ctl2 = 0;
>> + }
>
> memset()?
>
>> @@ -3,28 +3,46 @@
>> #ifndef _XEN_X86_MCE_H
>> #define _XEN_X86_MCE_H
>>
>> -/* This entry is for recording bank nodes for the impacted domain,
>> - * put into impact_header list. */
>> -struct bank_entry {
>> - struct list_head list;
>> - uint16_t bank;
>> +/*
>> + * Emulalte 2 banks for guest
>> + * Bank0: reserved for 'bank0 quirk' occur at some very old
>> processors: + * 1). Intel cpu whose family-model value < 06-1A; +
>> * 2). AMD K7 + * Bank1: used to transfer error info to guest
>> + */
>> +#define BANK0 0
>> +#define BANK1 1
>
> These two look superfluous.
>
>> +#define GUEST_BANK_NUM 2
>
> This one (pluse the BANK* ones if you strongly feel they should be
> kept) should get MC... added somewhere in their names, as this is
> a header that's not private to the MCE code.
>
>> +
>> +/*
>> + * MCG_SER_P: software error recovery supported
>> + * MCG_TES_P: to avoid MCi_status bit56:53 model specific
>> + * MCG_CMCI_P: expose CMCI capability but never really inject it to
>> guest, + * for sake of performance since guest not
>> polling periodically + */ +#define GUEST_MCG_CAP (MCG_SER_P |
>> MCG_TES_P | MCG_CMCI_P | GUEST_BANK_NUM)
>
> Didn't we settle on not enabling CMCI_P and TES_P for AMD CPUs?
>
>> +
>> +/* Filter MSCOD model specific error code to guest */
>> +#define MCi_STATUS_MSCOD_MASK (~(0x0ffffUL << 16))
>
> Is that really correct, especially for both 32- and 64-bit?
>
> Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |