Add down_timeout and change ACPI to use it

ACPI currently emulates a timeout for semaphores with calls to
down_trylock and sleep.  This produces horrible behaviour in terms of
fairness and excessive wakeups.  Now that we have a unified semaphore
implementation, adding a real down_trylock is almost trivial.

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
diff --git a/include/linux/semaphore.h b/include/linux/semaphore.h
index 88f2a28..a107aeb 100644
--- a/include/linux/semaphore.h
+++ b/include/linux/semaphore.h
@@ -75,6 +75,12 @@
 extern int __must_check down_trylock(struct semaphore *sem);
 
 /*
+ * As down(), except this function will return -ETIME if it fails to
+ * acquire the semaphore within the specified number of jiffies.
+ */
+extern int __must_check down_timeout(struct semaphore *sem, long jiffies);
+
+/*
  * Release the semaphore.  Unlike mutexes, up() may be called from any
  * context and even by tasks which have never called down().
  */