[{"id":3688676,"web_url":"http://patchwork.ozlabs.org/comment/3688676/","msgid":"<CAJZ5v0iR-doMaHUhwonHj8byfim18ti0a=_9+4S5bsWR1Z=TXQ@mail.gmail.com>","list_archive_url":null,"date":"2026-05-08T18:44:47","subject":"Re: [PATCH v4 5/6] gpio: acpi: use cleanup.h for automated resource\n deallocation","submitter":{"id":64267,"url":"http://patchwork.ozlabs.org/api/people/64267/","name":"Rafael J. Wysocki","email":"rafael@kernel.org"},"content":"On Fri, May 8, 2026 at 8:18 AM Marco Scardovi <mscardovi95@gmail.com> wrote:\n>\n> Refactor acpi_gpiochip_alloc_event() and acpi_gpio_adr_space_handler()\n> to use the __free() macro for GPIO descriptors and ACPI resources.\n> This simplifies error handling by removing manual cleanup calls and\n> reducing the need for goto labels.\n>\n> Signed-off-by: Marco Scardovi <mscardovi95@gmail.com>\n> ---\n>  drivers/gpio/gpiolib-acpi-core.c | 40 +++++++++++---------------------\n>  1 file changed, 14 insertions(+), 26 deletions(-)\n>\n> diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-core.c\n> index 33d6c3b6cdf0..c9b12e24de14 100644\n> --- a/drivers/gpio/gpiolib-acpi-core.c\n> +++ b/drivers/gpio/gpiolib-acpi-core.c\n> @@ -397,31 +397,27 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares,\n>\n>         desc = acpi_request_own_gpiod(chip, agpio, 0, \"ACPI:Event\");\n>         if (IS_ERR(desc)) {\n> -               dev_err(chip->parent,\n> -                       \"Failed to request GPIO for pin 0x%04X, err %pe\\n\",\n> -                       pin, desc);\n> +               dev_err(chip->parent, \"Failed to request GPIO for pin 0x%04X, err %pe\\n\", pin, desc);\n>                 return AE_OK;\n>         }\n>\n> +       struct gpio_desc *desc_guard __free(free_gpio_desc) = desc;\n> +\n>         ret = gpiochip_lock_as_irq(chip, pin);\n>         if (ret) {\n> -               dev_err(chip->parent,\n> -                       \"Failed to lock GPIO pin 0x%04X as interrupt, err %d\\n\",\n> -                       pin, ret);\n> -               goto fail_free_desc;\n> +               dev_err(chip->parent, \"Failed to lock GPIO pin 0x%04X as interrupt, err %d\\n\", pin, ret);\n> +               return AE_OK;\n>         }\n>\n>         irq = gpiod_to_irq(desc);\n>         if (irq < 0) {\n> -               dev_err(chip->parent,\n> -                       \"Failed to translate GPIO pin 0x%04X to IRQ, err %d\\n\",\n> -                       pin, irq);\n> -               goto fail_unlock_irq;\n> +               dev_err(chip->parent, \"Failed to translate GPIO pin 0x%04X to IRQ, err %d\\n\", pin, irq);\n> +               goto err_unlock;\n\nYou are not supposed to mix up cleanup.h stuff with gotos.\n\n>         }\n>\n>         event = kzalloc_obj(*event);\n>         if (!event)\n> -               goto fail_unlock_irq;\n> +               goto err_unlock;\n>\n>         event->irqflags = IRQF_ONESHOT;\n>         if (agpio->triggering == ACPI_LEVEL_SENSITIVE) {\n> @@ -449,17 +445,15 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares,\n>         event->irq = irq;\n>         event->irq_is_wake = acpi_gpio_irq_is_wake(chip->parent, agpio);\n>         event->pin = pin;\n> -       event->desc = desc;\n> +       /* Transfer ownership to event, prevent auto-free */\n> +       event->desc = no_free_ptr(desc_guard);\n>\n>         list_add_tail(&event->node, &acpi_gpio->events);\n>\n>         return AE_OK;\n>\n> -fail_unlock_irq:\n> +err_unlock:\n>         gpiochip_unlock_as_irq(chip, pin);\n> -fail_free_desc:\n> -       gpiochip_free_own_desc(desc);\n> -\n>         return AE_OK;\n>  }\n>\n> @@ -1091,7 +1085,7 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,\n>         struct acpi_gpio_chip *achip = region_context;\n>         struct gpio_chip *chip = achip->chip;\n>         struct acpi_resource_gpio *agpio;\n> -       struct acpi_resource *ares;\n> +       struct acpi_resource *ares __free(acpi_free) = NULL;\n\nNope, that's not how you use __free().\n\n>         u16 pin_index = address;\n>         acpi_status status;\n>         int length;\n> @@ -1102,18 +1096,14 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,\n>         if (ACPI_FAILURE(status))\n>                 return status;\n>\n> -       if (WARN_ON(ares->type != ACPI_RESOURCE_TYPE_GPIO)) {\n> -               ACPI_FREE(ares);\n> +       if (WARN_ON(ares->type != ACPI_RESOURCE_TYPE_GPIO))\n>                 return AE_BAD_PARAMETER;\n> -       }\n>\n>         agpio = &ares->data.gpio;\n>\n>         if (WARN_ON(agpio->io_restriction == ACPI_IO_RESTRICT_INPUT &&\n> -           function == ACPI_WRITE)) {\n> -               ACPI_FREE(ares);\n> +           function == ACPI_WRITE))\n>                 return AE_BAD_PARAMETER;\n> -       }\n>\n>         length = min(agpio->pin_table_length, pin_index + bits);\n>         for (i = pin_index; i < length; ++i) {\n> @@ -1189,8 +1179,6 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,\n>                 }\n>         }\n>\n> -out:\n> -       ACPI_FREE(ares);\n>         return status;\n>  }\n>","headers":{"Return-Path":"\n <linux-gpio+bounces-36478-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-gpio@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=VucPNMPL;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-gpio+bounces-36478-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"VucPNMPL\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gByjK0JvVz1yKd\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 09 May 2026 04:45:09 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id C66533025143\n\tfor <incoming@patchwork.ozlabs.org>; Fri,  8 May 2026 18:45:04 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 75E643FB7DD;\n\tFri,  8 May 2026 18:45:01 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id D18F33F23D1\n\tfor <linux-gpio@vger.kernel.org>; Fri,  8 May 2026 18:45:00 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 3C0BDC2BCF5\n\tfor <linux-gpio@vger.kernel.org>; Fri,  8 May 2026 18:45:00 +0000 (UTC)","by mail-lf1-f44.google.com with SMTP id\n 2adb3069b0e04-5a87782588cso2984812e87.3\n        for <linux-gpio@vger.kernel.org>;\n Fri, 08 May 2026 11:45:00 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1778265900; cv=none;\n b=DpZsb15HkOsSX2QbRABDU+WOXu1RhBRQ59n8pdeoPFNoie+SypRz+cY9wfK5TiFOPfuokwKn6YZYdYGuCy/BGd3+whBtZQYSIQiETQS0vijEdIUp1R6BvKkQiSFTV6Ba+gWFCybxUPzMmuzYlD5NrLszG4/aDvfl8vArKcSmL0g=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1778265900; c=relaxed/simple;\n\tbh=MelbRQlPSpb9U3QB2o/axJ+pkJp6b84ioVzzm3YW6R8=;\n\th=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:\n\t To:Cc:Content-Type;\n b=QZvixMuaB3OYwXuTwhnszk4oWhxKvrCYNAsBEX75YRwNVirK0eCpy9R46LPVhqFRVYRwPUobzNg4n0u8rD3sVbkgFiK1ZniGU+4fi2sF3SSv/zb43HM1yswFAQPE28i+mV4vTJewNYdTPn2BqJnhERf1GPfV844PeMrBzUotgKM=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=VucPNMPL; arc=none smtp.client-ip=10.30.226.201","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1778265900;\n\tbh=MelbRQlPSpb9U3QB2o/axJ+pkJp6b84ioVzzm3YW6R8=;\n\th=References:In-Reply-To:From:Date:Subject:To:Cc:From;\n\tb=VucPNMPLR+On7bZVEXwy2/ybRo+nuf/j8At3EzBj7SGdOY/J4HhXJoMK+dS1g6PTF\n\t nHVxWnjKnrZgJ8lcLLjX9qL/yzVLpemIluhllP470M7mNfWgBxmT7JwyFEbGTr/H9Y\n\t jIOEdFFVcIoCZ+aWzDRg3ay7bTnTHDyrBKlmXXHQ5Q8QS3MsYYTFqdvgkIXqMIGBi4\n\t OZNLLg09KMIlnCJcO6YOZ3DUk2dGITQs/ng1hecytDqsz7PQks42OPaNgB0/mBSDkd\n\t A/o1FNDYKRxyEsT5H6DhipCrMdl1PD807dK0c7O6ziVa3+pgnqRqphACGBA3ZQy9gW\n\t 8cnvxdlsUtb6A==","X-Forwarded-Encrypted":"i=1;\n AFNElJ967CJ1GDPFur5/iGLkpi2l/JJIEQtFyPpSTz+xkArbVhwPkJPx8PKQaFiJ+2c/F6wmhh2FRU09t+F+@vger.kernel.org","X-Gm-Message-State":"AOJu0Yy1H0+qqIOfLGURCVJvUR73Lz/NV5nK+ZVQpM6ClSukR/PKlRi/\n\tFKBQovn3Lbsjiyjsr30Ky3xRGwgAYzpJUt2xXeQhH6UCCZAlK9Lu6zClFBmG3ZA3tflKlBDoSlN\n\ta0Bz1d7NjMSQYPIl1ld3xUoXqAScWISY=","X-Received":"by 2002:a05:6512:400f:b0:5a8:65d9:612f with SMTP id\n 2adb3069b0e04-5a887adfdc9mr3985974e87.4.1778265898555; Fri, 08 May 2026\n 11:44:58 -0700 (PDT)","Precedence":"bulk","X-Mailing-List":"linux-gpio@vger.kernel.org","List-Id":"<linux-gpio.vger.kernel.org>","List-Subscribe":"<mailto:linux-gpio+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-gpio+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","References":"<afzlsRkyKQzuUcgL@ashevche-desk.local>\n <20260508061729.9530-1-mscardovi95@gmail.com>\n <20260508061729.9530-6-mscardovi95@gmail.com>","In-Reply-To":"<20260508061729.9530-6-mscardovi95@gmail.com>","From":"\"Rafael J. Wysocki\" <rafael@kernel.org>","Date":"Fri, 8 May 2026 20:44:47 +0200","X-Gmail-Original-Message-ID":"\n <CAJZ5v0iR-doMaHUhwonHj8byfim18ti0a=_9+4S5bsWR1Z=TXQ@mail.gmail.com>","X-Gm-Features":"AVHnY4LIjC8RhqNXALMWq0ecWGQV3YRMPJj1Mx018DKCGE3si5Oe8_bF8NLTRc8","Message-ID":"\n <CAJZ5v0iR-doMaHUhwonHj8byfim18ti0a=_9+4S5bsWR1Z=TXQ@mail.gmail.com>","Subject":"Re: [PATCH v4 5/6] gpio: acpi: use cleanup.h for automated resource\n deallocation","To":"Marco Scardovi <mscardovi95@gmail.com>","Cc":"andriy.shevchenko@intel.com, linux-acpi@vger.kernel.org,\n\tlinux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tmathias.nyman@intel.com, mika.westerberg@intel.com","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable"}}]