diff options
Diffstat (limited to 'drivers/net/ethernet/microsoft/mana/gdma_main.c')
| -rw-r--r-- | drivers/net/ethernet/microsoft/mana/gdma_main.c | 10 | 
1 files changed, 10 insertions, 0 deletions
| diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c b/drivers/net/ethernet/microsoft/mana/gdma_main.c index 00d8198072ae..a6f99b4344d9 100644 --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c @@ -397,6 +397,11 @@ static void mana_gd_process_eq_events(void *arg)  			break;  		} +		/* Per GDMA spec, rmb is necessary after checking owner_bits, before +		 * reading eqe. +		 */ +		rmb(); +  		mana_gd_process_eqe(eq);  		eq->head++; @@ -1134,6 +1139,11 @@ static int mana_gd_read_cqe(struct gdma_queue *cq, struct gdma_comp *comp)  	if (WARN_ON_ONCE(owner_bits != new_bits))  		return -1; +	/* Per GDMA spec, rmb is necessary after checking owner_bits, before +	 * reading completion info +	 */ +	rmb(); +  	comp->wq_num = cqe->cqe_info.wq_num;  	comp->is_sq = cqe->cqe_info.is_sq;  	memcpy(comp->cqe_data, cqe->cqe_data, GDMA_COMP_DATA_SIZE); | 
