mirror of
https://github.com/torvalds/linux.git
synced 2024-12-24 03:42:52 +00:00
4a20799d11
Memtest is a simple feature which fills the memory with a given set of patterns and validates memory contents, if bad memory regions is detected it reserves them via memblock API. Since memblock API is widely used by other architectures this feature can be enabled outside of x86 world. This patch set promotes memtest to live under generic mm umbrella and enables memtest feature for arm/arm64. It was reported that this patch set was useful for tracking down an issue with some errant DMA on an arm64 platform. This patch (of 6): There is nothing platform dependent in the core memtest code, so other platforms might benefit from this feature too. [linux@roeck-us.net: MEMTEST depends on MEMBLOCK] Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com> Acked-by: Will Deacon <will.deacon@arm.com> Tested-by: Mark Rutland <mark.rutland@arm.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Paul Bolle <pebolle@tiscali.nl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
70 lines
2.1 KiB
C
70 lines
2.1 KiB
C
#ifndef _ASM_X86_E820_H
|
|
#define _ASM_X86_E820_H
|
|
|
|
#ifdef CONFIG_EFI
|
|
#include <linux/numa.h>
|
|
#define E820_X_MAX (E820MAX + 3 * MAX_NUMNODES)
|
|
#else /* ! CONFIG_EFI */
|
|
#define E820_X_MAX E820MAX
|
|
#endif
|
|
#include <uapi/asm/e820.h>
|
|
#ifndef __ASSEMBLY__
|
|
/* see comment in arch/x86/kernel/e820.c */
|
|
extern struct e820map e820;
|
|
extern struct e820map e820_saved;
|
|
|
|
extern unsigned long pci_mem_start;
|
|
extern int e820_any_mapped(u64 start, u64 end, unsigned type);
|
|
extern int e820_all_mapped(u64 start, u64 end, unsigned type);
|
|
extern void e820_add_region(u64 start, u64 size, int type);
|
|
extern void e820_print_map(char *who);
|
|
extern int
|
|
sanitize_e820_map(struct e820entry *biosmap, int max_nr_map, u32 *pnr_map);
|
|
extern u64 e820_update_range(u64 start, u64 size, unsigned old_type,
|
|
unsigned new_type);
|
|
extern u64 e820_remove_range(u64 start, u64 size, unsigned old_type,
|
|
int checktype);
|
|
extern void update_e820(void);
|
|
extern void e820_setup_gap(void);
|
|
extern int e820_search_gap(unsigned long *gapstart, unsigned long *gapsize,
|
|
unsigned long start_addr, unsigned long long end_addr);
|
|
struct setup_data;
|
|
extern void parse_e820_ext(u64 phys_addr, u32 data_len);
|
|
|
|
#if defined(CONFIG_X86_64) || \
|
|
(defined(CONFIG_X86_32) && defined(CONFIG_HIBERNATION))
|
|
extern void e820_mark_nosave_regions(unsigned long limit_pfn);
|
|
#else
|
|
static inline void e820_mark_nosave_regions(unsigned long limit_pfn)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
extern unsigned long e820_end_of_ram_pfn(void);
|
|
extern unsigned long e820_end_of_low_ram_pfn(void);
|
|
extern u64 early_reserve_e820(u64 sizet, u64 align);
|
|
|
|
void memblock_x86_fill(void);
|
|
void memblock_find_dma_reserve(void);
|
|
|
|
extern void finish_e820_parsing(void);
|
|
extern void e820_reserve_resources(void);
|
|
extern void e820_reserve_resources_late(void);
|
|
extern void setup_memory_map(void);
|
|
extern char *default_machine_specific_memory_setup(void);
|
|
|
|
/*
|
|
* Returns true iff the specified range [s,e) is completely contained inside
|
|
* the ISA region.
|
|
*/
|
|
static inline bool is_ISA_range(u64 s, u64 e)
|
|
{
|
|
return s >= ISA_START_ADDRESS && e <= ISA_END_ADDRESS;
|
|
}
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
#include <linux/ioport.h>
|
|
|
|
#define HIGH_MEMORY (1024*1024)
|
|
#endif /* _ASM_X86_E820_H */
|