EDAC: Add an edac_report parameter to EDAC
This new parameter is used to control how to report HW error reporting, especially for newer Intel platform, like Ivybridge-EX, which contains an enhanced error decoding functionality in the firmware, i.e. eMCA. Signed-off-by: Chen, Gong <gong.chen@linux.intel.com> Acked-by: Tony Luck <tony.luck@intel.com> Link: http://lkml.kernel.org/r/1386310630-12529-2-git-send-email-gong.chen@linux.intel.com [ Boris: massage commit message. ] Signed-off-by: Borislav Petkov <bp@suse.de>
This commit is contained in:
		
					parent
					
						
							
								545104dd2b
							
						
					
				
			
			
				commit
				
					
						c700f013ad
					
				
			
		
					 3 changed files with 55 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -881,6 +881,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 | 
			
		|||
 | 
			
		||||
			The xen output can only be used by Xen PV guests.
 | 
			
		||||
 | 
			
		||||
	edac_report=	[HW,EDAC] Control how to report EDAC event
 | 
			
		||||
			Format: {"on" | "off" | "force"}
 | 
			
		||||
			on: enable EDAC to report H/W event. May be overridden
 | 
			
		||||
			by other higher priority error reporting module.
 | 
			
		||||
			off: disable H/W event reporting through EDAC.
 | 
			
		||||
			force: enforce the use of EDAC to report H/W event.
 | 
			
		||||
			default: on.
 | 
			
		||||
 | 
			
		||||
	ekgdboc=	[X86,KGDB] Allow early kernel console debugging
 | 
			
		||||
			ekgdboc=kbd
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,25 @@ EXPORT_SYMBOL_GPL(edac_err_assert);
 | 
			
		|||
 | 
			
		||||
static atomic_t edac_subsys_valid = ATOMIC_INIT(0);
 | 
			
		||||
 | 
			
		||||
int edac_report_status = EDAC_REPORTING_ENABLED;
 | 
			
		||||
EXPORT_SYMBOL_GPL(edac_report_status);
 | 
			
		||||
 | 
			
		||||
static int __init edac_report_setup(char *str)
 | 
			
		||||
{
 | 
			
		||||
	if (!str)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	if (!strncmp(str, "on", 2))
 | 
			
		||||
		set_edac_report_status(EDAC_REPORTING_ENABLED);
 | 
			
		||||
	else if (!strncmp(str, "off", 3))
 | 
			
		||||
		set_edac_report_status(EDAC_REPORTING_DISABLED);
 | 
			
		||||
	else if (!strncmp(str, "force", 5))
 | 
			
		||||
		set_edac_report_status(EDAC_REPORTING_FORCE);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
__setup("edac_report=", edac_report_setup);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * called to determine if there is an EDAC driver interested in
 | 
			
		||||
 * knowing an event (such as NMI) occurred
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,34 @@ extern void edac_atomic_assert_error(void);
 | 
			
		|||
extern struct bus_type *edac_get_sysfs_subsys(void);
 | 
			
		||||
extern void edac_put_sysfs_subsys(void);
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	EDAC_REPORTING_ENABLED,
 | 
			
		||||
	EDAC_REPORTING_DISABLED,
 | 
			
		||||
	EDAC_REPORTING_FORCE
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern int edac_report_status;
 | 
			
		||||
#ifdef CONFIG_EDAC
 | 
			
		||||
static inline int get_edac_report_status(void)
 | 
			
		||||
{
 | 
			
		||||
	return edac_report_status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void set_edac_report_status(int new)
 | 
			
		||||
{
 | 
			
		||||
	edac_report_status = new;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
static inline int get_edac_report_status(void)
 | 
			
		||||
{
 | 
			
		||||
	return EDAC_REPORTING_DISABLED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void set_edac_report_status(int new)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static inline void opstate_init(void)
 | 
			
		||||
{
 | 
			
		||||
	switch (edac_op_state) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue