File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/page.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _ASM_X86_PAGE_H
       2: #define _ASM_X86_PAGE_H
       3: 
       4: #include <linux/types.h>
       5: 
       6: #ifdef __KERNEL__
       7: 
       8: #include <asm/page_types.h>
       9: 
      10: #ifdef CONFIG_X86_64
      11: #include <asm/page_64.h>
      12: #else
      13: #include <asm/page_32.h>
      14: #endif    /* CONFIG_X86_64 */
      15: 
      16: #ifndef __ASSEMBLY__
      17: 
      18: struct page;
      19: 
      20: #include <linux/range.h>
      21: extern struct range pfn_mapped[];
      22: extern int nr_pfn_mapped;
      23: 
      24: static inline void clear_user_page(void *page, unsigned long vaddr,
      25:                    struct page *pg)
      26: {
      27:     clear_page(page);
      28: }
      29: 
      30: static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
      31:                   struct page *topage)
      32: {
      33:     copy_page(to, from);
      34: }
      35: 
      36: #define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
      37:     alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
      38: #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
      39: 
      40: #define __pa(x)        __phys_addr((unsigned long)(x))
      41: #define __pa_nodebug(x)    __phys_addr_nodebug((unsigned long)(x))
      42: /* __pa_symbol should be used for C visible symbols.
      43:    This seems to be the official gcc blessed way to do such arithmetic. */
      44: /*
      45:  * We need __phys_reloc_hide() here because gcc may assume that there is no
      46:  * overflow during __pa() calculation and can optimize it unexpectedly.
      47:  * Newer versions of gcc provide -fno-strict-overflow switch to handle this
      48:  * case properly. Once all supported versions of gcc understand it, we can
      49:  * remove this Voodoo magic stuff. (i.e. once gcc3.x is deprecated)
      50:  */
      51: #define __pa_symbol(x) \
      52:     __phys_addr_symbol(__phys_reloc_hide((unsigned long)(x)))
      53: 
      54: #define __va(x)            ((void *)((unsigned long)(x)+PAGE_OFFSET))
      55: 
      56: #define __boot_va(x)        __va(x)
      57: #define __boot_pa(x)        __pa(x)
      58: 
      59: /*
      60:  * virt_to_page(kaddr) returns a valid pointer if and only if
      61:  * virt_addr_valid(kaddr) returns true.
      62:  */
      63: #define virt_to_page(kaddr)    pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
      64: #define pfn_to_kaddr(pfn)      __va((pfn) << PAGE_SHIFT)
      65: extern bool __virt_addr_valid(unsigned long kaddr);
      66: #define virt_addr_valid(kaddr)    __virt_addr_valid((unsigned long) (kaddr))
      67: 
      68: #endif    /* __ASSEMBLY__ */
      69: 
      70: #include <asm-generic/memory_model.h>
      71: #include <asm-generic/getorder.h>
      72: 
      73: #define __HAVE_ARCH_GATE_AREA 1
      74: 
      75: #endif    /* __KERNEL__ */
      76: #endif /* _ASM_X86_PAGE_H */
      77: