Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/riscv/mm/physaddr.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0
2
3
#include <linux/types.h>
4
#include <linux/mmdebug.h>
5
#include <linux/mm.h>
6
#include <asm/page.h>
7
#include <asm/sections.h>
8
9
phys_addr_t __virt_to_phys(unsigned long x)
10
{
11
/*
12
* Boundary checking aginst the kernel linear mapping space.
13
*/
14
WARN(!is_linear_mapping(x) && !is_kernel_mapping(x),
15
"virt_to_phys used for non-linear address: %p (%pS)\n",
16
(void *)x, (void *)x);
17
18
return __va_to_pa_nodebug(x);
19
}
20
EXPORT_SYMBOL(__virt_to_phys);
21
22
phys_addr_t __phys_addr_symbol(unsigned long x)
23
{
24
unsigned long kernel_start = kernel_map.virt_addr;
25
unsigned long kernel_end = kernel_start + kernel_map.size;
26
27
/*
28
* Boundary checking aginst the kernel image mapping.
29
* __pa_symbol should only be used on kernel symbol addresses.
30
*/
31
VIRTUAL_BUG_ON(x < kernel_start || x > kernel_end);
32
33
return __va_to_pa_nodebug(x);
34
}
35
EXPORT_SYMBOL(__phys_addr_symbol);
36
37
phys_addr_t linear_mapping_va_to_pa(unsigned long x)
38
{
39
BUG_ON(!kernel_map.va_pa_offset);
40
41
return ((unsigned long)(x) - kernel_map.va_pa_offset);
42
}
43
EXPORT_SYMBOL(linear_mapping_va_to_pa);
44
45
void *linear_mapping_pa_to_va(unsigned long x)
46
{
47
BUG_ON(!kernel_map.va_pa_offset);
48
49
return ((void *)((unsigned long)(x) + kernel_map.va_pa_offset));
50
}
51
EXPORT_SYMBOL(linear_mapping_pa_to_va);
52
53