Hi Paul, On 07/06/14 04:46, Paul E. McKenney wrote: > On Fri, May 30, 2014 at 11:29:41AM +1000, Greg Ungerer wrote: >> On 29/05/14 23:11, One Thousand Gnomes wrote: >>> On Thu, 29 May 2014 12:08:32 +1000 >>> Greg Ungerer <g...@uclinux.org> wrote: >>> >>>> Hi All, >>>> >>>> Inside kernel/rcy/tree.c in __call_rcu() it does an alignment check on >>>> the head pointer passed in. This trips on m68k systems, because they only >>>> need alignment of 32bit quantities to 16bit boundaries. >>> >>> __alignof perhaps ? >> >> That might do. Change then becomes something like: >> >> --- a/kernel/rcu/tree.c >> +++ b/kernel/rcu/tree.c >> @@ -2467,7 +2467,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct >> rcu_ >> unsigned long flags; >> struct rcu_data *rdp; >> >> - WARN_ON_ONCE((unsigned long)head & 0x3); /* Misaligned rcu_head! */ >> + WARN_ON_ONCE((unsigned long)head & (__alignof__(head) - 1)); /* >> Misaligned rcu_head! */ > > Hmmm... The purpose of the check is to reserve the low-order bits to > allow RCU to classify callbacks as being time-critical or not. RCU > can probably live with a single bit, but if there is some architecture > out there that simply refuses to do alignment, I need to know about it.
This change was prompted by this check tripping, so the alignment issue is certainly real for m68k. Regards Greg > (See "git show 0bb7b59d6e2b8" for more info.) > > So how about this instead? > > - WARN_ON_ONCE((unsigned long)head & 0x1); /* Misaligned rcu_head! */ > > (Trying to remember if I have seen Linux kernel code that uses both > the lower bits...) > > Thanx, Paul > >> if (debug_rcu_head_queue(head)) { >> /* Probable double call_rcu(), so leak the callback. */ >> ACCESS_ONCE(head->func) = rcu_leak_callback; >> >> Thanks >> Greg >> >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majord...@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ >> > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/