Messages in this thread | | | Date | Thu, 31 Jan 2008 21:22:20 +0800 | From | "huang ying" <> | Subject | Re: [PATCH 4/5] x86: add executable mapping support to ioremap |
| |
On Jan 31, 2008 9:00 PM, Thomas Gleixner <tglx@linutronix.de> wrote: > On Thu, 31 Jan 2008, Huang, Ying wrote: > > > This patch makes ioremap() can be used to map pages as executable, > > this is needed by EFI support. > > > +extern void __iomem *__ioremap(unsigned long phys_addr, unsigned long size, > > + enum ioremap_mode mode, > > + enum ioremap_xmode xmode); > > + > > Why do you want to add a new API? > > addr = ioremap(phys_addr, len); > set_memory_x(addr); > > should do what you want already. I think Arjan was not very clear in > his reply yesterday.
In current implementation, change_page_attr() can be used to change identity map only. At least I can find __pa() are used in change_page_attr_addr() to get physical address. So I think change_page_attr() should be fixed firstly.
> We tried to avoid the intermingling of ioremap and the page attribute > settings. We just kept the cached/uncached part. > > Now thinking about it further, we should probably fully decouple the > mapping and the attribute change and remove the enum argument from > __ioremap and change the implementations of ioremap_cached and > ioremap_uncached to do the attribute setting after the remap. > > That way ioremap_chached and ioremap_uncached just would become what > they should be: conveniance functions for the developers.
If the memory area be ioremap() has identity map too. We need two set_memory_xxx(addr). That is, we need:
addr = ioremap(phys_addr, len); set_memory_x(addr); if (phys_addr < (end_pfn_mapped >> PAGE_SHIFT)) set_memory_x(__va(phys_addr));
Maybe we can hide the fact of identity map into set_memory_xxx(), just specify the physical address to set_memory_xxx() too.
Best Regards, Huang Ying
| |