Tejun Heo writes: > Harvey Harrison wrote: > >>> I know it's ugly, but I had it done anyways. The one real problem I have > >>> with it is that if link and ap->pmp_link ever get changed to different types > >>> the compiler will not even warn as we cast away to (char *). To make it > >>> a bit more robust, a BUILD_BUG_ON checking the pointer types may be a > >>> good idea. > >> Sorry, but Nacked-by: Tejun Heo <htejun@xxxxxxxxx> > >> > > > > Can't say I really blame you, other than this one error, drivers/ata > > builds almost sparse-clean, and I had it done anyways. I wonder if > > a helper similar in spirit would be any better. This doesn't have > > any typechecking, but perhaps that could be dealt with too. > > > > Ran into a similar problem with mmzone.h, akpm has the patch, but > > maybe a helper (kernel.h?) would be cleaner. Or maybe it's just > > better to live with the sparse warnings.... > > > > /* > > * return the offset of the ptr from the base, in bytes. > > */ > > #define PTR_OFF(base, ptr) \ > > ((char *)ptr - (char *)base) > > > > if (PTR_OFF(ap->pmp_link, ++link) < ap->nr_pmp_links * sizeof(*link)) > > return link; > > Can you please explain why it warns against pointer substraction? Is it > because it can generate division? Pointer subtraction as commonly implemented implies a signed integer division, because it may need to convert a negative byte pointer difference to a negative array index difference. Seasoned C programmers avoid it like the plague... - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html