Add missing barriers to Bakery Locks

With the current implementation, it's possible for a contender to
observe accesses in the Critical Section before acquiring or releasing
the lock. Insert fencing in the locking and release codes to prevent any
reorder.

Fixes ARM-software/tf-issues#609

Change-Id: I773b82aa41dd544a2d3dbacb9a4b42c9eb767bbb
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
diff --git a/lib/locks/bakery/bakery_lock_coherent.c b/lib/locks/bakery/bakery_lock_coherent.c
index 788ba98..03277c3 100644
--- a/lib/locks/bakery/bakery_lock_coherent.c
+++ b/lib/locks/bakery/bakery_lock_coherent.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -133,7 +133,12 @@
 				bakery_ticket_number(bakery->lock_data[they]));
 		}
 	}
-	/* Lock acquired */
+
+	/*
+	 * Lock acquired. Ensure that any reads from a shared resource in the
+	 * critical section read values after the lock is acquired.
+	 */
+	dmbld();
 }
 
 
@@ -146,9 +151,11 @@
 	assert(bakery_ticket_number(bakery->lock_data[me]));
 
 	/*
-	 * Release lock by resetting ticket. Then signal other
-	 * waiting contenders
+	 * Ensure that other observers see any stores in the critical section
+	 * before releasing the lock. Release the lock by resetting ticket.
+	 * Then signal other waiting contenders.
 	 */
+	dmbst();
 	bakery->lock_data[me] = 0;
 	dsb();
 	sev();