scsi: qedf: Correct the memory barriers in qedf_ring_doorbell
- Correct memory barriers to make sure all cmnds are flushed. Signed-off-by: Andrew Vasquez <andrewv@marvell.com> Signed-off-by: Saurav Kashyap <skashyap@marvell.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
96b1765a09
commit
90ccf75798
@ -773,10 +773,18 @@ void qedf_ring_doorbell(struct qedf_rport *fcport)
|
||||
FCOE_DB_DATA_AGG_VAL_SEL_SHIFT;
|
||||
|
||||
dbell.sq_prod = fcport->fw_sq_prod_idx;
|
||||
writel(*(u32 *)&dbell, fcport->p_doorbell);
|
||||
/* Make sure SQ index is updated so f/w prcesses requests in order */
|
||||
/* wmb makes sure that the BDs data is updated before updating the
|
||||
* producer, otherwise FW may read old data from the BDs.
|
||||
*/
|
||||
wmb();
|
||||
barrier();
|
||||
writel(*(u32 *)&dbell, fcport->p_doorbell);
|
||||
/*
|
||||
* Fence required to flush the write combined buffer, since another
|
||||
* CPU may write to the same doorbell address and data may be lost
|
||||
* due to relaxed order nature of write combined bar.
|
||||
*/
|
||||
wmb();
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
static void qedf_trace_io(struct qedf_rport *fcport, struct qedf_ioreq *io_req,
|
||||
|
Loading…
Reference in New Issue
Block a user