mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-26 14:14:01 +08:00
2724273e8f
The sequence of actions done by device drivers to append their device specific hardware/firmware logs to /proc/vmcore are as follows: 1. During probe (before hardware is initialized), device drivers register to the vmcore module (via vmcore_add_device_dump()), with callback function, along with buffer size and log name needed for firmware/hardware log collection. 2. vmcore module allocates the buffer with requested size. It adds an Elf note and invokes the device driver's registered callback function. 3. Device driver collects all hardware/firmware logs into the buffer and returns control back to vmcore module. Ensure that the device dump buffer size is always aligned to page size so that it can be mmaped. Also, rename alloc_elfnotes_buf() to vmcore_alloc_buf() to make it more generic and reserve NT_VMCOREDD note type to indicate vmcore device dump. Suggested-by: Eric Biederman <ebiederm@xmission.com>. Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com> Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
47 lines
831 B
C
47 lines
831 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* /proc/kcore definitions
|
|
*/
|
|
#ifndef _LINUX_KCORE_H
|
|
#define _LINUX_KCORE_H
|
|
|
|
enum kcore_type {
|
|
KCORE_TEXT,
|
|
KCORE_VMALLOC,
|
|
KCORE_RAM,
|
|
KCORE_VMEMMAP,
|
|
KCORE_USER,
|
|
KCORE_OTHER,
|
|
};
|
|
|
|
struct kcore_list {
|
|
struct list_head list;
|
|
unsigned long addr;
|
|
size_t size;
|
|
int type;
|
|
};
|
|
|
|
struct vmcore {
|
|
struct list_head list;
|
|
unsigned long long paddr;
|
|
unsigned long long size;
|
|
loff_t offset;
|
|
};
|
|
|
|
struct vmcoredd_node {
|
|
struct list_head list; /* List of dumps */
|
|
void *buf; /* Buffer containing device's dump */
|
|
unsigned int size; /* Size of the buffer */
|
|
};
|
|
|
|
#ifdef CONFIG_PROC_KCORE
|
|
extern void kclist_add(struct kcore_list *, void *, size_t, int type);
|
|
#else
|
|
static inline
|
|
void kclist_add(struct kcore_list *new, void *addr, size_t size, int type)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif /* _LINUX_KCORE_H */
|