arm/xen,arm64/xen: introduce p2m
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>
Thu, 17 Oct 2013 16:22:27 +0000 (16:22 +0000)
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>
Thu, 17 Oct 2013 16:22:27 +0000 (16:22 +0000)
commit4a19138c6505e224d9f4cc2fe9ada9188d7100ea
treecff1b72f69858d6bdfb0486e082de13e8b93f9dc
parent25b719d7b45947a79d298414cdfb5ec8fadf0ec8
arm/xen,arm64/xen: introduce p2m

Introduce physical to machine and machine to physical tracking
mechanisms based on rbtrees for arm/xen and arm64/xen.

We need it because any guests on ARM are an autotranslate guests,
therefore a physical address is potentially different from a machine
address. When programming a device to do DMA, we need to be
extra-careful to use machine addresses rather than physical addresses to
program the device. Therefore we need to know the physical to machine
mappings.

For the moment we assume that dom0 starts with a 1:1 physical to machine
mapping, in other words physical addresses correspond to machine
addresses. However when mapping a foreign grant reference, obviously the
1:1 model doesn't work anymore. So at the very least we need to be able
to track grant mappings.

We need locking to protect accesses to the two trees.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Changes in v8:
- move pfn_to_mfn and mfn_to_pfn to page.h as static inline functions;
- no need to walk the tree if phys_to_mach.rb_node is NULL;
- correctly handle multipage p2m entries;
- substitute the spin_lock with a rwlock.
arch/arm/include/asm/xen/page.h
arch/arm/xen/Makefile
arch/arm/xen/p2m.c [new file with mode: 0644]
arch/arm64/xen/Makefile