mirror of
https://github.com/torvalds/linux.git
synced 2026-09-28 03:52:02 +02:00
misc: bcm-vk: Use acquire/release for msgq_inited
bcm_vk_sync_msgq() fills the message queue information and then sets
msgq_inited. Readers call bcm_vk_drv_access_ok() before accessing the
message queues and their cached queue information.
atomic_set()/atomic_read() do not order those accesses. A reader can see
msgq_inited set while still seeing stale queue information. Use release
when publishing the initialized queues and acquire when checking the gate.
Keep the clear in bcm_vk_blk_drv_access() as atomic_set(). It closes the
gate and does not publish queue state to readers.
Fixes: 111d746bb4 ("misc: bcm-vk: add VK messaging support")
Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com>
Link: https://patch.msgid.link/20260603021127.3285057-1-hanguidong02@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
aefcde780b
commit
61b101c6a1
|
|
@ -108,7 +108,8 @@ u32 msgq_avail_space(const struct bcm_vk_msgq __iomem *msgq,
|
|||
|
||||
bool bcm_vk_drv_access_ok(struct bcm_vk *vk)
|
||||
{
|
||||
return (!!atomic_read(&vk->msgq_inited));
|
||||
/* Pair with the release store after message queue initialization. */
|
||||
return !!atomic_read_acquire(&vk->msgq_inited);
|
||||
}
|
||||
|
||||
void bcm_vk_set_host_alert(struct bcm_vk *vk, u32 bit_mask)
|
||||
|
|
@ -501,7 +502,8 @@ int bcm_vk_sync_msgq(struct bcm_vk *vk, bool force_sync)
|
|||
msgq++;
|
||||
}
|
||||
}
|
||||
atomic_set(&vk->msgq_inited, 1);
|
||||
/* Publish message queue info before allowing driver access. */
|
||||
atomic_set_release(&vk->msgq_inited, 1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user