~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/driver-api/soundwire/locking.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/driver-api/soundwire/locking.rst (Version linux-6.12-rc7) and /Documentation/driver-api/soundwire/locking.rst (Version linux-5.2.21)


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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php