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

(usagi-users 00989) Re: Problem with USAGI on Linux ARM



In article <XFMail.20011107180408.guido.barzini@xxxxxxxxxx> (at Wed, 07 Nov 2001 18:04:08 -0000 (GMT)), Guido Barzini <guido.barzini@xxxxxxxxxx> says:

>  The looks like a problem with gcc/ARM padding structures differently from
> gcc/i386 (the ARM works better with aligned quantities, so the compiler is more
> likely to insert padding), but I haven't been able to diagnose it further. I
> believe that it isn't a compile bug, since the default IPv6 support in 2.4.7
> behaves correctly. 

Hmm, could you try this, please?

Index: kernel/linux24/net/ipv6/ndisc.c
===================================================================
RCS file: /cvsroot/usagi/usagi/kernel/linux24/net/ipv6/ndisc.c,v
retrieving revision 1.73
diff -u -r1.73 ndisc.c
--- kernel/linux24/net/ipv6/ndisc.c	2001/09/25 01:38:09	1.73
+++ kernel/linux24/net/ipv6/ndisc.c	2001/11/07 19:56:05
@@ -710,7 +710,7 @@
 	}
 
 	if (ndopts.nd_opts_src_lladdr) {
-		lladdr = (u8*)(ndopts.nd_opts_src_lladdr + 1);
+		lladdr = ((u8*)ndopts.nd_opts_src_lladdr) + 2;
 		lladdrlen = ndopts.nd_opts_src_lladdr->nd_opt_len << 3;
 		if (lladdrlen != NDISC_OPT_SPACE(skb->dev->addr_len))
 			goto bad;
@@ -898,7 +898,7 @@
 		goto bad;
 	}
 	if (ndopts.nd_opts_tgt_lladdr) {
-		lladdr = (u8*)(ndopts.nd_opts_tgt_lladdr + 1);
+		lladdr = ((u8*)ndopts.nd_opts_tgt_lladdr) + 2;
 		lladdrlen = ndopts.nd_opts_tgt_lladdr->nd_opt_len << 3;
 		if (lladdrlen != NDISC_OPT_SPACE(skb->dev->addr_len))
 			goto bad;
@@ -1009,7 +1009,7 @@
 	}
 
 	if (ndopts.nd_opts_src_lladdr) {
-		lladdr = (u8 *)(ndopts.nd_opts_src_lladdr + 1);
+		lladdr = ((u8 *)ndopts.nd_opts_src_lladdr) + 2;
 		lladdrlen = ndopts.nd_opts_src_lladdr->nd_opt_len << 3;
 		if (lladdrlen != NDISC_OPT_SPACE(skb->dev->addr_len))
 			goto out;
@@ -1191,7 +1191,7 @@
 		int lladdrlen;
 		int notify;
 		if (ndopts.nd_opts_src_lladdr) {
-			lladdr = (u8*)((ndopts.nd_opts_src_lladdr)+1);
+			lladdr = ((u8*)ndopts.nd_opts_src_lladdr)+2;
 			lladdrlen = ndopts.nd_opts_src_lladdr->nd_opt_len << 3;
 			if (lladdrlen != NDISC_OPT_SPACE(skb->dev->addr_len))
 				goto out;
@@ -1315,7 +1315,7 @@
 		return;
 	}
 	if (ndopts.nd_opts_tgt_lladdr) {
-		lladdr = (u8*)(ndopts.nd_opts_tgt_lladdr + 1);
+		lladdr = ((u8*)ndopts.nd_opts_tgt_lladdr) + 2;
 		lladdrlen = ndopts.nd_opts_tgt_lladdr->nd_opt_len << 3;
 		if (lladdrlen != NDISC_OPT_SPACE(skb->dev->addr_len))
 			goto out;

--yoshfuji