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

From: Liu, Jinsong
Date: Thu May 24 2012 - 06:10:34 EST


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--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/