On Fri, Dec 16, 2022 at 10:07:51AM +0800, Riwen Lu wrote: > From: Riwen Lu <luriwen@xxxxxxxxxx> > > Change the maximum idr ID to INT_MAX for i2c adapter. > This fix the following adding i2c adapter error while the idr with > adap->nr has been allocated by other i2c driver, and find a proper ID How did this happen that another i2c driver could get this? Were you able to follow the code paths that lead to this situation? > for it. > [ 357.620685][ 3] [ T3655] ------------[ cut here ]------------ > [ 357.626544][ 3] [ T3655] couldn't get idr > > Signed-off-by: Riwen Lu <luriwen@xxxxxxxxxx> > --- > drivers/i2c/i2c-core-base.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c > index 7539b0740351..c2982861057a 100644 > --- a/drivers/i2c/i2c-core-base.c > +++ b/drivers/i2c/i2c-core-base.c > @@ -1535,11 +1535,12 @@ static int __i2c_add_numbered_adapter(struct i2c_adapter *adap) > int id; > > mutex_lock(&core_lock); > - id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL); > + id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, 0, GFP_KERNEL); > mutex_unlock(&core_lock); > if (WARN(id < 0, "couldn't get idr")) > return id == -ENOSPC ? -EBUSY : id; > > + adap->nr = id; > return i2c_register_adapter(adap); > } > > -- > 2.25.1 >
Attachment:
signature.asc
Description: PGP signature