Received: by 2002:a5d:925a:0:0:0:0:0 with SMTP id e26csp488766iol; Thu, 9 Jun 2022 07:46:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyIOe/kAoSJHpYZR9IZj0EmoChgkoASlpQ4kjB5qA3geHvYSMl08v3PWcqYXU3OyQVWZzac X-Received: by 2002:a17:906:7a13:b0:712:fe7:8f1f with SMTP id d19-20020a1709067a1300b007120fe78f1fmr2007415ejo.98.1654785991179; Thu, 09 Jun 2022 07:46:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654785991; cv=none; d=google.com; s=arc-20160816; b=0Hkg6dlOMom/xQ6cp1R7UbUVmUBGPNBODtSfXyJaVVjQHqHbO3242X6WAF6hR5yj54 De7oRHGPPTJ90zosNMA04wUvP/s7MdK94sNAIiBLtVrGvJAf76bVbpmrtmMeiqT/SIGM Z1KjKTVYFesUlp1qHxIOij4/P+x4G0vd26ACOtjLOlJlEela9Fwn3flUmsZCe1Yma/uJ 3/py8nJCjCz3Szm8ocZkPaQpyDajpjrb22rCSOPw7vX5zhlLBlifPITu+mpHrNnvEowx E4jFeJNWq5PxFjflqxCf1LRDo2nxAtfVmkky9M7gQf9J1o5JZXxiH/JNIS1C9zWZWgdm rcdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=NZEY7Ybc8PDEvbXBO8JMJINztRBfwfCJ7Br4XdicTHg=; b=a3XV4+DXurPPYdQ/SguvCZuMeFcUMMJL6E5bFWIuLcBkQCqJe6eG3UMkhur3//1PYv pWGgxOCPBcoVngV6SaaxvozrXGwe/dpZuRKJ8oHTb7L6oTud6xmlb8kn5KJxEZJRL8B0 fmfnQon9DQOpKC0QE+m4YFxyJMUHvysuGZnueXe/kZ7JAxZ1H6aPPa8qtYauDY0Q8YWM gUL0z5w8gXSP4dXU3moT6n6469yt10jiJTqK4ptI4D0wgvFeXDZAUkRVXBZWMlbD/+O0 G8ca6eSdISTr3vGsI8aWKZos/ZYPse0EoNo9XUONihvVoD5HYjnPk8tnqjO4m/eAc3dt OHGw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z11-20020a056402274b00b0042d8d7194adsi3819894edd.585.2022.06.09.07.45.42; Thu, 09 Jun 2022 07:46:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343775AbiFIOVQ (ORCPT + 99 others); Thu, 9 Jun 2022 10:21:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245207AbiFIOUk (ORCPT ); Thu, 9 Jun 2022 10:20:40 -0400 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5FCA8268544; Thu, 9 Jun 2022 07:20:38 -0700 (PDT) Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 5.0.0) id fee5e5920b2b0229; Thu, 9 Jun 2022 16:20:36 +0200 Received: from kreacher.localnet (unknown [213.134.186.232]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by v370.home.net.pl (Postfix) with ESMTPSA id 6994266C7CA; Thu, 9 Jun 2022 16:20:35 +0200 (CEST) From: "Rafael J. Wysocki" To: Linux ACPI Cc: LKML , Linux PM , Andy Shevchenko , Mika Westerberg , Hans de Goede , Sakari Ailus , Henrique de Moraes Holschuh , Mark Gross , ibm-acpi-devel@lists.sourceforge.net, platform-driver-x86@vger.kernel.org Subject: [PATCH v1 12/16] platform/x86/thinkpad_acpi: Use acpi_dev_for_each_child() Date: Thu, 09 Jun 2022 16:09:45 +0200 Message-ID: <44750652.fMDQidcC6G@kreacher> In-Reply-To: <1843211.tdWV9SEqCh@kreacher> References: <1843211.tdWV9SEqCh@kreacher> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="UTF-8" X-CLIENT-IP: 213.134.186.232 X-CLIENT-HOSTNAME: 213.134.186.232 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvfedruddtledgjeduucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecujffqoffgrffnpdggtffipffknecuuegrihhlohhuthemucduhedtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkfgjfhgggfgtsehtufertddttdejnecuhfhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqnecuggftrfgrthhtvghrnhepvdffueeitdfgvddtudegueejtdffteetgeefkeffvdeftddttdeuhfegfedvjefhnecukfhppedvudefrddufeegrddukeeirddvfedvnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvddufedrudefgedrudekiedrvdefvddphhgvlhhopehkrhgvrggthhgvrhdrlhhotggrlhhnvghtpdhmrghilhhfrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqedpnhgspghrtghpthhtohepuddupdhrtghpthhtoheplhhinhhugidqrggtphhisehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheprghnughrihihrdhshhgvvhgthhgvnhhkoheslhhinhhugidr ihhnthgvlhdrtghomhdprhgtphhtthhopehmihhkrgdrfigvshhtvghrsggvrhhgsehlihhnuhigrdhinhhtvghlrdgtohhmpdhrtghpthhtohephhguvghgohgvuggvsehrvgguhhgrthdrtghomhdprhgtphhtthhopehsrghkrghrihdrrghilhhusheslhhinhhugidrihhnthgvlhdrtghomhdprhgtphhtthhopehhmhhhsehhmhhhrdgvnhhgrdgsrhdprhgtphhtthhopehmrghrkhhgrhhoshhssehkvghrnhgvlhdrohhrghdprhgtphhtthhopehisghmqdgrtghpihdquggvvhgvlheslhhishhtshdrshhouhhrtggvfhhorhhgvgdrnhgvthdprhgtphhtthhopehplhgrthhfohhrmhdqughrihhvvghrqdigkeeisehvghgvrhdrkhgvrhhnvghlrdhorhhg X-DCC--Metrics: v370.home.net.pl 1024; Body=11 Fuz1=11 Fuz2=11 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rafael J. Wysocki Instead of walking the list of children of an ACPI device directly, use acpi_dev_for_each_child() to carry out an action for all of the given ACPI device's children. This will help to eliminate the children list head from struct acpi_device as it is redundant and it is used in questionable ways in some places (in particular, locking is needed for walking the list pointed to it safely, but it is often missing). Signed-off-by: Rafael J. Wysocki --- drivers/platform/x86/thinkpad_acpi.c | 54 +++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 24 deletions(-) Index: linux-pm/drivers/platform/x86/thinkpad_acpi.c =================================================================== --- linux-pm.orig/drivers/platform/x86/thinkpad_acpi.c +++ linux-pm/drivers/platform/x86/thinkpad_acpi.c @@ -6841,6 +6841,31 @@ static const struct backlight_ops ibm_ba /* --------------------------------------------------------------------- */ +static int __init tpacpi_evaluate_bcl(struct acpi_device *adev, void *not_used) +{ + struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; + union acpi_object *obj; + acpi_status status; + int rc; + + status = acpi_evaluate_object(adev->handle, "_BCL", NULL, &buffer); + if (ACPI_FAILURE(status)) + return 0; + + obj = buffer.pointer; + if (!obj || obj->type != ACPI_TYPE_PACKAGE) { + acpi_handle_info(adev->handle, + "Unknown _BCL data, please report this to %s\n", + TPACPI_MAIL); + rc = 0; + } else { + rc = obj->package.count; + } + kfree(obj); + + return rc; +} + /* * Call _BCL method of video device. On some ThinkPads this will * switch the firmware to the ACPI brightness control mode. @@ -6848,37 +6873,18 @@ static const struct backlight_ops ibm_ba static int __init tpacpi_query_bcl_levels(acpi_handle handle) { - struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; - union acpi_object *obj; - struct acpi_device *device, *child; + struct acpi_device *device; int rc; device = acpi_fetch_acpi_dev(handle); if (!device) return 0; - rc = 0; - list_for_each_entry(child, &device->children, node) { - acpi_status status = acpi_evaluate_object(child->handle, "_BCL", - NULL, &buffer); - if (ACPI_FAILURE(status)) { - buffer.length = ACPI_ALLOCATE_BUFFER; - continue; - } - - obj = (union acpi_object *)buffer.pointer; - if (!obj || (obj->type != ACPI_TYPE_PACKAGE)) { - pr_err("Unknown _BCL data, please report this to %s\n", - TPACPI_MAIL); - rc = 0; - } else { - rc = obj->package.count; - } - break; - } + rc = acpi_dev_for_each_child(device, tpacpi_evaluate_bcl, NULL); + if (rc > 0) + return rc; - kfree(buffer.pointer); - return rc; + return 0; }