Skip to content

Commit 19978c5

Browse files
KAGA-KOKOgregkh
authored andcommitted
skd: Submit requests to firmware before triggering the doorbell
commit 5fbd545cd3fd311ea1d6e8be4cedddd0ee5684c7 upstream. Ensure that the members of struct skd_msg_buf have been transferred to the PCIe adapter before the doorbell is triggered. This patch avoids that I/O fails sporadically and that the following error message is reported: (skd0:STM000196603:[0000:00:09.0]): Completion mismatch comp_id=0x0000 skreq=0x0400 new=0x0000 Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Hannes Reinecke <hare@suse.de> Cc: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 0bcaf51 commit 19978c5

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

drivers/block/skd_main.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,6 +2214,9 @@ static void skd_send_fitmsg(struct skd_device *skdev,
22142214
*/
22152215
qcmd |= FIT_QCMD_MSGSIZE_64;
22162216

2217+
/* Make sure skd_msg_buf is written before the doorbell is triggered. */
2218+
smp_wmb();
2219+
22172220
SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND);
22182221

22192222
}
@@ -2260,6 +2263,9 @@ static void skd_send_special_fitmsg(struct skd_device *skdev,
22602263
qcmd = skspcl->mb_dma_address;
22612264
qcmd |= FIT_QCMD_QID_NORMAL + FIT_QCMD_MSGSIZE_128;
22622265

2266+
/* Make sure skd_msg_buf is written before the doorbell is triggered. */
2267+
smp_wmb();
2268+
22632269
SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND);
22642270
}
22652271

0 commit comments

Comments
 (0)