On Sun, Jun 06, 2010 at 08:51:05PM +0200, Geert Uytterhoeven wrote: > On Sun, Jun 6, 2010 at 20:37, Brad Boyer <f...@allandria.com> wrote: > > On Sun, Jun 06, 2010 at 10:42:40AM +0200, Andreas Schwab wrote: > >> Brad Boyer <f...@allandria.com> writes: > >> > >> > I may be missing something obvious, but why don't we just change the > >> > kernel to allow 2-byte alignment for m68k? The comment in futex.c > >> > just says "natural" alignment but is then hard-coded for sizeof(u32). > >> > >> Natural alignment *is* sizeof. > > > > OK, then I guess my real question is "why does it need alignment"? I > > obviously don't have a good understanding of the futex code, but this > > seems like something that could have pretty significant effects. It > > looks like the need for natural alignment is to avoid alignment > > exceptions in the kernel or something like that, but m68k doesn't > > have such a thing since the hardware always does it. Please let > > me know what I missing here. I even looked at the 68040 UM to see > > if the CAS instruction does anything odd, since I know some other > > chips have some weird limits on atomic instructions. > > As Andreas already pointed out: > > kernel/futex.c: > > | static void get_futex_key_refs(union futex_key *key) > | { > | if (!key->both.ptr) > | return; > | > | switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) { > | case FUT_OFF_INODE: > | atomic_inc(&key->shared.inode->i_count); > | break; > | case FUT_OFF_MMSHARED: > | atomic_inc(&key->private.mm->mm_count); > | break; > | } > | } > > and include/linux/futex.h: > > | /* > | * Futexes are matched on equal values of this key. > | * The key type depends on whether it's a shared or private mapping. > | * Don't rearrange members without looking at hash_futex(). > | * > | * offset is aligned to a multiple of sizeof(u32) (== 4) by definition. > | * We use the two low order bits of offset to tell what is the kind of key : > | * 00 : Private process futex (PTHREAD_PROCESS_PRIVATE) > | * (no reference on an inode or mm) > | * 01 : Shared futex (PTHREAD_PROCESS_SHARED) > | * mapped on a file (reference on the underlying inode) > | * 10 : Shared futex (PTHREAD_PROCESS_SHARED) > | * (but private mapping on an mm, and reference taken on it) > | */ > | > | #define FUT_OFF_INODE 1 /* We set bit 0 if key has a reference on inode > */ > | #define FUT_OFF_MMSHARED 2 /* We set bit 1 if key has a reference on mm */ > > I.e. the futex code uses the two low order bits for its private > purposes (nihil novi sub sole). > Not much we can do about that...
why does not a simple "__attribute__ ((aligned (4)))" work? Richard -- To UNSUBSCRIBE, email to debian-68k-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20100607195211.ga6...@linux-m68k.org