Message ID | 1422571103-17497-1-git-send-email-isubramanian@apm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
From: Iyappan Subramanian <isubramanian@apm.com> Date: Thu, 29 Jan 2015 14:38:23 -0800 > This patch fixes the following kernel crash, ... > Software writes poison data into the descriptor bytes[15:8] and upon > receiving the interrupt, if those bytes are overwritten by the hardware with > the valid data, software also reads bytes[7:0] and executes receive/tx > completion logic. > > If the CPU executes the above two reads in out of order fashion, then the > bytes[7:0] will have older data and causing the kernel panic. We have to > force the order of the reads and thus this patch introduces read memory > barrier between these reads. > > Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> > Signed-off-by: Keyur Chudgar <kchudgar@apm.com> Applied, thanks.
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c index 83a5028..793f3b7 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c @@ -369,6 +369,8 @@ static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring, if (unlikely(xgene_enet_is_desc_slot_empty(raw_desc))) break; + /* read fpqnum field after dataaddr field */ + dma_rmb(); if (is_rx_desc(raw_desc)) ret = xgene_enet_rx_frame(ring, raw_desc); else