init_64.c (cdbfc557c43ea1f1f9b7062300ecb1254969814b) | init_64.c (1f067167a83d1c7f80437fd1d32b55508aaca009) |
---|---|
1/* 2 * linux/arch/x86_64/mm/init.c 3 * 4 * Copyright (C) 1995 Linus Torvalds 5 * Copyright (C) 2000 Pavel Machek <pavel@suse.cz> 6 * Copyright (C) 2002,2003 Andi Kleen <ak@suse.de> 7 */ 8 --- 503 unchanged lines hidden (view full) --- 512static void __init init_gbpages(void) 513{ 514 if (direct_gbpages && cpu_has_gbpages) 515 printk(KERN_INFO "Using GB pages for direct mapping\n"); 516 else 517 direct_gbpages = 0; 518} 519 | 1/* 2 * linux/arch/x86_64/mm/init.c 3 * 4 * Copyright (C) 1995 Linus Torvalds 5 * Copyright (C) 2000 Pavel Machek <pavel@suse.cz> 6 * Copyright (C) 2002,2003 Andi Kleen <ak@suse.de> 7 */ 8 --- 503 unchanged lines hidden (view full) --- 512static void __init init_gbpages(void) 513{ 514 if (direct_gbpages && cpu_has_gbpages) 515 printk(KERN_INFO "Using GB pages for direct mapping\n"); 516 else 517 direct_gbpages = 0; 518} 519 |
520#ifdef CONFIG_MEMTEST 521 522static void __init memtest(unsigned long start_phys, unsigned long size, 523 unsigned pattern) 524{ 525 unsigned long i; 526 unsigned long *start; 527 unsigned long start_bad; 528 unsigned long last_bad; 529 unsigned long val; 530 unsigned long start_phys_aligned; 531 unsigned long count; 532 unsigned long incr; 533 534 switch (pattern) { 535 case 0: 536 val = 0UL; 537 break; 538 case 1: 539 val = -1UL; 540 break; 541 case 2: 542 val = 0x5555555555555555UL; 543 break; 544 case 3: 545 val = 0xaaaaaaaaaaaaaaaaUL; 546 break; 547 default: 548 return; 549 } 550 551 incr = sizeof(unsigned long); 552 start_phys_aligned = ALIGN(start_phys, incr); 553 count = (size - (start_phys_aligned - start_phys))/incr; 554 start = __va(start_phys_aligned); 555 start_bad = 0; 556 last_bad = 0; 557 558 for (i = 0; i < count; i++) 559 start[i] = val; 560 for (i = 0; i < count; i++, start++, start_phys_aligned += incr) { 561 if (*start != val) { 562 if (start_phys_aligned == last_bad + incr) { 563 last_bad += incr; 564 } else { 565 if (start_bad) { 566 printk(KERN_CONT "\n %016lx bad mem addr %016lx - %016lx reserved", 567 val, start_bad, last_bad + incr); 568 reserve_early(start_bad, last_bad - start_bad, "BAD RAM"); 569 } 570 start_bad = last_bad = start_phys_aligned; 571 } 572 } 573 } 574 if (start_bad) { 575 printk(KERN_CONT "\n %016lx bad mem addr %016lx - %016lx reserved", 576 val, start_bad, last_bad + incr); 577 reserve_early(start_bad, last_bad - start_bad, "BAD RAM"); 578 } 579 580} 581 582/* default is disabled */ 583static int memtest_pattern __initdata; 584 585static int __init parse_memtest(char *arg) 586{ 587 if (arg) 588 memtest_pattern = simple_strtoul(arg, NULL, 0); 589 return 0; 590} 591 592early_param("memtest", parse_memtest); 593 594static void __init early_memtest(unsigned long start, unsigned long end) 595{ 596 u64 t_start, t_size; 597 unsigned pattern; 598 599 if (!memtest_pattern) 600 return; 601 602 printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern); 603 for (pattern = 0; pattern < memtest_pattern; pattern++) { 604 t_start = start; 605 t_size = 0; 606 while (t_start < end) { 607 t_start = find_e820_area_size(t_start, &t_size, 1); 608 609 /* done ? */ 610 if (t_start >= end) 611 break; 612 if (t_start + t_size > end) 613 t_size = end - t_start; 614 615 printk(KERN_CONT "\n %016llx - %016llx pattern %d", 616 (unsigned long long)t_start, 617 (unsigned long long)t_start + t_size, pattern); 618 619 memtest(t_start, t_size, pattern); 620 621 t_start += t_size; 622 } 623 } 624 printk(KERN_CONT "\n"); 625} 626#else 627static void __init early_memtest(unsigned long start, unsigned long end) 628{ 629} 630#endif 631 | |
632static unsigned long __init kernel_physical_mapping_init(unsigned long start, 633 unsigned long end, 634 unsigned long page_size_mask) 635{ 636 637 unsigned long next, last_map_addr = end; 638 639 start = (unsigned long)__va(start); --- 610 unchanged lines hidden --- | 520static unsigned long __init kernel_physical_mapping_init(unsigned long start, 521 unsigned long end, 522 unsigned long page_size_mask) 523{ 524 525 unsigned long next, last_map_addr = end; 526 527 start = (unsigned long)__va(start); --- 610 unchanged lines hidden --- |