@@ -347,6 +347,9 @@ int odp_schedule_group_info(odp_schedule_group_t group,
* be protected by its own ordered lock. This promotes maximum parallelism by
* allowing order to maintained on a more granular basis. If an ordered lock
* is used multiple times in the same ordered context results are undefined.
+ * Only one ordered lock can be active in an ordered context at any given time.
+ * Resuls are undefined when multiple ordered locks are acquired in nested
+ * fashion within the same ordered context.
*
* @param lock_index Index of the ordered lock in the current context to be
* acquired. Must be in the range 0..odp_queue_lock_count()
@@ -368,6 +371,31 @@ void odp_schedule_order_lock(unsigned lock_index);
void odp_schedule_order_unlock(unsigned lock_index);
/**
+ * Release existing ordered context lock and acquire a new lock
+ *
+ * This call is valid only when holding an ordered synchronization context.
+ * Release a previously locked ordered context lock and acquire a new ordered
+ * context lock. This call is valid only when there is a single ordered context
+ * lock active. Results are undefined if this call is made when multiple ordered
+ * context locks are acquired in nested fashion.
+ * This call does not release the existing ordered context and only switches
+ * from one ordered lock to another ordered lock within the same ordered
+ * context.
+ *
+ * @param unlock_index Index of the acquired ordered lock in the current
+ * context to be released. Results are undefined if the
+ * ordered lock with the given unlock_index is not held by
+ * this ordered context.
+ * @param lock_index Index of the ordered lock in the current context to be
+ * acquired. Previously acquired ordered lock is released.
+ * Must be in the range 0...odp_queue_lock_count() - 1.
+ *
+ * @see odp_schedule_order_lock(), odp_schedule_order_unlock()
+ *
+ */
+void odp_schedule_order_unlock_lock(uint32_t unlock_index, uint32_t lock_index);
+
+/**
* @}
*/