Hi Edgar,
On 20/05/16 16:51, Edgar E. Iglesias wrote:
From: "Edgar E. Iglesias" <edgar.igles...@xilinx.com>
Create a helper function to map regions as MEMORY with
cached attributes and read-write-execute permissions.
Providing setting the execute bit is useful, I would try to rationalize
the helpers by expanding map_regions_rw_cache (and maybe rename it).
Signed-off-by: Edgar E. Iglesias <edgar.igles...@xilinx.com>
---
xen/arch/arm/p2m.c | 26 ++++++++++++++++++++++++++
xen/include/asm-arm/p2m.h | 10 ++++++++++
2 files changed, 36 insertions(+)
diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
index db21433..7e788f9 100644
--- a/xen/arch/arm/p2m.c
+++ b/xen/arch/arm/p2m.c
@@ -1219,6 +1219,32 @@ int p2m_populate_ram(struct domain *d,
d->arch.p2m.default_access);
}
+int map_regions_rwx_cache(struct domain *d,
+ unsigned long start_gfn,
+ unsigned long nr,
+ unsigned long mfn)
+{
+ return apply_p2m_changes(d, INSERT,
+ pfn_to_paddr(start_gfn),
+ pfn_to_paddr(start_gfn + nr),
+ pfn_to_paddr(mfn),
+ MATTR_MEM, 0, p2m_ram_rw,
We should not use p2m_ram_rw for other mapping than DRAM. It could be
used by Xen to differentiate MMIO vs RAM.
+ p2m_access_rwx);
+}
+
+int unmap_regions_rwx_cache(struct domain *d,
+ unsigned long start_gfn,
+ unsigned long nr,
+ unsigned long mfn)
+{
+ return apply_p2m_changes(d, REMOVE,
+ pfn_to_paddr(start_gfn),
+ pfn_to_paddr(start_gfn + nr),
+ pfn_to_paddr(mfn),
+ MATTR_MEM, 0, p2m_invalid,
+ p2m_access_rwx);
+}
+
int map_regions_rw_cache(struct domain *d,
unsigned long start_gfn,
unsigned long nr,
diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
index d240d1e..294050e 100644
--- a/xen/include/asm-arm/p2m.h
+++ b/xen/include/asm-arm/p2m.h
@@ -144,6 +144,16 @@ int p2m_cache_flush(struct domain *d, xen_pfn_t start_mfn,
xen_pfn_t end_mfn);
/* Setup p2m RAM mapping for domain d from start-end. */
int p2m_populate_ram(struct domain *d, paddr_t start, paddr_t end);
+int map_regions_rwx_cache(struct domain *d,
+ unsigned long start_gfn,
+ unsigned long nr_mfns,
+ unsigned long mfn);
+
+int unmap_regions_rwx_cache(struct domain *d,
+ unsigned long start_gfn,
+ unsigned long nr_mfns,
+ unsigned long mfn);
+
int map_regions_rw_cache(struct domain *d,
unsigned long start_gfn,
unsigned long nr_mfns,
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel