On Sun, Mar 03, 2019 at 01:33:08PM +0200, Leon Romanovsky wrote: > From: Leon Romanovsky <leonro@xxxxxxxxxxxx> > > Attempt to use check_shl_overflow() with inputs of unsigned type > produces the following compilation warnings. > > drivers/infiniband/hw/mlx5/qp.c: In function _set_user_rq_size_: > ./include/linux/overflow.h:230:6: warning: comparison of unsigned > expression >= 0 is always true [-Wtype-limits] > _s >= 0 && _s < 8 * sizeof(*d) ? _s : 0; \ > ^~ > drivers/infiniband/hw/mlx5/qp.c:5820:6: note: in expansion of macro _check_shl_overflow_ > if (check_shl_overflow(rwq->wqe_count, rwq->wqe_shift, > &rwq->buf_size)) > ^~~~~~~~~~~~~~~~~~ > ./include/linux/overflow.h:232:26: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] > (_to_shift != _s || *_d < 0 || _a < 0 || \ > ^ > drivers/infiniband/hw/mlx5/qp.c:5820:6: note: in expansion of macro _check_shl_overflow_ > if (check_shl_overflow(rwq->wqe_count, rwq->wqe_shift, &rwq->buf_size)) > ^~~~~~~~~~~~~~~~~~ > ./include/linux/overflow.h:232:36: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] > (_to_shift != _s || *_d < 0 || _a < 0 || \ > ^ > drivers/infiniband/hw/mlx5/qp.c:5820:6: note: in expansion of macro _check_shl_overflow_ > if (check_shl_overflow(rwq->wqe_count, rwq->wqe_shift,&rwq->buf_size)) > ^~~~~~~~~~~~~~~~~~ > > Fixes: 0c66847793d1 ("overflow.h: Add arithmetic shift helper") > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > --- > include/linux/overflow.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/include/linux/overflow.h b/include/linux/overflow.h > index 40b48e2133cb..43a47c32675f 100644 > --- a/include/linux/overflow.h > +++ b/include/linux/overflow.h > @@ -227,10 +227,10 @@ > typeof(d) _d = d; \ > u64 _a_full = _a; \ > unsigned int _to_shift = \ > - _s >= 0 && _s < 8 * sizeof(*d) ? _s : 0; \ > + (_s == 0 || _s > 0) && _s < 8 * sizeof(*d) ? _s : 0; \ > *_d = (_a_full << _to_shift); \ > - (_to_shift != _s || *_d < 0 || _a < 0 || \ > - (*_d >> _to_shift) != _a); \ > + (_to_shift != _s || !(*_d > 0 && *_d == 0) || \ > + !(_a > 0 && _a == 0) || (*_d >> _to_shift) != _a); \ "_a > 0 && _a == 0" and "*_d > 0 && *_d == 0" are cool constructions, but not correct. Please drop this patch. Thanks > }) > > /** > -- > 2.19.1 >
Attachment:
signature.asc
Description: PGP signature