| .. | .. |
|---|
| 279 | 279 | #define pud_bad(pud) (!ia64_phys_addr_valid(pud_val(pud))) |
|---|
| 280 | 280 | #define pud_present(pud) (pud_val(pud) != 0UL) |
|---|
| 281 | 281 | #define pud_clear(pudp) (pud_val(*(pudp)) = 0UL) |
|---|
| 282 | | -#define pud_page_vaddr(pud) ((unsigned long) __va(pud_val(pud) & _PFN_MASK)) |
|---|
| 282 | +#define pud_pgtable(pud) ((pmd_t *) __va(pud_val(pud) & _PFN_MASK)) |
|---|
| 283 | 283 | #define pud_page(pud) virt_to_page((pud_val(pud) + PAGE_OFFSET)) |
|---|
| 284 | 284 | |
|---|
| 285 | 285 | #if CONFIG_PGTABLE_LEVELS == 4 |
|---|
| 286 | | -#define pgd_none(pgd) (!pgd_val(pgd)) |
|---|
| 287 | | -#define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd))) |
|---|
| 288 | | -#define pgd_present(pgd) (pgd_val(pgd) != 0UL) |
|---|
| 289 | | -#define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) |
|---|
| 290 | | -#define pgd_page_vaddr(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK)) |
|---|
| 291 | | -#define pgd_page(pgd) virt_to_page((pgd_val(pgd) + PAGE_OFFSET)) |
|---|
| 286 | +#define p4d_none(p4d) (!p4d_val(p4d)) |
|---|
| 287 | +#define p4d_bad(p4d) (!ia64_phys_addr_valid(p4d_val(p4d))) |
|---|
| 288 | +#define p4d_present(p4d) (p4d_val(p4d) != 0UL) |
|---|
| 289 | +#define p4d_clear(p4dp) (p4d_val(*(p4dp)) = 0UL) |
|---|
| 290 | +#define p4d_pgtable(p4d) ((pud_t *) __va(p4d_val(p4d) & _PFN_MASK)) |
|---|
| 291 | +#define p4d_page(p4d) virt_to_page((p4d_val(p4d) + PAGE_OFFSET)) |
|---|
| 292 | 292 | #endif |
|---|
| 293 | 293 | |
|---|
| 294 | 294 | /* |
|---|
| .. | .. |
|---|
| 298 | 298 | #define pte_exec(pte) ((pte_val(pte) & _PAGE_AR_RX) != 0) |
|---|
| 299 | 299 | #define pte_dirty(pte) ((pte_val(pte) & _PAGE_D) != 0) |
|---|
| 300 | 300 | #define pte_young(pte) ((pte_val(pte) & _PAGE_A) != 0) |
|---|
| 301 | | -#define pte_special(pte) 0 |
|---|
| 302 | 301 | |
|---|
| 303 | 302 | /* |
|---|
| 304 | 303 | * Note: we convert AR_RWX to AR_RX and AR_RW to AR_R by clearing the 2nd bit in the |
|---|
| .. | .. |
|---|
| 311 | 310 | #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) |
|---|
| 312 | 311 | #define pte_mkdirty(pte) (__pte(pte_val(pte) | _PAGE_D)) |
|---|
| 313 | 312 | #define pte_mkhuge(pte) (__pte(pte_val(pte))) |
|---|
| 314 | | -#define pte_mkspecial(pte) (pte) |
|---|
| 315 | 313 | |
|---|
| 316 | 314 | /* |
|---|
| 317 | 315 | * Because ia64's Icache and Dcache is not coherent (on a cpu), we need to |
|---|
| .. | .. |
|---|
| 366 | 364 | |
|---|
| 367 | 365 | return (region << (PAGE_SHIFT - 6)) | l1index; |
|---|
| 368 | 366 | } |
|---|
| 367 | +#define pgd_index pgd_index |
|---|
| 369 | 368 | |
|---|
| 370 | | -/* The offset in the 1-level directory is given by the 3 region bits |
|---|
| 371 | | - (61..63) and the level-1 bits. */ |
|---|
| 372 | | -static inline pgd_t* |
|---|
| 373 | | -pgd_offset (const struct mm_struct *mm, unsigned long address) |
|---|
| 374 | | -{ |
|---|
| 375 | | - return mm->pgd + pgd_index(address); |
|---|
| 376 | | -} |
|---|
| 377 | | - |
|---|
| 378 | | -/* In the kernel's mapped region we completely ignore the region number |
|---|
| 379 | | - (since we know it's in region number 5). */ |
|---|
| 369 | +/* |
|---|
| 370 | + * In the kernel's mapped region we know everything is in region number 5, so |
|---|
| 371 | + * as an optimisation its PGD already points to the area for that region. |
|---|
| 372 | + * However, this also means that we cannot use pgd_index() and we must |
|---|
| 373 | + * never add the region here. |
|---|
| 374 | + */ |
|---|
| 380 | 375 | #define pgd_offset_k(addr) \ |
|---|
| 381 | 376 | (init_mm.pgd + (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))) |
|---|
| 382 | 377 | |
|---|
| .. | .. |
|---|
| 384 | 379 | resides in the kernel-mapped segment, hence we use pgd_offset_k() |
|---|
| 385 | 380 | here. */ |
|---|
| 386 | 381 | #define pgd_offset_gate(mm, addr) pgd_offset_k(addr) |
|---|
| 387 | | - |
|---|
| 388 | | -#if CONFIG_PGTABLE_LEVELS == 4 |
|---|
| 389 | | -/* Find an entry in the second-level page table.. */ |
|---|
| 390 | | -#define pud_offset(dir,addr) \ |
|---|
| 391 | | - ((pud_t *) pgd_page_vaddr(*(dir)) + (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))) |
|---|
| 392 | | -#endif |
|---|
| 393 | | - |
|---|
| 394 | | -/* Find an entry in the third-level page table.. */ |
|---|
| 395 | | -#define pmd_offset(dir,addr) \ |
|---|
| 396 | | - ((pmd_t *) pud_page_vaddr(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) |
|---|
| 397 | | - |
|---|
| 398 | | -/* |
|---|
| 399 | | - * Find an entry in the third-level page table. This looks more complicated than it |
|---|
| 400 | | - * should be because some platforms place page tables in high memory. |
|---|
| 401 | | - */ |
|---|
| 402 | | -#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
|---|
| 403 | | -#define pte_offset_kernel(dir,addr) ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr)) |
|---|
| 404 | | -#define pte_offset_map(dir,addr) pte_offset_kernel(dir, addr) |
|---|
| 405 | | -#define pte_unmap(pte) do { } while (0) |
|---|
| 406 | 382 | |
|---|
| 407 | 383 | /* atomic versions of the some PTE manipulations: */ |
|---|
| 408 | 384 | |
|---|
| .. | .. |
|---|
| 544 | 520 | |
|---|
| 545 | 521 | # ifdef CONFIG_VIRTUAL_MEM_MAP |
|---|
| 546 | 522 | /* arch mem_map init routine is needed due to holes in a virtual mem_map */ |
|---|
| 547 | | -# define __HAVE_ARCH_MEMMAP_INIT |
|---|
| 548 | | - extern void memmap_init (unsigned long size, int nid, unsigned long zone, |
|---|
| 549 | | - unsigned long start_pfn); |
|---|
| 523 | +void memmap_init(void); |
|---|
| 524 | +void arch_memmap_init(unsigned long size, int nid, unsigned long zone, |
|---|
| 525 | + unsigned long start_pfn); |
|---|
| 550 | 526 | # endif /* CONFIG_VIRTUAL_MEM_MAP */ |
|---|
| 551 | 527 | # endif /* !__ASSEMBLY__ */ |
|---|
| 552 | 528 | |
|---|
| .. | .. |
|---|
| 567 | 543 | #define KERNEL_TR_PAGE_SHIFT _PAGE_SIZE_64M |
|---|
| 568 | 544 | #define KERNEL_TR_PAGE_SIZE (1 << KERNEL_TR_PAGE_SHIFT) |
|---|
| 569 | 545 | |
|---|
| 570 | | -/* |
|---|
| 571 | | - * No page table caches to initialise |
|---|
| 572 | | - */ |
|---|
| 573 | | -#define pgtable_cache_init() do { } while (0) |
|---|
| 574 | | - |
|---|
| 575 | 546 | /* These tell get_user_pages() that the first gate page is accessible from user-level. */ |
|---|
| 576 | 547 | #define FIXADDR_USER_START GATE_ADDR |
|---|
| 577 | 548 | #ifdef HAVE_BUGGY_SEGREL |
|---|
| .. | .. |
|---|
| 588 | 559 | |
|---|
| 589 | 560 | |
|---|
| 590 | 561 | #if CONFIG_PGTABLE_LEVELS == 3 |
|---|
| 591 | | -#define __ARCH_USE_5LEVEL_HACK |
|---|
| 592 | 562 | #include <asm-generic/pgtable-nopud.h> |
|---|
| 593 | 563 | #endif |
|---|
| 594 | | -#include <asm-generic/5level-fixup.h> |
|---|
| 595 | | -#include <asm-generic/pgtable.h> |
|---|
| 564 | +#include <asm-generic/pgtable-nop4d.h> |
|---|
| 596 | 565 | |
|---|
| 597 | 566 | #endif /* _ASM_IA64_PGTABLE_H */ |
|---|