From patchwork Tue Sep 5 18:52:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 13374940 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 61852CA0FFD for ; Tue, 5 Sep 2023 18:54:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=D2dloYMgh/IUdEe4rqsICw+zkmb5EhaE1NmERKF4LJY=; b=QOeJ0iKyGu75I6 dEH2dOEzQLUa8xA1dPRfJEdZRsmtzMpkgDPCCIZVCoMaWyopCdGvV/B1vWjca6TArrF6NUqGDkYZA 54mVKPMl6nednPQpji3nYRGTNOQsJKgPvt5q/G1jF0k+4izayTIIP3qVCwmZRlwDiyATR4hQWwFjX iW7cmHZci7chTumrcDv3WkwAjybFE5runXRYdJ8KmtcSWiLLmnkhHHPp/M1wJNvC/LCQTQ2cYhlxC AX6s2pop+/oT5NCnkOSAyOpTh3Cu4ZmF+5CWycnRMGbXPej+5OAmueTWF3KlJBoTCAtdWhPGj2CJx Gdx/xXWzundjyxWtONjg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qdbBK-006YWz-1b; Tue, 05 Sep 2023 18:53:46 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qdbBE-006YSi-2G for linux-arm-kernel@lists.infradead.org; Tue, 05 Sep 2023 18:53:42 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-402cc6b8bedso24890885e9.1 for ; Tue, 05 Sep 2023 11:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1693940019; x=1694544819; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TyBIfAzUG/Tst2tDFyTRTa17LASZ2n9GApjCcuynorg=; b=sYpVLN+nfpsJUF5ItIfXp8VnJh7DC3y2FskyEUAoEJ+1DGKTwm2BtJFW9q6Tp758nH yeYsT43kOm0eTqU62bSoFOoqx6sKfvlkCAUxP1HnxXopRKIPvsttM/kBF/bKsp0Tnd+b YVkln04DxwhpL6JJ/O9NQpHd1erA+4z4SPGQMDSQagi1ft12ZQvofC59crAoWiXQ05kD ezwPUYoyRdtYts7Qz4j8Sitae3F95y4fmx0EAlXzB2Ku/lWE+EVgrZYbDVRAFrYy7Dmy vUjz8JRpPDaLtlPv6OEE1+WtqMXrW68qzXpp9RcTTjcuzcU7NAxLkECoZSX4WZEr30jO 3Odg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693940019; x=1694544819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TyBIfAzUG/Tst2tDFyTRTa17LASZ2n9GApjCcuynorg=; b=jnJsjW/PveERaymUX9/ZTA+GuOdScpUmupq0jvDdZFJEL+9FsfKsEpYx9/f83cgeTU SlelOfTQB/kAKN4kOFCX/OU5KkR9SiH/gxuq62Wbrh3V0BfzWFOa0Wng9cdSHvurzIkL SeZGGUhCQzHOlN/qcQdd6ZwzigxtIkp9oGlaIUksdk1DZ1oeTmk3dAAuQmeszYNvleyu iZh0L7Er5DQIpniSS31tiuFM+zH9H4JnZ9eQa4b39XHmgQHPIJJyDVd/9fsTODx8Oqpz HI1wum9XVpZ++Tv/L6/t+PPZNwTipzJ1zmPsvnR7aB9mF3PiZtztEtTctyXm7D44w24k KxrQ== X-Gm-Message-State: AOJu0Yyfn28V8PPBRpskhcHOymhLEMeOsLVWKc8cMNS63q41sqf7tAf1 /VUN+t1fo6KuGUOqxCnKi6neqQ== X-Google-Smtp-Source: AGHT+IG6EifQrYWqD0xKG3/BJghDnSpVupHCLvA51a9h0XWSNzRpKylYhH8S6fQzecUWzA90ZfjUyw== X-Received: by 2002:a7b:c8ca:0:b0:3fe:f667:4e4c with SMTP id f10-20020a7bc8ca000000b003fef6674e4cmr457674wml.12.1693940019484; Tue, 05 Sep 2023 11:53:39 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:7a54:5dbc:6d09:48b7]) by smtp.gmail.com with ESMTPSA id 17-20020a05600c249100b003fbc30825fbsm17550010wms.39.2023.09.05.11.53.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Sep 2023 11:53:39 -0700 (PDT) From: Bartosz Golaszewski To: Aaro Koskinen , Janusz Krzysztofik , Tony Lindgren , Russell King , Mika Westerberg , Andy Shevchenko , Linus Walleij , Bartosz Golaszewski , Dipen Patel , Thierry Reding , Jonathan Hunter , Hans de Goede , Mark Gross Cc: linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, timestamp@lists.linux.dev, linux-tegra@vger.kernel.org, platform-driver-x86@vger.kernel.org, Bartosz Golaszewski Subject: [RFT PATCH 11/21] platform: x86: android-tablets: don't access GPIOLIB private members Date: Tue, 5 Sep 2023 20:52:59 +0200 Message-Id: <20230905185309.131295-12-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230905185309.131295-1-brgl@bgdev.pl> References: <20230905185309.131295-1-brgl@bgdev.pl> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230905_115340_756120_76BE82C7 X-CRM114-Status: GOOD ( 17.46 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Bartosz Golaszewski We're slowly removing cases of abuse of the GPIOLIB public API. One of the biggest issues is looking up and accessing struct gpio_chip whose life-time is tied to the provider and which can disappear from under any user at any given moment. We have provided new interfaces that use the opaque struct gpio_device which is reference counted and will soon be thorougly protected with appropriate locking. Stop using old interfaces in this driver and switch to safer alternatives. Signed-off-by: Bartosz Golaszewski --- .../platform/x86/x86-android-tablets/core.c | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/drivers/platform/x86/x86-android-tablets/core.c b/drivers/platform/x86/x86-android-tablets/core.c index 2fd6060a31bb..687f84cd193c 100644 --- a/drivers/platform/x86/x86-android-tablets/core.c +++ b/drivers/platform/x86/x86-android-tablets/core.c @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -21,27 +22,28 @@ #include #include "x86-android-tablets.h" -/* For gpiochip_get_desc() which is EXPORT_SYMBOL_GPL() */ -#include "../../../gpio/gpiolib.h" -#include "../../../gpio/gpiolib-acpi.h" - -static int gpiochip_find_match_label(struct gpio_chip *gc, void *data) -{ - return gc->label && !strcmp(gc->label, data); -} int x86_android_tablet_get_gpiod(const char *label, int pin, struct gpio_desc **desc) { + struct gpio_device *gdev; struct gpio_desc *gpiod; - struct gpio_chip *chip; - chip = gpiochip_find((void *)label, gpiochip_find_match_label); - if (!chip) { - pr_err("error cannot find GPIO chip %s\n", label); + /* + * FIXME: handle GPIOs correctly! This driver should really use struct + * device and GPIO lookup tables. + * + * WONTDO: We do leak this reference, but the whole approach to getting + * GPIOs in this driver is such an abuse of the GPIOLIB API that it + * doesn't make it much worse and it's the only way to keep the + * interrupt requested later functional... + */ + gdev = gpio_device_find_by_label(label); + if (!gdev) { + pr_err("error cannot find GPIO device %s\n", label); return -ENODEV; } - gpiod = gpiochip_get_desc(chip, pin); + gpiod = gpio_device_get_desc(gdev, pin); if (IS_ERR(gpiod)) { pr_err("error %ld getting GPIO %s %d\n", PTR_ERR(gpiod), label, pin); return PTR_ERR(gpiod); @@ -257,9 +259,9 @@ static void x86_android_tablet_cleanup(void) static __init int x86_android_tablet_init(void) { + struct gpio_device *gdev __free(gpio_device_put) = NULL; const struct x86_dev_info *dev_info; const struct dmi_system_id *id; - struct gpio_chip *chip; int i, ret = 0; id = dmi_first_match(x86_android_tablet_ids); @@ -273,13 +275,13 @@ static __init int x86_android_tablet_init(void) * _AEI (ACPI Event Interrupt) handlers, disable these. */ if (dev_info->invalid_aei_gpiochip) { - chip = gpiochip_find(dev_info->invalid_aei_gpiochip, - gpiochip_find_match_label); - if (!chip) { + gdev = gpio_device_find_by_label( + dev_info->invalid_aei_gpiochip); + if (!gdev) { pr_err("error cannot find GPIO chip %s\n", dev_info->invalid_aei_gpiochip); return -ENODEV; } - acpi_gpiochip_free_interrupts(chip); + acpi_gpio_device_free_interrupts(gdev); } /*