Remove the wfe() for bounded wait in bakery_lock
authorSoby Mathew <soby.mathew@arm.com>
Tue, 18 Nov 2014 10:45:04 +0000 (10:45 +0000)
committerDan Handley <dan.handley@arm.com>
Thu, 22 Jan 2015 10:57:43 +0000 (10:57 +0000)
This patch is an optimization in the bakery_lock_get() function
which removes the wfe() when waiting for other contenders to choose
their ticket i.e when their `entering` flag is set. Since the time
taken to execute bakery_get_ticket() by other contenders is bounded,
this wait is a bounded time wait. Hence the removal of wfe() and the
corresponding sev() and dsb() in bakery_get_ticket() may result
in better time performance during lock acquisition.

Change-Id: I141bb21294226b54cb6e89e7cac0175c553afd8d

lib/locks/bakery/bakery_lock.c

index 7e71dec0f96656869d3b19be516cf5c8dff4fa36..6bdc35a5eb5fa8682b79a5a205965968c0482514 100644 (file)
@@ -107,8 +107,6 @@ static unsigned int bakery_get_ticket(bakery_lock_t *bakery, unsigned int me)
        ++my_ticket;
        bakery->number[me] = my_ticket;
        bakery->entering[me] = 0;
-       dsb();
-       sev();
 
        return my_ticket;
 }
@@ -151,7 +149,7 @@ void bakery_lock_get(bakery_lock_t *bakery)
 
                /* Wait for the contender to get their ticket */
                while (bakery->entering[they])
-                       wfe();
+                       ;
 
                /*
                 * If the other party is a contender, they'll have non-zero