diff -Naur tp-smapi/thinkpad_ec.c tp-smapi-rt/thinkpad_ec.c
--- tp-smapi/thinkpad_ec.c	2009-06-16 12:01:10.000000000 +0200
+++ tp-smapi-rt/thinkpad_ec.c	2009-11-11 11:56:51.000000000 +0100
@@ -88,7 +88,7 @@
 #define TPC_PREFETCH_JUNK   (INITIAL_JIFFIES+1)   /*   Ignore prefetch */
 
 /* Locking: */
-static DECLARE_MUTEX(thinkpad_ec_mutex);
+static struct mutex thinkpad_ec_mutex;
 
 /* Kludge in case the ACPI DSDT reserves the ports we need. */
 static int force_io;    /* Willing to do IO to ports we couldn't reserve? */
@@ -105,7 +105,7 @@
 int thinkpad_ec_lock(void)
 {
 	int ret;
-	ret = down_interruptible(&thinkpad_ec_mutex);
+	ret = mutex_lock_killable(&thinkpad_ec_mutex);
 	return ret;
 }
 EXPORT_SYMBOL_GPL(thinkpad_ec_lock);
@@ -119,7 +119,7 @@
  */
 int thinkpad_ec_try_lock(void)
 {
-	return down_trylock(&thinkpad_ec_mutex);
+	return mutex_trylock(&thinkpad_ec_mutex);
 }
 EXPORT_SYMBOL_GPL(thinkpad_ec_try_lock);
 
@@ -131,7 +131,7 @@
  */
 void thinkpad_ec_unlock(void)
 {
-	up(&thinkpad_ec_mutex);
+	mutex_unlock(&thinkpad_ec_mutex);
 }
 EXPORT_SYMBOL_GPL(thinkpad_ec_unlock);
 
@@ -467,6 +467,8 @@
 
 static int __init thinkpad_ec_init(void)
 {
+	mutex_init(&thinkpad_ec_mutex);
+
 	if (!check_dmi_for_ec()) {
 		printk(KERN_WARNING
 		       "thinkpad_ec: no ThinkPad embedded controller!\n");
diff -Naur tp-smapi/tp_smapi.c tp-smapi-rt/tp_smapi.c
--- tp-smapi/tp_smapi.c	2009-06-16 12:01:10.000000000 +0200
+++ tp-smapi-rt/tp_smapi.c	2009-11-11 11:56:51.000000000 +0100
@@ -109,7 +109,7 @@
 #define SMAPI_PORT2 0x4F           /* fixed port, meaning unclear */
 static unsigned short smapi_port;  /* APM control port, normally 0xB2 */
 
-static DECLARE_MUTEX(smapi_mutex);
+static struct mutex smapi_mutex;
 
 /**
  * find_smapi_port - read SMAPI port from NVRAM
@@ -773,7 +773,7 @@
 	if (thresh > MAX_THRESH_START) /* clamp down to MAX_THRESH_START */
 		thresh = MAX_THRESH_START;
 
-	down(&smapi_mutex);
+	mutex_lock_killable(&smapi_mutex);
 	ret = get_thresh(bat, THRESH_STOP, &other_thresh);
 	if (ret != -EOPNOTSUPP) {
 		if (ret) /* other threshold is set? */
@@ -791,7 +791,7 @@
 	}
 	ret = set_thresh(bat, THRESH_START, thresh);
 out:
-	up(&smapi_mutex);
+	mutex_unlock(&smapi_mutex);
 	return count;
 
 }
@@ -815,7 +815,7 @@
 	if (thresh < MIN_THRESH_STOP) /* clamp up to MIN_THRESH_STOP */
 		thresh = MIN_THRESH_STOP;
 
-	down(&smapi_mutex);
+	mutex_lock_killable(&smapi_mutex);
 	ret = get_thresh(bat, THRESH_START, &other_thresh);
 	if (ret != -EOPNOTSUPP) { /* other threshold exists? */
 		if (ret)
@@ -834,7 +834,7 @@
 	}
 	ret = set_thresh(bat, THRESH_STOP, thresh);
 out:
-	up(&smapi_mutex);
+	mutex_unlock(&smapi_mutex);
 	return count;
 }
 
@@ -1409,6 +1409,7 @@
 {
 	int ret;
 	printk(KERN_INFO "tp_smapi " TP_VERSION " loading...\n");
+	mutex_init(&smapi_mutex);
 
 	ret = find_smapi_port();
 	if (ret < 0)
