The function to map xen memory is not the same on every architecture.
On ARM, the mappings require to be cacheable and pmap_mapdev doesn't do that.
Replace every call of pmap_mapdev in xen code by xen_pmap
if (xen_hvm_domain()) {
xs.evtchn = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN);
xs.gpfn = hvm_get_parameter(HVM_PARAM_STORE_PFN);
- xen_store = pmap_mapdev(xs.gpfn * PAGE_SIZE, PAGE_SIZE);
+ xen_store = xen_pmap(xs.gpfn * PAGE_SIZE, PAGE_SIZE);
xs.initialized = true;
} else if (xen_pv_domain()) {
if (HYPERVISOR_start_info->store_evtchn == 0) {
/* Everything below this point is not included by assembler (.S) files. */
#ifndef __ASSEMBLY__
+#include <vm/vm.h>
+#include <vm/pmap.h>
+
+static inline void *
+xen_pmap(vm_paddr_t pa, vm_size_t size)
+{
+ return (pmap_mapdev(pa, size));
+}
+
#endif /* !__ASSEMBLY__ */
#endif /* _MACHINE_X86_XEN_XEN_OS_H_ */