From: Niklas Cassel > Sent: 17 November 2017 09:43 > find_first_zero_bit()'s parameter 'size' is defined in bits, > not in bytes. > > Calling find_first_zero_bit() with the wrong size unit > will lead to insidious bugs. > > Fix this by using replacing find_first_zero_bit() with ffz(), > since ffz() only works on a single 'unsigned long' and therefore > does not need a size argument. > > Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxxx> > --- > drivers/pci/endpoint/pci-ep-cfs.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/pci/endpoint/pci-ep-cfs.c b/drivers/pci/endpoint/pci-ep-cfs.c > index 4f74386c1ced..96b984685640 100644 > --- a/drivers/pci/endpoint/pci-ep-cfs.c > +++ b/drivers/pci/endpoint/pci-ep-cfs.c > @@ -108,8 +108,7 @@ static int pci_epc_epf_link(struct config_item *epc_item, > if (ret) > goto err_add_epf; > > - func_no = find_first_zero_bit(&epc_group->function_num_map, > - sizeof(epc_group->function_num_map)); > + func_no = ffz(epc_group->function_num_map); > set_bit(func_no, &epc_group->function_num_map); > epf->func_no = func_no; Is set_bit() now setting the correct bit? I'd guess that: epc_group->function_num_map |= 1ul << func_no; would be more accurate? David