svn commit: r327811 - head/sys/dev/cxgbe

Wojciech Macek wma at FreeBSD.org
Thu Jan 11 09:17:03 UTC 2018


Author: wma
Date: Thu Jan 11 09:17:02 2018
New Revision: 327811
URL: https://svnweb.freebsd.org/changeset/base/327811

Log:
  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 at freebsd.org>
  Reviewed by:           np
  Obtained from:         Semihalf
  Sponsored by:          IBM, QCM Technologies
  Differential revision: https://reviews.freebsd.org/D13102

Modified:
  head/sys/dev/cxgbe/t4_sge.c

Modified: head/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- head/sys/dev/cxgbe/t4_sge.c	Thu Jan 11 07:40:06 2018	(r327810)
+++ head/sys/dev/cxgbe/t4_sge.c	Thu Jan 11 09:17:02 2018	(r327811)
@@ -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));


More information about the svn-src-head mailing list