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

Bug#536860: linux-image-2.6.26-2-sparc64: Kernel unaligned access at TPC[48bf10] __delayacct_add_tsk+0x48/0x15c



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


Reply to: