Date: Mon, 29 Jul 2019 10:42:21 +0000 (UTC) From: Andrew Rybchenko <arybchik@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r350411 - stable/11/sys/dev/sfxge/common Message-ID: <201907291042.x6TAgLIv047521@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: arybchik Date: Mon Jul 29 10:42:21 2019 New Revision: 350411 URL: https://svnweb.freebsd.org/changeset/base/350411 Log: MFC r350370 sfxge(4): fix align to power of 2 when align has smaller type Substitute driver-defined P2ALIGN() with EFX_P2ALIGN() defined in libefx. Cast value and alignment to one specified type to guarantee result correctness. Reported by: Andrea Valsania <andrea.valsania at answervad.it> Sponsored by: Solarflare Communications, Inc. Modified: stable/11/sys/dev/sfxge/common/ef10_rx.c stable/11/sys/dev/sfxge/common/efsys.h stable/11/sys/dev/sfxge/common/efx.h Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sfxge/common/ef10_rx.c ============================================================================== --- stable/11/sys/dev/sfxge/common/ef10_rx.c Mon Jul 29 10:42:15 2019 (r350410) +++ stable/11/sys/dev/sfxge/common/ef10_rx.c Mon Jul 29 10:42:21 2019 (r350411) @@ -689,7 +689,7 @@ ef10_rx_qpush( efx_dword_t dword; /* Hardware has alignment restriction for WPTR */ - wptr = P2ALIGN(added, EF10_RX_WPTR_ALIGN); + wptr = EFX_P2ALIGN(unsigned int, added, EF10_RX_WPTR_ALIGN); if (pushed == wptr) return; Modified: stable/11/sys/dev/sfxge/common/efsys.h ============================================================================== --- stable/11/sys/dev/sfxge/common/efsys.h Mon Jul 29 10:42:15 2019 (r350410) +++ stable/11/sys/dev/sfxge/common/efsys.h Mon Jul 29 10:42:21 2019 (r350411) @@ -91,10 +91,6 @@ extern "C" { #define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0) #endif -#ifndef P2ALIGN -#define P2ALIGN(_x, _a) ((_x) & -(_a)) -#endif - #ifndef IS2P #define ISP2(x) (((x) & ((x) - 1)) == 0) #endif Modified: stable/11/sys/dev/sfxge/common/efx.h ============================================================================== --- stable/11/sys/dev/sfxge/common/efx.h Mon Jul 29 10:42:15 2019 (r350410) +++ stable/11/sys/dev/sfxge/common/efx.h Mon Jul 29 10:42:21 2019 (r350411) @@ -54,6 +54,10 @@ extern "C" { #define EFX_P2ROUNDUP(_type, _value, _align) \ (-(-(_type)(_value) & -(_type)(_align))) +/* Align value down to the nearest power of two. */ +#define EFX_P2ALIGN(_type, _value, _align) \ + ((_type)(_value) & -(_type)(_align)) + /* Return codes */ typedef __success(return == 0) int efx_rc_t;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201907291042.x6TAgLIv047521>