* net/sctp/sm_make_chunk.c alignment problems on parisc64
@ 2003-09-12 16:46 Arnaldo Carvalho de Melo
2003-09-17 23:06 ` Sridhar Samudrala
0 siblings, 1 reply; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2003-09-12 16:46 UTC (permalink / raw)
To: Sridhar Samudrala
Cc: Linux Networking Development Mailing List, lksctp-developers
Latest 2.6 bk tree, but I think this is hanging there for quite a while.
CC [M] net/sctp/sm_make_chunk.o
{standard input}: Assembler messages:
{standard input}:2386: Error: Field not properly aligned [8] (52).
{standard input}:2386: Error: Invalid operands
{standard input}:2398: Error: Field not properly aligned [8] (52).
{standard input}:2398: Error: Invalid operands
make[2]: *** [net/sctp/sm_make_chunk.o] Error 1
make[1]: *** [net/sctp] Error 2
make: *** [net] Error 2
it happens in the sctp_pack_cookie function.
- Arnaldo
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: net/sctp/sm_make_chunk.c alignment problems on parisc64 2003-09-12 16:46 net/sctp/sm_make_chunk.c alignment problems on parisc64 Arnaldo Carvalho de Melo @ 2003-09-17 23:06 ` Sridhar Samudrala 2003-09-19 2:55 ` David S. Miller 0 siblings, 1 reply; 8+ messages in thread From: Sridhar Samudrala @ 2003-09-17 23:06 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Linux Networking Development Mailing List, lksctp-developers On Fri, 12 Sep 2003, Arnaldo Carvalho de Melo wrote: > Latest 2.6 bk tree, but I think this is hanging there for quite a while. > > CC [M] net/sctp/sm_make_chunk.o > {standard input}: Assembler messages: > {standard input}:2386: Error: Field not properly aligned [8] (52). > {standard input}:2386: Error: Invalid operands > {standard input}:2398: Error: Field not properly aligned [8] (52). > {standard input}:2398: Error: Invalid operands > make[2]: *** [net/sctp/sm_make_chunk.o] Error 1 > make[1]: *** [net/sctp] Error 2 > make: *** [net] Error 2 > > it happens in the sctp_pack_cookie function. I don't see this problem on i386, ia64 or ppc64. Can someone familiar with parisc64 provide more details or submit a a patch to fix this problem? Thanks Sridhar ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: net/sctp/sm_make_chunk.c alignment problems on parisc64 2003-09-17 23:06 ` Sridhar Samudrala @ 2003-09-19 2:55 ` David S. Miller 2003-09-19 22:15 ` Sridhar Samudrala 0 siblings, 1 reply; 8+ messages in thread From: David S. Miller @ 2003-09-19 2:55 UTC (permalink / raw) To: Sridhar Samudrala; +Cc: acme, netdev, lksctp-developers On Wed, 17 Sep 2003 16:06:18 -0700 (PDT) Sridhar Samudrala <sri@us.ibm.com> wrote: > I don't see this problem on i386, ia64 or ppc64. Can someone > familiar with parisc64 provide more details or submit a a patch to > fix this problem? As an example, if you have an structure member of type "char": struct foo { char a; char b[4]; }; And then try to do something like this: struct foo *p; unsigned int *v; v = (unsigned int *) (&p->b[0]); *v = 0; The build is going to explode on parisc because this simply is not allowed. You cannot access a structure member as an object which has larger alignment than is guarenteed for the type that member has. In the above example we're trying to access with 'unsigned int' alignment a member which is only guarenteed to have the alignment for a 'char'. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: net/sctp/sm_make_chunk.c alignment problems on parisc64 2003-09-19 2:55 ` David S. Miller @ 2003-09-19 22:15 ` Sridhar Samudrala 2003-09-20 6:39 ` David S. Miller 0 siblings, 1 reply; 8+ messages in thread From: Sridhar Samudrala @ 2003-09-19 22:15 UTC (permalink / raw) To: David S. Miller; +Cc: acme, netdev, lksctp-developers On Thu, 18 Sep 2003, David S. Miller wrote: > On Wed, 17 Sep 2003 16:06:18 -0700 (PDT) > Sridhar Samudrala <sri@us.ibm.com> wrote: > > > I don't see this problem on i386, ia64 or ppc64. Can someone > > familiar with parisc64 provide more details or submit a a patch to > > fix this problem? > > As an example, if you have an structure member of type "char": > > struct foo { > char a; > char b[4]; > }; > > And then try to do something like this: > > struct foo *p; > unsigned int *v; > > v = (unsigned int *) (&p->b[0]); > *v = 0; > > The build is going to explode on parisc because this simply is not > allowed. You cannot access a structure member as an object which > has larger alignment than is guarenteed for the type that member > has. > > In the above example we're trying to access with 'unsigned int' > alignment a member which is only guarenteed to have the alignment > for a 'char'. Thanks for explaining with an example. But unfortunately i am not able see this problem with a parisc64 cross compiler on i386. So it makes it hard to debug or fix it. Looks like this happens only when building natively on a parisc64 machine which i don't have access to. >From the following original note from Arnaldo ----------------------------------------- CC [M] net/sctp/sm_make_chunk.o {standard input}: Assembler messages: {standard input}:2386: Error: Field not properly aligned [8] (52). {standard input}:2386: Error: Invalid operands {standard input}:2398: Error: Field not properly aligned [8] (52). {standard input}:2398: Error: Invalid operands make[2]: *** [net/sctp/sm_make_chunk.o] Error 1 make[1]: *** [net/sctp] Error 2 make: *** [net] Error 2 it happens in the sctp_pack_cookie function. ----------------------------------------- I am not able to figure out the exact code which is causing this problem as the line numbers reported seem to correspond to the assembled file. I am guessing that the following lines in sctp_pack_cookie() may be the suspects. /* Copy the peer's init packet. */ memcpy(&cookie->c.peer_init[0], init_chunk->chunk_hdr, ntohs(init_chunk->chunk_hdr->length)); /* Copy the raw local address list of the association. */ memcpy((__u8 *)&cookie->c.peer_init[0] + ntohs(init_chunk->chunk_hdr->length), raw_addrs, addrs_len); Am i right? But here, i don't see any accesses to a member as an object which has larger alignment. If so, is there an easy way to fix these assembler errors on parisc64? Also while reviewing the code in sctp_pack_cookie(), i noticed a structure copy. Are structure copies portable across all the archictectures? Should we replace it with a memcpy? Thanks Sridhar ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: net/sctp/sm_make_chunk.c alignment problems on parisc64 2003-09-19 22:15 ` Sridhar Samudrala @ 2003-09-20 6:39 ` David S. Miller 2003-09-20 15:54 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 8+ messages in thread From: David S. Miller @ 2003-09-20 6:39 UTC (permalink / raw) To: Sridhar Samudrala; +Cc: acme, netdev, lksctp-developers On Fri, 19 Sep 2003 15:15:53 -0700 (PDT) Sridhar Samudrala <sri@us.ibm.com> wrote: > But unfortunately i am not able see this problem with a parisc64 cross compiler > on i386. So it makes it hard to debug or fix it. Looks like this happens only > when building natively on a parisc64 machine which i don't have access to. Did you build with or without SMP enabled? Anyways, try to work with Arnaldo to figure out the precise statement causing the problems. > Also while reviewing the code in sctp_pack_cookie(), i noticed a structure > copy. Are structure copies portable across all the archictectures? Should we > replace it with a memcpy? Yes, structure copies are portable. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: net/sctp/sm_make_chunk.c alignment problems on parisc64 2003-09-20 6:39 ` David S. Miller @ 2003-09-20 15:54 ` Arnaldo Carvalho de Melo 2003-09-22 22:06 ` Sridhar Samudrala 0 siblings, 1 reply; 8+ messages in thread From: Arnaldo Carvalho de Melo @ 2003-09-20 15:54 UTC (permalink / raw) To: David S. Miller; +Cc: Sridhar Samudrala, netdev, lksctp-developers Em Fri, Sep 19, 2003 at 11:39:09PM -0700, David S. Miller escreveu: > On Fri, 19 Sep 2003 15:15:53 -0700 (PDT) > Sridhar Samudrala <sri@us.ibm.com> wrote: > > > But unfortunately i am not able see this problem with a parisc64 cross compiler > > on i386. So it makes it hard to debug or fix it. Looks like this happens only > > when building natively on a parisc64 machine which i don't have access to. > > Did you build with or without SMP enabled? Yes, here I'm building without SMP enabled. > Anyways, try to work with Arnaldo to figure out the precise statement > causing the problems. The problem is right at: tv_add(&asoc->cookie_life, &cookie->c.expiration); and more specifically the problem is with cookie->c.expiration, that in turn points to this line: cookie = (struct sctp_signed_cookie *) retval->body; Now retval is of this type: /* Section 3.3.3.1 State Cookie (7) */ typedef struct sctp_cookie_param { sctp_paramhdr_t p; __u32 body[0]; } sctp_cookie_param_t __attribute__((packed)); I removed the packed attribute both from sctp_cookie_param_t and sctp_paramhdr_t, the problem persists, ideas? Please send any patch you come up with, I'll be happy to test it. - Arnaldo ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: net/sctp/sm_make_chunk.c alignment problems on parisc64 2003-09-20 15:54 ` Arnaldo Carvalho de Melo @ 2003-09-22 22:06 ` Sridhar Samudrala 2003-09-25 20:52 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 8+ messages in thread From: Sridhar Samudrala @ 2003-09-22 22:06 UTC (permalink / raw) To: Arnaldo Carvalho de Melo; +Cc: David S. Miller, netdev, lksctp-developers On Sat, 20 Sep 2003, Arnaldo Carvalho de Melo wrote: > Em Fri, Sep 19, 2003 at 11:39:09PM -0700, David S. Miller escreveu: > > On Fri, 19 Sep 2003 15:15:53 -0700 (PDT) > > Sridhar Samudrala <sri@us.ibm.com> wrote: > > > > > But unfortunately i am not able see this problem with a parisc64 cross compiler > > > on i386. So it makes it hard to debug or fix it. Looks like this happens only > > > when building natively on a parisc64 machine which i don't have access to. > > > > Did you build with or without SMP enabled? > > Yes, here I'm building without SMP enabled. I also started seeing this problem when i enabled CONFIG_64BIT with the cross-compiler. > > > Anyways, try to work with Arnaldo to figure out the precise statement > > causing the problems. > > The problem is right at: > > tv_add(&asoc->cookie_life, &cookie->c.expiration); > > Please send any patch you come up with, I'll be happy to test it. The problem seems to be the static inline routine tv_add. When i converted it into a regular function or a macro, the problem went away. May be parisc64 compiler has some issues with static inlines. Arnaldo, Could you please try out this patch which converts tv_add() to a macro TIMEVAL_ADD() Thanks Sridhar ----------------------------------------------------------------------------- diff -Nru a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h --- a/include/net/sctp/sctp.h Mon Sep 22 14:40:46 2003 +++ b/include/net/sctp/sctp.h Mon Sep 22 14:40:46 2003 @@ -495,22 +495,19 @@ #define tv_lt(s, t) \ (s.tv_sec < t.tv_sec || (s.tv_sec == t.tv_sec && s.tv_usec < t.tv_usec)) -/* Stolen from net/profile.h. Using it from there is more grief than - * it is worth. - */ -static inline void tv_add(const struct timeval *entered, struct timeval *leaved) -{ - time_t usecs = leaved->tv_usec + entered->tv_usec; - time_t secs = leaved->tv_sec + entered->tv_sec; - - if (usecs >= 1000000) { - usecs -= 1000000; - secs++; - } - leaved->tv_sec = secs; - leaved->tv_usec = usecs; -} - +/* Add tv1 to tv2. */ +#define TIMEVAL_ADD(tv1, tv2) \ +({ \ + suseconds_t usecs = (tv2).tv_usec + (tv1).tv_usec; \ + time_t secs = (tv2).tv_sec + (tv1).tv_sec; \ +\ + if (usecs >= 1000000) { \ + usecs -= 1000000; \ + secs++; \ + } \ + (tv2).tv_sec = secs; \ + (tv2).tv_usec = usecs; \ +}) /* External references. */ diff -Nru a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c --- a/net/sctp/sm_make_chunk.c Mon Sep 22 14:40:46 2003 +++ b/net/sctp/sm_make_chunk.c Mon Sep 22 14:40:46 2003 @@ -1288,7 +1288,7 @@ /* Set an expiration time for the cookie. */ do_gettimeofday(&cookie->c.expiration); - tv_add(&asoc->cookie_life, &cookie->c.expiration); + TIMEVAL_ADD(asoc->cookie_life, cookie->c.expiration); /* Copy the peer's init packet. */ memcpy(&cookie->c.peer_init[0], init_chunk->chunk_hdr, ----------------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: net/sctp/sm_make_chunk.c alignment problems on parisc64 2003-09-22 22:06 ` Sridhar Samudrala @ 2003-09-25 20:52 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 8+ messages in thread From: Arnaldo Carvalho de Melo @ 2003-09-25 20:52 UTC (permalink / raw) To: Sridhar Samudrala; +Cc: David S. Miller, netdev, lksctp-developers Em Mon, Sep 22, 2003 at 03:06:41PM -0700, Sridhar Samudrala escreveu: > On Sat, 20 Sep 2003, Arnaldo Carvalho de Melo wrote: > > The problem is right at: > > > > tv_add(&asoc->cookie_life, &cookie->c.expiration); > > > > Please send any patch you come up with, I'll be happy to test it. > > The problem seems to be the static inline routine tv_add. When i converted it > into a regular function or a macro, the problem went away. May be parisc64 > compiler has some issues with static inlines. > > Arnaldo, Could you please try out this patch which converts tv_add() to a macro > TIMEVAL_ADD() Yes, this makes the problem go away, if you have this tested please push it DaveM's way, thanks a lot! - Arnaldo ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2003-09-25 20:52 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2003-09-12 16:46 net/sctp/sm_make_chunk.c alignment problems on parisc64 Arnaldo Carvalho de Melo 2003-09-17 23:06 ` Sridhar Samudrala 2003-09-19 2:55 ` David S. Miller 2003-09-19 22:15 ` Sridhar Samudrala 2003-09-20 6:39 ` David S. Miller 2003-09-20 15:54 ` Arnaldo Carvalho de Melo 2003-09-22 22:06 ` Sridhar Samudrala 2003-09-25 20:52 ` Arnaldo Carvalho de Melo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).