> On Sun, Mar 03, 2024 at 02:14:43AM +0000, Jacky Chou wrote:
> > Hi Dan Carpenter,
> >
> > I have verified it on the little-endian platform, such as ASPEED AST2600.
> 
> Awesome.  Thanks for this.
> 
> > I think put_unaligned_be32() and htonl() functions have no effect on
> big-endian platforms.
> > And keep put_unaligned_be32() to help access the unaligned memory, such
> as pchecksum variable.
> 
> Yes.  I know that.
> 
> What I'm just puzzled by is how we ever merged this code when it doesn't work
> for little endian systems.  How was it tested originally?  How do the errors
> look like?  Perhaps they're not as bad I assume from looking at the code...

I am not sure how it was originally tested.
The first patch was based on Linux NC-SI driver.
I found the code in the Linux kernel where NC-SI calculates the checksum.
        ...
        /* Fill with calculated checksum */
        checksum = ncsi_calculate_checksum((unsigned char *)h,
                                           sizeof(*h) + nca->payload);
        pchecksum = (__be32 *)((void *)h + sizeof(struct ncsi_pkt_hdr) +
                    ALIGN(nca->payload, 4));
        *pchecksum = htonl(checksum);
        ...
It gets the pointer of checksum field and call htonl() to do endian conversion.
Linux NC-IS driver only performs endian conversion.

Thanks,
Jacky

Reply via email to