mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
firewire: cdev: use memory barrier to access fw_device members
The core code uses a read memory barrier when accessing the generation and node_id members of the fw_device structure. It assumes that the latest value of the former is visible to a processor core when the latest value of the latter is visible, since these members are updated in reverse order with a write memory barrier. However, the function that fills the fw_cdev_event_bus_reset structure does not follow this approach. Use a read memory barrier when accessing these members. Link: https://lore.kernel.org/r/20260920071501.77785-2-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
This commit is contained in:
parent
00bbf49783
commit
b9d9a22658
|
|
@ -399,18 +399,21 @@ static ssize_t fw_device_op_read(struct file *file, char __user *buffer,
|
|||
static void fill_bus_reset_event(struct fw_cdev_event_bus_reset *event,
|
||||
struct client *client)
|
||||
{
|
||||
struct fw_card *card = client->device->card;
|
||||
|
||||
guard(spinlock_irq)(&card->lock);
|
||||
|
||||
event->closure = client->bus_reset_closure;
|
||||
event->type = FW_CDEV_EVENT_BUS_RESET;
|
||||
|
||||
event->generation = client->device->generation;
|
||||
smp_rmb();
|
||||
event->node_id = client->device->node_id;
|
||||
event->local_node_id = card->local_node->node_id;
|
||||
event->bm_node_id = card->bm_node_id;
|
||||
event->irm_node_id = card->irm_node->node_id;
|
||||
event->root_node_id = card->root_node->node_id;
|
||||
|
||||
struct fw_card *card = client->device->card;
|
||||
|
||||
scoped_guard(spinlock_irq, &card->lock) {
|
||||
event->local_node_id = card->local_node->node_id;
|
||||
event->bm_node_id = card->bm_node_id;
|
||||
event->irm_node_id = card->irm_node->node_id;
|
||||
event->root_node_id = card->root_node->node_id;
|
||||
}
|
||||
}
|
||||
|
||||
static void for_each_client(struct fw_device *device,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user