mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
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:
parent
ec30f0bec6
commit
e561c5fe44
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=350370
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue