On Tuesday 29 July 2014 17:03:03 Mark Rutland wrote: > On Tue, Jul 29, 2014 at 04:20:46PM +0100, Arnd Bergmann wrote: > > On Tuesday 29 July 2014 11:15:45 Mark Salter wrote: > > > > - > > > > - __flush_dcache_area(release_addr, sizeof(release_addr[0])); > > > > + writeq_relaxed(__pa(secondary_holding_pen), release_addr); > > > > + __flush_dcache_area(release_addr, sizeof(*release_addr)); > > > > > > __flush_dcache_area((__force void *)release_addr, ... > > > > > > to avoid sparse warning. > > Presumably we'd get this for the write_relaxed too? writeq_relaxed() actually expects an __iomem pointer > > > > I think it would be cleaner to drop the __iomem annotation and use vmap() > > rather than ioremap(). That requires having a 'struct page' though, which > > I'm not sure you have. > > As far as I am aware, we'd only have a struct page for memory falling in > the linear map, so for the cases this patch is actually required we > wouldn't have a struct page. > > So it looks like I should just make release_addr a void __iomem *. Then > this line can just be: You mean make it a 'void *' instead of 'void __iomem *', right? > __flush_dcache_area(release_addr, 8); > > Where we could replace 8 with sizeof(u64), sizeof(__le64), etc if 8 is > too magic. > > How does that sound? Not sure where you're getting at. Using a regular pointer sounds fine, but then you have to cast the result of ioremap and do a manual cpu_to_le64 conversion on the assignment. Keeping the iomem annotation will also work,a nd then we only need the cast in the __flush_dcache_area call. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html