mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 12:25:31 +00:00
msm: smd: provide atomic channel writes
Some smd clients may write from multiple threads, in which case it's not safe to call smd_write without holding a lock. smd_write_atomic() provides the same functionality as smd_write() but obtains the smd lock first. Signed-off-by: Brian Swetland <swetland@google.com> Signed-off-by: Daniel Walker <dwalker@codeaurora.org>
This commit is contained in:
parent
1207babdcd
commit
636eb9cbae
@ -38,6 +38,7 @@ int smd_read(smd_channel_t *ch, void *data, int len);
|
||||
** it will return the requested length written or an error.
|
||||
*/
|
||||
int smd_write(smd_channel_t *ch, const void *data, int len);
|
||||
int smd_write_atomic(smd_channel_t *ch, const void *data, int len);
|
||||
|
||||
int smd_write_avail(smd_channel_t *ch);
|
||||
int smd_read_avail(smd_channel_t *ch);
|
||||
|
@ -804,6 +804,16 @@ int smd_write(smd_channel_t *ch, const void *data, int len)
|
||||
return ch->write(ch, data, len);
|
||||
}
|
||||
|
||||
int smd_write_atomic(smd_channel_t *ch, const void *data, int len)
|
||||
{
|
||||
unsigned long flags;
|
||||
int res;
|
||||
spin_lock_irqsave(&smd_lock, flags);
|
||||
res = ch->write(ch, data, len);
|
||||
spin_unlock_irqrestore(&smd_lock, flags);
|
||||
return res;
|
||||
}
|
||||
|
||||
int smd_read_avail(smd_channel_t *ch)
|
||||
{
|
||||
return ch->read_avail(ch);
|
||||
|
Loading…
Reference in New Issue
Block a user