1 ================= 2 SoundWire Locking 3 ================= 4 5 This document explains locking mechanism of th 6 following locks in order to avoid race conditi 7 shared resources. 8 9 - Bus lock 10 11 - Message lock 12 13 Bus lock 14 ======== 15 16 SoundWire Bus lock is a mutex and is part of B 17 (sdw_bus) which is used for every Bus instance 18 serialize each of the following operations(s) 19 20 - Addition and removal of Slave(s), changing 21 22 - Prepare, Enable, Disable and De-prepare st 23 24 - Access of Stream data structure. 25 26 Message lock 27 ============ 28 29 SoundWire message transfer lock. This mutex is 30 Bus data structure (sdw_bus). This lock is use 31 transfers (read/write) within a SoundWire Bus 32 33 Below examples show how locks are acquired. 34 35 Example 1 36 --------- 37 38 Message transfer. 39 40 1. For every message transfer 41 42 a. Acquire Message lock. 43 44 b. Transfer message (Read/Write) to Slave 45 Bus in case of bank switch. 46 47 c. Release Message lock 48 49 :: 50 51 +----------+ +----- 52 | | | 53 | Bus | | Mast 54 | | | Driv 55 | | | 56 +----+-----+ +----+ 57 | | 58 | bus->ops->xfer_msg() | 59 <-------------------------------+ 60 | | 61 | | 62 +-------------------------------> 63 | return success/error | 64 | | 65 + + 66 67 Example 2 68 --------- 69 70 Prepare operation. 71 72 1. Acquire lock for Bus instance associated 73 74 2. For every message transfer in Prepare ope 75 76 a. Acquire Message lock. 77 78 b. Transfer message (Read/Write) to Slave 79 Bus in case of bank switch. 80 81 c. Release Message lock. 82 83 3. Release lock for Bus instance associated 84 85 +----------+ +----- 86 | | | 87 | Bus | | Mast 88 | | | Driv 89 | | | 90 +----+-----+ +----+ 91 | | 92 | sdw_prepare_stream() | 93 <-------------------------------+ 94 | | 95 | | 96 | | 97 | bus->ops->xfer_msg() | 98 <-------------------------------+ 99 | | 100 | | 101 +-------------------------------> 102 | return success/error | 103 | | 104 | | 105 | return success/error | 106 +-------------------------------> 107 | | 108 + +
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.