[PATCH 4.12 049/106] tcmu: Fix flushing cmd entry dcache page

2017-08-09 Thread Greg Kroah-Hartman
4.12-stable review patch.  If anyone has any objections, please let me know.

--

From: Xiubo Li 

commit 9d62bc0e6d79b11e3298e831358155930fb8f5e3 upstream.

When feeding the tcmu's cmd ring, we need to flush the dcache page
for the cmd entry to make sure these kernel stores are visible to
user space mappings of that page.

For the none PAD cmd entry, this will be flushed at the end of the
tcmu_queue_cmd_ring().

Signed-off-by: Xiubo Li 
Reviewed-by: Mike Christie 
Signed-off-by: Nicholas Bellinger 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/target/target_core_user.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -699,21 +699,21 @@ tcmu_queue_cmd_ring(struct tcmu_cmd *tcm
size_t pad_size = head_to_end(cmd_head, udev->cmdr_size);
 
entry = (void *) mb + CMDR_OFF + cmd_head;
-   tcmu_flush_dcache_range(entry, sizeof(*entry));
tcmu_hdr_set_op(>hdr.len_op, TCMU_OP_PAD);
tcmu_hdr_set_len(>hdr.len_op, pad_size);
entry->hdr.cmd_id = 0; /* not used for PAD */
entry->hdr.kflags = 0;
entry->hdr.uflags = 0;
+   tcmu_flush_dcache_range(entry, sizeof(*entry));
 
UPDATE_HEAD(mb->cmd_head, pad_size, udev->cmdr_size);
+   tcmu_flush_dcache_range(mb, sizeof(*mb));
 
cmd_head = mb->cmd_head % udev->cmdr_size; /* UAM */
WARN_ON(cmd_head != 0);
}
 
entry = (void *) mb + CMDR_OFF + cmd_head;
-   tcmu_flush_dcache_range(entry, sizeof(*entry));
tcmu_hdr_set_op(>hdr.len_op, TCMU_OP_CMD);
entry->hdr.cmd_id = tcmu_cmd->cmd_id;
entry->hdr.kflags = 0;




[PATCH 4.12 049/106] tcmu: Fix flushing cmd entry dcache page

2017-08-09 Thread Greg Kroah-Hartman
4.12-stable review patch.  If anyone has any objections, please let me know.

--

From: Xiubo Li 

commit 9d62bc0e6d79b11e3298e831358155930fb8f5e3 upstream.

When feeding the tcmu's cmd ring, we need to flush the dcache page
for the cmd entry to make sure these kernel stores are visible to
user space mappings of that page.

For the none PAD cmd entry, this will be flushed at the end of the
tcmu_queue_cmd_ring().

Signed-off-by: Xiubo Li 
Reviewed-by: Mike Christie 
Signed-off-by: Nicholas Bellinger 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/target/target_core_user.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -699,21 +699,21 @@ tcmu_queue_cmd_ring(struct tcmu_cmd *tcm
size_t pad_size = head_to_end(cmd_head, udev->cmdr_size);
 
entry = (void *) mb + CMDR_OFF + cmd_head;
-   tcmu_flush_dcache_range(entry, sizeof(*entry));
tcmu_hdr_set_op(>hdr.len_op, TCMU_OP_PAD);
tcmu_hdr_set_len(>hdr.len_op, pad_size);
entry->hdr.cmd_id = 0; /* not used for PAD */
entry->hdr.kflags = 0;
entry->hdr.uflags = 0;
+   tcmu_flush_dcache_range(entry, sizeof(*entry));
 
UPDATE_HEAD(mb->cmd_head, pad_size, udev->cmdr_size);
+   tcmu_flush_dcache_range(mb, sizeof(*mb));
 
cmd_head = mb->cmd_head % udev->cmdr_size; /* UAM */
WARN_ON(cmd_head != 0);
}
 
entry = (void *) mb + CMDR_OFF + cmd_head;
-   tcmu_flush_dcache_range(entry, sizeof(*entry));
tcmu_hdr_set_op(>hdr.len_op, TCMU_OP_CMD);
entry->hdr.cmd_id = tcmu_cmd->cmd_id;
entry->hdr.kflags = 0;