108 lines · 3.4 KB · Text
RawDownload
=================SoundWire Locking================= This document explains locking mechanism of the SoundWire Bus. Bus usesfollowing locks in order to avoid race conditions in Bus operations onshared resources.   - Bus lock   - Message lock Bus lock======== SoundWire Bus lock is a mutex and is part of Bus data structure(sdw_bus) which is used for every Bus instance. This lock is used toserialize each of the following operations(s) within SoundWire Bus instance.   - Addition and removal of Slave(s), changing Slave status.   - Prepare, Enable, Disable and De-prepare stream operations.   - Access of Stream data structure. Message lock============ SoundWire message transfer lock. This mutex is part ofBus data structure (sdw_bus). This lock is used to serialize the messagetransfers (read/write) within a SoundWire Bus instance. Below examples show how locks are acquired. Example 1--------- Message transfer.   1. For every message transfer      a. Acquire Message lock.      b. Transfer message (Read/Write) to Slave1 or broadcast message on        Bus in case of bank switch.      c. Release Message lock      :: 	+----------+                    +---------+	|          |                    |         |	|   Bus    |                    | Master  |	|          |                    | Driver  |	|          |                    |         |	+----+-----+                    +----+----+	     |                               |	     |     bus->ops->xfer_msg()      |	     <-------------------------------+   a. Acquire Message lock	     |                               |   b. Transfer message	     |                               |	     +------------------------------->   c. Release Message lock	     |    return success/error       |   d. Return success/error	     |                               |	     +                               + Example 2--------- Prepare operation.   1. Acquire lock for Bus instance associated with Master 1.   2. For every message transfer in Prepare operation      a. Acquire Message lock.      b. Transfer message (Read/Write) to Slave1 or broadcast message on        Bus in case of bank switch.      c. Release Message lock.   3. Release lock for Bus instance associated with Master 1 :: 	+----------+                    +---------+	|          |                    |         |	|   Bus    |                    | Master  |	|          |                    | Driver  |	|          |                    |         |	+----+-----+                    +----+----+	     |                               |	     |    sdw_prepare_stream()       |	     <-------------------------------+   1. Acquire bus lock	     |                               |   2. Perform stream prepare	     |                               |	     |                               |	     |     bus->ops->xfer_msg()      |	     <-------------------------------+   a. Acquire Message lock	     |                               |   b. Transfer message	     |                               |	     +------------------------------->   c. Release Message lock	     |    return success/error       |   d. Return success/error	     |                               |	     |                               |	     |    return success/error       |   3. Release bus lock	     +------------------------------->   4. Return success/error	     |                               |	     +                               +

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t