Skip to content

Commit 98c6b8a

Browse files
committed
Merge tag 'gpio-fixes-for-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux
Pull gpio fixes from Bartosz Golaszewski: - fix an irq mapping leak in gpio-sim - associate the GPIO device's software node with the irq domain in gpio-sim * tag 'gpio-fixes-for-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: gpio: sim: pass the GPIO device's software node to irq domain gpio: sim: dispose of irq mappings before destroying the irq_sim domain
2 parents a87eaff + 6e39c1a commit 98c6b8a

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

drivers/gpio/gpio-sim.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,15 @@ static void gpio_sim_mutex_destroy(void *data)
291291
mutex_destroy(lock);
292292
}
293293

294+
static void gpio_sim_dispose_mappings(void *data)
295+
{
296+
struct gpio_sim_chip *chip = data;
297+
unsigned int i;
298+
299+
for (i = 0; i < chip->gc.ngpio; i++)
300+
irq_dispose_mapping(irq_find_mapping(chip->irq_sim, i));
301+
}
302+
294303
static void gpio_sim_sysfs_remove(void *data)
295304
{
296305
struct gpio_sim_chip *chip = data;
@@ -402,10 +411,14 @@ static int gpio_sim_add_bank(struct fwnode_handle *swnode, struct device *dev)
402411
if (!chip->pull_map)
403412
return -ENOMEM;
404413

405-
chip->irq_sim = devm_irq_domain_create_sim(dev, NULL, num_lines);
414+
chip->irq_sim = devm_irq_domain_create_sim(dev, swnode, num_lines);
406415
if (IS_ERR(chip->irq_sim))
407416
return PTR_ERR(chip->irq_sim);
408417

418+
ret = devm_add_action_or_reset(dev, gpio_sim_dispose_mappings, chip);
419+
if (ret)
420+
return ret;
421+
409422
mutex_init(&chip->lock);
410423
ret = devm_add_action_or_reset(dev, gpio_sim_mutex_destroy,
411424
&chip->lock);

0 commit comments

Comments
 (0)