 833c95456a
			
		
	
	
	833c95456a
	
	
	
		
			
			Many devices run firmware and/or complex hardware, and most of that
can have bugs. When it misbehaves, however, it is often much harder
to debug than software running on the host.
Introduce a "device coredump" mechanism to allow dumping internal
device/firmware state through a generalized mechanism. As devices
are different and information needed can vary accordingly, this
doesn't prescribe a file format - it just provides mechanism to
get data to be able to capture it in a generalized way (e.g. in
distributions.)
The dumped data will be readable in sysfs in the virtual device's
data file under /sys/class/devcoredump/devcd*/. Writing to it will
free the data and remove the device, as does a 5-minute timeout.
Note that generalized capturing of such data may result in privacy
issues, so users generally need to be involved. In order to allow
certain users/system integrators/... to disable the feature at all,
introduce a Kconfig option to override the drivers that would like
to have the feature.
For now, this provides two ways of dumping data:
 1) with a vmalloc'ed area, that is then given to the subsystem
    and freed after retrieval or timeout
 2) with a generalized reader/free function method
We could/should add more options, e.g. a list of pages, since the
vmalloc area is very limited on some architectures.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
	
			
		
			
				
	
	
		
			27 lines
		
	
	
	
		
			889 B
			
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
	
		
			889 B
			
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| # Makefile for the Linux device tree
 | |
| 
 | |
| obj-y			:= component.o core.o bus.o dd.o syscore.o \
 | |
| 			   driver.o class.o platform.o \
 | |
| 			   cpu.o firmware.o init.o map.o devres.o \
 | |
| 			   attribute_container.o transport_class.o \
 | |
| 			   topology.o container.o
 | |
| obj-$(CONFIG_DEVTMPFS)	+= devtmpfs.o
 | |
| obj-$(CONFIG_DMA_CMA) += dma-contiguous.o
 | |
| obj-y			+= power/
 | |
| obj-$(CONFIG_HAS_DMA)	+= dma-mapping.o
 | |
| obj-$(CONFIG_HAVE_GENERIC_DMA_COHERENT) += dma-coherent.o
 | |
| obj-$(CONFIG_ISA)	+= isa.o
 | |
| obj-$(CONFIG_FW_LOADER)	+= firmware_class.o
 | |
| obj-$(CONFIG_NUMA)	+= node.o
 | |
| obj-$(CONFIG_MEMORY_HOTPLUG_SPARSE) += memory.o
 | |
| ifeq ($(CONFIG_SYSFS),y)
 | |
| obj-$(CONFIG_MODULES)	+= module.o
 | |
| endif
 | |
| obj-$(CONFIG_SYS_HYPERVISOR) += hypervisor.o
 | |
| obj-$(CONFIG_REGMAP)	+= regmap/
 | |
| obj-$(CONFIG_SOC_BUS) += soc.o
 | |
| obj-$(CONFIG_PINCTRL) += pinctrl.o
 | |
| obj-$(CONFIG_DEV_COREDUMP) += devcoredump.o
 | |
| 
 | |
| ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
 | |
| 
 |