fault.c (eadcbfa58ae8693f0d6a0f591d8f51d55cf068e1) | fault.c (6c690ee1039b251e583fc65b28da30e97d6a7385) |
---|---|
1/* 2 * Copyright (C) 1995 Linus Torvalds 3 * Copyright (C) 2001, 2002 Andi Kleen, SuSE Labs. 4 * Copyright (C) 2008-2009, Red Hat Inc., Ingo Molnar 5 */ 6#include <linux/sched.h> /* test_thread_flag(), ... */ 7#include <linux/sched/task_stack.h> /* task_stack_*(), ... */ 8#include <linux/kdebug.h> /* oops_begin/end, ... */ --- 332 unchanged lines hidden (view full) --- 341 342 /* 343 * Synchronize this task's top level page-table 344 * with the 'reference' page table. 345 * 346 * Do _not_ use "current" here. We might be inside 347 * an interrupt in the middle of a task switch.. 348 */ | 1/* 2 * Copyright (C) 1995 Linus Torvalds 3 * Copyright (C) 2001, 2002 Andi Kleen, SuSE Labs. 4 * Copyright (C) 2008-2009, Red Hat Inc., Ingo Molnar 5 */ 6#include <linux/sched.h> /* test_thread_flag(), ... */ 7#include <linux/sched/task_stack.h> /* task_stack_*(), ... */ 8#include <linux/kdebug.h> /* oops_begin/end, ... */ --- 332 unchanged lines hidden (view full) --- 341 342 /* 343 * Synchronize this task's top level page-table 344 * with the 'reference' page table. 345 * 346 * Do _not_ use "current" here. We might be inside 347 * an interrupt in the middle of a task switch.. 348 */ |
349 pgd_paddr = read_cr3(); | 349 pgd_paddr = read_cr3_pa(); |
350 pmd_k = vmalloc_sync_one(__va(pgd_paddr), address); 351 if (!pmd_k) 352 return -1; 353 354 if (pmd_huge(*pmd_k)) 355 return 0; 356 357 pte_k = pte_offset_kernel(pmd_k, address); --- 25 unchanged lines hidden (view full) --- 383 384static bool low_pfn(unsigned long pfn) 385{ 386 return pfn < max_low_pfn; 387} 388 389static void dump_pagetable(unsigned long address) 390{ | 350 pmd_k = vmalloc_sync_one(__va(pgd_paddr), address); 351 if (!pmd_k) 352 return -1; 353 354 if (pmd_huge(*pmd_k)) 355 return 0; 356 357 pte_k = pte_offset_kernel(pmd_k, address); --- 25 unchanged lines hidden (view full) --- 383 384static bool low_pfn(unsigned long pfn) 385{ 386 return pfn < max_low_pfn; 387} 388 389static void dump_pagetable(unsigned long address) 390{ |
391 pgd_t *base = __va(read_cr3()); | 391 pgd_t *base = __va(read_cr3_pa()); |
392 pgd_t *pgd = &base[pgd_index(address)]; 393 p4d_t *p4d; 394 pud_t *pud; 395 pmd_t *pmd; 396 pte_t *pte; 397 398#ifdef CONFIG_X86_PAE 399 printk("*pdpt = %016Lx ", pgd_val(*pgd)); --- 46 unchanged lines hidden (view full) --- 446 447 WARN_ON_ONCE(in_nmi()); 448 449 /* 450 * Copy kernel mappings over when needed. This can also 451 * happen within a race in page table update. In the later 452 * case just flush: 453 */ | 392 pgd_t *pgd = &base[pgd_index(address)]; 393 p4d_t *p4d; 394 pud_t *pud; 395 pmd_t *pmd; 396 pte_t *pte; 397 398#ifdef CONFIG_X86_PAE 399 printk("*pdpt = %016Lx ", pgd_val(*pgd)); --- 46 unchanged lines hidden (view full) --- 446 447 WARN_ON_ONCE(in_nmi()); 448 449 /* 450 * Copy kernel mappings over when needed. This can also 451 * happen within a race in page table update. In the later 452 * case just flush: 453 */ |
454 pgd = (pgd_t *)__va(read_cr3()) + pgd_index(address); | 454 pgd = (pgd_t *)__va(read_cr3_pa()) + pgd_index(address); |
455 pgd_ref = pgd_offset_k(address); 456 if (pgd_none(*pgd_ref)) 457 return -1; 458 459 if (pgd_none(*pgd)) { 460 set_pgd(pgd, *pgd_ref); 461 arch_flush_lazy_mmu_mode(); 462 } else if (CONFIG_PGTABLE_LEVELS > 4) { --- 87 unchanged lines hidden (view full) --- 550{ 551 unsigned long dummy; 552 553 return probe_kernel_address((unsigned long *)p, dummy); 554} 555 556static void dump_pagetable(unsigned long address) 557{ | 455 pgd_ref = pgd_offset_k(address); 456 if (pgd_none(*pgd_ref)) 457 return -1; 458 459 if (pgd_none(*pgd)) { 460 set_pgd(pgd, *pgd_ref); 461 arch_flush_lazy_mmu_mode(); 462 } else if (CONFIG_PGTABLE_LEVELS > 4) { --- 87 unchanged lines hidden (view full) --- 550{ 551 unsigned long dummy; 552 553 return probe_kernel_address((unsigned long *)p, dummy); 554} 555 556static void dump_pagetable(unsigned long address) 557{ |
558 pgd_t *base = __va(read_cr3() & PHYSICAL_PAGE_MASK); | 558 pgd_t *base = __va(read_cr3_pa()); |
559 pgd_t *pgd = base + pgd_index(address); 560 p4d_t *p4d; 561 pud_t *pud; 562 pmd_t *pmd; 563 pte_t *pte; 564 565 if (bad_address(pgd)) 566 goto bad; --- 128 unchanged lines hidden (view full) --- 695 if (!oops_may_print()) 696 return; 697 698 if (error_code & PF_INSTR) { 699 unsigned int level; 700 pgd_t *pgd; 701 pte_t *pte; 702 | 559 pgd_t *pgd = base + pgd_index(address); 560 p4d_t *p4d; 561 pud_t *pud; 562 pmd_t *pmd; 563 pte_t *pte; 564 565 if (bad_address(pgd)) 566 goto bad; --- 128 unchanged lines hidden (view full) --- 695 if (!oops_may_print()) 696 return; 697 698 if (error_code & PF_INSTR) { 699 unsigned int level; 700 pgd_t *pgd; 701 pte_t *pte; 702 |
703 pgd = __va(read_cr3() & PHYSICAL_PAGE_MASK); | 703 pgd = __va(read_cr3_pa()); |
704 pgd += pgd_index(address); 705 706 pte = lookup_address_in_pgd(pgd, address, &level); 707 708 if (pte && pte_present(*pte) && !pte_exec(*pte)) 709 printk(nx_warning, from_kuid(&init_user_ns, current_uid())); 710 if (pte && pte_present(*pte) && pte_exec(*pte) && 711 (pgd_flags(*pgd) & _PAGE_USER) && --- 831 unchanged lines hidden --- | 704 pgd += pgd_index(address); 705 706 pte = lookup_address_in_pgd(pgd, address, &level); 707 708 if (pte && pte_present(*pte) && !pte_exec(*pte)) 709 printk(nx_warning, from_kuid(&init_user_ns, current_uid())); 710 if (pte && pte_present(*pte) && pte_exec(*pte) && 711 (pgd_flags(*pgd) & _PAGE_USER) && --- 831 unchanged lines hidden --- |