Skip to content
  • Mauro Carvalho Chehab's avatar
    RAS: Add a tracepoint for reporting memory controller events · 53f2d028
    Mauro Carvalho Chehab authored
    Add a new tracepoint-based hardware events report method for
    reporting Memory Controller events.
    
    Part of the description bellow is shamelessly copied from Tony
    Luck's notes about the Hardware Error BoF during LPC 2010 [1].
    Tony, thanks for your notes and discussions to generate the
    h/w error reporting requirements.
    
    [1] http://lwn.net/Articles/416669/
    
    
    
        We have several subsystems & methods for reporting hardware errors:
    
        1) EDAC ("Error Detection and Correction").  In its original form
        this consisted of a platform specific driver that read topology
        information and error counts from chipset registers and reported
        the results via a sysfs interface.
    
        2) mcelog - x86 specific decoding of machine check bank registers
        reporting in binary form via /dev/mcelog. Recent additions make use
        of the APEI extensions that were documented in version 4.0a of the
        ACPI specification to acquire more information about errors without
        having to rely reading chipset registers directly. A user level
        programs decodes into somewhat human readable format.
    
        3) drivers/edac/mce_amd.c - this driver hooks into the mcelog path and
        decodes errors reported via machine check bank registers in AMD
        processors to the console log using printk();
    
        Each of these mechanisms has a band of followers ... and none
        of them appear to meet all the needs of all users.
    
    As part of a RAS subsystem, let's encapsulate the memory error hardware
    events into a trace facility.
    
    The tracepoint printk will be displayed like:
    
    mc_event: [quant] (Corrected|Uncorrected|Fatal) error:[error msg] on [label] ([location] [edac_mc detail] [driver_detail]
    
    Where:
           	[quant] is the quantity of errors
    	[error msg] is the driver-specific error message
    		    (e. g. "memory read", "bus error", ...);
    	[location] is the location in terms of memory controller and
    		   branch/channel/slot, channel/slot or csrow/channel;
    	[label] is the memory stick label;
    	[edac_mc detail] describes the address location of the error
    			 and the syndrome;
    	[driver detail] is driver-specifig error message details,
    			when needed/provided (e. g. "area:DMA", ...)
    
    For example:
    
    mc_event: 1 Corrected error:memory read on memory stick DIMM_1A (mc:0 location:0:0:0 page:0x586b6e offset:0xa66 grain:32 syndrome:0x0 area:DMA)
    
    Of course, any userspace tools meant to handle errors should not parse
    the above data. They should, instead, use the binary fields provided by
    the tracepoint, mapping them directly into their Management Information
    Base.
    
    NOTE: The original patch was providing an additional mechanism for
    MCA-based trace events that also contained MCA error register data.
    However, as no agreement was reached so far for the MCA-based trace
    events, for now, let's add events only for memory errors.
    A latter patch is planned to change the tracepoint, for those types
    of event.
    
    Cc: Aristeu Rozanski <arozansk@redhat.com>
    Cc: Doug Thompson <norsk5@yahoo.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    53f2d028