kernel_map
extern struct kernel_mapping kernel_map;
((x) >= kernel_map.virt_addr && (x) < (kernel_map.virt_addr + kernel_map.size))
#define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
(void *)(_y + kernel_map.va_kernel_xip_text_pa_offset) : \
(void *)(_y + kernel_map.va_kernel_xip_data_pa_offset); \
#define kernel_mapping_pa_to_va(y) ((void *)((unsigned long)(y) + kernel_map.va_kernel_pa_offset))
#define linear_mapping_va_to_pa(x) ((unsigned long)(x) - kernel_map.va_pa_offset)
(_y < kernel_map.virt_addr + kernel_map.xiprom_sz) ? \
(_y - kernel_map.va_kernel_xip_text_pa_offset) : \
(_y - kernel_map.va_kernel_xip_data_pa_offset); \
#define kernel_mapping_va_to_pa(y) ((unsigned long)(y) - kernel_map.va_kernel_pa_offset)
#define PAGE_OFFSET kernel_map.page_offset
this_hart_id, kernel_map.va_pa_offset);
kernel_map.virt_offset,
kernel_map.va_kernel_pa_offset);
return kernel_map.virt_offset;
kernel_map.virt_offset = (kaslr_seed % nr_pos) * PMD_SIZE;
kernel_map.virt_addr = KERNEL_LINK_ADDR + kernel_map.virt_offset;
kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR;
kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom);
kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE;
kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_start);
kernel_map.va_kernel_xip_text_pa_offset = kernel_map.virt_addr - kernel_map.xiprom;
kernel_map.va_kernel_xip_data_pa_offset = kernel_map.virt_addr - kernel_map.phys_addr
kernel_map.phys_addr = (uintptr_t)(&_start);
kernel_map.size = (uintptr_t)(&_end) - kernel_map.phys_addr;
kernel_map.va_kernel_pa_offset = kernel_map.virt_addr - kernel_map.phys_addr;
kernel_map.va_pa_offset = IS_ENABLED(CONFIG_64BIT) ?
0UL : PAGE_OFFSET - kernel_map.phys_addr;
BUG_ON((kernel_map.phys_addr % PMD_SIZE) != 0);
BUG_ON((kernel_map.virt_addr + kernel_map.size) > ADDRESS_SPACE_END - SZ_4K);
BUG_ON(PUD_SIZE - (kernel_map.virt_addr & (PUD_SIZE - 1)) < kernel_map.size);
create_pgd_mapping(trampoline_pg_dir, kernel_map.virt_addr,
create_p4d_mapping(trampoline_p4d, kernel_map.virt_addr,
create_pud_mapping(trampoline_pud, kernel_map.virt_addr,
create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr,
kernel_map.xiprom, PMD_SIZE, PAGE_KERNEL_EXEC);
create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr,
kernel_map.phys_addr, PMD_SIZE, PAGE_KERNEL_EXEC);
create_pgd_mapping(trampoline_pg_dir, kernel_map.virt_addr,
kernel_map.phys_addr, PGDIR_SIZE, PAGE_KERNEL_EXEC);
kernel_map.virt_addr = (uintptr_t)_start;
kernel_map.phys_addr = (uintptr_t)_start;
print_ml("kernel", (unsigned long)kernel_map.virt_addr,
kernel_map.va_pa_offset = PAGE_OFFSET - phys_ram_base;
uintptr_t reloc_offset = kernel_map.virt_addr - KERNEL_LINK_ADDR;
uintptr_t va_kernel_link_pa_offset = KERNEL_LINK_ADDR - kernel_map.phys_addr;
struct kernel_mapping kernel_map __ro_after_init;
EXPORT_SYMBOL(kernel_map);
#define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map))
BUG_ON((va - kernel_map.virt_addr) >> PUD_SHIFT);
BUG_ON((va - kernel_map.virt_addr) >> PGDIR_SHIFT);
BUG_ON((va - kernel_map.virt_addr) >> PGDIR_SHIFT);
kernel_map.page_offset = PAGE_OFFSET_L4;
kernel_map.page_offset = PAGE_OFFSET_L3;
kernel_map.page_offset = PAGE_OFFSET_L5;
end_va = kernel_map.virt_addr + kernel_map.xiprom_sz;
for (va = kernel_map.virt_addr; va < end_va; va += PMD_SIZE)
kernel_map.xiprom + (va - kernel_map.virt_addr),
start_va = kernel_map.virt_addr + (uintptr_t)&_sdata - (uintptr_t)&_start;
end_va = kernel_map.virt_addr + kernel_map.size;
kernel_map.phys_addr + (va - start_va),
end_va = kernel_map.virt_addr + kernel_map.size;
for (va = kernel_map.virt_addr; va < end_va; va += PMD_SIZE)
kernel_map.phys_addr + (va - kernel_map.virt_addr),
unsigned long kernel_start = kernel_map.virt_addr;
unsigned long kernel_end = kernel_start + kernel_map.size;
BUG_ON(!kernel_map.va_pa_offset);
return ((unsigned long)(x) - kernel_map.va_pa_offset);
BUG_ON(!kernel_map.va_pa_offset);
return ((void *)((unsigned long)(x) + kernel_map.va_pa_offset));
address_markers[KERNEL_MAPPING_NR].start_address = kernel_map.virt_addr;
struct map *kernel_map;
kernel_map = machine__kernel_map(machine);
if (map__load(kernel_map) < 0) {
map__for_each_symbol(kernel_map, sym, node) {
struct map *kernel_map = machine__kernel_map(&rep->session->machines.host);
struct kmap *kernel_kmap = kernel_map ? map__kmap(kernel_map) : NULL;
if (kernel_map == NULL ||
(dso__hit(map__dso(kernel_map)) &&
if (kernel_map && map__has_symbols(kernel_map)) {
struct map *kernel_map = machine__kernel_map(machine);
if (kernel_map)
map = kernel_map;