On Saturday 26 February 2011, Guan Xuetao wrote: > > > #ifndef __ASSEMBLY__ > > > > > > -# define __REG(x) (*((volatile unsigned long *)io_p2v(x))) > > > -# define __PREG(x) (io_v2p((unsigned long)&(x))) > > > +# define __REG(x) (void __iomem *)io_p2v(x) > > > > The patch looks correct, but if you make the the definition for > > PKUNITY_MMIO_BASE contain the cast to (void __iomem *), you no > > longer need another cast. > > Because the io_p2v(x) calculate x and PKUNITY_IOSPACE_BASE, > all registers should be added with (void __iomem *). > So I prefer to remain the previous patch. The problem with the definition of io_p2v is that it gives you an type that is impossible to use correctly, except in assembly code. Linux assumes that MMIO registers in virtual space are __iomem pointers, and we like that to be consistent. If you have a function that returns a virtual address, it should really have the same type as any other function that uses a virtual address. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html