From patchwork Mon Feb 19 11:59:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13562578 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 B43552D60C; Mon, 19 Feb 2024 11:59:38 +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=1708343981; cv=none; b=WaguCnGqZXHuQ8Hk7TSV2iduCGE2gwiiCjZQ/q1x+o2tdkr04KEbWpMxeaqWAaBo+HBMVtzC8tqq7gwpe97holtDvKTbNmFZ+Wd/F651xKvNJLox3yrErDdFkEPdTWAZBH7LF/Usjjiaq85I/Zfc9CTa67z131bzQBjT4ki0y5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708343981; c=relaxed/simple; bh=Mp9hOgHSBLyn/IkdgO0pLAaR0KKQJX46nMeFoyl+HGA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ub8QomU3fhbTKHDBJWp1uXtEMvOgwc2iYr1+lc4uICbi2uTWe6vbpPSip2LIxpEF5Bp2DEi/xr6CWiIwBFZgLoiEhkqjNqkQdhq23UXVanX7MOV9W/IePcj4VjDXDVGXJadgA9TRbgVgSZp4JVFJdQLg2DjxlXufU4Aa5wGJqec= 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=Ms65bXKh; 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="Ms65bXKh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1708343966; x=1708948766; i=w_armin@gmx.de; bh=Mp9hOgHSBLyn/IkdgO0pLAaR0KKQJX46nMeFoyl+HGA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=Ms65bXKhzTGXO41frnXR++7fkeAcC4cH9oR5mmV0AOKnCdYG6BIBR6VU9NeFBWPH OghH2LUDssNzsUYfdQfGK3xw1NsAY10evPa/FdRkWzEnLv2i8eH+UTPj7cA5Wrkru e/G81k5Iz0yAUp/56M+oK0uHDVN07x+fa5lzOisNvM/OawtWbSyLBLvKjhA0HTapm eAkCmcYlZZ/MkbFYj2TsS13gb/jBT6VtCgd9bw0Lq1ez/GkklufEyYbJFNMCX2H9W rDmMaS/bav2xhinbtM7suBOwnhqYrFuhFZYO7AjjAKjGMHDaqJdlTCeHjS6iRLdUv /P/kL3IRi+SjcuoibA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N2V0B-1qwd291vP5-013sCi; Mon, 19 Feb 2024 12:59:26 +0100 From: Armin Wolf To: corentin.chary@gmail.com, luke@ljones.dev Cc: hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/5] platform/x86: wmi: Prevent incompatible event driver from probing Date: Mon, 19 Feb 2024 12:59:15 +0100 Message-Id: <20240219115919.16526-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240219115919.16526-1-W_Armin@gmx.de> References: <20240219115919.16526-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:8mOAKKOQfSiI7qUYZqObHAvj7W+O+jwuXvBstGidfNlbqOkaW1v FGMjUDnZbFTCDGvotT188mA/iUzsuFn7+Lz4mIbOZc2zFQ5mt4o2xP7YKWXQZuTPy5YMneU EScEkSubl2UCFkA/yJrxLRVOBI4Q5u1yETJTYNXpxlXMdZh9lq3T/qa9JTfHEHwX+vy46VS +YrF5CLPC+sGCfj14FOrQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:v4V1t7bD45w=;MRvAHFwlkPrjiWrjqJAfBfpOjLo thiBgDIKGaWlqLb1MiXL9Hy/gUQaaHe5kIO5iyKm9wNxvmOB+ZjjigZ9k4ylWJ7hZe8t/3YFS hM99gHOMSdS1zF/Z2MIMprlISG9TA01+OMmrZfQDZOR9lRfZQIaWNKVdDJ0Ww58mPI3N7MS+H dLllHwZVL32gbfc6JTY2p6uGBhCP50iMbPULyyq9KYVYIYf5HexHcTjuDSsfuhPPkleeiZBl2 NQ9jdfd2xMeX+rmHVtvXFSBjD87rkFt3av+I57Fs9vaQa8+fJ5hW54z5atvEC1oHtso4fyart oTTz4/A/zG56gEpV15MeRz0FZrZHi1uOIedIQv8ahvoD2GGrh+DLR/rPQhtPVZo+K91iIdptT 8xgXBj+8aiaP7F3TuHpsYKnssPHwrG0mMg/mwmYtViSzSZoHNm3XRtdE0pex+VpklD1tCRHoo IgDCgbMFlqe6lD+7dVBPHIV5YxyItQhU5qFl9MzvDoc+QWNPD4fCUfwz4Ploc4+DW31kjZ7+6 FkRV96HQft6fE0E4zApz/Ml3ZYNL06DFWhLIiRcw85Q5tsqopSJ45V/PYTOAG8Tkc2OWVcrqj rNX8TioQAdVh1+wdma0vkuaE0/XnQjuxC0XHvLRvyeB7cDATn8k2GUcbsZ8+ZZ8iGboItemsX IvrKBlInugVQ6dV+HaEBHTTLe1HTr9wgzWoyH9fgWY2J2ArHkhoWsJP3mjqzUllve28sVulSr dLu/VxyFKrkRFfpAyzJ8y5G06mjfvcjaRLCIyDPDf/cSB3Ubij4ABaLGXZm8mkb160/fO/OwT C6ro+/kP3zq43TkVoSIvlxNOeYCfrnSTeBej/XT/oAjgQ= If a WMI event driver has no_notify_data set, then it indicates support for WMI events which provide no notify data, otherwise the notify() callback expects a valid ACPI object as notify data. However if a WMI event driver which requires notify data is bound to a WMI event device which cannot retrieve such data due to the _WED ACPI method being absent, then the driver will be dysfunctional since all WMI events will be dropped due to the missing notify data. Fix this by not allowing such WMI event drivers to bind to WMI event devices which do not support retrieving of notify data. Also reword the description of no_notify_data a bit. Signed-off-by: Armin Wolf --- drivers/platform/x86/wmi.c | 10 ++++++++++ include/linux/wmi.h | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) -- 2.39.2 diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c index 5a613b06b269..8fb90b726f50 100644 --- a/drivers/platform/x86/wmi.c +++ b/drivers/platform/x86/wmi.c @@ -57,6 +57,7 @@ static_assert(__alignof__(struct guid_block) == 1); enum { /* wmi_block flags */ WMI_READ_TAKES_NO_ARGS, + WMI_NO_EVENT_DATA, }; struct wmi_block { @@ -869,6 +870,11 @@ static int wmi_dev_probe(struct device *dev) struct wmi_driver *wdriver = drv_to_wdrv(dev->driver); int ret = 0; + if (wdriver->notify) { + if (test_bit(WMI_NO_EVENT_DATA, &wblock->flags) && !wdriver->no_notify_data) + return -ENODEV; + } + if (ACPI_FAILURE(wmi_method_enable(wblock, true))) dev_warn(dev, "failed to enable device -- probing anyway\n"); @@ -1094,6 +1100,7 @@ static int parse_wdg(struct device *wmi_bus_dev, struct platform_device *pdev) struct acpi_device *device = ACPI_COMPANION(&pdev->dev); struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL}; const struct guid_block *gblock; + bool event_data_available; struct wmi_block *wblock; union acpi_object *obj; acpi_status status; @@ -1113,6 +1120,7 @@ static int parse_wdg(struct device *wmi_bus_dev, struct platform_device *pdev) return -ENXIO; } + event_data_available = acpi_has_method(device->handle, "_WED"); gblock = (const struct guid_block *)obj->buffer.pointer; total = obj->buffer.length / sizeof(struct guid_block); @@ -1131,6 +1139,8 @@ static int parse_wdg(struct device *wmi_bus_dev, struct platform_device *pdev) wblock->acpi_device = device; wblock->gblock = gblock[i]; + if (gblock[i].flags & ACPI_WMI_EVENT && !event_data_available) + set_bit(WMI_NO_EVENT_DATA, &wblock->flags); retval = wmi_create_device(wmi_bus_dev, wblock, device); if (retval) { diff --git a/include/linux/wmi.h b/include/linux/wmi.h index 686291b87852..781958310bfb 100644 --- a/include/linux/wmi.h +++ b/include/linux/wmi.h @@ -48,7 +48,7 @@ u8 wmidev_instance_count(struct wmi_device *wdev); * struct wmi_driver - WMI driver structure * @driver: Driver model structure * @id_table: List of WMI GUIDs supported by this driver - * @no_notify_data: WMI events provide no event data + * @no_notify_data: Driver supports WMI events which provide no event data * @probe: Callback for device binding * @remove: Callback for device unbinding * @notify: Callback for receiving WMI events From patchwork Mon Feb 19 11:59:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13562577 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 E70BC2D05D; Mon, 19 Feb 2024 11:59:37 +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=1708343980; cv=none; b=DGM4nMHG07+/d8uBv32Xvmc/BbQosT9tTJ8guraCG9jR+5XQFzJ/rSRDgVYZJvdxteqdxpUXHn4l7aj/dQJXYEvSxZFzotiiMtBhiYBJI2CtklG4tCcs/UydK/2O6siErH0qinuZimNWUcvpvFs5BoiI3Z98R0wCaHYTsWckGH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708343980; c=relaxed/simple; bh=3NUMsHCFhp+HPyULMRNk2DyEGfrEf1V/yFzXNJv+XWI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SXXsjtETs5xIKwhnxmLp4ncYMSOulZTWKqXBuyeCTg4+zN7+TPUrPN5cQlf5CU9+XT7fiPn8N/7DfJQNvZvdvFC73+avgBs76+B0wv9X4DrQCSCqH1FIjW8jmU1ZZQjJ7MkYUwlwwU3YVSg8S8rrtJFFyKsaGIzKpgbIg9iBf2g= 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=DYUV85h2; 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="DYUV85h2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1708343968; x=1708948768; i=w_armin@gmx.de; bh=3NUMsHCFhp+HPyULMRNk2DyEGfrEf1V/yFzXNJv+XWI=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=DYUV85h2DZgc+cjv3G7PFqNrfwPYgmWReYruGFzYw+DgIBR8C5O0i4X+LjuWwNIB LD+5pxNkHMYDAYk82UkIY1LL++1C1RmbIISV8AQzDRbkHosVN2JXRsobzQbP9kt0N B+rLq4yQihywCzifN7vzSOlnpu7YH50xN9p0uBx+cPrEpFOPGEhYGqmu6KAeogBXO UDDaWOj/zEpq2M4C6IccD+9qbENEfNtyFjsWpyIeP7EJE7sxeGwZ6lYYYICnfqx7m o2aS0/zh3amTy0qU51uspSsUimQO0xWLsUOMOI7YLe4TiNzQxRiVeCZNcmqGNXNV0 Vfa/iwuI/SMV/VygoA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MysRk-1qgNDW1DRS-00w1J2; Mon, 19 Feb 2024 12:59:28 +0100 From: Armin Wolf To: corentin.chary@gmail.com, luke@ljones.dev Cc: hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/5] platform/x86: wmi: Check if event data is not NULL Date: Mon, 19 Feb 2024 12:59:16 +0100 Message-Id: <20240219115919.16526-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240219115919.16526-1-W_Armin@gmx.de> References: <20240219115919.16526-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:GxEniXaiMBwtnTOdypXb2wetZetkR8QvBVQJDGX9X6ccuNFk7m6 X/T2yRpAp/J6kj3ktDQmKOsS3UQWwIeHPI8raVRtKtgtB/jaM7WtXroKzTk0esB3fbWf1fg /DUZicazwnEzi+G6++xKWDpcI+fjsU+ebc03fiY4Ua3YsvtkWZH04ylabL1lrSwLR1InVqI W8e7ZH4PPzc48Gw8A23cw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:H/CzGdRYQmU=;Z4dbjUb4eWLfbUUh7aocnglj65i w8woxAjzNaV4uraqxT2Ucqcxc9z57D1UOGrOOo6TL2FvR5ZxhG4fxfKLopDUzvufyPxt4WNDl VojMpXcXRnIlw9lCflJ735hqRsJVk3Y1u9ojYnXlCXghmBpmUr5LEuMK9goCcpA3ZYRoxuFdD eE+EMUJ22hf8S6MFqhsQhJVuAwbL7T229uX7x00bt0igFZITCIHsW7hER8eUpg4LLN5mE6EuW OOnk+rmMO1LIjPF3NPmNB77tL3zHY7C+FWMiK6yQKp2i1hZUjrzgWT3B5gnK/0nS2qqvOKz95 4+PprIIPWCg05mx7UrZYPM7Z+JuaPE6nHWnWq6jLW0LtVRsIv2SXrTVX0Q9vWcudDGeNiVLy4 FpwiU460H2Ig3/laZa7wR2SvH/254JjyB6dLLyS375wy6hbwJtULeQzvuLHyfmXf9M6z7XDi1 6EcEUY4mH6zkOIU30x98TofYBDkHtRaYZYljBkjyxsWjMDSlatmKGmC4IHEnGirvk4e7Xk3SN vkW69i3ciEbi0ZUtOIoRPKU8zWYCn2dWRUcoGoz9RrS3385TCgg0AMlxtNaghCzQ6YyLuzxhY pSfEjqxfuT2En+P7r0uAD0MAjR0bpflbD0CyXdpqtmZ3pdXSS9OOvKjIZosL9WtihI+jncoYJ 5Lq6z1BZ4wHirz8ub9vR/TAlflimRKDvLn/gujk7jLcJbDah+ldXRlL84qmQw7QxOwW7EoiYe X0vzvMD3yVEyDXT3kuMUSXBQSgUi9ttkkQJTZVll/zA8dKhGhIIKBExyaGXKZUi3p2VKuKhQO YmYBPXgVzSe2ZfGXPioNRS11I+mPVZ8HBxLp0eyZ4terE= WMI event drivers which do not have no_notify_data set expect that each WMI event contains valid data. Evaluating _WED however might return no data, which can cause issues with such drivers. Fix this by validating that evaluating _WED did return data. Signed-off-by: Armin Wolf --- drivers/platform/x86/wmi.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) -- 2.39.2 diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c index 8fb90b726f50..d0fe8153f803 100644 --- a/drivers/platform/x86/wmi.c +++ b/drivers/platform/x86/wmi.c @@ -1210,6 +1210,7 @@ static void wmi_notify_driver(struct wmi_block *wblock) { struct wmi_driver *driver = drv_to_wdrv(wblock->dev.dev.driver); struct acpi_buffer data = { ACPI_ALLOCATE_BUFFER, NULL }; + union acpi_object *obj = NULL; acpi_status status; if (!driver->no_notify_data) { @@ -1218,12 +1219,18 @@ static void wmi_notify_driver(struct wmi_block *wblock) dev_warn(&wblock->dev.dev, "Failed to get event data\n"); return; } + + obj = data.pointer; + if (!obj) { + dev_warn(&wblock->dev.dev, "Event contains not event data\n"); + return; + } } if (driver->notify) - driver->notify(&wblock->dev, data.pointer); + driver->notify(&wblock->dev, obj); - kfree(data.pointer); + kfree(obj); } static int wmi_notify_device(struct device *dev, void *data) From patchwork Mon Feb 19 11:59:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13562579 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 CCFB22D60F; Mon, 19 Feb 2024 11:59:38 +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=1708343981; cv=none; b=ZLXsEmZlGKYtM38JXVUWWuGHdTCu93/BRIrcRbt5sIYLO+Q9MKo8QUg5O0Kbvjfgm7FtDXN+pcD/QRk+cJEFlk0j6gg5YhsxmQg9R+iDegHzweDdV0i9TedfYdO1vAqLKCh1GsgNig1S7vkkUYNS5OF94TPkNLKcfGneL9AuLvY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708343981; c=relaxed/simple; bh=gWd27/VotVWwvHrKqAHO87FjANH+9qAlu8jCJq3fQ98=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Cp1BaypHd2KsR6gJWolKg1wVbN9Y8c1G5+Yb3cDMOveaL9Vm4SrWuJkUj3eIRRkdEm8kAm6Og1KprB4eecBzbNRWgAGszmx0AmG+WaGnyGMZk3eedlBfFDhjfKqM5r8o6UrLB0j44kDEEsQDzDks/71nwyDelOdNhyOishY8tzA= 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=AmGEAZzJ; 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="AmGEAZzJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1708343969; x=1708948769; i=w_armin@gmx.de; bh=gWd27/VotVWwvHrKqAHO87FjANH+9qAlu8jCJq3fQ98=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=AmGEAZzJ9XeAKZ011MJ3VoUnXfxqs4NyimQOoeFyyHJt6U2gJuo/Etdca2+sY0ba iTYuvFBwiTSRY1DyED0kDWJ9Zz2BOXGVZzqljJN9d2vIBdd6yl+HN16pZImaRRyxn 4GTd28UJiIo4ddKTQ6AKLR81Avy+zbD7sazBq8BW3YdMurrvkbmeM/ULsLJcsPixO UvwXEMH4u4fuunbUpt7xKXJsgSClnYhjzrjA2yhuwZ14V+RkGgHkxmq+6q/M6i948 +trWf9bjqoBLklqu1HRX12Ib7R4FkDTxrtfpCaNgg634R4+05rSu0R03IFBS7p7P+ brgeuNVanbwQlOVLDg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MTiU3-1rWF1Y2pi9-00U2lR; Mon, 19 Feb 2024 12:59:29 +0100 From: Armin Wolf To: corentin.chary@gmail.com, luke@ljones.dev Cc: hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/5] platform/x86: wmi: Always evaluate _WED when receiving an event Date: Mon, 19 Feb 2024 12:59:17 +0100 Message-Id: <20240219115919.16526-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240219115919.16526-1-W_Armin@gmx.de> References: <20240219115919.16526-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:KLk0r3NAs0s4FvrRV/vYtwZ7NW6r7xhwriu0AVaDpyf+UxzV9FH SWiehyZqOFzeCO5QFFDOIOzkWnvmYcj7f3B7GN64tRLCWNAWA9Gmg2H6rLWk+0vJ9avGDBd i8ZlZoghQCnyduVYVkzJ4+pqrpESMhIaIjYsL9RtDpfTTA7E4eG0Gna1Qw+u4FdlBfivy7a cC4RnT2MV+lrUhc5tBopw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:ne3TTKFXyBQ=;x+OoDhc+wkI4HQvyka23RJvx4DS wkgUcV3KoSvkYZdhhhsWZ4qP1phHzskynQ+XxCIkg0OBPj8Knit6eWLagDzijsGBJk0XcrbAM pskz7OWZMOPB410X/0lAYFjb2OdnnKFe7FURzkNFxEgo8icgk4NrueQCXDcnwlPA68dfbNRoQ IcA4zDcYTbFYmSU+Ye546WeLHfjDeh+gLH2KJJTjUNMg5p420YvjLWyANulBaXcjocunZezfc eHvq2fOI8/c8o4ITGXVRshMqGigxqtMsi5dHrE8Y7lRn7Uqo9h36oh+HV4y2FgA5gnN0GBjmi znuXeLFMPhY/N8WFZa6r52rGsiyIsmdTTTHcayLIs5tpMHscOZqtTIjNyXT12af0LJMUbKvkj qgdEF6wa/xWuJDpI0hGehz19aUvBj1oNgnlSXD0DBXNwVAOIJ1nViVgDkHgw6+8r1IAF7jk5N qb+23OhqiZe4NfU9lcoct100yTO/Z5Xj9U4KAfIOeOxcwQG/PbZvh85RTXF7kGufLwAsCTlrR LnJG6EXuNb3LGaDf74Si9P2DPU37a1m8fIwOFdezNlDw2OU9ELgDtJMYSLHiJshC03uXLH2pf XOGdsrzvjtIcWt3290z+3RxUiiFozrTF3ca46OXIlTFravTe58ShTZvK0KbjXA/XSE6klJoqY AK9pMG8t0cnDq+6D1u+EN/suIKhjpHVLX4BK+h0AbmYKQByKS1p7LOjQmCiopPMlg0Le7zrQY Cmgd6hbQR1o5XyJ+Qrm5XWLk7gOWcN3TaXSnWB4mRneAjevhiVEf67pQjvnIZq6nN7ZZVCF8p vrhmOvFI18xIWPmRORBoD2LFWrDRM/VywumnZRFvdRzdA= The ACPI WMI specification states: "The _WED control method is evaluated by the mapper in response to receiving a notification from a control method." This means that _WED should be evaluated unconditionally even if no WMI event consumers are present. Some firmware implementations actually depend on this behavior by storing the event data inside a queue which will fill up if the WMI core stops retrieving event data items due to no consumers being present Fix this by always evaluating _WED even if no WMI event consumers are present. Signed-off-by: Armin Wolf --- drivers/platform/x86/wmi.c | 67 ++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 18 deletions(-) -- 2.39.2 diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c index d0fe8153f803..abd0183c4107 100644 --- a/drivers/platform/x86/wmi.c +++ b/drivers/platform/x86/wmi.c @@ -1206,37 +1206,46 @@ acpi_wmi_ec_space_handler(u32 function, acpi_physical_address address, } } -static void wmi_notify_driver(struct wmi_block *wblock) +static int wmi_get_notify_data(struct wmi_block *wblock, union acpi_object **obj) { - struct wmi_driver *driver = drv_to_wdrv(wblock->dev.dev.driver); struct acpi_buffer data = { ACPI_ALLOCATE_BUFFER, NULL }; - union acpi_object *obj = NULL; acpi_status status; - if (!driver->no_notify_data) { - status = get_event_data(wblock, &data); - if (ACPI_FAILURE(status)) { - dev_warn(&wblock->dev.dev, "Failed to get event data\n"); - return; - } + if (test_bit(WMI_NO_EVENT_DATA, &wblock->flags)) { + *obj = NULL; + return 0; + } - obj = data.pointer; - if (!obj) { - dev_warn(&wblock->dev.dev, "Event contains not event data\n"); - return; - } + status = get_event_data(wblock, &data); + if (ACPI_FAILURE(status)) { + dev_warn(&wblock->dev.dev, "Failed to get event data\n"); + return -EIO; + } + + *obj = data.pointer; + + return 0; +} + +static void wmi_notify_driver(struct wmi_block *wblock, union acpi_object *obj) +{ + struct wmi_driver *driver = drv_to_wdrv(wblock->dev.dev.driver); + + if (!obj && !driver->no_notify_data) { + dev_warn(&wblock->dev.dev, "Event contains no event data\n"); + return; } if (driver->notify) driver->notify(&wblock->dev, obj); - - kfree(obj); } static int wmi_notify_device(struct device *dev, void *data) { struct wmi_block *wblock = dev_to_wblock(dev); + union acpi_object *obj; u32 *event = data; + int ret; if (!(wblock->gblock.flags & ACPI_WMI_EVENT && wblock->gblock.notify_id == *event)) return 0; @@ -1246,10 +1255,32 @@ static int wmi_notify_device(struct device *dev, void *data) * Because of this the WMI driver notify handler takes precedence. */ if (wblock->dev.dev.driver && wblock->driver_ready) { - wmi_notify_driver(wblock); + ret = wmi_get_notify_data(wblock, &obj); + if (ret >= 0) { + wmi_notify_driver(wblock, obj); + kfree(obj); + } } else { - if (wblock->handler) + if (wblock->handler) { wblock->handler(*event, wblock->handler_data); + } else { + /* The ACPI WMI specification says that _WED should be + * evaluated every time an notification is received, even + * if no consumers are present. + * + * Some firmware implementations actually depend on this + * by using a queue for events which will fill up if the + * WMI driver core stops evaluating _WED due to missing + * WMI event consumers. + * + * Because of this we need this seemingly useless call to + * wmi_get_notify_data() which in turn evaluates _WED. + */ + ret = wmi_get_notify_data(wblock, &obj); + if (ret >= 0) + kfree(obj); + } + } up_read(&wblock->notify_lock); From patchwork Mon Feb 19 11:59:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13562580 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 C614B2E405; Mon, 19 Feb 2024 11:59:40 +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=1708343982; cv=none; b=hmA4X9xA/50UX0vQ0si7+IyIuCPOhRV1WD7kLSHklRxDdCkAbJ/ZW3sI8/pjnST30tQrvGVobobTHcHylnvBsuW7dcvXYO8mnjrw8FUGvrXX4ZguW97JfqpOM3GXrOaLQyMvPz9faQ4CQ3PbuAQqyZTqAYP4F4UuBewS0dKNDos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708343982; c=relaxed/simple; bh=qHfzr9Z6AbrLnleJ2vRO1YVBS5jWB6XYcpAOq7kcFsM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=N7nr46yG16C1YEDo5GqpdVXMYp0iG4YPiAPV219dydC6doPCtlbGuUSqCGtyED//KcXmCJaWa8ZewthdAYokoJSL8n+DIDALtXYTd04OmQexkswD6VW8wGaYRvQA1H318RKGxSAAzLY7hDiAPHcyJKuXbbYfUHZKWXQI4cqdSi0= 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=EmTgCLO2; 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="EmTgCLO2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1708343971; x=1708948771; i=w_armin@gmx.de; bh=qHfzr9Z6AbrLnleJ2vRO1YVBS5jWB6XYcpAOq7kcFsM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=EmTgCLO2wSkDlsTcGb7KzGMNJBIjQJA7HdTi8wQZlcl2x2ZlyWZHqh2nTRE+9nHa duLFAjlPMpSnAz5eT5XKuHKOKB2oyXADJ2cQxPSGvDCSkkb74fGOyE7MOVADf/Jmm r3K3sb6MBkW6lfA5xlP8cTRXYHR7KbD3At/wmM9/6X3zXHFthYAcPDlBOP6xd1vKd oQlCeEw+tztsFCHcFavp1AMJa4wh+SjGRNPByzdcl+5Tfblf6QmQ0neEa9h+8lVR1 S/JqGwY0YANiJ5b3UrrDpFHEywR3/nW5erG6dDdQfnkyi7oMkufdfuDV/JnYTn/60 HQFG15unTEhPPlyy1w== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N17UQ-1qvnXl2og6-012XiL; Mon, 19 Feb 2024 12:59:31 +0100 From: Armin Wolf To: corentin.chary@gmail.com, luke@ljones.dev Cc: hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/5] platform/x86: wmi: Update documentation regarding _WED Date: Mon, 19 Feb 2024 12:59:18 +0100 Message-Id: <20240219115919.16526-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240219115919.16526-1-W_Armin@gmx.de> References: <20240219115919.16526-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:HVa15Z2LrHiydE7egWuwmvdECI1Tv1ZQ4wpN3HEd4/nYZH066wW 6rSrrp1W7tjcnHIFkdtKe1fK1O2U0hrxiukCjwvvFX5RsyR742wCAH81sE/atj1I+FtCWG8 5pCq3lvrnfiGk1QzXXaPl8b0MaZqe+uhXBz4R6AugdZixXijUl1v37OCbLAfFGUnIrvvEyJ Ier5ZaABptv+RqAwnD0MA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:hkUeSe5q1/k=;jg/Rfqe6pDRd5XWkin84hm86CfJ /EHlUVVNaQOTFfJTVPcgDK9MYH7yLhR5n/H3Ho6et9/euvbQNBq0op72oMmyxmcNnzyWJ9afE EcP8mUtazAH3WAtCT75dpP47HHHtb31VKQY/2qfeflVIYYXIZ8CiL1wp2Uxyz1E/uCIH8YqhT fK0L/vm2Nzxm7Qben1bwMMBeuFrMQcf09eQ1c6IwpOxY9PGjk58kd2mMGx0JZS5nYhtFnnEIX hfGNLAZQkc5nsI6qXKIEoyG79DmAcg0ZPsFeQw0yg1l/Og/iKcAFGRHePQjpuqZBrE+0XWIYE i5MueCxE5mkB6VXZG1lFxPOClRZc0dmcn0k84TQPe2NMvcdi8/72jKjjHejsVoB2RtVlqO13N gxF6jCpKQ07h9zsqwQtpjyR34eDE+J2dAkfiJFT/cgc9LCJbIJ5RbjpPSIn+yYgGeFy3eo2J1 mpDdwgleJ+UMYcZ3bpiYqmmQdEANFn+SIoP8gEm+bWgBa2GAKlj13sALw2wsgiMDUpE3ajI+o iqw+kqxqV8P0Jm3+1NW+tzm0ru1Gmnf//Kk65z1n4pOMSOOwIYB65DGr5mDbk0KZqSq3uGx/e Sy7vOSJIHm1MNF+UFNsMUAnnNP1ORM4zLozedPKJ9yf9ZVnNKSQeSEvRHXvrLyzOR9BpdPtm3 X/eGU1aXTEqZlRmzi47nEJIE1OJv7npeY3tnM2uYXl7uRExbZF0uPkqzW5bsGgm7SpHDHNPgl Tg5sES+L3JJo/KhfEX38MkQYxIXSNTR6weuvsLOHgst9DeP5z4RjNn/Q8DnHB9EPUxMG9OQrd heqt/6eMzvqpuNriGw8jgIF0RbZrGELSeG1atJspnRDac= Update the WMI ACPI interface documentation to include the fact that _WED should be evaluated every time an ACPI notification is received. Signed-off-by: Armin Wolf --- Documentation/wmi/acpi-interface.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) -- 2.39.2 diff --git a/Documentation/wmi/acpi-interface.rst b/Documentation/wmi/acpi-interface.rst index d31af0ed9c08..06fb7fcf4413 100644 --- a/Documentation/wmi/acpi-interface.rst +++ b/Documentation/wmi/acpi-interface.rst @@ -93,4 +93,7 @@ _WED ACPI method ---------------- Used to retrieve additional WMI event data, its single parameter is a integer -holding the notification ID of the event. +holding the notification ID of the event. This method should be evaluated every +time an ACPI notification is received, since some ACPI implementations use a +queue to store WMI event data items. This queue will overflow after a couple +of WMI events are received without retrieving the associated WMI event data. From patchwork Mon Feb 19 11:59:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13562581 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 265A52E64F; Mon, 19 Feb 2024 11:59:41 +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=1708343984; cv=none; b=qMz+Zuml6D6gEIXtqUvcYwA3QIq5UOJG/YMU5ZuMpJ1g+F0OxJaTjRjnBNuNuQ1vwRcbx9uFoxdTfEyYrwXyTpOkxAoW2mHKl4Ik45lXdheCeFh8rQFN8Od1Lgt2HvJAWEcoXmptoiguxWauaAMgwdEPPhdAHMybp//ZBPAeHg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708343984; c=relaxed/simple; bh=jNbs6mh9NRNmcMy+geYDC/0FJuXGdyoG3yuMN5TBvyE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=d1AaW/w0V35xyWLWcBtsMOoXiIqCA7kSQ2B7b+Zm5sHyWoYdz3YWc7mBLO/K22w0vSdQNcAQLPJWPPMRNoVnRfiP/WJ3giQ4lEvkCSBEMsbSheCnOMzW7g2vHccXWhu4MBVj/yczJ5SEASA3CoDPr5C3eKD/wV6pmIySq0jGvNU= 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=I4mq0iXe; 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="I4mq0iXe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1708343973; x=1708948773; i=w_armin@gmx.de; bh=jNbs6mh9NRNmcMy+geYDC/0FJuXGdyoG3yuMN5TBvyE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=I4mq0iXeFesQug4BYeka52DUBNP8YLI8wT2M2IDy8gtqTUhvc67lC7oOKd04Yqs/ XMxxUN3zGfXHQuvBr6gMSoTQkZcgB508c8VPiRk4JAzGnyDfnu0Lx90TiF8HxIPBI LnIGolY0b0HOEf0o80hkBQ9aPiw40WmgIYMnydVNsxvpa4QEUxsDb4/2uIC/W0zyp ANBj8Wb2WvZlkMskAPHq49bdf5FWE69J14yPdzvR1JS8PEJS7/rvjPmKuFhNaxkFk uW+F9fdEgz52haLW3W7uohoZVE4/hSeV+QVqZRGk14BlHzyRafckeAZs8Cgl3ChZ6 nI+VPfEfCo/D3Y/dVA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MS3il-1rUaKc07kh-00TR3q; Mon, 19 Feb 2024 12:59:33 +0100 From: Armin Wolf To: corentin.chary@gmail.com, luke@ljones.dev Cc: hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/5] Revert "platform/x86: asus-wmi: Support WMI event queue" Date: Mon, 19 Feb 2024 12:59:19 +0100 Message-Id: <20240219115919.16526-6-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240219115919.16526-1-W_Armin@gmx.de> References: <20240219115919.16526-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:ZJ35nPdHK8By7gcfdclwJO+Zz2VmNR2oBXLTl1BfboyzseFu4eM 9j0u4g9AnK4alZu5BgzD1/RrSyATmuST0UgaMyYSg44fH80oZRxZx+l2Ejej8RujZIsDSQt 3YScrQCg2HB/DrYN5fOQJ0A45lpjER+tb13KsNf8H7CSTBrswl333dGGPVLIgP15EKZ/vHA XvC4TfXpBMqlYS5Vs6UAw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:Q79NRxKhYPU=;eELxmKwKpi3aicwQv7bWuu442fg 5ivSD5qpdpakCi748gekkHyOzAnbt4cgowvdS2dxunpxFNLiDTd5iJyvYKQYzAEb546c+YrR0 pC2u4ztK81cPvnfeCJm9rWvQfbxheVhN/Ue5L4Cs4i5q9ET2UpVeUC42A/42yHoVjJqAe7bpp tiRzZyrwU+qdDmQ00MtPCkYwjLPia+p+frjkOzxVNfz81JqbS1ROIKBDj80rSFPxTIlEkwUtc UbX9PIi4py/ZqPETtvx/U9PLVd110ASe03cLKSZEwRaeYM7q9uyLHsQLA0JrfUGdJH2UodVfo vv4Sq7Hc4JlT+8nHZdEZ5crfMfKP9asoHYLQhmIFqJzDeSgeXbIBZRJRNGm4OYgqZNFtZwqhA 40Q9c9qhiIx6RTVlCIuxoHdujJCV3W0m5lttOaKPUiR7K4AqftlhGMFLnmacP8fgcIZKzz08S Pcs/FMqSae/o7LefEeghybqlwOTh5WYdvr5zzn1gp9oLrR0+QE6pebZakBueYZn7Cj48XvROn E6Icbyh41zh+SA0+iYjtpgacOKdZWGp2mFfUCE6ObbW4HxfUqOk2IbXSrI5BCtHYk32NcbkjK qL6zYJS9dqByjqcCC25CxlDknPS8fovTg3swtsNBzJE2SUyIkZpFPu+2nfpzj+/SV2wVdZvD5 bC9f6wgt3hjC4tOuGeHlH5d1r9eLb1drxSEjb8jGouZBT4RYyrtKCdE/j5GLjdrZXqgsEDAa0 d8KQmrPFF219Sd4Jqpl9j3fVqoyrSRQn9HElySRbS4mD3bP7qm1FwoaxCkpPEVLzFlDfTbmmq FGl8z4CeBY7eURaysQcEH9s6AJC02RXsJLxHNzEHdjeks= This reverts commit 1a373d15e283937b51eaf5debf4fc31474c31436. The WMI core now takes care of draining the event queue if asus-wmi is not loaded, so the hacky event queue handling code is not needed anymore. Signed-off-by: Armin Wolf --- drivers/platform/x86/asus-wmi.c | 71 +++------------------------------ 1 file changed, 5 insertions(+), 66 deletions(-) -- 2.39.2 diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c index 21dee425ea6f..2865af89e95c 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -101,13 +101,6 @@ module_param(fnlock_default, bool, 0444); #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 #define ASUS_ACPI_UID_ASUSWMI "ASUSWMI" -#define ASUS_ACPI_UID_ATK "ATK" - -#define WMI_EVENT_QUEUE_SIZE 0x10 -#define WMI_EVENT_QUEUE_END 0x1 -#define WMI_EVENT_MASK 0xFFFF -/* The WMI hotkey event value is always the same. */ -#define WMI_EVENT_VALUE_ATK 0xFF #define WMI_EVENT_MASK 0xFFFF @@ -219,7 +212,6 @@ struct asus_wmi { int dsts_id; int spec; int sfun; - bool wmi_event_queue; struct input_dev *inputdev; struct backlight_device *backlight_device; @@ -4019,50 +4011,14 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus) static void asus_wmi_notify(u32 value, void *context) { struct asus_wmi *asus = context; - int code; - int i; - - for (i = 0; i < WMI_EVENT_QUEUE_SIZE + 1; i++) { - code = asus_wmi_get_event_code(value); - if (code < 0) { - pr_warn("Failed to get notify code: %d\n", code); - return; - } - - if (code == WMI_EVENT_QUEUE_END || code == WMI_EVENT_MASK) - return; - - asus_wmi_handle_event_code(code, asus); - - /* - * Double check that queue is present: - * ATK (with queue) uses 0xff, ASUSWMI (without) 0xd2. - */ - if (!asus->wmi_event_queue || value != WMI_EVENT_VALUE_ATK) - return; - } + int code = asus_wmi_get_event_code(value); - pr_warn("Failed to process event queue, last code: 0x%x\n", code); -} - -static int asus_wmi_notify_queue_flush(struct asus_wmi *asus) -{ - int code; - int i; - - for (i = 0; i < WMI_EVENT_QUEUE_SIZE + 1; i++) { - code = asus_wmi_get_event_code(WMI_EVENT_VALUE_ATK); - if (code < 0) { - pr_warn("Failed to get event during flush: %d\n", code); - return code; - } - - if (code == WMI_EVENT_QUEUE_END || code == WMI_EVENT_MASK) - return 0; + if (code < 0) { + pr_warn("Failed to get notify code: %d\n", code); + return; } - pr_warn("Failed to flush event queue\n"); - return -EIO; + asus_wmi_handle_event_code(code, asus); } /* Sysfs **********************************************************************/ @@ -4302,23 +4258,6 @@ static int asus_wmi_platform_init(struct asus_wmi *asus) asus->dsts_id = ASUS_WMI_METHODID_DSTS; } - /* - * Some devices can have multiple event codes stored in a queue before - * the module load if it was unloaded intermittently after calling - * the INIT method (enables event handling). The WMI notify handler is - * expected to retrieve all event codes until a retrieved code equals - * queue end marker (One or Ones). Old codes are flushed from the queue - * upon module load. Not enabling this when it should be has minimal - * visible impact so fall back if anything goes wrong. - */ - wmi_uid = wmi_get_acpi_device_uid(asus->driver->event_guid); - if (wmi_uid && !strcmp(wmi_uid, ASUS_ACPI_UID_ATK)) { - dev_info(dev, "Detected ATK, enable event queue\n"); - - if (!asus_wmi_notify_queue_flush(asus)) - asus->wmi_event_queue = true; - } - /* CWAP allow to define the behavior of the Fn+F2 key, * this method doesn't seems to be present on Eee PCs */ if (asus->driver->quirks->wapf >= 0)