CXGBE: fix get_filt to be endianness-aware

Unconditional 32-bit shift is not endianness-safe.
Modify the logic to work both on LE and BE.

Submitted by:          Wojciech Macek <wma@freebsd.org>
Reviewed by:           np
Obtained from:         Semihalf
Sponsored by:          IBM, QCM Technologies
Differential revision: https://reviews.freebsd.org/D13102
This commit is contained in:
Wojciech Macek 2018-01-11 09:17:02 +00:00
parent fb3855e0e7
commit f078ecf642

View File

@ -4754,13 +4754,13 @@ get_flit(struct sglist_seg *segs, int nsegs, int idx)
switch (idx % 3) {
case 0: {
__be64 rc;
uint64_t rc;
rc = htobe32(segs[i].ss_len);
rc = (uint64_t)segs[i].ss_len << 32;
if (i + 1 < nsegs)
rc |= (uint64_t)htobe32(segs[i + 1].ss_len) << 32;
rc |= (uint64_t)(segs[i + 1].ss_len);
return (rc);
return (htobe64(rc));
}
case 1:
return (htobe64(segs[i].ss_paddr));