On Fri, Oct 25, 2019 at 10:28:30AM +0800, zhangfei.gao@xxxxxxxxxxx wrote: > > Something else I noticed is uacce_idr isn't currently protected. The IDR > > API expected the caller to use its own locking scheme. You could replace > > it with an xarray, which I think is preferred to IDR now and provides a > > xa_lock. > Currently idr_alloc and idr_remove are simply protected by uacce_mutex, Ah right, but idr_find() also needs to be protected? > Will check xarray, looks it is more complicated then idr. Having tried both, it can easily replace idr. For uacce I think it could be something like (locking included): static DEFINE_XARRAY_ALLOC(uacce_xa); uacce = xa_load(&uacce_xa, iminor(inode)); ret = xa_alloc(&uacce_xa, &uacce->dev_id, uacce, xa_limit_32b, GFP_KERNEL); xa_erase(&uacce_xa, uacce->dev_id); Thanks, Jean