* [PATCHv2 2/2] ibmvscsi: Add memory barriers for send / receive
@ 2014-05-23 15:52 Brian King
2014-05-27 13:56 ` Nathan Fontenot
0 siblings, 1 reply; 2+ messages in thread
From: Brian King @ 2014-05-23 15:52 UTC (permalink / raw)
To: James.Bottomley; +Cc: linux-scsi, nfont, brking
Add a memory barrier prior to sending a new command to the VIOS
to ensure the VIOS does not receive stale data in the command buffer.
Also add a memory barrier when processing the CRQ for completed commands.
Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
---
drivers/scsi/ibmvscsi/ibmvscsi.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff -puN drivers/scsi/ibmvscsi/ibmvscsi.c~ibmvscsi_barrier drivers/scsi/ibmvscsi/ibmvscsi.c
--- linux/drivers/scsi/ibmvscsi/ibmvscsi.c~ibmvscsi_barrier 2014-05-23 10:41:35.000000000 -0500
+++ linux-bjking1/drivers/scsi/ibmvscsi/ibmvscsi.c 2014-05-23 10:42:53.000000000 -0500
@@ -185,6 +185,11 @@ static struct viosrp_crq *crq_queue_next
if (crq->valid & 0x80) {
if (++queue->cur == queue->size)
queue->cur = 0;
+
+ /* Ensure the read of the valid bit occurs before reading any
+ * other bits of the CRQ entry
+ */
+ rmb();
} else
crq = NULL;
spin_unlock_irqrestore(&queue->lock, flags);
@@ -203,6 +208,11 @@ static int ibmvscsi_send_crq(struct ibmv
{
struct vio_dev *vdev = to_vio_dev(hostdata->dev);
+ /*
+ * Ensure the command buffer is flushed to memory before handing it
+ * over to the VIOS to prevent it from fetching any stale data.
+ */
+ mb();
return plpar_hcall_norets(H_SEND_CRQ, vdev->unit_address, word1, word2);
}
_
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCHv2 2/2] ibmvscsi: Add memory barriers for send / receive
2014-05-23 15:52 [PATCHv2 2/2] ibmvscsi: Add memory barriers for send / receive Brian King
@ 2014-05-27 13:56 ` Nathan Fontenot
0 siblings, 0 replies; 2+ messages in thread
From: Nathan Fontenot @ 2014-05-27 13:56 UTC (permalink / raw)
To: Brian King, James.Bottomley; +Cc: linux-scsi
On 05/23/2014 10:52 AM, Brian King wrote:
> Add a memory barrier prior to sending a new command to the VIOS
> to ensure the VIOS does not receive stale data in the command buffer.
> Also add a memory barrier when processing the CRQ for completed commands.
>
> Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Acked-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
> ---
>
> drivers/scsi/ibmvscsi/ibmvscsi.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff -puN drivers/scsi/ibmvscsi/ibmvscsi.c~ibmvscsi_barrier drivers/scsi/ibmvscsi/ibmvscsi.c
> --- linux/drivers/scsi/ibmvscsi/ibmvscsi.c~ibmvscsi_barrier 2014-05-23 10:41:35.000000000 -0500
> +++ linux-bjking1/drivers/scsi/ibmvscsi/ibmvscsi.c 2014-05-23 10:42:53.000000000 -0500
> @@ -185,6 +185,11 @@ static struct viosrp_crq *crq_queue_next
> if (crq->valid & 0x80) {
> if (++queue->cur == queue->size)
> queue->cur = 0;
> +
> + /* Ensure the read of the valid bit occurs before reading any
> + * other bits of the CRQ entry
> + */
> + rmb();
> } else
> crq = NULL;
> spin_unlock_irqrestore(&queue->lock, flags);
> @@ -203,6 +208,11 @@ static int ibmvscsi_send_crq(struct ibmv
> {
> struct vio_dev *vdev = to_vio_dev(hostdata->dev);
>
> + /*
> + * Ensure the command buffer is flushed to memory before handing it
> + * over to the VIOS to prevent it from fetching any stale data.
> + */
> + mb();
> return plpar_hcall_norets(H_SEND_CRQ, vdev->unit_address, word1, word2);
> }
>
> _
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-05-27 13:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-23 15:52 [PATCHv2 2/2] ibmvscsi: Add memory barriers for send / receive Brian King
2014-05-27 13:56 ` Nathan Fontenot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).