Finish initializing the memory subsystem by mapping the direct map and
frame table.
The frametable_virt_start variable is introduced with substracting
of an offest ( taking into account that RAM start could be not 0 ) to save
virtual address space of FRAMETABLE. Also it simplifies the
calculations and thereby improves performance for page_to_mfn(), mfn_to_page()
as there is no frametable_base_pdx or frametable_base_mfn ( if CONFIG_PDX_COMPRESSION=n);
The directmap_virt_start is introduced and shifted lower in the VA space to
(DIRECTMAP_VIRT_START - masked_low_bits_of_ram_start_address) to avoid
wasting a large portion of the directmap space, this also allows for simple
VA <-> PA translations. Also aligns DIRECTMAP_VIRT_START to a GB boundary
(for Sv39; for other MMU mode boundaries will be bigger ) by masking the
bits of the RAM start address to enable the use of superpages in
map_pages_to_xen().
In addition, initialize the VMAP_DEFAULT region, finalize the boot allocator,
and update the system state from early_boot to boot.
Introduce share_xen_page_with_guest() to deal with linkage error which occurs
because of DCE:
riscv64-linux-gnu-ld: prelink.o: in function `tasklet_kill':
/build/xen/common/tasklet.c:176: undefined reference to
`share_xen_page_with_guest'
riscv64-linux-gnu-ld: ./.xen-syms.0: hidden symbol `share_xen_page_with_guest'
isn't defined riscv64-linux-gnu-ld: final link failed: bad value
The function maddr_to_virt() is introduced as part of this patch series.
virt_to_maddr() is updated as it is started to use direct_virt_start which is
introduced in this patch series.
Introduce DIRECTMAP_VIRT_END to have a convient way to do some basic
checks of address ranges.
---
Changes in V7:
- Rebase on top of current staging.
- refactor maddr_to_virt().
- Update DIRECTMAP_SIZE to be inclusive.
- Add Acked-by for the first patch of this patch series.
---
Changes in V6:
- Rebase on top of current staging.
- Update the cover letter message.
- Other changes are only connected to path 1 of the current patch series some
please look at the changes there.
---
Changes in V5:
- Rebase on top of current staging.
- Drop unnecessary local variables.
- Fix issue with virt_to_maddr() ( used DIRECTMAP_VIRT_START in if-condition
instead of direct_virt_start ).
- Update setup_directmap_mappings() and setup_frametable_mappings() ( details
look in patch 1).
---
Changes in V4:
- Rebase on top of current staging.
- Fix issues with setup_frametable_mappings() and setup_directmap_mappings().
- Drop unnecessary local variables.
- Minor log messsages fixes.
---
Changes in V3:
- Update the cover letter message as DIRECTMAP connected things were changed.
- Update setup_mm(), setup_{directmap,frametable}_mappings.
- Introduce ROUNDDOWN in <xen/macros.h>
- All other details please look at the specific patch.
---
Changes in V2:
- update the cover letter message.
- merge first 3 patches to "introduce setup_mm()" patch as after setup_mm()
rework all the things in first two patches of v1 started to use changes
introduced in "introduce setup_mm()" patch.
- add Acked-by for some patch series.
- All other details please look at the specific patch.
---
Oleksii Kurochko (3):
xen/riscv: introduce setup_mm()
xen/riscv: initialize the VMAP_DEFAULT virtual range
xen/riscv: finalize boot allocator and transition to boot state
xen/arch/riscv/include/asm/config.h | 3 +-
xen/arch/riscv/include/asm/mm.h | 19 ++--
xen/arch/riscv/include/asm/setup.h | 2 +
xen/arch/riscv/mm.c | 159 ++++++++++++++++++++++++++--
xen/arch/riscv/pt.c | 6 ++
xen/arch/riscv/setup.c | 14 +++
xen/include/xen/macros.h | 1 +
7 files changed, 191 insertions(+), 13 deletions(-)
--
2.47.0