Message ID | 1463759488-11900-5-git-send-email-edgar.iglesias@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Edgar, On 20/05/16 16:51, Edgar E. Iglesias wrote: > From: "Edgar E. Iglesias" <edgar.iglesias@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.iglesias@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,
On Mon, May 23, 2016 at 04:36:03PM +0100, Julien Grall wrote: > Hi Edgar, > > On 20/05/16 16:51, Edgar E. Iglesias wrote: > >From: "Edgar E. Iglesias" <edgar.iglesias@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). Thanks, I'll have change the code around to do that. > > >Signed-off-by: Edgar E. Iglesias <edgar.iglesias@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. OK, I see. I'll fix that. Cheers, Edgar > > >+ 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
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, + 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,