On Mon, 2011-08-15 at 00:48 -0500, Jonathan Nieder wrote:
> Hi,
>
> Jonathan Nieder wrote:
>
> > I wonder how this should be dealt with wrt squeeze.
>
> For your amusement, here's an ugly proof-of-concept patch (against
> 2.6.32.y) that just does unaligned reads from struct taskstats. The
> only redeeming feature is that it doesn't break ABI. I'd be curious
> to hear whether it works and the effect on performance.
>
> If it were to make sense to actually apply something like this, it
> would only be on 64-bit arches that do not have efficient unaligned
> access.
get_unaligned() and put_unaligned() will be 'free' on the architectures
that do have efficient unaligned access; i.e. the compiler should expand
the various inline functions and macros to a simple load or store
instruction. So these functions should be sufficient:
static inline u64 get_misaligned_64(const u64 *ptr)
{
if (sizeof(long) == 8)
return get_unaligned(ptr);
else
return *ptr;
}
static inline void put_misaligned_64(u64 value, u64 *ptr)
{
if (sizeof(long) == 8)
put_unaligned(value, ptr);
else
*ptr = value;
}
Ben.
Attachment:
signature.asc
Description: This is a digitally signed message part