x86: split __phys_addr out into separate file
Split __phys_addr out into its own file so we can disable -fstack-protector in a fine-grained fashion. Also it doesn't have terribly much to do with the rest of ioremap.c. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
This commit is contained in:
70
arch/x86/mm/physaddr.c
Normal file
70
arch/x86/mm/physaddr.c
Normal file
@ -0,0 +1,70 @@
|
||||
#include <linux/mmdebug.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
|
||||
#include "physaddr.h"
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
|
||||
unsigned long __phys_addr(unsigned long x)
|
||||
{
|
||||
if (x >= __START_KERNEL_map) {
|
||||
x -= __START_KERNEL_map;
|
||||
VIRTUAL_BUG_ON(x >= KERNEL_IMAGE_SIZE);
|
||||
x += phys_base;
|
||||
} else {
|
||||
VIRTUAL_BUG_ON(x < PAGE_OFFSET);
|
||||
x -= PAGE_OFFSET;
|
||||
VIRTUAL_BUG_ON(!phys_addr_valid(x));
|
||||
}
|
||||
return x;
|
||||
}
|
||||
EXPORT_SYMBOL(__phys_addr);
|
||||
|
||||
bool __virt_addr_valid(unsigned long x)
|
||||
{
|
||||
if (x >= __START_KERNEL_map) {
|
||||
x -= __START_KERNEL_map;
|
||||
if (x >= KERNEL_IMAGE_SIZE)
|
||||
return false;
|
||||
x += phys_base;
|
||||
} else {
|
||||
if (x < PAGE_OFFSET)
|
||||
return false;
|
||||
x -= PAGE_OFFSET;
|
||||
if (!phys_addr_valid(x))
|
||||
return false;
|
||||
}
|
||||
|
||||
return pfn_valid(x >> PAGE_SHIFT);
|
||||
}
|
||||
EXPORT_SYMBOL(__virt_addr_valid);
|
||||
|
||||
#else
|
||||
|
||||
#ifdef CONFIG_DEBUG_VIRTUAL
|
||||
unsigned long __phys_addr(unsigned long x)
|
||||
{
|
||||
/* VMALLOC_* aren't constants */
|
||||
VIRTUAL_BUG_ON(x < PAGE_OFFSET);
|
||||
VIRTUAL_BUG_ON(__vmalloc_start_set && is_vmalloc_addr((void *) x));
|
||||
return x - PAGE_OFFSET;
|
||||
}
|
||||
EXPORT_SYMBOL(__phys_addr);
|
||||
#endif
|
||||
|
||||
bool __virt_addr_valid(unsigned long x)
|
||||
{
|
||||
if (x < PAGE_OFFSET)
|
||||
return false;
|
||||
if (__vmalloc_start_set && is_vmalloc_addr((void *) x))
|
||||
return false;
|
||||
if (x >= FIXADDR_START)
|
||||
return false;
|
||||
return pfn_valid((x - PAGE_OFFSET) >> PAGE_SHIFT);
|
||||
}
|
||||
EXPORT_SYMBOL(__virt_addr_valid);
|
||||
|
||||
#endif /* CONFIG_X86_64 */
|
Reference in New Issue
Block a user