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

Re: [Xen-devel] [PATCH 1/3] xen/mce: Add mcelog support for Xen platform (v2)



Borislav Petkov wrote:
> On Tue, May 22, 2012 at 05:45:04AM +0000, Liu, Jinsong wrote:
>> From 4df7496eea9e92a3e267ffb0a4b8f5e6e0c29c36 Mon Sep 17 00:00:00
>> 2001 
>> From: Liu, Jinsong <jinsong.liu@xxxxxxxxx>
>> Date: Mon, 21 May 2012 05:07:47 +0800
>> Subject: [PATCH 1/3] xen/mce: Add mcelog support for Xen platform
>> 
>> When MCA error occurs, it would be handled by Xen hypervisor first,
>> and then the error information would be sent to initial domain for
>> logging. 
>> 
>> This patch gets error information from Xen hypervisor and convert
>> Xen format error into Linux format mcelog. This logic is basically
>> self-contained, not touching other kernel components.
>> 
>> By using tools like mcelog tool users could read specific error
>> information, 
>> like what they did under native Linux.
>> 
>> To test follow directions outlined in
>> Documentation/acpi/apei/einj.txt 
>> 
>> Signed-off-by: Liu, Jinsong <jinsong.liu@xxxxxxxxx>
>> Signed-off-by: Ke, Liping <liping.ke@xxxxxxxxx>
>> Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>
>> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
> 
> If you're sending the patch, you need to be the last on the SOB-chain
> and the SOB-chain has to show the proper path the patch took. See
> <Documentation/SubmittingPatches>.

Thanks! I will update it.
But I'm not quite clear 'the SOB-chain has to show the proper path the patch 
took', would you elaborate more?

> 
>> ---
>>  arch/x86/include/asm/xen/hypercall.h |    8 +
>>  arch/x86/kernel/cpu/mcheck/mce.c     |    4 +-
>>  arch/x86/xen/enlighten.c             |    9 +-
>>  drivers/xen/Kconfig                  |    8 +
>>  drivers/xen/Makefile                 |    1 +
>>  drivers/xen/mcelog.c                 |  395
>>  ++++++++++++++++++++++++++++++++++ include/linux/miscdevice.h      
>>  |    1 + include/xen/interface/xen-mca.h      |  389
>>  +++++++++++++++++++++++++++++++++ 8 files changed, 809
>>  insertions(+), 6 deletions(-) create mode 100644
>>  drivers/xen/mcelog.c create mode 100644
>> include/xen/interface/xen-mca.h 
>> 
>> diff --git a/arch/x86/include/asm/xen/hypercall.h
>> b/arch/x86/include/asm/xen/hypercall.h index 5728852..59c226d 100644
>> --- a/arch/x86/include/asm/xen/hypercall.h +++
>> b/arch/x86/include/asm/xen/hypercall.h @@ -48,6 +48,7 @@
>>  #include <xen/interface/sched.h>
>>  #include <xen/interface/physdev.h>
>>  #include <xen/interface/platform.h>
>> +#include <xen/interface/xen-mca.h>
>> 
>>  /*
>>   * The hypercall asms have to meet several constraints:
>> @@ -302,6 +303,13 @@ HYPERVISOR_set_timer_op(u64 timeout)  }
>> 
>>  static inline int
>> +HYPERVISOR_mca(struct xen_mc *mc_op)
>> +{
>> +    mc_op->interface_version = XEN_MCA_INTERFACE_VERSION;
>> +    return _hypercall1(int, mca, mc_op);
>> +}
>> +
>> +static inline int
>>  HYPERVISOR_dom0_op(struct xen_platform_op *platform_op)  {
>>      platform_op->interface_version = XENPF_INTERFACE_VERSION;
>> diff --git a/arch/x86/kernel/cpu/mcheck/mce.c
>> b/arch/x86/kernel/cpu/mcheck/mce.c 
>> index d086a09..24b2e86 100644
>> --- a/arch/x86/kernel/cpu/mcheck/mce.c
>> +++ b/arch/x86/kernel/cpu/mcheck/mce.c
>> @@ -57,8 +57,6 @@ static DEFINE_MUTEX(mce_chrdev_read_mutex);
>> 
>>  int mce_disabled __read_mostly;
>> 
>> -#define MISC_MCELOG_MINOR   227
>> -
>>  #define SPINUNIT 100        /* 100ns */
>> 
>>  atomic_t mce_entry;
>> @@ -1791,7 +1789,7 @@ static const struct file_operations
>>  mce_chrdev_ops = {          .llseek                 = no_llseek, };
>> 
>> -static struct miscdevice mce_chrdev_device = {
>> +struct miscdevice mce_chrdev_device = {
>>      MISC_MCELOG_MINOR,
>>      "mcelog",
>>      &mce_chrdev_ops,
> 
> You're still reusing those - pls, define your own 'struct miscdevice
> mce_chrdev_device' in drivers/xen/ or somewhere convenient and
> your own mce_chrdev_ops. The only thing you should be touching in
> arch/x86/.../mcheck/ is the export of MISC_MCELOG_MINOR.
> 
> Thanks.

I'm *not* reuse native code.
I have defined 'struct miscdevice xen_mce_chrdev_device' in drivers/xen, and I 
also implement xen_mce_chrdev_ops, they are all xen-self-contained.

The patch just redirect native mce_chrdev_device to xen_mce_chrdev_device when 
running under xen environment.
It didn't change any native code (except just cancel mce_chrdev_device 
'static'), and will not break native logic.

The benefit is, userspace tools like mcelog can use the unified interface 
(/dev/mcelog) to get mcelog, no matter it running under bare metal or xen 
virtual platform.

Thanks,
Jinsong
_______________________________________________
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®.