On Wed, Mar 10, 2021 at 07:11:07AM -0800, Richard Cochran wrote:
> On Wed, Mar 10, 2021 at 03:25:18PM +0100, Miroslav Lichvar wrote:
> > @@ -37,7 +38,7 @@ int assume_two_step = 0;
> >  struct message_storage {
> >     unsigned char reserved[MSG_HEADROOM];
> >     struct ptp_message msg;
> > -} PACKED;
> > +};
> 
> Is there a better way?  How about dropping PACKED but adding an
> alignment attribute on 'msg'?

Like this?

struct message_storage {
        unsigned char reserved[MSG_HEADROOM];
        struct ptp_message msg __attribute__ ((aligned (8)));
};

> 
> We don't about extra padding between 'reserved' and 'msg'.

Ok.

> > @@ -267,6 +268,10 @@ struct ptp_message *msg_allocate(void)
> >                     pool_stats.total++;
> >                     pool_debug("allocate", m);
> >             }
> > +           if (sizeof(s->reserved) + sizeof(s->msg) != sizeof(*s)) {
> > +               pr_err("unexpected alignment");
> > +               exit(1);
> > +           }
> 
> This is clunky.  If we really _must_ have it, then it should be a one
> time check (msg_init()?) and not every time a message is allocated.
> But I would prefer avoiding this altogether.

It was meant as a protection against modification of the structure
that would leap to padding. It would normally be optimized away. But
if that is not a problem, I'll drop it.

-- 
Miroslav Lichvar



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to