Received: by 2002:ab2:620c:0:b0:1ef:ffd0:ce49 with SMTP id o12csp1380289lqt; Wed, 20 Mar 2024 02:03:08 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCU+9RyFaaIe2BRlYbSrbHHqtMo7HN9O+bjSeL4jkM/3cyN5Fr16gfIJJNQJZER1xuFrreJn87jgTbDU1OI8EANWxOp7MU3z8bC+0aB7nA== X-Google-Smtp-Source: AGHT+IHiitOnaVlvYiu0TC3Uct1iTA2jiShqSDBGZK53KSzZFYpZzQKXbZSKtITadK+qc5LSnJLj X-Received: by 2002:a17:906:2452:b0:a44:e5ed:3d5d with SMTP id a18-20020a170906245200b00a44e5ed3d5dmr1555266ejb.9.1710925387934; Wed, 20 Mar 2024 02:03:07 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710925387; cv=pass; d=google.com; s=arc-20160816; b=g5VRmGgObIu5ah/MRQZTZTsYutWKFrv+cpEeUaem8tpnjwWdnw9NzOlJjOntUalY6m rHs2Sr3EryZvFoNHmgN49gIyLxNc4lcj7a5paiCPGcxzhas0s4n6B0ofQAr5bb2a8X3q 0JkLXkBa+t5cfQi0zwPETpIWERcdAQpM1Jx61vLm4qzQoHcNBfsQuasRiAlwd020rUMg s+6UwMSbcKTZTajLp7SWqAQlMaqJWA2RufScllgx/FndBqebn+YBYXhKEMQwk6QjStGd wbi1Kq+9lEFZzl1uoEPd2o7YfUx1K/HvlhRJewt5ajWp8/I9b7IgSzRWEW1veKcIib8D 5oNQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=+aw+nCBe+T3oJ08NUcmK8t7uBWVt6oUIlxWmPcFE1Jo=; fh=HcRoQCedCQJG/SwKEJxGp50fQS/rTLddm/ADC6y746g=; b=WLaZwAmATNEGi3ILcxoXob/0LBCToSzhbFeOFGGWZH5VSgMJHokzd6XEBhMM5c00oG q+NXVeJSSK58Y20iIHWDY084Z84bOAiBkh1mmkxVep0uN/UW7TbYGyZjt3raSsgjyfN5 5k7+wZLO14btBtSP5Jfvt4wZJqKrstilpAfzUmNQw8IM1XssdgmbkKmLbkKgMsAuw3lw 7TGw9Hs4dCwSoc0kJ0K3tvqJJ2gC8O+aH82PTCoeBAvqOWNIRliOKprrgwwsv7Spx82a 9cWogdKF8r+tZucsHSKudJo/1FzYaDPDwr2DIDeS83wIs5Z2w0S3MKJo+GP0hQJJG/rf inKQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b="LP11FVl/"; arc=pass (i=1 spf=pass spfdomain=canonical.com dkim=pass dkdomain=canonical.com dmarc=pass fromdomain=canonical.com); spf=pass (google.com: domain of linux-kernel+bounces-108646-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-108646-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id jg6-20020a170907970600b00a46a1f715d9si4605057ejc.364.2024.03.20.02.03.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Mar 2024 02:03:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-108646-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b="LP11FVl/"; arc=pass (i=1 spf=pass spfdomain=canonical.com dkim=pass dkdomain=canonical.com dmarc=pass fromdomain=canonical.com); spf=pass (google.com: domain of linux-kernel+bounces-108646-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-108646-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 4126C1F25245 for ; Wed, 20 Mar 2024 08:52:24 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9267D3F8DA; Wed, 20 Mar 2024 08:50:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="LP11FVl/" Received: from smtp-relay-canonical-0.canonical.com (smtp-relay-canonical-0.canonical.com [185.125.188.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0F6B39FEF; Wed, 20 Mar 2024 08:50:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.125.188.120 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710924605; cv=none; b=SPrt9w+RB3F6VuTADSM0QbROmhs7vbThaZUxJVXYfsPDlUZNslE3fH8BocpIbxf7Rbp1/LZnwrwsqPSvcd+EDBoPlq/DZXznSkd6zzkEdUQVxy8SdwjZncc58s7ZpH4+y2JU6TK7in3wlcHcX44PJ1CHO28xaO9LkL6+RnTihPg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710924605; c=relaxed/simple; bh=xGb4RhUYDWPElHint+HXBjgURCNEhZssnpEzWgr9f5I=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=Xm7tD5oNSIdR410vNbRMMCPPOzVAvH/aCMJrc+Aao114KPqDKL/jHkWtjwyJBFypNFGjxArTMKE+ZIXCS+JqQFexniy3iAEAIIAkwssSYRmc/mm0lG+6WP5bTzvx7q3SArDQzg89FliVAc4raMNm4EK6Dhq06llg5I3Qwi7qGKc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com; spf=pass smtp.mailfrom=canonical.com; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b=LP11FVl/; arc=none smtp.client-ip=185.125.188.120 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Received: from localhost.localdomain (unknown [10.101.196.174]) (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 smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPSA id CCA2F40F3D; Wed, 20 Mar 2024 08:44:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1710924249; bh=+aw+nCBe+T3oJ08NUcmK8t7uBWVt6oUIlxWmPcFE1Jo=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=LP11FVl/yZMXhnRTXF2PkvKa6S3Dk2kwamlqfX47REpx8fr4kmO+U8NCFpjtpXML3 myxDmfN4/rj5CCb80TDQqR41NDVMnyWBtiQ9WosUfAnd6VUzkuEGbehtvcEQXvWaSP hHZl82+N0tH67TmyxoneiKSS5n6qUr83yFgXmbvfAwGV+wO38cbwcgOMo9eRMB2LPe TGALCrz9NkJEs4xrWg0txyfY44sS8cO5C+SdRH/qCckqPBg+YH2VWf5kmJ/mZ/CZZL 9bzZ4wtcKC7+GdtM89FDRBmGMA+Gt/6TBAXZ8KJOk6z5rL18hIawZrtIXks17ijtqN ycJPH+PkXTNpg== From: Kai-Heng Feng To: rafael@kernel.org, lenb@kernel.org, jdelvare@suse.com, linux@roeck-us.net Cc: robert.moore@intel.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org, acpica-devel@lists.linux.dev, Kai-Heng Feng , "Rafael J . Wysocki" Subject: [PATCH v5 1/2] ACPI: IPMI: Add helper to wait for when SMI is selected Date: Wed, 20 Mar 2024 16:43:16 +0800 Message-Id: <20240320084317.366853-1-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit On Dell servers, many APCI methods of acpi_power_meter module evaluate variables inside IPMI region, so the region handler needs to be installed. In addition to that, the handler needs to be fully functional, and that depends on SMI being selected. So add a helper to let acpi_power_meter know when the handler is installed and ready to be used. Signed-off-by: Kai-Heng Feng Acked-by: Rafael J. Wysocki --- v5: - No change. v4: - Wording. - Define and comment on timeout value. - Move the completion to driver_data. - Remove the tenary operator. v3: - New patch. drivers/acpi/acpi_ipmi.c | 23 ++++++++++++++++++++++- include/acpi/acpi_bus.h | 5 +++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/acpi_ipmi.c b/drivers/acpi/acpi_ipmi.c index 0555f68c2dfd..5fba4dab5d08 100644 --- a/drivers/acpi/acpi_ipmi.c +++ b/drivers/acpi/acpi_ipmi.c @@ -22,6 +22,8 @@ MODULE_LICENSE("GPL"); /* the IPMI timeout is 5s */ #define IPMI_TIMEOUT (5000) #define ACPI_IPMI_MAX_MSG_LENGTH 64 +/* 2s should be suffient for SMI being selected */ +#define ACPI_IPMI_SMI_SELECTION_TIMEOUT (2 * HZ) struct acpi_ipmi_device { /* the device list attached to driver_data.ipmi_devices */ @@ -54,6 +56,7 @@ struct ipmi_driver_data { * to this selected global IPMI system interface. */ struct acpi_ipmi_device *selected_smi; + struct completion smi_selection_done; }; struct acpi_ipmi_msg { @@ -463,8 +466,10 @@ static void ipmi_register_bmc(int iface, struct device *dev) if (temp->handle == handle) goto err_lock; } - if (!driver_data.selected_smi) + if (!driver_data.selected_smi) { driver_data.selected_smi = ipmi_device; + complete(&driver_data.smi_selection_done); + } list_add_tail(&ipmi_device->head, &driver_data.ipmi_devices); mutex_unlock(&driver_data.ipmi_lock); @@ -578,6 +583,20 @@ acpi_ipmi_space_handler(u32 function, acpi_physical_address address, return status; } +int acpi_wait_for_acpi_ipmi(void) +{ + long ret; + + ret = wait_for_completion_interruptible_timeout(&driver_data.smi_selection_done, + ACPI_IPMI_SMI_SELECTION_TIMEOUT); + + if (ret <= 0) + return -ETIMEDOUT; + + return 0; +} +EXPORT_SYMBOL_GPL(acpi_wait_for_acpi_ipmi); + static int __init acpi_ipmi_init(void) { int result; @@ -586,6 +605,8 @@ static int __init acpi_ipmi_init(void) if (acpi_disabled) return 0; + init_completion(&driver_data.smi_selection_done); + status = acpi_install_address_space_handler(ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_IPMI, &acpi_ipmi_space_handler, diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 5de954e2b18a..5a69cbd58c5e 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -976,11 +976,16 @@ static inline void acpi_put_acpi_dev(struct acpi_device *adev) { acpi_dev_put(adev); } + +int acpi_wait_for_acpi_ipmi(void); + #else /* CONFIG_ACPI */ static inline int register_acpi_bus_type(void *bus) { return 0; } static inline int unregister_acpi_bus_type(void *bus) { return 0; } +static inline int acpi_wait_for_acpi_ipmi(void) { return 0; } + #endif /* CONFIG_ACPI */ #endif /*__ACPI_BUS_H__*/ -- 2.34.1