Message ID | 20160606165627.32676-1-thierry.reding@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | Thierry Reding |
Headers | show |
On Monday 06 June 2016 10:26 PM, Thierry Reding wrote: > From: Thierry Reding <treding@nvidia.com> > > Commit b546be0db955 ("gpio: tegra: Get rid of all file scoped global > variables") moved all file scoped variables into the driver-private > structure to allow potentially multiple instances of the driver. The > change also included turning the lockdep class into a driver-private > field, which doesn't work and produces error messages such as this: > > [ 0.142310] BUG: key ffff8000fb3f7ab0 not in .data! > > Make the lockdep class file-scoped again to fix this issue. > When I tested on T210, I did not get this issue. Want to know that how did you get this issue so that I can add that part on my testing. -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Jun 6, 2016 at 6:56 PM, Thierry Reding <thierry.reding@gmail.com> wrote: > From: Thierry Reding <treding@nvidia.com> > > Commit b546be0db955 ("gpio: tegra: Get rid of all file scoped global > variables") moved all file scoped variables into the driver-private > structure to allow potentially multiple instances of the driver. The > change also included turning the lockdep class into a driver-private > field, which doesn't work and produces error messages such as this: > > [ 0.142310] BUG: key ffff8000fb3f7ab0 not in .data! > > Make the lockdep class file-scoped again to fix this issue. > > Signed-off-by: Thierry Reding <treding@nvidia.com> Patch applied for fixes. Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c index ec891a27952f..661b0e34e067 100644 --- a/drivers/gpio/gpio-tegra.c +++ b/drivers/gpio/gpio-tegra.c @@ -98,7 +98,6 @@ struct tegra_gpio_info { const struct tegra_gpio_soc_config *soc; struct gpio_chip gc; struct irq_chip ic; - struct lock_class_key lock_class; u32 bank_count; }; @@ -547,6 +546,12 @@ static const struct dev_pm_ops tegra_gpio_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(tegra_gpio_suspend, tegra_gpio_resume) }; +/* + * This lock class tells lockdep that GPIO irqs are in a different category + * than their parents, so it won't report false recursion. + */ +static struct lock_class_key gpio_lock_class; + static int tegra_gpio_probe(struct platform_device *pdev) { const struct tegra_gpio_soc_config *config; @@ -660,7 +665,7 @@ static int tegra_gpio_probe(struct platform_device *pdev) bank = &tgi->bank_info[GPIO_BANK(gpio)]; - irq_set_lockdep_class(irq, &tgi->lock_class); + irq_set_lockdep_class(irq, &gpio_lock_class); irq_set_chip_data(irq, bank); irq_set_chip_and_handler(irq, &tgi->ic, handle_simple_irq); }