From patchwork Mon Feb 3 18:23:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13957975 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (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 8417320CCD3; Mon, 3 Feb 2025 18:24:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607058; cv=none; b=gtFlD3eHB8yz/zJEtpkz/raW17L29r7pS6vRT1J9Yuq/sXUOg2/Ts/Q8ty0NOzNdGoiUyLSskd6ahjndFeNhx2Qs6WWRcci3kDmZJjIrqka5lJ5HMmgr9kpzh5bWDxJTk8Pr0Jc7V0CDH+nCb4Ne7FSa527kqDD+ObZgyc+073s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607058; c=relaxed/simple; bh=mjaC1DXg4LeRFGXjeL6xxlaCsuZh+HAEQa+8nA/704I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XzS+7PWgQqJRnQ4u09Sy2kRX1akTJTgBVv8U1z6ue/EJ3m93/cnDewU7WR84zokK4xU/lLiM8w/SFqWPltAO5BDVopVNiUOoM7ygSl/ZMp1Qqtx/gW45y1I0qISbEZszf5n2SRBYUH5mtHVwMKnMeh2XAwwp609wfVxundJAQ/A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=SuW2Fb3O; arc=none smtp.client-ip=212.227.15.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="SuW2Fb3O" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738607025; x=1739211825; i=w_armin@gmx.de; bh=UhioWlkfiJIoXyIYSvT4HLNMNZR/B5ZkcG1ijfPyHL8=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=SuW2Fb3Ozp/GSGvcVLOba5UvLoqHpkUp2awjwjptILduZwBJcLW7vVPVzGjsUwvO h0SulY8N+Mfjbrw/9Mz1WA9xMmlFZrorE0iYtDfM4ujbAIme2dZ2M2OrSAdR7kzSz RFXYGOr4asAcaV0JkuEBezmpAoAmAZoOnFxN8N6zZmon9EVJa6jnIe96puHGxLwzo +8fjvADSBt3DZDkK+hDSBFj9axREnxXjdgiDz2hUl2077oZ6zUA3zrprIPwFpVxUe x53J7vMdVVyQG4mLySW7gyF+/GU5Y9lZFc9/XSDBhh/VdTOWeXBFeLS9nZ1ZPaJnm 3Qo+b5mvdDig8HT1Ng== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([91.14.238.232]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MSc1L-1tppov3Gob-00KbN9; Mon, 03 Feb 2025 19:23:44 +0100 From: Armin Wolf To: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org Subject: [PATCH 1/7] hwmon: (hp-wmi-sensors) Use the WMI bus API when accessing sensors Date: Mon, 3 Feb 2025 19:23:16 +0100 Message-Id: <20250203182322.384883-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250203182322.384883-1-W_Armin@gmx.de> References: <20250203182322.384883-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:TC355yJlpmAE95aTo7BtQhW9ueeUA5ZaeATdhi3TJcvrIXoU5Am rJgTjO+cFepiqBoBN1VpZ/K1SO8HMlxtPkSds6yyuzVDqqfz2eXXldUK/PW9xbdeLryalaT R+IyDQktesGq4ZblcuOucanDNe3Km8byf2cV8iN43zSL2/BbHQADR/gmfIJWb9uOczAvFPa ktaahzDJ+0so41s7zilwA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:BqkXaqURbB0=;uziyKrKPOl3KonJh/1cWWTcvFR3 AvnpZPVnMK+QkGcHp9yixie/qrTYkUMkWTUag4mChDqCtG1YR17og2//V9S+6UY3FcZS1JGL+ e634z5jO5l/2ODFBto6wqYyOE8u4AFRraUTc2yUXxOoNvGV3DhVJy9u/PyQCnhKqDnVfuBwbr /O/K5KRG3zdJnHqAhWoddaVIztj/phTQRmr+qs8pVhldEDR4E0J2qU692SBcX0yJ1VSIQw8zu Tn77bXxRyAFANlcaHUR8oAhyDNJflR4ccyoaI+ijG6m92dJuU5jbZsF1eMvs1+l5j8TXL171z FPDcguw2EVIUzF6QxRg5FeFYh2c0LSOgWIr+3gYzRAWE1FS+8kCi3+k8/CtK0iK2X+fsRb4L/ OoxEMamYYI1HIHitXgdrKZ95nidSAJYCBXmv/+nXjytwUYeauEj6k0vTtC7BnWNP+nugakfm4 Az67LiDKqcOQn/4vRLXM02SX8v5DJOQJl3vLS9ggXLEpNB4gCcObDSGldlAjDVhcfzfOY2eX8 RxIdda4QEiHaoOct0/3heJUXqWMvf8WSpib8iYO0dNJAcKiMbYxC1STWrT8xwqWJmiorh2uGf rnNlcisMP4v4ingrhkXDNYC5FQT7OaEoWrmeQEWRlvmQuvC6YdCcEQZ4fra9ZrFhb5N+kBzLH GMxyE1y8yBXHS1Bf/sS/0vssYdMmV5RiiB3f0JvHwD01lkuxrVSunYapTjXajYCpkRYHg8oMK qEHcdkoZeoY03t9KXRsebwWKrwi5VPZP+A/uV5g305hC7jlsx5r5GZppgNrJzqYBKX3iApWF5 BxLdHMyFP40j6pDm1cp8peH+O8PHePIOW1X0JRr9coKyNnC0e68eIEQP/olQ1lw/+4LQPzN+A mqzc+PyshgCfZNXPb1ykNDQzTA89qW5gciQ+G1dywvvfC4u4Z4VSi1P9Hc5Zw8ZRn9x2DaArC b8pfOo+1Wd8K3Ezysycb2lOtmiqzLJNzO+CY85SSCQL+oiz4OJA1v6kEnFgL8G3OzZNANKaMR YbTY57dC4NlU9dBz/BgII2Vzwy+RF9n9QK5gucl5VMBxcWZ8Gs6fCs0mN93sK92AHW/d/Z9Df Ha0KRzIigwHl2OIUCgOTkB0/FRe2ig24qBF2mbwdPRlqdXy3aHaw5mwZXNXGmwfak5yQRel7U oFqs4AsOa7g9j1516l1fPXFZEdLYqrwh3hpqvE/9uO3NWWX1XU9rWNTqYIrkF5DIeEKwk33Hw CnUP4y0f14pAgVQY6y/KSzazv5iwsIpoHz/7eCywt3+vz7SvyM0Kn9dtU4q2FlarDA8Pkc9pV GWFI+7q3pVptTFjoV5q9eHIeWf6YnyVpxY0tuut+hE/0Cg= Since the driver already binds to HP_WMI_NUMERIC_SENSOR_GUID, using wmidev_block_query() allows for faster sensor access. Signed-off-by: Armin Wolf Reviewed-by: James Seo Acked-by: Guenter Roeck --- drivers/hwmon/hp-wmi-sensors.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- 2.39.5 diff --git a/drivers/hwmon/hp-wmi-sensors.c b/drivers/hwmon/hp-wmi-sensors.c index d6bdad26feb1..03c684ba83bd 100644 --- a/drivers/hwmon/hp-wmi-sensors.c +++ b/drivers/hwmon/hp-wmi-sensors.c @@ -1197,7 +1197,7 @@ static int hp_wmi_update_info(struct hp_wmi_sensors *state, if (time_after(jiffies, info->last_updated + HZ)) { mutex_lock(&state->lock); - wobj = hp_wmi_get_wobj(HP_WMI_NUMERIC_SENSOR_GUID, instance); + wobj = wmidev_block_query(state->wdev, instance); if (!wobj) { ret = -EIO; goto out_unlock; @@ -1745,7 +1745,7 @@ static int init_numeric_sensors(struct hp_wmi_sensors *state, return -ENOMEM; for (i = 0, info = info_arr; i < icount; i++, info++) { - wobj = hp_wmi_get_wobj(HP_WMI_NUMERIC_SENSOR_GUID, i); + wobj = wmidev_block_query(state->wdev, i); if (!wobj) return -EIO; From patchwork Mon Feb 3 18:23:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13957976 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (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 89BE220D51A; Mon, 3 Feb 2025 18:24:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607061; cv=none; b=p+CiKUxrIrdk3sMT0+eNY+ylyJfUQvC2JZXl070KKkxYoochyr/iOR96SblerLmndA+6tMooGvM+W121Vc2EA9ZOZy2MzlcytTSvrL4BdDcGTX9ISnOdbX09rr6PQOVLaQB/sFiXq7lMRZNaj045S5qdFmcU9eRYeKXDXAck6dw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607061; c=relaxed/simple; bh=SPtpWGvbqmN+W75ZUkq3vtyTxotZ42aDS0JUkZjDFLY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IzEPY0O6aeFQwHeBU9AAyP5PVIj1n4k4B+MHVz11jBTnJlFjizseK9dDEV3JJXkWjazFDmiHP5PpCt0MLnCFnRXnYFbCzRoSt1BqTsMDBIqfN7x11wKAuTG6O6pylHNZJVZRFMHI7jca+vmjuoRibfv+AQTPzoT/BWyXHoIKSlg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=G/sXPUj7; arc=none smtp.client-ip=212.227.15.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="G/sXPUj7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738607027; x=1739211827; i=w_armin@gmx.de; bh=xmfu2RYVh771MBfDFi7DG8rB5lvrl48XaZxYDIR3ipc=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=G/sXPUj7pa21IR7gJjEkWPZhU5KFG9hgI5sTpry6HnPywPwd1Yhj9dTyOA9B301Z EJqYzlqfmdTmRpjkCRbbYsGUYzkL4hAdZ7bRHHUITSYn0y+OoHjJm/PiKe7mpCAhl NvoTBbgK8vpdClVdtmVdj4duTZryoZD88eh4nZSiC2gd++VjHQ/B2XikaH63OCT/h /o9kKcBDZKtQX1zDTF65iLZ5QDZ2Z2OEdFGIwqhzm7zvhg7Jil4FsZ+x59RGfIcvj Ipj4UFwZxxkjhb4nt2NpoJDQiH/VZnBxyjwgTbjFBsf9xK9l/v/fP+P31AkKlFo1H u/KxI0PwEuQ81Yhoiw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([91.14.238.232]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mn2W5-1syZTY08Mp-00f0h8; Mon, 03 Feb 2025 19:23:47 +0100 From: Armin Wolf To: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org Subject: [PATCH 2/7] platform/x86: think-lmi: Use ACPI object when extracting strings Date: Mon, 3 Feb 2025 19:23:17 +0100 Message-Id: <20250203182322.384883-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250203182322.384883-1-W_Armin@gmx.de> References: <20250203182322.384883-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:bb/+wCwOvLQuxz9Lx/I7N+0Jpm90VYiXUPukI7Z18FxQBrYTJBO SoR2Y529ZRKUX3KEewJoBCCsYeC06Au0cklv3f658Tx/YgfLtFK+hNIuZeP11RCSeQVIRmZ DgDjAv0dBxVujgS1anoZVJZmbFR93J0P4GthaMkemBkco9M98GO4+RIFVV0HxNnQlrZSCVx slVXufTXRBUPCVDsjsRXw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:r6DPjFvY66I=;T9YRFWeBYQJhRWeKiK0VBColj3+ yd63O9swAJEKEF0fjQJ0CIQI+q2O6fAMDeQ0JevUkAdiO///gQwt0IMMdYYD9cfuVm6/FG702 NaWxxO+vleW5xkpAfIjiGX5ZKP4Wl/aFA+07Z7DZSYOKNafmKZSZMTjMI2zKEILIF1p6ryOYv LVjis8WeLXJRjL0dKrV4t0oSvTa72+JEBl3BgkciSPPLCKIao8K2VWFusGQ14w2OJaP95lHyn SDofu2439/teGNXE1dJPSgRzg44us86K5Wir5J9GuYt4gL/+zzjatky4X+BVhRCSp5wGJM2s8 WzONGGUZ0NkIBkUQVli5GOLlsvdIEI1SH/gKKBu4XPpZZAf4bFZMKnoVi2Uzl0rSdq1ZMJt50 54eYkAqmYdWCM0GVEgJV5RTRDxVncld9UWxr0p5vdc/ksA8e3F/XFhufx6HcdQS48AgAIRyUQ IWTx79UpdJJqDQEFvowUWXCkCrSLOANzkNMK/plAT836Zt7K6JN28n9UgbSoJzE8MIpFshfYX ykkDIc1TiS/aCdzy7UX+Qg75WpIYLVuzlTbT0T9BvNevsNw1sSL1Wlzv2LRzOdYYJ7/9Tz1JX lRE8GXHFYkU5QHjDUP+1CIDmwSBaJ5nIKKmxLxSn1l9i+Yq793VonkftdnCcPmo/MfWYwU4SH VMOK6qEvFhIwbGmkeOJAEEkfZdQ+aSGcteuNn3jamcHWJ/x1AFH7vz7C5CAIUjdwo+pKh3rRu rwa82KZhbnWq3672BqCjJN6LtRtwe3jcS5VfxuLhU3IFtVVbqGsKXUnndFbTA0GNwEkIzPQHv x97DAamrFP2ZVzKmXNtx3/5Omy7SdioOndvKz3LTkA50JDLvzIlHydx9ppZZwKa+k9vg7+jW2 MaNjiHDnv1+CVbNBHyzm1R9kndopA9Eanjpy62QMUTcSX1vZ6eGklCQeqvcEc3bHFbBQJ3EGS xPloo7oKde3nDZLdognMcfQYxv7XbOM9yVuadl8F2rO0t7gEJg+KSXYbtHPQ28OSROqFbHDuu I2glwMWwgNxzsBpzs6MLzOM+lCIzWouIgvm/YE9V4XWJEwdsp27AazEilHnS2UkWuKdhE1z2w Na3zXGclPi8v06RWmxMYbiya02BFH/FC6fziV3W6NJFQbep7qHvZUt92lM/Voexb8wI4FfULt lK7RG/on24JudH6atwtug5HE22mM5j43nGep51BVgV+okTmVaTFk0nFA74ieKmfd6Ivoz2O3U 1I32++PIaflj5G3sMp+AM4ONKUTd/TvoyP12f9wdB88vxMwxr61XkQd+wojOeeQCsuhzyZVZx VSIexdQJ2dTSSBBQ1/b9F9ol3Y6T/49ZPdJTO+Z3k+zSy0= Move the ACPI buffer handling out of tlmi_extract_output_string() and instead pass the unpacked ACPI object to prepare for future changes. Signed-off-by: Armin Wolf --- drivers/platform/x86/think-lmi.c | 38 +++++++++++++++++--------------- 1 file changed, 20 insertions(+), 18 deletions(-) -- 2.39.5 diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c index 323316ac6783..2c94a4af9a1d 100644 --- a/drivers/platform/x86/think-lmi.c +++ b/drivers/platform/x86/think-lmi.c @@ -262,16 +262,11 @@ static int tlmi_simple_call(const char *guid, const char *arg) return 0; } -/* Extract output string from WMI return buffer */ -static int tlmi_extract_output_string(const struct acpi_buffer *output, - char **string) +/* Extract output string from WMI return value */ +static int tlmi_extract_output_string(union acpi_object *obj, char **string) { - const union acpi_object *obj; char *s; - obj = output->pointer; - if (!obj) - return -ENOMEM; if (obj->type != ACPI_TYPE_STRING || !obj->string.pointer) return -EIO; @@ -352,17 +347,21 @@ static int tlmi_opcode_setting(char *setting, const char *value) static int tlmi_setting(int item, char **value, const char *guid_string) { struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; + union acpi_object *obj; acpi_status status; int ret; status = wmi_query_block(guid_string, item, &output); - if (ACPI_FAILURE(status)) { - kfree(output.pointer); + if (ACPI_FAILURE(status)) return -EIO; - } - ret = tlmi_extract_output_string(&output, value); - kfree(output.pointer); + obj = output.pointer; + if (!obj) + return -ENODATA; + + ret = tlmi_extract_output_string(obj, value); + kfree(obj); + return ret; } @@ -370,19 +369,22 @@ static int tlmi_get_bios_selections(const char *item, char **value) { const struct acpi_buffer input = { strlen(item), (char *)item }; struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; + union acpi_object *obj; acpi_status status; int ret; status = wmi_evaluate_method(LENOVO_GET_BIOS_SELECTIONS_GUID, 0, 0, &input, &output); - - if (ACPI_FAILURE(status)) { - kfree(output.pointer); + if (ACPI_FAILURE(status)) return -EIO; - } - ret = tlmi_extract_output_string(&output, value); - kfree(output.pointer); + obj = output.pointer; + if (!obj) + return -ENODATA; + + ret = tlmi_extract_output_string(obj, value); + kfree(obj); + return ret; } From patchwork Mon Feb 3 18:23:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13957978 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (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 9E80B20E022; Mon, 3 Feb 2025 18:24:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607062; cv=none; b=gfwGWKqt+uuRVrZRPi8I/IhJJOnKr/coUSGRNTLLYuITFBu0u47OcL+6x4GsXVMjGsZLN0Vyk9QrntfPhpWv31CXLnGozwQx9CmkpEeiDs18kv9pSzMYoYO4W8cjWCaPnpKqexcFV2KK5QPsTskhqMslKn2eEghiNt04Haz+lDk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607062; c=relaxed/simple; bh=Pd2pijAnpTaRTF4r2OdFSj12b5qsrQ8ay2dRpEq/kSU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NArmx9lyGyP/ATDOhB5fJ/nvd9wOac+pIgvLzpUeZfILP8vWgiYtngAqd9Bcxoml0gS/gRH9tZswMLWJM65Q8pLZr1JQWrJaPssa3s2FhyKMbpd1BV4AcrR6pYI92mmUmwVFux/e83DA5oaXQ/ZSjGx2b4b1KSx4OtwcGTjaHtc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=AzIbBERo; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="AzIbBERo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738607029; x=1739211829; i=w_armin@gmx.de; bh=APd7PmlYr3tUrzGPQhYI6mm7eQZEmXa+ckllLJyJKpc=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=AzIbBERoKxfSIyW2UeBBKPYOpnZfTFRyVwJEiAGo9TMzt9ASDZvAs0aLvyMCqJjx DjGRtsVS41ZtKZU7UwoVKLdZouH4NvgKJKczTfGzi0goR6K3jxUvsLuFysVvDM9dZ 97J7ZfsJ0PBizx7OwCVDrSq7pB8eTFWstjBcK7Co58p3L/OUTZrYzPJHTguLgCvB5 5nkqhxqIl55PlZ/FXeXPYe1+i3eSSOIA3ymop6aOq3+cDdnD+OwFuw92ocZcq9/sz +gaTJoYa2FeErYFkm1zqvZOfJoTRfxYrYe9lP5CqU/9wp82Jh2UvYupY5qO0YqWA/ O3zU/U9UVa64jHSaSg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([91.14.238.232]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MaJ7v-1ttAGW1CU9-00Nug4; Mon, 03 Feb 2025 19:23:49 +0100 From: Armin Wolf To: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org Subject: [PATCH 3/7] platform/x86: think-lmi: Use WMI bus API when accessing BIOS settings Date: Mon, 3 Feb 2025 19:23:18 +0100 Message-Id: <20250203182322.384883-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250203182322.384883-1-W_Armin@gmx.de> References: <20250203182322.384883-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:DY3+lm6DAuWbuLgtk6U1okZdohu83rfMRMs8o1VVdxTiLWNAKu5 LAC+Dg5kMa02Hf9q17CSwhMlFvf0eYoMtSmsczqX547KpwE6A8cqD7yHxwHcI/lgzQadsl4 vyHOU/bYvjE3j4dMW41/ELovMT2LWJVCZMW6w6tJLAOQjDrErJ6xRCLB7Hmu0caMV0dnUdr 3eSuCnjYwsSXgZRblH3rw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:p/pKXMBedKE=;oBSCRfOJn8LG0j/T6UWFUET2jsI SrFozwZ6OoOSZZHjZqg/BdhdDKljoAihhAzqQ40EDhslmtCABDUQNU71R+guFyAX33bWVqRfY 3B2zNkoPAfvs0iX4l9hyw1YMzU/x3yksloFKEX8YIY7XsxlYk4ZxBItmG/w0PpVa40FyMrn+T 2a69olQcaY6epym0hKrqFiFVEMVQxEvpGhTFIsBtaYwDBLbOteiJNesn0g0ZRKkrRmKyJbI/c UsMhBvoqJk4norcTkc1X0ssn33l8fy+3kcG1FgKWzr7QbMTskOcZmBTsN5cqeavpRbMpFCxkj aCwelvYSluMEzYJt7054YVhkWs06+h2MhOBh5drim5PRbNju1ZfhvyBYyKau/Kkh8mTzW98h7 mKrU56KyeKRRD6M+ZS9jIDgCpQc1iz5hjPttb+MRnve8lVaAbEsRgkWPIb9qytfcrm7HXzUxz lupssBVP6Ks7Ez+zynwdWOvnGiKerCN9TCmaw0lj7soDECZxMu2fQrmpVyOfyXX/GLiQikVVY O2/4mgAY8X8HNuCqCzQj8n+pY7fXQsAj1TYlCtNn5FyhfeiVqhV5IL5XgPVF5FQXdT/ExvAEd X2WV7o98B/Na3t1Ier+FY/luDb3hBocOG9Iz7K2LpgCQPJfgGoJ0HwFf22Yy4UykPosF1+4iB TuwrzikahGTzmhEK2t4ufFKGOs55ME1djA32ODuJvxVNb872Vd33/y+8FvJn+56R/xv4dIj91 TxT2280AKRaduR4ZFEBdnXZcxz7BJbHKQJO/IFP4SoD/hVn91rriUTuQVfJ3qsxJf9oKQmg+r 4TL40YxKad/+9gXJZ1Nu0R2T6OwhwRi9545jRkigHhLmoszrp4EqdWxdPRdxZumKUUwzB4BV/ nDsy24HkgXTYbl0dboDIYIJeUp6wcSI5HbdC/EV1QFJ01FFy1ElM37+dMgktok601NRqVYeGo S1fU6yoJ3Dqfmt+Mg8n6B8lHPsbOWPkzsP4c30ReRZRFsmGhPACdLH324ev8WI1OMcXHf7lrR qDW4THKoaEyYSKHAD1rIyqZ9ZWSCJJnBRNh9tDwAUdDtg3ReA4OFY6ePT10F7JBURTIr/yHT8 SXSUlD8Qvf83W5z5bS2bnCIKWOB/CLGmRDGMzuVltoCJjkN8F64mND2EKlp5pZWHCkBROu9DW zR38fZLU60zkFLRhWTo43K/zgYSaFbpI22G3LYaM4ldPifkXOwaXLH6vli8F50ftyCozpfe33 M0DG6I0Q2jSqUUi8Rmao1c8HcGW291Kv/l0hRA8HUEdpYlURWNUi+H8XXG32lYIQ50Wn+vXMZ YL2Ztj81Q6CH4vwQSNexOmhd9lrSfusZjfc9k2mWd8v59w= Since the driver already binds to LENOVO_BIOS_SETTING_GUID, using wmidev_block_query() inside tlmi_setting() allows for faster access to BIOS settings. Signed-off-by: Armin Wolf --- drivers/platform/x86/think-lmi.c | 23 +++++++++-------------- drivers/platform/x86/think-lmi.h | 2 ++ 2 files changed, 11 insertions(+), 14 deletions(-) -- 2.39.5 diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c index 2c94a4af9a1d..0fc275e461be 100644 --- a/drivers/platform/x86/think-lmi.c +++ b/drivers/platform/x86/think-lmi.c @@ -344,20 +344,14 @@ static int tlmi_opcode_setting(char *setting, const char *value) return ret; } -static int tlmi_setting(int item, char **value, const char *guid_string) +static int tlmi_setting(struct wmi_device *wdev, int item, char **value) { - struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; union acpi_object *obj; - acpi_status status; int ret; - status = wmi_query_block(guid_string, item, &output); - if (ACPI_FAILURE(status)) - return -EIO; - - obj = output.pointer; + obj = wmidev_block_query(wdev, item); if (!obj) - return -ENODATA; + return -EIO; ret = tlmi_extract_output_string(obj, value); kfree(obj); @@ -995,7 +989,7 @@ static ssize_t current_value_show(struct kobject *kobj, struct kobj_attribute *a char *item, *value; int ret; - ret = tlmi_setting(setting->index, &item, LENOVO_BIOS_SETTING_GUID); + ret = tlmi_setting(setting->wdev, setting->index, &item); if (ret) return ret; @@ -1588,7 +1582,7 @@ static struct tlmi_pwd_setting *tlmi_create_auth(const char *pwd_type, return new_pwd; } -static int tlmi_analyze(void) +static int tlmi_analyze(struct wmi_device *wdev) { int i, ret; @@ -1625,7 +1619,7 @@ static int tlmi_analyze(void) char *item = NULL; tlmi_priv.setting[i] = NULL; - ret = tlmi_setting(i, &item, LENOVO_BIOS_SETTING_GUID); + ret = tlmi_setting(wdev, i, &item); if (ret) break; if (!item) @@ -1648,6 +1642,7 @@ static int tlmi_analyze(void) kfree(item); goto fail_clear_attr; } + setting->wdev = wdev; setting->index = i; strscpy(setting->display_name, item); /* If BIOS selections supported, load those */ @@ -1666,7 +1661,7 @@ static int tlmi_analyze(void) */ char *optitem, *optstart, *optend; - if (!tlmi_setting(setting->index, &optitem, LENOVO_BIOS_SETTING_GUID)) { + if (!tlmi_setting(setting->wdev, setting->index, &optitem)) { optstart = strstr(optitem, "[Optional:"); if (optstart) { optstart += strlen("[Optional:"); @@ -1791,7 +1786,7 @@ static int tlmi_probe(struct wmi_device *wdev, const void *context) { int ret; - ret = tlmi_analyze(); + ret = tlmi_analyze(wdev); if (ret) return ret; diff --git a/drivers/platform/x86/think-lmi.h b/drivers/platform/x86/think-lmi.h index f267d8b46957..a80452482227 100644 --- a/drivers/platform/x86/think-lmi.h +++ b/drivers/platform/x86/think-lmi.h @@ -4,6 +4,7 @@ #define _THINK_LMI_H_ #include +#include #define TLMI_SETTINGS_COUNT 256 #define TLMI_SETTINGS_MAXLEN 512 @@ -87,6 +88,7 @@ struct tlmi_pwd_setting { /* Attribute setting details */ struct tlmi_attr_setting { struct kobject kobj; + struct wmi_device *wdev; int index; char display_name[TLMI_SETTINGS_MAXLEN]; char *possible_values; From patchwork Mon Feb 3 18:23:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13957977 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (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 7CF4B20E01D; Mon, 3 Feb 2025 18:24:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607061; cv=none; b=SgFOZLkF2GND2m79mT8hpVjL6tXU3N+gltywO89v5DhRKeMW6Uf9dcqfvXQJDdx0cpkIi96Jz/++tMWBfGBnw7BVq1F/R0o3U/sfQUh3xoBKeZCQ3Jr08q/ycXbGk2bNhAklGInQQio+vJI/eGaSKgN7KZbdJLb6B3f5gOwV0X0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607061; c=relaxed/simple; bh=Ca4htyzMV4BbSbS57tRGc2+Cc0LiM6cUtsp4GcmvYPE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=owrsy0AA6+TixTuiu7+9hSeEblly0V5pLq2zFlMNrs7A9lxX4fs23Op4CW4WfqOd8LVu4i+Jmg+8JTQixW+DLM0XEPkCEtn3RMobLRSlOI3ItqO/ecNLbKc0FyfFrUm6IPkKFd+hNAr2E5a+142yPXKchfMRYviTmY7CEp8N/cI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=Nm2jCK5N; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="Nm2jCK5N" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738607031; x=1739211831; i=w_armin@gmx.de; bh=486rwmOb89mmDx+Ffk5gLFZ3t0a1l6qw1EFvtUtqR4M=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=Nm2jCK5NvCqPyEQbfz7ZzbgBF7Zdf01TtDru4gqMw1zerTPQMH90G8V/4gZoAchM blqBBljdzfxRCzQDe3SzDedjPu3xrFKkKRgiAag3i8ga8cnklv8Ij/PbZd2r7L+oJ sxEOR2IT2XO/kXmPezGeBuTPgTHzO72saFyQJAPoGTUmklpUbHqPnuaZ/eeQCO4r5 TJLtYd1aQozxdj6NNzLEtyCiTRfhDEi0OZYaj5xWNL0yRzilKm3Yx6EnjPnZHyYpC vCcikmst3ubD40euNhA3YZVIg9ojHwCkBNFQHostlYafhs07wjtYPgtc9XpsNf8JI dRreYxLpJE97hVAuGA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([91.14.238.232]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mkpav-1t0lKq2nSp-00hOaB; Mon, 03 Feb 2025 19:23:51 +0100 From: Armin Wolf To: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org Subject: [PATCH 4/7] platform/x86: hp-bioscfg: Use wmi_instance_count() Date: Mon, 3 Feb 2025 19:23:19 +0100 Message-Id: <20250203182322.384883-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250203182322.384883-1-W_Armin@gmx.de> References: <20250203182322.384883-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:wPh2RmjkIqXcV/quK3A5HjPySVsCQnHikQf23COVoQ1tnNcYBjd eQNrW4Sj8nfYYKbfRv6HKvKUDi9x9iMO1+7FSU6Cn7lw7rOMwRU/i5EEBvVfNbIICqaKJtA sIvWtN0JTJ8636mIRw6hblup4WT8cH3IcUQGSZwq6KQDhz/fOQujIKUx2PX6hybLsvzIDN8 nP8h4QGJsJQpc70xddH2Q== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:ly39MgnsuNU=;bX3jGkCRZlZ5SLVr8IX2gUCtIeY CkNVk7KzJstlAaGzf7cmxWIR9hYB/jq9NngcShxcCMY9R6pOH/QhGoNu5Mu+z1AMSI1gCcgk/ 6Z1CA8MXywdbzgP5E69FDokWo03xVNdGOsd7l6bfyEXMFkDWsL0dLHX+udABdlNt2S0S1ZByM EM/Eql4waQNacPSwNkVmi2S5iyahryLZckedbEPXqd3W/m8r+Z8hGGVfAVdjuo+DZIlnxt1Xv ZU0t+zsgP2iB4u1FNUx2avc3UirHEqqZ1T/mXD2f926F7Fb4Ko924SFNFMV1Qi8H+T+Aa4T0N cfFRqg4rsBb2ptXH2xjmbbxzD0hHnpEWPUXbCFx4dOTJT20o1YCen9n2q5n82p8stdy6GgEUN szRvJ2ys7RtQ+fESAn1/BxLiYoHGwXxTRKJSp0HJnlo8kas47axaee2jnvpvFtUYQ28/0qMaR SVLULaFRcWtOJZb3imrpdMb7MqcQWwOMmWPgpKaquxqxJU2HJIc6scOZBT3qP4p7uo3rfFaZO 82zVY3+ceba3mD8/9x0l0p+UmFVRFYxwFeZ+EU1qWe7lYnkklpbwqL/vy0ePaTRzzG6RmAPMK z8ozK3/PfMQx+bhZ4mZfAne4eFYTFTmguRsHbsoR7mJ9EsKJc7rgVYTfNU4qi8+Neh9fxiyON QMA/a6po+NiWfBdlrd4ZoH8Dj7W9bOGMaxqsF8J6CxXbOVPTPopm2SKw7lGgc2tGOBFvx13BY FC+/GK0v+6M4gQxDyWA2CehgQ2rSfhvo89N9YAFnIYFdGB3nzShtpX1o/flAbmjOteVQwBWTa pTk4BON9em1mUeQ6QfaAuKftRSHqJkKYThLo9gI0asM5tYKPDy0zEbTEIClT/EH6fjlAbx4oo l3/sCfsE7PRpQLBypyhcwr5iANxz5/GBjZRQIapjxL37F+yN71l/n95nrqaD55eZ/7wZFfrzM 3nGUSyqJtYEbNe8NUcE1uHTVcru2fqCgfVZ8hPqJREVFYIOHimuVODHt7M5oN6tfoPr5L0B35 z/6aW3/exQfl0YL6OX92wF12zN8MjrK51PnA0uLdo83/0M/9CGGOi4qa9gQgmJ70f43zjYLgZ kvRcJ2iVtNXY6/vGXMyICKKkjPEj1SraByY8koFX0hlsYjsqjzpNdmnrOoGJ4V2zvj6YZ/eH0 qRlOoMvjxeT7V2u6nquu66c4G55//iGhol0nLnYuTpG02++pNq7fdx81opc37TTOsLiKqw8Fh bX4H7o2XgivRNZ5c5ZvkavQ90wCGM43wjKqk3uAfheu850JCq61F6jRV8AkdSRfB8wfdn7SNf PoVvBucm3OQil9vcWwWZC4jikwBdEak0VN6igzzW602Qlo= The WMI core already knows the instance count of a WMI guid. Use this information instead of querying all possible instances which is slow and might be unreliable. Signed-off-by: Armin Wolf --- drivers/platform/x86/hp/hp-bioscfg/bioscfg.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) -- 2.39.5 diff --git a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c index 0b277b7e37dd..63c78b4d8258 100644 --- a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c +++ b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c @@ -388,16 +388,13 @@ union acpi_object *hp_get_wmiobj_pointer(int instance_id, const char *guid_strin */ int hp_get_instance_count(const char *guid_string) { - union acpi_object *wmi_obj = NULL; - int i = 0; + int ret; - do { - kfree(wmi_obj); - wmi_obj = hp_get_wmiobj_pointer(i, guid_string); - i++; - } while (wmi_obj); + ret = wmi_instance_count(guid_string); + if (ret < 0) + return 0; - return i - 1; + return ret; } /** From patchwork Mon Feb 3 18:23:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13957980 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (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 6454520E70B; Mon, 3 Feb 2025 18:24:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607066; cv=none; b=lHZ+sYDOD4Arx9rghaz3L4v76KqV1GcnrpZGRXjFwz80hHXrnkQH9G1MVFXZwhlarBjjT3T/ke+pMNQsVOyxjQ8caXiJzN9qQbWjW+ENu2bbMiizfJHRye4Lnhycx56V5Y+yXC6xhEmTGFeuQDUA18weFVB8nrZjEKm641Y9knM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607066; c=relaxed/simple; bh=FHQiOMPxOLduL6ZunVtc+K2sCrie2H89WPZ6vjPpGKw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=HZMWhQQzku67CN+6Ys5l9RY0Z/FlTQ0XrDHUjOaCFtS4g3akfrfUqOjYPgLrgQzHQTX+V2sS19xJ/C7i9eNLcc8ItoRLFQnz4usHupzwrlUXkbaQb2+Lykh8nyc+0b4Irkn2eAC5A0uGhNC/cAtW3knf5mw2EjkkYJc5C3C9e2k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=pXt0Tb2C; arc=none smtp.client-ip=212.227.15.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="pXt0Tb2C" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738607034; x=1739211834; i=w_armin@gmx.de; bh=180guT/AdsT0ltiSLZcaeOIERCtnGAqQQGRtYmLBchM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=pXt0Tb2CcZKPjiGHc3LtR0qwoLd8Gn0m935eFRFf00nqIvnT+/k5BJQV69mF7bZG Na083tE7FtVKJ7LF4MzFGDohvMy27uKgQtCFLwPWldmtOKOloYPnDOJnVLqcWSU3q E8XwG3cAqS0p5Od/3d5Iz7GFXgG7YWTh6KfmhRLJ40FGboE+wMrHHEgDh2dDxCUuu j1M+0a/6e7PxizR2GmHtPDDMDuHWID0YwonhT1WrCUaItOzjfM3aeNO+rsrl0zuVx 55DScnMqWFaz9w1S6clG8DOglj6XG/QOyK+Jt15XoE5duTbYSfKJApmqGibNqPMx8 PWAVfBM/COfW5vQXug== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([91.14.238.232]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MeCtZ-1t7Kv83JHr-00jMXS; Mon, 03 Feb 2025 19:23:54 +0100 From: Armin Wolf To: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org Subject: [PATCH 5/7] platform/x86: wmi: Rework WCxx/WExx ACPI method handling Date: Mon, 3 Feb 2025 19:23:20 +0100 Message-Id: <20250203182322.384883-6-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250203182322.384883-1-W_Armin@gmx.de> References: <20250203182322.384883-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:Nzx1rTtRVfc3GgoenYE84g0O3YzlMeSyfiYJ24Tnm1vVsyQriqP MkiKLJZQHZGt9mlodDJNeFXB1cRyxmmkF+SG2az56xxx9fM4KIBP5kCmEP9x9Rh0tfVh709 uh2zGu98y8/ro+0jLCRYWNt39xEAPkAuFqeiCBfX3JzmZXV0aUJcHaxsRHKsXLguzcee1MQ KyH88QKnul/m7hMDwUuow== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:KMWT4GcImFE=;l5gLwauUu2OjG8zmjmGz9QvY466 U2EwfkpWkDPktjPPqwFbI8Wv/2/yV72U5CVStnwYm00whL9rFcBOPuy8hdcfyzhCyFoxwVnaW YVEh75Hm68qUiPEV/YLx3dQeYOf0Q9/QInrddAJ4XxPd7Wy4Fwwwdce7W7fHz3gtYhCbtODnt WoKNKrd1LXLYzNgZuLxcfZVdNnK9NqTT7OZ1hKRFouL4DzU8SjZ+lhgr8SbQN+ZU8P+qcj/J/ y0MKM9ReX2qtpFlIdmwOv39l72KOIt1ZrNybA008COMv5OjdW1WbZfpw9XNv1KbdkvNsXN/A0 arbtl1A7FmwpwcrBkUeClUQy2WszxtUvTYYYzNtTlagIOQoXYh/qkKUcG9cOMTmj4QzS3UeLZ NJQS15oHKNIZUgIY/RbgXr+Gh1lmRIDmh6ZdWnM/ifhyCT1A1QXRAIzOGM2myLWeatlKCIywB cixGYZ4IhayZzBPL4tqd9W/gD0iagO3to7kveJCBRBP/Adwym0hEbAqLoqUMeFbdoLozmgwyt 7tQEaKSwXSoVSPbTKkdfLA6pfO+0fjE4cRdOxwmtFp00zoU+NOWGKi/gXpN8EPRlpbJjI3rjD KmgxqYnS6EEfmPVpSedZjbbJYh31ctt3vgWY3fpsPy1pQgbfMK421++flJ8AVGIlxsNX/PVHa ik/QpBwaJ1Bji3IqL0/JSOyngJhekM12uFfkTQivSu2Brzm45xuzwVjUCQIOG399ysnWnTQFj sbh6BmO5gwFe0uNxSCgRytOcS0zfnz6O8mk4GDpIKOA4StTpRQEvdUNXccWPHlaAnBYW3EhTp 7jTuJFir+dKF5T6oJGQ+eLNCYBHa7j+nPAPtaj+o5HRUSX8C3dvwJ4IG8sEOObSz015ahNh6o Mg9Dyrx4iVp1+cb71au3lYCvxT3E3taqdiP6yJANeR7gdOmSMaDYdrMUfwPxbIL4cq+pL9JnD V559OxiA13cU0fDnseRsT5EQKYuw2TnzKJvmIdD048F4ezqod6eLm6wyQ7j1qtYeeX0YejGYC us5TZNKoMDZJtDq1nQfBoWlbOLsRJTc0CjbqlBMBKCmY9sKc0uvN7wA0KJPaK3aUKYXp7Jrv1 149qORJxvdBmAoyZ0XHA2KLa4tawZXn45TJ3FXFtOEhc069JCvvFYLt4lvAmdpyAmVTExcYz5 o7oJTB2vwlca/+oBmYsymQyfPtOSBfxzzXJ6J8aTihHItjzwjKtzPgFcvci+vogEMH1FcVpGb JZHyvy0k9xCH0diR1BPXimJawnlXXnq94cWSu+9CFF0pPGACvaOD8g9PuLqT2AlEpx2M4onIM WSsdR/Ynokbz5M0mzOI/2r0Wmwro9I+hsQjhrr/XFpjE9g= The handling of the WExx ACPI methods used for enabling and disabling WMI events has multiple flaws: - the ACPI methods are called even when the WMI device has not been marked as expensive. - WExx ACPI methods might be called for inappropriate WMI devices. - the error code AE_NOT_FOUND is treated as success. The handling of the WCxx ACPI methods used for enabling and disabling WMI data blocks is also flawed: - WMI data blocks are enabled and disabled for every single "query" operation. This is racy and inefficient. Unify the handling of both ACPI methods by introducing a common helper function for enabling and disabling WMI devices. Also enable/disable WMI data blocks during probe/remove and shutdown to match the handling of WMI events. Legacy GUID-based functions still have to enable/disable the WMI device manually and thus still suffer from a potential race condition. Since those functions are deprecated and suffer from various other flaws this issue is purposefully not fixed. Signed-off-by: Armin Wolf --- drivers/platform/x86/wmi.c | 108 +++++++++++++++++-------------------- 1 file changed, 50 insertions(+), 58 deletions(-) -- 2.39.5 diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c index 646370bd6b03..01d4ac480930 100644 --- a/drivers/platform/x86/wmi.c +++ b/drivers/platform/x86/wmi.c @@ -123,24 +123,6 @@ static const void *find_guid_context(struct wmi_block *wblock, return NULL; } -static acpi_status wmi_method_enable(struct wmi_block *wblock, bool enable) -{ - struct guid_block *block; - char method[5]; - acpi_status status; - acpi_handle handle; - - block = &wblock->gblock; - handle = wblock->acpi_device->handle; - - snprintf(method, 5, "WE%02X", block->notify_id); - status = acpi_execute_simple_method(handle, method, enable); - if (status == AE_NOT_FOUND) - return AE_OK; - - return status; -} - #define WMI_ACPI_METHOD_NAME_SIZE 5 static inline void get_acpi_method_name(const struct wmi_block *wblock, @@ -184,6 +166,42 @@ static int wmidev_match_guid(struct device *dev, const void *data) static const struct bus_type wmi_bus_type; +static const struct device_type wmi_type_event; + +static const struct device_type wmi_type_method; + +static int wmi_device_enable(struct wmi_device *wdev, bool enable) +{ + struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev); + char method[WMI_ACPI_METHOD_NAME_SIZE]; + acpi_handle handle; + acpi_status status; + + if (!(wblock->gblock.flags & ACPI_WMI_EXPENSIVE)) + return 0; + + if (wblock->dev.dev.type == &wmi_type_method) + return 0; + + if (wblock->dev.dev.type == &wmi_type_event) + snprintf(method, sizeof(method), "WE%02X", wblock->gblock.notify_id); + else + get_acpi_method_name(wblock, 'C', method); + + /* Not all WMI devices marked as expensive actually implement the necessary ACPI method. + * Ignore this missing ACPI method to match the behaviour of the Windows driver. + */ + status = acpi_get_handle(wblock->acpi_device->handle, method, &handle); + if (ACPI_FAILURE(status)) + return 0; + + status = acpi_execute_simple_method(handle, NULL, enable); + if (ACPI_FAILURE(status)) + return -EIO; + + return 0; +} + static struct wmi_device *wmi_find_device_by_guid(const char *guid_string) { struct device *dev; @@ -337,10 +355,8 @@ static acpi_status __query_block(struct wmi_block *wblock, u8 instance, { struct guid_block *block; acpi_handle handle; - acpi_status status, wc_status = AE_ERROR; struct acpi_object_list input; union acpi_object wq_params[1]; - char wc_method[WMI_ACPI_METHOD_NAME_SIZE]; char method[WMI_ACPI_METHOD_NAME_SIZE]; if (!out) @@ -364,40 +380,9 @@ static acpi_status __query_block(struct wmi_block *wblock, u8 instance, if (instance == 0 && test_bit(WMI_READ_TAKES_NO_ARGS, &wblock->flags)) input.count = 0; - /* - * If ACPI_WMI_EXPENSIVE, call the relevant WCxx method first to - * enable collection. - */ - if (block->flags & ACPI_WMI_EXPENSIVE) { - get_acpi_method_name(wblock, 'C', wc_method); - - /* - * Some GUIDs break the specification by declaring themselves - * expensive, but have no corresponding WCxx method. So we - * should not fail if this happens. - */ - wc_status = acpi_execute_simple_method(handle, wc_method, 1); - } - get_acpi_method_name(wblock, 'Q', method); - status = acpi_evaluate_object(handle, method, &input, out); - /* - * If ACPI_WMI_EXPENSIVE, call the relevant WCxx method, even if - * the WQxx method failed - we should disable collection anyway. - */ - if ((block->flags & ACPI_WMI_EXPENSIVE) && ACPI_SUCCESS(wc_status)) { - /* - * Ignore whether this WCxx call succeeds or not since - * the previously executed WQxx method call might have - * succeeded, and returning the failing status code - * of this call would throw away the result of the WQxx - * call, potentially leaking memory. - */ - acpi_execute_simple_method(handle, wc_method, 0); - } - - return status; + return acpi_evaluate_object(handle, method, &input, out); } /** @@ -421,9 +406,15 @@ acpi_status wmi_query_block(const char *guid_string, u8 instance, if (IS_ERR(wdev)) return AE_ERROR; + if (wmi_device_enable(wdev, true) < 0) + dev_warn(&wdev->dev, "Failed to enable device\n"); + wblock = container_of(wdev, struct wmi_block, dev); status = __query_block(wblock, instance, out); + if (wmi_device_enable(wdev, false) < 0) + dev_warn(&wdev->dev, "Failed to disable device\n"); + wmi_device_put(wdev); return status; @@ -471,6 +462,7 @@ acpi_status wmi_set_block(const char *guid_string, u8 instance, const struct acp return AE_ERROR; status = wmidev_block_set(wdev, instance, in); + wmi_device_put(wdev); return status; @@ -551,7 +543,7 @@ acpi_status wmi_install_notify_handler(const char *guid, wblock->handler = handler; wblock->handler_data = data; - if (ACPI_FAILURE(wmi_method_enable(wblock, true))) + if (wmi_device_enable(wdev, true) < 0) dev_warn(&wblock->dev.dev, "Failed to enable device\n"); status = AE_OK; @@ -588,7 +580,7 @@ acpi_status wmi_remove_notify_handler(const char *guid) if (!wblock->handler) { status = AE_NULL_ENTRY; } else { - if (ACPI_FAILURE(wmi_method_enable(wblock, false))) + if (wmi_device_enable(wdev, false) < 0) dev_warn(&wblock->dev.dev, "Failed to disable device\n"); wblock->handler = NULL; @@ -844,14 +836,14 @@ static int wmi_dev_probe(struct device *dev) return -ENODEV; } - if (ACPI_FAILURE(wmi_method_enable(wblock, true))) + if (wmi_device_enable(to_wmi_device(dev), true) < 0) dev_warn(dev, "failed to enable device -- probing anyway\n"); if (wdriver->probe) { ret = wdriver->probe(to_wmi_device(dev), find_guid_context(wblock, wdriver)); if (ret) { - if (ACPI_FAILURE(wmi_method_enable(wblock, false))) + if (wmi_device_enable(to_wmi_device(dev), false) < 0) dev_warn(dev, "Failed to disable device\n"); return ret; @@ -877,7 +869,7 @@ static void wmi_dev_remove(struct device *dev) if (wdriver->remove) wdriver->remove(to_wmi_device(dev)); - if (ACPI_FAILURE(wmi_method_enable(wblock, false))) + if (wmi_device_enable(to_wmi_device(dev), false) < 0) dev_warn(dev, "failed to disable device\n"); } @@ -902,7 +894,7 @@ static void wmi_dev_shutdown(struct device *dev) if (wdriver->shutdown) wdriver->shutdown(to_wmi_device(dev)); - if (ACPI_FAILURE(wmi_method_enable(wblock, false))) + if (wmi_device_enable(to_wmi_device(dev), false) < 0) dev_warn(dev, "Failed to disable device\n"); } } From patchwork Mon Feb 3 18:23:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13957979 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (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 E2F2B20E33D; Mon, 3 Feb 2025 18:24:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607064; cv=none; b=Tg1mTASY4/WiAuM7yDvqOJdnVAqFmMBhrWjX6o+/M2p4vrlAy8C3XKKfBrzucIriNPDm6fWnbZCSrwluGQNPIldO7fL7pOcW8cPgw8J95lyNWjYT+DrLAkLrtJE6woKD5KLg/yyg1leKhvjiqbv35qB6hS0G2EFJ2JZU50CFsvg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607064; c=relaxed/simple; bh=HIb6t8E7LQ7JSCBI6Dj5eLaEJ9aC6SKaBsGchOM7ARY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dZnpURr9zfPs50hxfOuRPtIhcFf9KFncqqu/ppfnFIiTGWIDZHnwEzAe0bHA20MDyM2Hm8uwsaR+ounFesqi+ytse8TTGV+n+x0UxtiKAx4FTQR4U8b6gRrh05+V9Mx9pW7kzmSRXFwJRe33fyi0auz5qdcvZMrUWzxqqSXwGc8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=EYhfz47u; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="EYhfz47u" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738607037; x=1739211837; i=w_armin@gmx.de; bh=m5VMaHKaGDZ2JNZWT7Ky6TMwO3RkLaIA2ds+xOAxaFE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=EYhfz47uu3Fq4mSHb0EyWUe5NwdJr2GqZf78dCbPjMoL8GvVSeYM2Nfbcbz+E7YO 4lCtG1zSAfEXxDBwssw+2xi7yLL8v9X++eUV3uNEaCtGJ3OOFU1nF9Pzpx5hkeeEt 6svKsm221E3J52Tse+E0l/AMN7D/M5pnwNxliJ/wVs8EFFEZp80vVs3UdSfOUXUQs HjgZ/E5/DJ/OhfXEOGZZXeOEWRW2zBt9nZKe31Ls3J9zwcNa8YOEIA5A4xOObo6cu HaO7u8d8rdTdhgWtrb3OsC/Z0MKEdk8ZRe57PR587nesKIUUuXT8Ny0cIuxPeL5Z/ XGwWcsDZQPvZ9ZhCSw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([91.14.238.232]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mnpru-1t4Lpf01JS-00qf2Z; Mon, 03 Feb 2025 19:23:57 +0100 From: Armin Wolf To: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org Subject: [PATCH 6/7] platform/x86: wmi: Call WCxx methods when setting data blocks Date: Mon, 3 Feb 2025 19:23:21 +0100 Message-Id: <20250203182322.384883-7-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250203182322.384883-1-W_Armin@gmx.de> References: <20250203182322.384883-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:wJKVaiQ90liEE4ly+HiOLBV2YkrEPWP4bFa7ew7ygtsUik8JC/z rxv+Am7Wzw2c1j6LwfxDids/9neF3YXzYJIdS35Kvs1OAukqYvWqMd9WUW8qRbH3txuIVSC L6BIiRtuPQTXkXNFeHzbKYKr3YW5vCH/7iwJOBEf7IE2q5/2V28O8646iV7qjzxPw1ZmXHz QDvk+rDxm6pu5zOlv3Gdg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:SMHMKT8+Ssk=;/QSOaX2z6MYhigkkUAVfrXnus3i ixDbU9R4DvvfGsHdadyDfmKLrtLGL/IbFuCjkgSS7TY1L2o1bMMCPg7tYB6KnBbDRWx2v966i aDtxdvPsXGlKRlJf1dOJ0UyYAWSSGZyTcU9G9KWay0qfESteYNwnIU8v7jJmcd7BeKix+Tca0 WgXSUV92+4FcjIPw5LKcGOqV+VqQ4iHNh3Bt7YY69m1Wq2axpEWQhztSRd07sKVhcCN/cKScB 5McWu/jt+fuWGy5bfVqM0TjT2KFnU2F+NBiJ5y8wRRRcKykTDfos2imUM26iYFljqW9FDtbSt NmyJw7rfqWu9msIuG93Fe2kBXpuViOFmHGc1oB2DAq8mlGF1RSjeTjZnhOgWejn9F7RJdwUTe TFvqSGFEN3kNXNNFUXeIqa9egBwKZ+q1d9PnyHt6d20hFhVSMEv6PgU2/wLCBEOezkhNvMPeO o/VWJSk2DOiJxDG37IZzGQ/rQqUNeIofp/w5EDqSRXbxFGVqW/9Ux4gZ9XmgRRTSgb3+GhxHY osbHnnJSp9qfID3/yzHc3QsURsI/hIR3qoAw1hfuJPHLYTdSJAOdeOVEFWA1IXqoqrMNcwLKC eEaQzo6B3zMDkK9hbzOhB7q90B4vMXcjrh7r/PYdGp68diPNMx8XdzEnvGHZdJedD7hjEelvt kC5mUtGq1y8occKRNGh3X/sxXKUeRMuPnvvUODuI36uRjwCVw+5LGAZhKlQTyO4kKEw2K7Ilo EnYIJzeOQA7HxYKk73xn1Hz+sB9I4Z5iX8QL1V4hV7fnjW8D1XTTrqUPeVNAJzPpYTk8ztaRu MSDu/dCySs2owaN1VoBNq4yX1chDQ6ctPEdC0OFdBSoZBLvDAZ6mIp4oPKQh8e5CLl75tIU22 bqgc8icpUmJdV8YTrtB9wQ/FoCgxq856wIlXvqdFB6crA+/el350fKDqzLARXmEppUnVHjLwe FdHRnA3A3JsB3tFxveSTV6MngZnFRZK9lMGEJ2ef/7ZjEEH1rKJyIUa4wuka8AfTAv/ORO0Qu NL6/sifaidndwD7fosPXp6EfBhw54yNqRV26YVrL83cB1pdjk8Xj+exQJXvtCf8F0L3mmrTgi 9IsVcbmiVdV5rStUAni+8/suvhQdPNnBa7LX7Drk2T+5Wg6aW73qG3Tggsqd9YlD+3E/ZO3hY 5tgky+383HYiajDjAglmsHyhbu3qlBkxOov1oy7F+W9ijeZFpGnXS9IFgWeKNJY/nQRF+ms7u w6NeyvK566i7EV3K3DR/lYw+JNiLCS1WqVdQ9dThFSI/nDa0+D+qOUcnk08WT/WwiEYcnQRGk fWfT5X156ao5UIR1KpTdi5wzjzXtYDD5pYYoEQ6+gSl3t4K1Lp3ttBh63LNVyUJTRUNyXTBvC wx74tlLfRGbkwdCQ== After performing some tests with a custom SSDT table available at https://github.com/Wer-Wolf/acpi-wmi-ssdt i found out that Windows also enables data block collection even when the data block is being set. Emulate this behaviour to avoid confusing the ACPI firmware. The bus-based API already implements this behaviour, so only the legacy GUID-based API needs to be changed. Signed-off-by: Armin Wolf --- Documentation/wmi/acpi-interface.rst | 3 +++ drivers/platform/x86/wmi.c | 6 ++++++ 2 files changed, 9 insertions(+) -- 2.39.5 diff --git a/Documentation/wmi/acpi-interface.rst b/Documentation/wmi/acpi-interface.rst index 06fb7fcf4413..f1b28835d23c 100644 --- a/Documentation/wmi/acpi-interface.rst +++ b/Documentation/wmi/acpi-interface.rst @@ -89,6 +89,9 @@ Similar to the ``WExx`` ACPI methods, except that it controls data collection instead of events and thus the last two characters of the ACPI method name are the method ID of the data block to enable/disable. +Those ACPI methods are also called before setting data blocks to match the +behaviour of the Windows driver. + _WED ACPI method ---------------- diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c index 01d4ac480930..2b2e405955cd 100644 --- a/drivers/platform/x86/wmi.c +++ b/drivers/platform/x86/wmi.c @@ -461,8 +461,14 @@ acpi_status wmi_set_block(const char *guid_string, u8 instance, const struct acp if (IS_ERR(wdev)) return AE_ERROR; + if (wmi_device_enable(wdev, true) < 0) + dev_warn(&wdev->dev, "Failed to enable device\n"); + status = wmidev_block_set(wdev, instance, in); + if (wmi_device_enable(wdev, false) < 0) + dev_warn(&wdev->dev, "Failed to disable device\n"); + wmi_device_put(wdev); return status; From patchwork Mon Feb 3 18:23:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13957981 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (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 B888820E038; Mon, 3 Feb 2025 18:24:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607071; cv=none; b=GyAYXBRn2PGkHY/gU+2M5rPqtwvAaIOejedGcKV4zN5Wm4zmJ6zHNPbEU+HErsiu/h/oEhpdZjCwixUN5gdd/8izhp4sPLDUln1J2bUYYG73y41LeOC75vCjgXuRlO5WKFrpbCoSeNZSUnyEHNbcHzt8mgXMyMmL1yDTeNksEfM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738607071; c=relaxed/simple; bh=ID+lTHjLVqPJ/7xdhI9bJLFn9teO4+JhdZK9zVjbwuc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=g+IpM6UDBaxELt6dSREMQqVWzBr6uxL5mAV23c5lD6pKlC7Z0a9aCeKfOhaG61zNBFMdIDpdKN6RAuFL6Cj3kjPlHL6SbMIyck+7ykmfFCAb03FGI3z9XfC725W49Dui4focqCcunj6Zkq7oCOufHcU3R2KvsBVqaLI4v99Dwhg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=aWhPhmlR; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="aWhPhmlR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738607039; x=1739211839; i=w_armin@gmx.de; bh=RuoP/0xYYt9z3bJOrdWbm40zFLkGkpfWsyjNl2p49Lk=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=aWhPhmlRArsn+pDgJ2w/O1mTO55kfaAAZn58tcZ+hb2T/3SNnY7FghUnQx4ZaDHI 6aQ2VvbDUNusgIJorWP9rBDNlIvzLjvBjG8tL5/+NLu+j2MromQvTN4p+zx684FjM 0B/iK7Usdp6gX4v4pYatzKA7aXInMEpKiZaIbI9jV8OBrD16sqalIxqID2XESWPaG Gc5/XCsQpZgqRri7wix1JPchGYmsm2q+mT+HAnGZXoM8Z4DMOiUvWjJM/993J55V6 qgK5b5jpYxbkqEkE1//ZUNvhSL0JkLp3bcCcgnYa3/Fr4InePKvr0ofCeih/J1IBg Uz6qFEXEUE+dqQ9bqA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([91.14.238.232]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N4zAy-1tFxlr1lkC-0106gf; Mon, 03 Feb 2025 19:23:59 +0100 From: Armin Wolf To: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org Subject: [PATCH 7/7] platform/x86: wmi: Update documentation regarding the GUID-based API Date: Mon, 3 Feb 2025 19:23:22 +0100 Message-Id: <20250203182322.384883-8-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250203182322.384883-1-W_Armin@gmx.de> References: <20250203182322.384883-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:6wNh6ZLBhn/RTk1uI75rS1eo+d5PKvpI3IUTypVYdaxgUADGLyB agytg809oy6KvZRjQsDGpuJIZGos0r92nQZiAeCHicdZvD45ZewgETSrltkawq/BR/DG+kX pk7uINd1aSzUocKO13d3sH+DEW55aonnzupH/qTr2lsT02YPDiQZmuDVHJhzyA4Ay4URbvo 7XFix0eHzgYs+YE8+IE2Q== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:9wiWRpfj7xw=;LWzqhLjD36c8j2gTfbmciDyXoWM OIZz1QSBdDMriNr/kZMaAdiE0rIIC3xw/qwJDo6Ejm/LKvJLiVV3yNqx7Or2LKHswMBubkLA/ 3jS8uC1sLk2Ca9lAhAy0gY52OFMoeCUYA4jodICWzNJHv08vI0rMyEPIN6sruLwcvQpwqkLzV djJ1mqnwRDV6W1QKA581rAkLuNPQu02RRtHArPnKJPDEqayk41dR2+vbEPit5CSxnaTITOxny tiJugjKXIQzi2/A7gcxvbt/UXXK9teD9kOGHYp5JZ+TzGAmWyTT2OnFPOhehKWdxiSFdgm/zt 7zMJt3RlbJnBNpwwBXviprf7E1q1Rsh3oq6gh3iRGOgnBr8qasPwL5Z5cj2DtyhnUmpq+u/dQ BwqZukMRki+A3NuenpSlGMNP/lFR9XAzzwYCOFDwTuzOm8sOBIlZfHKqleSyMVQaP9ihxVaxl 9VbZw+d/Uo68vBMUjXzNr7tXdf4K9bipBQ0vypWTu+Kv+2p/Pq0/9UlpDyodiHpMdhixm2iJe I+fnzs1nbQHFeKRInHI7jldHZvxTmsXromwTf56gqajE7w5rh0SvIH1Vv+YU/A6abO6m18thb reFWPsdeXsDP+Dj6B9wcWVpXBVDhiQ6lD6LhYJCmu7oW9sFz4xFKaPxGqnwg+mDqAA6i8kNBx LWu6oG3LvtH2cJr3xMEyJ041nDzzefswavSQzXPmobPxsMn5hs7v3cGAFcU4Y8kS2Z4B5fEm1 MDbwekjN5PsFMEkEq2F6M3n3/B5JIgbi8MrxvsrCJauO2HelHITumQZpakqBhkivWP8T0H6na 7CWFF+4r76b1HndoSz/EN3Z53uZ66hFFHX+WldBkcNFL3GQoScDYXG5aCJ8lAYxv5eVbJZ8y/ EFYSPVdYStBV5+VaN9Av6EIOPGDjQnMtNGku0aDn0qRjRzuQdP23vd6K8sKxec5woSwiwF7n8 XBPgKVrWiemorU29olBzIQlOKRoWNPDiEcmoRiBp8lp2rG8ECYtAwdpmLYmw0SFkQCoMAvODh CGm6N26miQ2PBKoJT+EhiMmUefpvDKNlRWtD4tJublZTiS7ydszhzCi3UgpeAt3C7yRqY+csP tj5Yh7lo8X8OLDF+pwehWPJqWawztz4ncPFdLSp38t+7MY254rqXQlcWptx5/v+S7gPhVRcxN bYe9XTlN4q04YTy8ignR7uxZHC9mpi1JCMFtK7dx0g4Alkb4+CNf5MIF0jIR6MnYxMciHtRHt btvNxJPRcGYCyoTB6ucii4zoAHtkxcHU/Qnvqm1SUw3xdt5+3BUpzoVSLZbw4/twdBV+A4kYn V6SdPj/krlLVoKdPsoGOCDxkte0OHWwhveg0AGTXiXmyzE= Warn WMI driver developers to not use GUID-based and non-GUID-based functions for querying WMI data blocks and handling WMI events simultaneously on the same device, as this will corrupt the WMI device state and might thus lead to erratic behaviour. Signed-off-by: Armin Wolf --- Documentation/wmi/driver-development-guide.rst | 4 ++++ 1 file changed, 4 insertions(+) -- 2.39.5 diff --git a/Documentation/wmi/driver-development-guide.rst b/Documentation/wmi/driver-development-guide.rst index f7e1089a0559..99ef21fc1c1e 100644 --- a/Documentation/wmi/driver-development-guide.rst +++ b/Documentation/wmi/driver-development-guide.rst @@ -96,6 +96,10 @@ on a given machine. Because of this, WMI drivers should use the state container design pattern as described in Documentation/driver-api/driver-model/design-patterns.rst. +.. warning:: Using both GUID-based and non-GUID-based functions for querying WMI data blocks and + handling WMI events simultaneously on the same device is guaranteed to corrupt the + WMI device state and might lead to erratic behaviour. + WMI method drivers ------------------