lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAMRc=MfB6yN7NHwB+DJRWLREUeZCeSM=2c3-mx4VR2e4JxhiMA@mail.gmail.com>
Date:   Wed, 6 Sep 2023 17:08:21 +0200
From:   Bartosz Golaszewski <brgl@...ev.pl>
To:     Daniel Mack <daniel@...que.org>
Cc:     linux-gpio@...r.kernel.org, manikanta.guntupalli@....com,
        linux-kernel@...r.kernel.org, stable@...nel.org
Subject: Re: [PATCH] gpio: zynq: restore zynq_gpio_irq_reqres/zynq_gpio_irq_relres
 callbacks

On Fri, Sep 1, 2023 at 2:34 PM Daniel Mack <daniel@...que.org> wrote:
>
> Commit f56914393537 ("gpio: zynq: fix zynqmp_gpio not an immutable chip
> warning") ditched the open-coded resource allocation handlers in favor
> of the generic ones. These generic handlers don't maintain the PM
> runtime anymore, which causes a regression in that level IRQs are no
> longer reported.
>
> Restore the original handlers to fix this.
>
> Signed-off-by: Daniel Mack <daniel@...que.org>
> Fixes: f56914393537 ("gpio: zynq: fix zynqmp_gpio not an immutable chip warning")
> Cc: stable@...nel.org
> ---
>  drivers/gpio/gpio-zynq.c | 26 ++++++++++++++++++++++++--
>  1 file changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c
> index 0a7264aabe48..324e942c0650 100644
> --- a/drivers/gpio/gpio-zynq.c
> +++ b/drivers/gpio/gpio-zynq.c
> @@ -575,6 +575,26 @@ static int zynq_gpio_set_wake(struct irq_data *data, unsigned int on)
>         return 0;
>  }
>
> +static int zynq_gpio_irq_reqres(struct irq_data *d)
> +{
> +       struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
> +       int ret;
> +
> +       ret = pm_runtime_resume_and_get(chip->parent);
> +       if (ret < 0)
> +               return ret;
> +
> +       return gpiochip_reqres_irq(chip, d->hwirq);
> +}
> +
> +static void zynq_gpio_irq_relres(struct irq_data *d)
> +{
> +       struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
> +
> +       gpiochip_relres_irq(chip, d->hwirq);
> +       pm_runtime_put(chip->parent);
> +}
> +
>  /* irq chip descriptor */
>  static const struct irq_chip zynq_gpio_level_irqchip = {
>         .name           = DRIVER_NAME,
> @@ -584,9 +604,10 @@ static const struct irq_chip zynq_gpio_level_irqchip = {
>         .irq_unmask     = zynq_gpio_irq_unmask,
>         .irq_set_type   = zynq_gpio_set_irq_type,
>         .irq_set_wake   = zynq_gpio_set_wake,
> +       .irq_request_resources = zynq_gpio_irq_reqres,
> +       .irq_release_resources = zynq_gpio_irq_relres,
>         .flags          = IRQCHIP_EOI_THREADED | IRQCHIP_EOI_IF_HANDLED |
>                           IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
> -       GPIOCHIP_IRQ_RESOURCE_HELPERS,
>  };
>
>  static const struct irq_chip zynq_gpio_edge_irqchip = {
> @@ -597,8 +618,9 @@ static const struct irq_chip zynq_gpio_edge_irqchip = {
>         .irq_unmask     = zynq_gpio_irq_unmask,
>         .irq_set_type   = zynq_gpio_set_irq_type,
>         .irq_set_wake   = zynq_gpio_set_wake,
> +       .irq_request_resources = zynq_gpio_irq_reqres,
> +       .irq_release_resources = zynq_gpio_irq_relres,
>         .flags          = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
> -       GPIOCHIP_IRQ_RESOURCE_HELPERS,
>  };
>
>  static void zynq_gpio_handle_bank_irq(struct zynq_gpio *gpio,
> --
> 2.41.0
>

Thanks Thorsten for bringing it to my attention.

Daniel: please use scripts/get_maintainers.pl when sending patches.
This was sent neither to my email address from the MAINTAINERS file
nor to my linaro address.

Other than that, this looks good, applied for fixes.

Bartosz

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ