diff mbox

[2.6.37-rc5] Build error on parisc.

Message ID 201012150801.oBF81EVm047830@www262.sakura.ne.jp
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

Tetsuo Handa Dec. 15, 2010, 8:01 a.m. UTC
[2.6.37-rc5] Build error on parisc.

Commit 5635c10d "net: make sure struct dst_entry refcount is aligned on 64 bytes"
uses manual padding. I triggered BUILD_BUG_ON() when using
http://kernel.org/pub/tools/crosstool/files/bin/i686/4.5.1/i686-gcc-4.5.1-nolibc_hppa64-linux.tar.bz2 .

  make -s CROSS_COMPILE=hppa64-linux- ARCH=parisc

  include/net/dst.h: In function 'dst_hold':
  include/net/dst.h:161:2: error: negative width in bit-field '<anonymous>'

I think below patch can fix the error but that commit says that we cannot use
__atribute((aligned)). Why?

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

David Miller Dec. 15, 2010, 6:19 p.m. UTC | #1
From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date: Wed, 15 Dec 2010 17:01:14 +0900

> [2.6.37-rc5] Build error on parisc.
> 
> Commit 5635c10d "net: make sure struct dst_entry refcount is aligned on 64 bytes"
> uses manual padding. I triggered BUILD_BUG_ON() when using
> http://kernel.org/pub/tools/crosstool/files/bin/i686/4.5.1/i686-gcc-4.5.1-nolibc_hppa64-linux.tar.bz2 .
> 
>   make -s CROSS_COMPILE=hppa64-linux- ARCH=parisc
> 
>   include/net/dst.h: In function 'dst_hold':
>   include/net/dst.h:161:2: error: negative width in bit-field '<anonymous>'
> 
> I think below patch can fix the error but that commit says that we cannot use
> __atribute((aligned)). Why?

We don't want to create holes of unused space in the structure, we want
to know exactly how every byte of space is being used so nothing is
wasted when all features are enabed.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eric Dumazet Dec. 15, 2010, 6:22 p.m. UTC | #2
Le mercredi 15 décembre 2010 à 10:19 -0800, David Miller a écrit :
> From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
> Date: Wed, 15 Dec 2010 17:01:14 +0900
> 
> > [2.6.37-rc5] Build error on parisc.
> > 
> > Commit 5635c10d "net: make sure struct dst_entry refcount is aligned on 64 bytes"
> > uses manual padding. I triggered BUILD_BUG_ON() when using
> > http://kernel.org/pub/tools/crosstool/files/bin/i686/4.5.1/i686-gcc-4.5.1-nolibc_hppa64-linux.tar.bz2 .
> > 
> >   make -s CROSS_COMPILE=hppa64-linux- ARCH=parisc
> > 
> >   include/net/dst.h: In function 'dst_hold':
> >   include/net/dst.h:161:2: error: negative width in bit-field '<anonymous>'
> > 
> > I think below patch can fix the error but that commit says that we cannot use
> > __atribute((aligned)). Why?
> 
> We don't want to create holes of unused space in the structure, we want
> to know exactly how every byte of space is being used so nothing is
> wasted when all features are enabed.

Yes, sorry for missing your mail Tetsuo.



--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/include/net/dst.h b/include/net/dst.h
index ffe9cb7..02df303 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -62,8 +62,6 @@  struct dst_entry {
 	struct hh_cache		*hh;
 #ifdef CONFIG_XFRM
 	struct xfrm_state	*xfrm;
-#else
-	void			*__pad1;
 #endif
 	int			(*input)(struct sk_buff*);
 	int			(*output)(struct sk_buff*);
@@ -74,23 +72,15 @@  struct dst_entry {
 
 #ifdef CONFIG_NET_CLS_ROUTE
 	__u32			tclassid;
-#else
-	__u32			__pad2;
-#endif
-
-
-	/*
-	 * Align __refcnt to a 64 bytes alignment
-	 * (L1_CACHE_SIZE would be too much)
-	 */
-#ifdef CONFIG_64BIT
-	long			__pad_to_align_refcnt[1];
 #endif
 	/*
 	 * __refcnt wants to be on a different cache line from
 	 * input/output/ops or performance tanks badly
+	 *
+	 * Align __refcnt to a 64 bytes alignment
+	 * (L1_CACHE_SIZE would be too much)
 	 */
-	atomic_t		__refcnt;	/* client references	*/
+	atomic_t		__refcnt __aligned(64);	/* client references */
 	int			__use;
 	unsigned long		lastuse;
 	union {
@@ -154,11 +144,6 @@  dst_metric_locked(struct dst_entry *dst, int metric)
 
 static inline void dst_hold(struct dst_entry * dst)
 {
-	/*
-	 * If your kernel compilation stops here, please check
-	 * __pad_to_align_refcnt declaration in struct dst_entry
-	 */
-	BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63);
 	atomic_inc(&dst->__refcnt);
 }