[lkml]   [2009]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] [4/16] HWPOISON: Add new SIGBUS error codes for hardware poison signals

    Add new SIGBUS codes for reporting machine checks as signals. When
    the hardware detects an uncorrected ECC error it can trigger these

    This is needed for telling KVM's qemu about machine checks that happen to
    guests, so that it can inject them, but might be also useful for other programs.
    I find it useful in my test programs.

    This patch merely defines the new types.

    - Define two new si_codes for SIGBUS. BUS_MCEERR_AO and BUS_MCEERR_AR
    * BUS_MCEERR_AO is for "Action Optional" machine checks, which means that some
    corruption has been detected in the background, but nothing has been consumed
    so far. The program can ignore those if it wants (but most programs would
    already get killed)
    * BUS_MCEERR_AR is for "Action Required" machine checks. This happens
    when corrupted data is consumed or the application ran into an area
    which has been known to be corrupted earlier. These require immediate
    action and cannot just returned to. Most programs would kill themselves.
    - They report the address of the corruption in the user address space
    in si_addr.
    - Define a new si_addr_lsb field that reports the extent of the corruption
    to user space. That's currently always a (small) page. The user application
    cannot tell where in this page the corruption happened.

    AK: I plan to write a man page update before anyone asks.

    Signed-off-by: Andi Kleen <>

    include/asm-generic/siginfo.h | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    Index: linux/include/asm-generic/siginfo.h
    --- linux.orig/include/asm-generic/siginfo.h 2009-06-03 19:36:22.000000000 +0200
    +++ linux/include/asm-generic/siginfo.h 2009-06-03 19:36:23.000000000 +0200
    @@ -82,6 +82,7 @@
    #ifdef __ARCH_SI_TRAPNO
    int _trapno; /* TRAP # which caused the signal */
    + short _addr_lsb; /* LSB of the reported address */
    } _sigfault;

    /* SIGPOLL */
    @@ -112,6 +113,7 @@
    #ifdef __ARCH_SI_TRAPNO
    #define si_trapno _sifields._sigfault._trapno
    +#define si_addr_lsb _sifields._sigfault._addr_lsb
    #define si_band _sifields._sigpoll._band
    #define si_fd _sifields._sigpoll._fd

    @@ -192,7 +194,11 @@
    #define BUS_ADRALN (__SI_FAULT|1) /* invalid address alignment */
    #define BUS_ADRERR (__SI_FAULT|2) /* non-existant physical address */
    #define BUS_OBJERR (__SI_FAULT|3) /* object specific hardware error */
    -#define NSIGBUS 3
    +/* hardware memory error consumed on a machine check: action required */
    +#define BUS_MCEERR_AR (__SI_FAULT|4)
    +/* hardware memory error detected in process but not consumed: action optional*/
    +#define BUS_MCEERR_AO (__SI_FAULT|5)
    +#define NSIGBUS 5

    * SIGTRAP si_codes

     \ /
      Last update: 2009-06-03 20:51    [W:0.024 / U:5.900 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site