Add new global mutex for PSA global_data

Signed-off-by: Paul Elliott <paul.elliott@arm.com>
diff --git a/include/mbedtls/threading.h b/include/mbedtls/threading.h
index b4e0502..fbd7ad2 100644
--- a/include/mbedtls/threading.h
+++ b/include/mbedtls/threading.h
@@ -112,6 +112,13 @@
  * psa_key_slot_state_transition(), psa_register_read(), psa_unregister_read(),
  * psa_key_slot_has_readers() and psa_wipe_key_slot(). */
 extern mbedtls_threading_mutex_t mbedtls_threading_key_slot_mutex;
+
+/*
+ * A mutex used to make the PSA global_data struct members thread safe.
+ *
+ * This mutex must be held when any read or write to a any of the PSA
+ * global_data structure members. */
+extern mbedtls_threading_mutex_t mbedtls_threading_psa_globaldata_mutex;
 #endif
 
 #endif /* MBEDTLS_THREADING_C */
diff --git a/library/threading.c b/library/threading.c
index c28290f..06b4747 100644
--- a/library/threading.c
+++ b/library/threading.c
@@ -150,6 +150,7 @@
 #endif
 #if defined(MBEDTLS_PSA_CRYPTO_C)
     mbedtls_mutex_init(&mbedtls_threading_key_slot_mutex);
+    mbedtls_mutex_init(&mbedtls_threading_psa_globaldata_mutex);
 #endif
 }
 
@@ -166,6 +167,7 @@
 #endif
 #if defined(MBEDTLS_PSA_CRYPTO_C)
     mbedtls_mutex_free(&mbedtls_threading_key_slot_mutex);
+    mbedtls_mutex_free(&mbedtls_threading_psa_globaldata_mutex);
 #endif
 }
 #endif /* MBEDTLS_THREADING_ALT */
@@ -184,6 +186,7 @@
 #endif
 #if defined(MBEDTLS_PSA_CRYPTO_C)
 mbedtls_threading_mutex_t mbedtls_threading_key_slot_mutex MUTEX_INIT;
+mbedtls_threading_mutex_t mbedtls_threading_psa_globaldata_mutex MUTEX_INIT;
 #endif
 
 #endif /* MBEDTLS_THREADING_C */