Re: [RFC-UGLYPATCH] ata: small optimization in linux/libata.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2008-02-15 at 08:39 +0900, Tejun Heo wrote:
> Harvey Harrison wrote:
> > This patch may be too ugly to live, it suppresses a lot of
> > sparse warnings in the libata build and produces slightly
> > tighter code. (4 instructions vs 5 and a few bytes saved).
> > 
> > include/linux/libata.h:1214:13: warning: potentially expensive pointer subtraction
> > ---

> > 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;

Cheers,

Harvey

-
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

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux