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>
Reviewed by:	philip
Sponsored by:   Solarflare Communications, Inc.
MFC after:      2 days
Differential Revision:  https://reviews.freebsd.org/D21075
This commit is contained in:
Andrew Rybchenko 2019-07-27 09:36:36 +00:00
parent ec30f0bec6
commit e561c5fe44
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=350370
3 changed files with 5 additions and 5 deletions

View file

@ -869,7 +869,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;

View file

@ -88,10 +88,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

View file

@ -60,6 +60,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;