On Fri, Apr 03, 2020 at 07:33:24PM +0300, Dmitry Osipenko wrote: > 01.04.2020 01:19, Thierry Reding пишет: > ... > > +static int tegra186_timer_probe(struct platform_device *pdev) > > +{ > > + struct device *dev = &pdev->dev; > > + struct tegra186_timer *tegra; > > + int err; > > + > > + tegra = devm_kzalloc(dev, sizeof(*tegra), GFP_KERNEL); > > + if (!tegra) > > + return -ENOMEM; > > + > > + tegra->soc = of_device_get_match_data(dev); > > + dev_set_drvdata(dev, tegra); > > + tegra->dev = dev; > > + > > + tegra->regs = devm_platform_ioremap_resource(pdev, 0); > > + if (IS_ERR(tegra->regs)) > > + return PTR_ERR(tegra->regs); > > + > > + err = platform_get_irq(pdev, 0); > > + if (err < 0) { > > + dev_err(dev, "failed to get interrupt #0: %d\n", err); > > + return err; > > + } > > + > > + tegra->irq = err; > > + > > + err = devm_request_irq(dev, tegra->irq, tegra186_timer_irq, > > + IRQF_ONESHOT | IRQF_TRIGGER_HIGH, > > + "tegra186-timer", tegra); > > Looks like there is no need to store tegra->irq in the struct > tegra186_timer. After moving devm_request_irq() to a later point in ->probe() we now have to store it somewhere because err is being reused. But I can store it in a local variable instead. Thierry