lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20100209013736.GE21680@khazad-dum.debian.net>
Date:	Mon, 8 Feb 2010 23:37:36 -0200
From:	Henrique de Moraes Holschuh <hmh@....eng.br>
To:	Thadeu Lima de Souza Cascardo <cascardo@...oscopio.com>
Cc:	linux-acpi@...r.kernel.org, ibm-acpi-devel@...ts.sourceforge.net,
	linux-kernel@...r.kernel.org,
	Andrew Morton <akpm@...ux-foundation.org>
Subject: Re: [PATCH] thinkpad-acpi: setup hotkey polling after changing
 hotkey_driver_mask

Thadeu, thanks for the detailed analysis of the problem.

Please test the commit below, it should fix things cleanly.  I am quite
tired right now, so I might have missed some details, but it survived a fast
testing and compiled without warnings both with and without poll support
compiled in.

Tested in a T43 by crippling the input device open handle to not start the
poller, and by crippling hotkey_mask support to force the driver to think it
needs to default to poll mode.  Both volume and brightness reporting worked
fine in the test.

If it does fixes the issues you observed, I will add the tested-by, and send
it to Len.


commit 8e05920a6cb236b21f31391b4479ec29ce65ccdf
Author: Henrique de Moraes Holschuh <hmh@....eng.br>
Date:   Mon Feb 8 22:40:28 2010 -0200

    thinkpad-acpi: make driver events work in NVRAM poll mode
    
    Thadeu Lima de Souza Cascardo reports this:
    
    Brightness notification does not work until the user writes to
    hotkey_mask attribute.  That's because the polling thread will only run
    if hotkey_user_mask is set and someone is reading the input device or
    if hotkey_driver_mask is set.  In this second case, this condition is
    not tested after the mask is changed, because the brightness and
    volume drivers are started after the hotkey drivers.
    
    Fix tpacpi_hotkey_driver_mask_set() to call hotkey_poll_setup(), so
    that the poller kthread will be started when needed.
    
    Reported-by: Thadeu Lima de Souza Cascardo <cascardo@...oscopio.com>
    Signed-off-by: Henrique de Moraes Holschuh <hmh@....eng.br>
    Cc: Andrew Morton <akpm@...ux-foundation.org>

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index d12b61b..09c1fe6 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -2086,6 +2086,7 @@ static struct attribute_set *hotkey_dev_attributes;
 
 static void tpacpi_driver_event(const unsigned int hkey_event);
 static void hotkey_driver_event(const unsigned int scancode);
+static void hotkey_poll_setup(const bool may_warn);
 
 /* HKEY.MHKG() return bits */
 #define TP_HOTKEY_TABLET_MASK (1 << 3)
@@ -2268,6 +2269,8 @@ static int tpacpi_hotkey_driver_mask_set(const u32 mask)
 
 	rc = hotkey_mask_set((hotkey_acpi_mask | hotkey_driver_mask) &
 							~hotkey_source_mask);
+	hotkey_poll_setup(true);
+
 	mutex_unlock(&hotkey_mutex);
 
 	return rc;
@@ -2552,7 +2555,7 @@ static void hotkey_poll_stop_sync(void)
 }
 
 /* call with hotkey_mutex held */
-static void hotkey_poll_setup(bool may_warn)
+static void hotkey_poll_setup(const bool may_warn)
 {
 	const u32 poll_driver_mask = hotkey_driver_mask & hotkey_source_mask;
 	const u32 poll_user_mask = hotkey_user_mask & hotkey_source_mask;
@@ -2583,7 +2586,7 @@ static void hotkey_poll_setup(bool may_warn)
 	}
 }
 
-static void hotkey_poll_setup_safe(bool may_warn)
+static void hotkey_poll_setup_safe(const bool may_warn)
 {
 	mutex_lock(&hotkey_mutex);
 	hotkey_poll_setup(may_warn);
@@ -2601,7 +2604,11 @@ static void hotkey_poll_set_freq(unsigned int freq)
 
 #else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
 
-static void hotkey_poll_setup_safe(bool __unused)
+static void hotkey_poll_setup(const bool __unused)
+{
+}
+
+static void hotkey_poll_setup_safe(const bool __unused)
 {
 }
 

-- 
  "One disk to rule them all, One disk to find them. One disk to bring
  them all and in the darkness grind them. In the Land of Redmond
  where the shadows lie." -- The Silicon Valley Tarot
  Henrique Holschuh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ