diff options
author | Koichiro Den <koichiro.den@canonical.com> | 2025-01-03 23:18:27 +0900 |
---|---|---|
committer | Bartosz Golaszewski <bartosz.golaszewski@linaro.org> | 2025-01-03 17:15:03 +0100 |
commit | 656cc2e892f128b03ea9ef19bd11d70f71d5472b (patch) | |
tree | eeb2a01de1a3174ff72bb5a93f03bd7cbbc1e778 /drivers/gpio/gpio-virtuser.c | |
parent | a619cba8c69c434258ff4101d463322cd63e1bdc (diff) | |
download | linux-656cc2e892f128b03ea9ef19bd11d70f71d5472b.tar.gz linux-656cc2e892f128b03ea9ef19bd11d70f71d5472b.tar.bz2 linux-656cc2e892f128b03ea9ef19bd11d70f71d5472b.zip |
gpio: virtuser: fix handling of multiple conn_ids in lookup table
Creating a virtuser device via configfs with multiple conn_ids fails due
to incorrect indexing of lookup entries. Correct the indexing logic to
ensure proper functionality when multiple gpio_virtuser_lookup are
created.
Fixes: 91581c4b3f29 ("gpio: virtuser: new virtual testing driver for the GPIO API")
Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
Link: https://lore.kernel.org/r/20250103141829.430662-3-koichiro.den@canonical.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-virtuser.c')
-rw-r--r-- | drivers/gpio/gpio-virtuser.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/gpio/gpio-virtuser.c b/drivers/gpio/gpio-virtuser.c index e89b1239b635..d6244f0d3bc7 100644 --- a/drivers/gpio/gpio-virtuser.c +++ b/drivers/gpio/gpio-virtuser.c @@ -1410,7 +1410,7 @@ gpio_virtuser_make_lookup_table(struct gpio_virtuser_device *dev) size_t num_entries = gpio_virtuser_get_lookup_count(dev); struct gpio_virtuser_lookup_entry *entry; struct gpio_virtuser_lookup *lookup; - unsigned int i = 0; + unsigned int i = 0, idx; lockdep_assert_held(&dev->lock); @@ -1424,12 +1424,12 @@ gpio_virtuser_make_lookup_table(struct gpio_virtuser_device *dev) return -ENOMEM; list_for_each_entry(lookup, &dev->lookup_list, siblings) { + idx = 0; list_for_each_entry(entry, &lookup->entry_list, siblings) { - table->table[i] = + table->table[i++] = GPIO_LOOKUP_IDX(entry->key, entry->offset < 0 ? U16_MAX : entry->offset, - lookup->con_id, i, entry->flags); - i++; + lookup->con_id, idx++, entry->flags); } } |