From patchwork Wed Feb 14 07:04:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13556020 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 BCCF1111B6; Wed, 14 Feb 2024 07:04:50 +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=1707894293; cv=none; b=Wxu9dirwr0uS2gr7JEbnM6Wuh1zH+ywL+IEVk44S5YVBKiw8cglFgrwAX2sSRHI+5/tmOW92hNbRrdb5PBnfJWESqW+ACSl7KcflevYL5tt4JOXKc7SyEK7/BpsIEv05ZhPxC0p1qA4HPMl0brTC4GvLorJytOGOgaM47JFOEK4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707894293; c=relaxed/simple; bh=8WIWWUU+GbXzNoh423yyJOXltpMWeWKv8sdpqZTjWwc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ei6sQBE8jyPaEeu58RYOY8DouxbB8vm8nmuvXC9R5gAaULBhlVncdz8Mrv9RUPZ6hoCk+1dUGWgw0OUguBBZq4YCv2uHWn20rhRlJ5rZxqP+fn3GzO+EmGmi4MatZBSg1jKYLRYyw86ff7xE4uPpsbII39IRuWxXkRtIu5RczW4= 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=pKqPcOHH; 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="pKqPcOHH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1707894278; x=1708499078; i=w_armin@gmx.de; bh=8WIWWUU+GbXzNoh423yyJOXltpMWeWKv8sdpqZTjWwc=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=pKqPcOHH9qt0K+PpYwW8mhb3VRJFRZGa3L896sIU5H6DPiR8EAc72P6McNHzUFqy uGK/9X2ds5XeAG4jl7Ad6ND4mDsuqv9H0ElZ5hfqAgxLlLdsdqun65kTlLvXXI3W0 bU+t1Lrwa8423eboTaOMNfJbJz9kR7TXJmV/gwpdW7rDaP9nZixtYSydppxo5Urt/ ZyJ1R9/CZj4BwBkGRxwNKqCJozR2pBNM7ZqOrsWQGelglAUhZZw50usBnSrpxEpWg aivbwhlB6K9dbUTI5uAVzxKZfMUVzN/zqev2XSbLT9ZTROT1dPZOf6KOEkfNhWuBq /IhSs+nVPexCsHRfVA== 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 (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MD9T1-1rjBsV2EWv-0098Vv; Wed, 14 Feb 2024 08:04:38 +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 1/5] platform/x86: wmi: Prevent incompatible event driver from probing Date: Wed, 14 Feb 2024 08:04:29 +0100 Message-Id: <20240214070433.2677-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240214070433.2677-1-W_Armin@gmx.de> References: <20240214070433.2677-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:z0+cLwmfh32NWUP0FBmWp4fdiQOVVMcb+/mVpjhXSCfZo2sZe78 JQsDR11z4W6ZMI9VVYH7bACwKzZVRQeFaWwxP4If9qGaEGjx+DLO/D4Za2kqnfBOnCOfY/2 TM6P9hrJi4OU/H/tZMOeI0IFMb5Iosm35/LlF1VG29rxuuH1+An4z5Jy9ZAp6kWCL7o2DIh s7oAhOTtbPIFJ6ko1Vdfg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:5UOUuCvHEkY=;VOe8NGUwF81q+RZMe7qwYJIf7gg tBJIWr6iLgOyoc6tcJl13QlHE8CoPYOaDcYyMm9MyVGzB5gCjwBx4sfdGxpfLD7G4oLzL93Nx 3r/sOr/OxKNw6solx/Y4j6ymTHCc2e/eS/UWaMYbgfSKGGRf0+aOrAaJK2Up3atLiPRHQ1Vro x63ZVCZ2yeGbXVNfK+LJ/YADFCtjLAUJrmqteK/cIjYnqwxCGkbf75jnc7P9xjmYL2/xSTxIP zVJI/vcpved4bPfX8nYZhNzKgBCeyvQip1chk+Rblv1vvp1dufiTFmy4ytyG4DFsEFXnj432s AOSOC1hL8OT0chg56WcjhopIRok7Pvs79NQtZT+kwndJnOBUQTk8vWNQEm/Glaa9eis3xzh4q WVWjzu+yOX2evHbQ8fv69QYzD8Fuib2g+Tm0nJiD8ZvzLlwqr44zTZEaL93i42jChyp52KwBB LhRdd+Qt7ertVuI1c3YBrz8bpYdeNttTOstnwXHxPRVdBcx4XXyXUjx0+M6Kb/EpwxdTdZOWk oDIZYcBBuFXnjRCn7SQ2NzMbyatAZWNklUhA9Q61txqe2tOoAqps6GCMIRtIDVXNhWo8i8dHP RxP8eLwzoFnKrDTGJJHgrVd0KUDO4cO8ErvKTSMFjKGYogoqK9+fF5BfGLFEQmCX7UWtBcSbe ggOfBhrcnK+chKa3WGzfkGJRO842ufrcg0L3qKAXxA/6GkxUupkMlFhts5ktvOqhV6rSp3Euv WTJPz2CkyVcopMH5yAeFj2pngWITN4zFr3OZr6xIlLJsTNLy52aoWj8bARVRjBsxglzZc/Mgd TbrEvjIg9z6e5G7Suz0ulBurL5M7qjuNDwkRxN9WH7y+4= If a WMI event driver has no_notify_data set, then he 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 b83c0f0ddd5c..34d8f55afaad 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 { @@ -870,6 +871,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"); @@ -1095,6 +1101,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; @@ -1114,6 +1121,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); @@ -1132,6 +1140,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 Wed Feb 14 07:04:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13556022 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (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 9DE23111B5; Wed, 14 Feb 2024 07:04:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707894293; cv=none; b=tFyTRYjDWa7ZqwZ4W/Q5ySHEojgDRaBNh1x8iGd/lGwGZpFr2N+ELEoKwakQtPKHmpB3Bpqn/0FLuOBUmoIZ4kIaO+E/m3wjGTJnhMYu4r/mghuBoE6MMujb1Mc5XjtXyEjFI4KjPRfsnxVF3O3V/zBvHoXeQGbbAbzkjJx9Cx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707894293; c=relaxed/simple; bh=n0AoXTw5pwtdG6PJQ2P7EZL+K7m7jLPyauFZn0/2sxA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SnWXfrUhubQjhmizhE0czeENYGgnBBFqAmjZg5ZfwZP9n+n7eu2IrlXYjZ/XBEd/d5mTQdR/7MTq+jkfrYScMv23DBNzIa/1J33yNnV2iECGdXxkhcoxEcySqHTG09My7UMlT3hURT6hH4Tz2z56/6CfaKMXfIUZcsqI6notOCg= 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=eZZewW62; arc=none smtp.client-ip=212.227.17.21 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="eZZewW62" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1707894280; x=1708499080; i=w_armin@gmx.de; bh=n0AoXTw5pwtdG6PJQ2P7EZL+K7m7jLPyauFZn0/2sxA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=eZZewW62srtwMm5iH3sDN4HDLCVQXklLcvLXHRtUc+UzR1cIfSUdu1Loy6yVRb94 bh2fKIuEaz6oP0NxaIdydLAjeIpWjZoOeahL+qmpvhhLYp34528ZPDZOQWgpRsroG xSbAZdyGBGS1UtO1F+Kd3ySy61PxoBo3GqeqLZQVPrJyRv6owJaV/RPtGQu2nw0rI R3ZaOdHYNnR83MFCcdCDVOZLRwKZNRkhtAWNKvQ2GxjUqgVtekIlskSNJKCnI4shs LIMLVqYU4JB0QnJhbni4DoZP3wEptwgQBMhPRF8vNOKzs9pbcGfMD1Vd2t/V4+AN6 TVy71/zFaAkxsda6mg== 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 1N8ofO-1qw32c1KmE-015neB; Wed, 14 Feb 2024 08:04:40 +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 2/5] platform/x86: wmi: Check if event data is not NULL Date: Wed, 14 Feb 2024 08:04:30 +0100 Message-Id: <20240214070433.2677-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240214070433.2677-1-W_Armin@gmx.de> References: <20240214070433.2677-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:OU4EaZpwEqfAZfpMXLIc1UCV3fBEUVMSIhiMPC8c5uKng2m+npm zQ6emFQ6KU6ft0J10z/aiKV5+3lBKpggae5AnwFGrx7E1fMKVC/PFS+vRriZTnQLUQlbwhO EY4GxxwxlnaVcWcXbBM1ObOboPiLr+8k5SkhMKHKoUJqhAu52IW5TCUN/+pnPiMMX6J1K6Y IZ94iuXt8UxjTLLGKqb4g== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:zfwUl0rTyrY=;LxH6kwshD00ci0S9t1hnEhECBRg fpszoRhtw7uPXt6Up8VOtilQRDgj6j2PRbjPGCeyEIH8SyCct8yzbM2tzRK6z/5+ALQVQ5h7d 1jFDRTOajOK5Cd/+mM3s3vRk+GNUbFBUIDyXRaZffVf3ufFS4fF3AKfQ7K5MXzFmUSAVmmXV2 w8yKkzgWq7QRDxouyiRVP4BDnXw3tEAxY6gADu7QnUTNY+9tasbNlakLgEmDH8zCT3E77MhQv uz+/7ugwc/rBswa+BqZk/dZnekhC9oM1MxdKtZnxnEEC9zQXEuafDmZVBWyk1nhb87Og/53iy gUyx5QMWN0YwCqm76NoUAIiYxnyw4a6vVjXBfiKedA/iMNKFL5RvNZa/7LFb1mMpAVKVJlUOi E5AxababXnhPrxFrHlkFt2wbWemG2ZjSC2KS688V37reoLMtTHVBonjApW/+hDJHB2P1vtV6/ ROErV/JfahvFAHWWN0Bse2WGXVvSnQXzQxzylJpS3NefonCfZxrNhMv+ocfo3baY5Dr4R/Bxd dHD9IZT4VLqEahv4GgitQKi9/t25/AdkbNE7ONeX2qnPx69ThWggo1jbnWxgHI7MHKaeOGeB3 RTcBmfZcjbvAkFM2Mfh1tYsh4CQpJaUf7soUWBQL4ms4e6997VddCSOXbXuPc9gkHm099R+w0 HirkPXZNBglI2bWCqAe73TT/v4dsXWbck6RVEoOQ4PWA1p4kaRPcqs+aLsZLYrGf0Qof/IgPX i9HC70d0eRQhApoYsdrEgc/GMlNuUsLzdSRrDaZfdBeohCydqxG7ZhCpwuT/cReN39bJwItLq +SKB8pqM6z7D4+L1zgOBIc5qshzgtHHqJX53EfLhf4fZM= 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 34d8f55afaad..8a916887c546 100644 --- a/drivers/platform/x86/wmi.c +++ b/drivers/platform/x86/wmi.c @@ -1211,6 +1211,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) { @@ -1219,12 +1220,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 Wed Feb 14 07:04:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13556023 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (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 1B1BD111B7; Wed, 14 Feb 2024 07:04:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707894294; cv=none; b=huY+KPoWAAEq1otD9Tmwc67Lt2NX2KxyBBAJuRUe58K7g6/334ofEpm4cLJyYcsE5QSA5bQx5WkKjc8Xt8ZaHoCjxOc/da7GgP12DMRWOs9Er84nzOXOYBurRKaoc+ir6BTcfp4Uttn6hLrocTIMWV4nrzmgGzAcLTq19AL7wrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707894294; c=relaxed/simple; bh=tO1rt9sQLpmLbk3cUV+lqq1aBMgblCUNE05HLWEb0Uk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=j8PF1jFR4cm6z7m12kbWc3SvqFg0F2u6xHkXEhlJVlPFbFt8VVtQytMrCP/OTyMeP8vxVHPCI3METpbyhoiOkhasXXTEMx0p9jK11Qu2tLZWvF40kxGWeqrmBZqV+NLeHXfdCmHLgHIdhybNbeuqJ2qoJ1zOmEHMZ3IamVb1NVQ= 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=hAVtLGO5; arc=none smtp.client-ip=212.227.17.21 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="hAVtLGO5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1707894281; x=1708499081; i=w_armin@gmx.de; bh=tO1rt9sQLpmLbk3cUV+lqq1aBMgblCUNE05HLWEb0Uk=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=hAVtLGO5ThSQjP9r4m2y7axuAVSrcSwlCzxlClStIOw50BNFfTflvjnwLXiBFm5v VH0BQGB9J3vY/KtEJV5u5LRsGvYj77ThoLrURuOs55tF7s7B2pWW+1X5p4XTlcE2z FPu2QCs3630mLLRUCwm8SyLMaI3UG8l/4DjnkpXc8WctgqQMukBMCjwC72ScSPoIF mtURnTXyV94rkOXq+5ygpOTwFtQzDY0cwbJA1+HW+3p7FqlSr7ePcJbq8sS5k0RM7 AqiE/l3OH/iiduSv6RKBJUebDLJXxErGf+kwIsSG5PITcFq/uBlbx+UQTF15jk/hZ KJMtv2Ld+vIhax+tJw== 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 1MAfYm-1rgiu12ZVg-00B4mZ; Wed, 14 Feb 2024 08:04:41 +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 3/5] platform/x86: wmi: Always evaluate _WED when receiving an event Date: Wed, 14 Feb 2024 08:04:31 +0100 Message-Id: <20240214070433.2677-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240214070433.2677-1-W_Armin@gmx.de> References: <20240214070433.2677-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:+6W/BQoWwYfBe5+yyoy2+YAd6wdh55BIvOs3MTRktC1NO3pmDk6 UkhTfu0U5yI3jAfiQ96L5Vj0J5fdBzYQ0QXVBU20mdh/tTFdiRBxSDEzZ9FizC0PdxmNGj5 A9kMcRymzVYypDaLOjSXNUw8ROHcAY93aUXBbOjlMjnN/YFMEIxwrb7LlH2Xt46eWVHcCX5 KZvl7llDOT1IWRRD0mKHA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:B9+M+kARpvM=;29Yz0UMEfwr9Oh6FW9Ck93D/DSn mCOXS5qYb6llM41K65R9sPySimLwwLV9kpMk0rZ1ZRbPDQZ4AaGeJA6OEiR9+ZOGJb5r0CstO AyAknHNoPbZqV8lm3aBEcTJa26lN1eG7Z1YeJt8zf5Ft0Ip79CdAWP906tNtoiq8NZiCXXDs2 ke3DCNMBgZzbajRaLyT6M4TKJ3jrBKexrbcfSgLnnqFVIpY0+/BbDn3EuVIDLp7qkDQpV3IuB FflRvIduUra2m859T0d7Cpa15SIgHaqNO76jXv8iIczMokba0CmHeoBJHkxhlbCcC+DKNhyTO 8qMIlQVKUmAlYBQOQYukFtzJPY1PyIsizJESzCFV/ycSJvme6gXZ9pZQtf4ruAcapuiWABq0w JvXovOw3sVk2MDqOdhTsTUzrYy7Rqa8NXMR1udkzNlpcEfPBUx08jtQQzhSnnanK8QOLI3Uav qJVWStBMpVP/Pm13GCW753T2XlcbEklOI2/kDQ+6w7ObtXusZuxsgDTLrIDwXclenpA6tK0tv +XxO3H29Qp63dydr+ZA8OKskzoUsX8fZcZga6rXGW4oLe0ObJXOJ/wCKSVVZ/ZYDIh1m0icdl P8NrxvsHW7P67pWBSZ3vusFclcO2cbyB1Yqmr4Um12bUPjDCCNCISWK4qjuZi6fIR+v0TvrXb IBhD59LlBwayERL65Fd8kjT3ZUCCDDA567tlE9ySmzfg44dmLrQHfC/qsgG8T7QEJuU/4wh6g a5s7N5O0/5XK+2Y5bjrN3HipvNqqclnxwgAXT/oTn7Mj0UYoSA6yRNQQLo/vIPFj5lnmSADwa wlmB+A7T2jvqtHSw/WqOfGue8QZSOl73kUWBzFcZ1l6ss= 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 8a916887c546..8622ce3fecfd 100644 --- a/drivers/platform/x86/wmi.c +++ b/drivers/platform/x86/wmi.c @@ -1207,37 +1207,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; @@ -1247,10 +1256,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 Wed Feb 14 07:04:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13556024 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 606BF111BE; Wed, 14 Feb 2024 07:04:52 +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=1707894295; cv=none; b=LBOZHCMaR641gTO9Veg8MjPvj4+kePgqP5uInBQUZyKhmKFG+kCXMq1E4S/jVQuGsBWtgb1mJu633YOP7BZE8nAU031P//lZtjG7m5aqVTKcaBhtKuytu5pfDCCicTHSWefHt3ZTRAj2m78obKN/0pjgZRtQ2LFwXju8soyj3YA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707894295; c=relaxed/simple; bh=qHfzr9Z6AbrLnleJ2vRO1YVBS5jWB6XYcpAOq7kcFsM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=L6iCeoJnibiqu0i7nHXcSS8p4R/Aw+bV+ZEKiaxfcy4WllgAe7eHv8iakmOTq7lzohyFjHIuBXgY2erxYAqF6Zi+vhlE3LwtsvYqqZUh7a4OK9y9xCR2YyNmSFFXFbprpR/SyhxZIXy/5+aadUdolHeosK6uUK4ydrXfk1aVjYA= 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=VKujJ4Vy; 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="VKujJ4Vy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1707894282; x=1708499082; i=w_armin@gmx.de; bh=qHfzr9Z6AbrLnleJ2vRO1YVBS5jWB6XYcpAOq7kcFsM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=VKujJ4VydpfQlZJyHHf0w5Ig9CSIgulNK1w/eSsDseTXAI1rmDcXim3TDHHUNzP1 quIe6g7hlGlskRtSGev5CbJ0munBdymTMAl1QBmop+o9x8+m1vsYOCyEmbYltpf0m rT9ZoR15nYdqqzrNi3XvBpujnE7PvausvV8HRQ1priDiuZz/pdIyzl/nqGe2ro+lA v1jUw0ruKmwVnZyFTevw9nE8DNdX0hnIrsJiQPA/AT1PnEs2IMOyKVu224FWMry3n R0sJ3HTKwfAn7OxM5e/RWMMcFEqpx7c9d3mobPBg3lvi39rNFZk17EWyUQuZ47al8 /wilx0aqBdwW+MT5Iw== 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 1MIdif-1rmVGp3JX3-00EgDZ; Wed, 14 Feb 2024 08:04:42 +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 4/5] platform/x86: wmi: Update documentation regarding _WED Date: Wed, 14 Feb 2024 08:04:32 +0100 Message-Id: <20240214070433.2677-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240214070433.2677-1-W_Armin@gmx.de> References: <20240214070433.2677-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:dbO3uuwlKIrxeUIUm3YJzFs4CKaDxi5uNObhcAbIaZAAhlvg2+e K49uGcVWqc+0jsJ21zYCSuD1gvfnGOaz/lavIp5EJULuqlPOczxezNcmqmORkKPHcR4ilqf DYgO6ZWELDGwQmt2ecVzc3AnhsU3gW9z/YcaT61sf0G+XTa0JWoUK17BEjNx6ig0bNxUiXd ofKrinCBS1ZgYahqKjrfQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:r5GjNjsGBWg=;fOr3OJzvZTvySH0j/QmwI8IVq5r gNFXAX765DlnQm182+sLNzCRCTyorUNwUFnogA2J9gkmGwO7lr5cKv9eoRX86Pt+5HeTPzHSI 17dIyKC7r+PtRXFwYN/GZ+77CuJ0QLm5DiUQbcS0bjiSG++4UY0Ie69kISTSNFAl7ZV3clQ/U mLe7g9jTkNqjU7lBFtwtmt7121HXXZq/K90LteNrbE2/uF2E6NuemcVRBmEudfkNrIOPWBlCc jcTV4LpIfCoIV6d1vf1sXKOLf57Kn7wsuiN1wu58TJN7JhdZ0WEMClAvOuerbdLO4NSoLoQBA NPOldYZwuSuucp6bbH/WR7tjWOsidbbdSomWqkqo5yaxDwTtOYMDc2sBUtnb59E9bO77oltdG Vv16sJZ0oN4F9J1j8p+Q5YRgSelH7DJAhv5YBWbYd6FDBl1Syi9uBGdviqLXue8pxtFZyFmeB 2l/hWCpCtJd5F9tlxntRq8sTpv/V6eY9+v6mwG4UYwZcJ5oryY0ONgEQtNrN6CGj01UVFFt6t F/fH2K3SL6m5YQUUBoTPdztzR8qbaxy4fZRwRf3TgczpwLoTCNZSY10te09k0OWEJToH8O1D+ 5ivOMiFCUaMiocgXUwMw6UtF46rZIH10IgsDCcg6QW8gVHc4AL8PdTb4St1iwJ41eDJFzHwA6 2W+RfsetBm2Vl1dgM/e+Htl6NAOouJv3HV20V48gGKiVuJBUh2MPGUHqmrI/UalA8avzdObLK yfBCdmOVNaWvu/CShBz/OM2KLDsgFjsoy/OI0tFeDAoVEFm0RfQDM1O7QgMw/2YtM1Zi2L5lv SVCjuNnFEzhOuKzMqVLksEQSnjDBXVJVJiHUuIZS9Ig/c= 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 Wed Feb 14 07:04:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 13556025 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 4AD6912E72; Wed, 14 Feb 2024 07:04:55 +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=1707894298; cv=none; b=HTvxZeufWdEHLEq5Gz0tFS7SJSMI0TS+lyBzxA+sUcTe6JsmrD6+2nA8CE3wJTpIk2Wq8oias1axtm2zvuJtXuZ1ZCmijYnvcgbMWMbqQG1WZnZwFZE5gWvYyI4D2avhM5icF3u+F08Eiw+/4dHb4vISvNrLQJdC/GQ9LkSEE4s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707894298; c=relaxed/simple; bh=jNbs6mh9NRNmcMy+geYDC/0FJuXGdyoG3yuMN5TBvyE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NiXWmt0Q4xvb1KAmOd72bLsYwNFk4KVxnjNM+UcLSq6kKI4Mn2blVFIDR1sl8RHEdB+RB1+fAkM7m2dBQo7TU7shArg5suRhX7oBd9ElSsGBKoh5s6bN+OWkt6bPWh32YEaPiCPxa8160wWqbNtTENA+h9S4C6EltIK/ytl/u/E= 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=SIMvMopQ; 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="SIMvMopQ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1707894284; x=1708499084; i=w_armin@gmx.de; bh=jNbs6mh9NRNmcMy+geYDC/0FJuXGdyoG3yuMN5TBvyE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To: References; b=SIMvMopQ3rd+EVHEJtD1umlmMjnWjtFqsGqKfQtI8pHKo8ZPNcVvUNMNyPb56gqJ uXDFWT5XsuJQT4ZfhyLnFm2XB01toM15TiH7cyJRh3OkCrqs1Z4Mi98Q11I1i20cp lhwh5y8rjpmwqSM1hV5H+E8S9mpbCiLtiwpKmQaLIfnmz79a491A8QMzKmACpjZao 5ys5hGhbR6qBknZAFIpfwt4BoQdBnNbeBtVGIixjmbTvYUesHyXwVLMZfUHZxuXFP I8Q0M3tM7BL93VLB7UnwpyPVTMwQuHTvWYqpWVJzx/9ckRUn7vxM8h4e+gIqWCbvC CkrQJlJhp6ofj9sZrQ== 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 1MYeR1-1rWUJz0P8V-00Vf0h; Wed, 14 Feb 2024 08:04:44 +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 5/5] Revert "platform/x86: asus-wmi: Support WMI event queue" Date: Wed, 14 Feb 2024 08:04:33 +0100 Message-Id: <20240214070433.2677-6-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240214070433.2677-1-W_Armin@gmx.de> References: <20240214070433.2677-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:wyGbHPosidm1hk/7v8ToNR7ME3UU99ChHqlYcLaMV5BXXNBdroc c0JsZdWySDnOxaTGtRltdabda71rSYPXuoHFe0D54wFJDN4yN4nmKdckTB2voiXx9C4rAyq pFM4TBG1e7H0QqIaX8GI5gB4gMtTrgp5JgvrIwj3sZx5/xv5TxzfeB++gHxJteW77QWvH10 F/nM0Bk3p2N7gly30hu0g== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:VggErPqJM9c=;PauDD9Ido5AEVDLIW3VhEGRrO8V sDNPHDUGZRec9GOTnqKdSvtNLMfDvyDcShVmaPPNE+AEQFRxMusubSNIlFTvYEpcZS9WYjayg jJAeYDbr2F4NKMqxlv57DZHNb66LuXIfw66CZtL136XdjfPOJaCnF9/2R6ijzvauaG5bnjvIX 7a3jjJk6FHnuORUUBpDINq5LCfjoFKl6WTOUl8ftfmf0/4NDlkFUrwD6p6YGuFvqw9aZ8j4SJ 7YQund/DFxAq0M6pezSj4VeHLoNFDby61ksAZXvFsu3p5prE8a8rzVg2itwuCHvnZx8eg3oJd X0rwaJ1TLfVmbPaa960VpYUPb19F4p9shp0XOfh25n8MbBCWgCrAbopBZMSsgay0/DOOLhaG2 a2JVf/cj0rXViV1zCUQ3On0bxbQOytXF0rYLdJ0O16kpmZRXwCD//Tc7qBG/6dGzxHrF8cdn3 o1c59O+KL6dI6a22CJDuzFyTs0OIuj9ygNVe//2NqMwCoJDlhjgLN/MK47FRkebVlV/aXoHnR yIGMUlX3Uh/hoIkKwj0mSlVsueTNQXlkdZVRZM4IUTM1pWEHyARv3yqUje290W1ScP1Qhu15Y 74ql3vMKJqPTQH8he063400q0UIYG/uFQYX23G6bLkDwlkt4KyhzYUY6jFLgRY3hIo1U0B9wv Ikb+ouKy/djRt2d0mYr+6omUkcmlRnkJsJ3Kxn4pbLAcaGgSQrYIl76PjrvDdOEg5YyTslGbH e+h42LNNDXYrbnkMY1jo/xxofpObcW6YYg3jw+QHNWTwaC998cdeRZTvzPChvmnL5bh5aEcs1 AdvY018m246TnKtGckaoEoPF/p7B6wUb2gKx0mm8JDfDo= 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)