| From 640b53438c20818b3e344343b58b1f1765606a85 Mon Sep 17 00:00:00 2001 |
| From: Martin Pitt <martin.pitt@ubuntu.com> |
| Date: Mon, 31 Jan 2011 15:30:01 +0100 |
| Subject: [PATCH] 49bluetooth: Wait for btusb module to get unused |
| |
| The 49bluetooth hook disables /proc/acpi/ibm/bluetooth but this isn't |
| synchronous, i. e. it doesn't wait until the module usage count actually drops |
| to 0. Due to that, it's impossible to add btusb to SUSPEND_MODULES (on some |
| models/older kernels you need to do that to fix suspend problems), as at that |
| point the module is still in use. |
| |
| On my system (ThinkPad X201) the module takes between 0.3 and 0.5 seconds to |
| unload, so use 100 ms wait steps with a timeout of 2 seconds. |
| |
| Bug: https://bugs.freedesktop.org//show_bug.cgi?id=33759 |
| Bug-Ubuntu: https://launchpad.net/bugs/698331 |
| --- |
| pm/sleep.d/49bluetooth | 9 +++++++++ |
| 1 files changed, 9 insertions(+), 0 deletions(-) |
| |
| diff --git a/pm/sleep.d/49bluetooth b/pm/sleep.d/49bluetooth |
| index d46ba49..0dc1909 100755 |
| --- a/pm/sleep.d/49bluetooth |
| +++ b/pm/sleep.d/49bluetooth |
| @@ -12,6 +12,15 @@ suspend_bluetooth() |
| if grep -q enabled /proc/acpi/ibm/bluetooth; then |
| savestate ibm_bluetooth enable |
| echo disable > /proc/acpi/ibm/bluetooth |
| + |
| + # wait for up to 2 seconds for the module to actually get |
| + # unused |
| + TIMEOUT=20 |
| + while [ $TIMEOUT -ge 0 ]; do |
| + [ `cat /sys/module/btusb/refcnt` = 0 ] && break |
| + TIMEOUT=$((TIMEOUT-1)) |
| + sleep 0.1 |
| + done |
| else |
| savestate ibm_bluetooth disable |
| fi |
| -- |
| 1.7.2.3 |
| |