Skip to content

Commit 396f016

Browse files
etantilovanguy11
authored andcommitted
idpf: add read memory barrier when checking descriptor done bit
Add read memory barrier to ensure the order of operations when accessing control queue descriptors. Specifically, we want to avoid cases where loads can be reordered: 1. Load #1 is dispatched to read descriptor flags. 2. Load #2 is dispatched to read some other field from the descriptor. 3. Load #2 completes, accessing memory/cache at a point in time when the DD flag is zero. 4. NIC DMA overwrites the descriptor, now the DD flag is one. 5. Any fields loaded before step 4 are now inconsistent with the actual descriptor state. Add read memory barrier between steps 1 and 2, so that load #2 is not executed until load #1 has completed. Fixes: 8077c72 ("idpf: add controlq init and reset checks") Reviewed-by: Przemek Kitszel <[email protected]> Reviewed-by: Sridhar Samudrala <[email protected]> Suggested-by: Lance Richardson <[email protected]> Signed-off-by: Emil Tantilov <[email protected]> Tested-by: Krishneil Singh <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 15a9013 commit 396f016

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

drivers/net/ethernet/intel/idpf/idpf_controlq.c

+6
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,9 @@ int idpf_ctlq_clean_sq(struct idpf_ctlq_info *cq, u16 *clean_count,
376376
if (!(le16_to_cpu(desc->flags) & IDPF_CTLQ_FLAG_DD))
377377
break;
378378

379+
/* Ensure no other fields are read until DD flag is checked */
380+
dma_rmb();
381+
379382
/* strip off FW internal code */
380383
desc_err = le16_to_cpu(desc->ret_val) & 0xff;
381384

@@ -563,6 +566,9 @@ int idpf_ctlq_recv(struct idpf_ctlq_info *cq, u16 *num_q_msg,
563566
if (!(flags & IDPF_CTLQ_FLAG_DD))
564567
break;
565568

569+
/* Ensure no other fields are read until DD flag is checked */
570+
dma_rmb();
571+
566572
q_msg[i].vmvf_type = (flags &
567573
(IDPF_CTLQ_FLAG_FTYPE_VM |
568574
IDPF_CTLQ_FLAG_FTYPE_PF)) >>

0 commit comments

Comments
 (0)