On Mon, May 28, 2018 at 01:54:18PM +0300, Laurent Pinchart wrote: > Hi Dan, > > Thank you for your quick reply. > > On Monday, 28 May 2018 13:20:49 EEST Dan Carpenter wrote: > > On Mon, May 28, 2018 at 11:28:41AM +0300, Laurent Pinchart wrote: > > > and I still get the same warning. I had to write the following (which is > > > obviously not correct) to silence the warning. > > > > > > if (pipe->num_inputs > 2) > > > brx = &vsp1->bru->entity; > > > else if (pipe->brx) > > > brx = pipe->brx; > > > else if (!vsp1->bru->entity.pipe) > > > brx = &vsp1->bru->entity; > > > else { > > > (void)vsp1->brs->entity; > > > brx = &vsp1->brs->entity; > > > } > > > > > > Both the (void)vsp1->brs->entity and the removal of the !drm_pipe-> > > > force_brx_release were needed, any of those on its own didn't fix the > > > problem. > > > > The problem in this case is the first "brx = &vsp1->bru->entity;". > > Smatch assumes &vsp1->bru->entity can be == to pipe->brx and NULL. > > Why does smatch assume that &vsp1->bru->entity can be NULL, when the previous > line dereferences vsp1->bru ? I'm talking about when pipe->num_inputs > 2. For the second "brx = &vsp1->bru->entity;" assignment, then Smatch parses it correctly as you say. regards, dan carpenter