diff options
Diffstat (limited to 'drivers/gpio/gpiolib.c')
| -rw-r--r-- | drivers/gpio/gpiolib.c | 11 | 
1 files changed, 3 insertions, 8 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 4828fe7c66c..fff9786cdc6 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -411,15 +411,10 @@ static int gpio_setup_irq(struct gpio_desc *desc, struct device *dev,  			goto err_out;  		} -		do { -			ret = -ENOMEM; -			if (idr_pre_get(&dirent_idr, GFP_KERNEL)) -				ret = idr_get_new_above(&dirent_idr, value_sd, -							1, &id); -		} while (ret == -EAGAIN); - -		if (ret) +		ret = idr_alloc(&dirent_idr, value_sd, 1, 0, GFP_KERNEL); +		if (ret < 0)  			goto free_sd; +		id = ret;  		desc->flags &= GPIO_FLAGS_MASK;  		desc->flags |= (unsigned long)id << ID_SHIFT;  |