• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/x86/mm/
1#include <linux/mmdebug.h>
2#include <linux/module.h>
3#include <linux/mm.h>
4
5#include <asm/page.h>
6
7#include "physaddr.h"
8
9#ifdef CONFIG_X86_64
10
11unsigned long __phys_addr(unsigned long x)
12{
13	if (x >= __START_KERNEL_map) {
14		x -= __START_KERNEL_map;
15		VIRTUAL_BUG_ON(x >= KERNEL_IMAGE_SIZE);
16		x += phys_base;
17	} else {
18		VIRTUAL_BUG_ON(x < PAGE_OFFSET);
19		x -= PAGE_OFFSET;
20		VIRTUAL_BUG_ON(!phys_addr_valid(x));
21	}
22	return x;
23}
24EXPORT_SYMBOL(__phys_addr);
25
26bool __virt_addr_valid(unsigned long x)
27{
28	if (x >= __START_KERNEL_map) {
29		x -= __START_KERNEL_map;
30		if (x >= KERNEL_IMAGE_SIZE)
31			return false;
32		x += phys_base;
33	} else {
34		if (x < PAGE_OFFSET)
35			return false;
36		x -= PAGE_OFFSET;
37		if (!phys_addr_valid(x))
38			return false;
39	}
40
41	return pfn_valid(x >> PAGE_SHIFT);
42}
43EXPORT_SYMBOL(__virt_addr_valid);
44
45#else
46
47#ifdef CONFIG_DEBUG_VIRTUAL
48unsigned long __phys_addr(unsigned long x)
49{
50	/* VMALLOC_* aren't constants  */
51	VIRTUAL_BUG_ON(x < PAGE_OFFSET);
52	VIRTUAL_BUG_ON(__vmalloc_start_set && is_vmalloc_addr((void *) x));
53	return x - PAGE_OFFSET;
54}
55EXPORT_SYMBOL(__phys_addr);
56#endif
57
58bool __virt_addr_valid(unsigned long x)
59{
60	if (x < PAGE_OFFSET)
61		return false;
62	if (__vmalloc_start_set && is_vmalloc_addr((void *) x))
63		return false;
64	if (x >= FIXADDR_START)
65		return false;
66	return pfn_valid((x - PAGE_OFFSET) >> PAGE_SHIFT);
67}
68EXPORT_SYMBOL(__virt_addr_valid);
69
70#endif	/* CONFIG_X86_64 */
71