RE: [Xen-devel] __ia64__ ifdef in xmalloc.c: "Fix ar.unat handling forfast paths"

From: Tian, Kevin <>
Date: 2005-11-22 15:44:25
>From: Rusty Russell
>Sent: 20051121 12:53
>Hi all,
>	While browsing the code, I noticed this in xmalloc.c:
>#ifndef __ia64__
>    BUG_ON(align > SMP_CACHE_BYTES);
>	This is clearly wrong: due to header alignment we cannot give you a
>greater alignment than SMP_CACHE_BYTES.  Overriding this will cause the
>allocation to succeed, but not give the alignment requested.  It usually
>indicates the caller should be fixed.
>Does someone with an ia64 box know why, or want to rip it out and see
>what breaks?
>A bad analogy is like a leaky screwdriver -- Richard Braakman

I didn't note that ifdef before, and removing it doesn't break dom0. I doubt the reason from following definition which is copied from Linux directly into Xen:

   * The "aligned" directive can only _increase_ alignment, so this is
   * safe and provides an easy way to avoid wasting space on a
   * uni-processor:
# define SMP_CACHE_SHIFT	3
# define SMP_CACHE_BYTES	(1 << 3)

For a UP system, SMP_CACHE_BYTES is only 8 bytes to save space. Then maybe several months ago, there's such requirement to xmalloc a 16bytes aligned (legal on ia64 system like a long double) structure and then failed due to BUG_ON with an immediate lazy hack to add ifdef there. For now, such case seems disappearing after a quick test.

However I think the preferred way is to increase SMP_CACHE_SHIFT to 4 to match maximum allowed alignment value. But I'm not sure from the comment above why "3" is defined there on native linux. CC to linux-ia64 list for standard answer. ;-)

To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to
More majordomo info at
Received on Tue Nov 22 15:45:18 2005

This archive was generated by hypermail 2.1.8 : 2005-11-22 15:45:27 EST