On 2021/6/19 0:10, Jason Gunthorpe wrote: > On Fri, Jun 18, 2021 at 11:22:46PM +0800, hhh ching wrote: >> Jason Gunthorpe <jgg@xxxxxxxxxx> 于2021年6月18日周五 下午8:49写道: >>> >>> On Fri, Jun 18, 2021 at 06:05:58PM +0800, Weihang Li wrote: >>>> Fix complains from sparse about "dubious: x & !y" when calling >>>> hr_reg_write(ctx, field, !!val) by using "val ? 1 : 0" instead of "!!val". >>>> >>>> Fixes: dc504774408b ("RDMA/hns: Use new interface to set MPT related fields") >>>> Fixes: 495c24808ce7 ("RDMA/hns: Add XRC subtype in QPC and XRC type in SRQC") >>>> Fixes: 782832f25404 ("RDMA/hns: Simplify the function config_eqc()") >>>> Signed-off-by: Weihang Li <liweihang@xxxxxxxxxx> >>>> drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 14 +++++++------- >>>> 1 file changed, 7 insertions(+), 7 deletions(-) >>>> >>>> diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c >>>> index fbc45b9..6452ccc 100644 >>>> +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c >>>> @@ -3013,15 +3013,15 @@ static int hns_roce_v2_write_mtpt(struct hns_roce_dev *hr_dev, >>>> hr_reg_enable(mpt_entry, MPT_L_INV_EN); >>>> >>>> hr_reg_write(mpt_entry, MPT_BIND_EN, >>>> - !!(mr->access & IB_ACCESS_MW_BIND)); >>>> + mr->access & IB_ACCESS_MW_BIND ? 1 : 0); >>> >>> Err, I'm still confused where the sparse warning is coming from >> >> Hi, Jason, i found some code in sparse/evaluate.c: >> const unsigned left_not = expr->left->type == EXPR_PREOP && >> expr->left->op == '!'; >> const unsigned right_not = expr->right->type == EXPR_PREOP && >> expr->right->op == '!'; >> if ((op == '&' || op == '|') && (left_not || right_not)) >> warning(expr->pos, "dubious: %sx %c %sy", >> >> I guess the "dubious" is, if somebody use "&" or "|", maybe he want >> to bitwise operate a number instead of a bool. > > Oh I see, yes, that does many some sense actually > >>> A hr_reg_write_bool() would be cleaner? > > Which makes me further think this is the right direction > > Jason > I see, thanks. Weihang