void __init early_memtest(unsigned long start, unsigned long end) { u64 t_start, t_size; unsigned pattern; if (!memtest_pattern) return; printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern); for (pattern = 0; pattern < memtest_pattern; pattern++) { t_start = start; t_size = 0; while (t_start < end) { t_start = find_e820_area_size(t_start, &t_size, 1); /* done ? */ if (t_start >= end) break; if (t_start + t_size > end) t_size = end - t_start; printk(KERN_CONT "\n %010llx - %010llx pattern %d", (unsigned long long)t_start, (unsigned long long)t_start + t_size, pattern); memtest(t_start, t_size, pattern); t_start += t_size; } } printk(KERN_CONT "\n"); }
void __init setup_bios_corruption_check(void) { u64 addr = PAGE_SIZE; /* assume first page is reserved anyway */ if (memory_corruption_check == -1) { memory_corruption_check = #ifdef CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK 1 #else 0 #endif ; } if (corruption_check_size == 0) memory_corruption_check = 0; if (!memory_corruption_check) return; corruption_check_size = round_up(corruption_check_size, PAGE_SIZE); while (addr < corruption_check_size && num_scan_areas < MAX_SCAN_AREAS) { u64 size; addr = find_e820_area_size(addr, &size, PAGE_SIZE); if (addr == 0) break; if ((addr + size) > corruption_check_size) size = corruption_check_size - addr; if (size == 0) break; e820_update_range(addr, size, E820_RAM, E820_RESERVED); scan_areas[num_scan_areas].addr = addr; scan_areas[num_scan_areas].size = size; num_scan_areas++; /* Assume we've already mapped this early memory */ memset(__va(addr), 0, size); addr += size; } printk(KERN_INFO "Scanning %d areas for low memory corruption\n", num_scan_areas); update_e820(); }
static void __init do_one_pass(u64 pattern, u64 start, u64 end) { u64 size = 0; while (start < end) { start = find_e820_area_size(start, &size, 1); /* done ? */ if (start >= end) break; if (start + size > end) size = end - start; printk(KERN_INFO " %010llx - %010llx pattern %016llx\n", (unsigned long long) start, (unsigned long long) start + size, (unsigned long long) cpu_to_be64(pattern)); memtest(pattern, start, size); start += size; } }