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