Straightforward conversion to the new helper, except due to
the lack of error path, we have to warn if unmapable memory
is ever present in the sgl.

Signed-off-by: Logan Gunthorpe <log...@deltatee.com>
---
 drivers/block/xen-blkfront.c | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 5067a0a..7dcf41d 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -807,8 +807,19 @@ static int blkif_queue_rw_req(struct request *req, struct 
blkfront_ring_info *ri
                BUG_ON(sg->offset + sg->length > PAGE_SIZE);
 
                if (setup.need_copy) {
-                       setup.bvec_off = sg->offset;
-                       setup.bvec_data = kmap_atomic(sg_page(sg));
+                       setup.bvec_off = 0;
+                       setup.bvec_data = sg_map(sg, SG_KMAP_ATOMIC);
+                       if (IS_ERR(setup.bvec_data)) {
+                               /*
+                                * This should really never happen unless
+                                * the code is changed to use memory that is
+                                * not mappable in the sg. Seeing there is a
+                                * questionable error path out of here,
+                                * we WARN.
+                                */
+                               WARN(1, "Non-mappable memory used in sg!");
+                               return 1;
+                       }
                }
 
                gnttab_foreach_grant_in_range(sg_page(sg),
@@ -818,7 +829,7 @@ static int blkif_queue_rw_req(struct request *req, struct 
blkfront_ring_info *ri
                                              &setup);
 
                if (setup.need_copy)
-                       kunmap_atomic(setup.bvec_data);
+                       sg_unmap(sg, setup.bvec_data, SG_KMAP_ATOMIC);
        }
        if (setup.segments)
                kunmap_atomic(setup.segments);
@@ -1468,8 +1479,18 @@ static bool blkif_completion(unsigned long *id,
                for_each_sg(s->sg, sg, num_sg, i) {
                        BUG_ON(sg->offset + sg->length > PAGE_SIZE);
 
-                       data.bvec_offset = sg->offset;
-                       data.bvec_data = kmap_atomic(sg_page(sg));
+                       data.bvec_offset = 0;
+                       data.bvec_data = sg_map(sg, SG_KMAP_ATOMIC);
+                       if (IS_ERR(data.bvec_data)) {
+                               /*
+                                * This should really never happen unless
+                                * the code is changed to use memory that is
+                                * not mappable in the sg. Seeing there is no
+                                * clear error path, we WARN.
+                                */
+                               WARN(1, "Non-mappable memory used in sg!");
+                               return 1;
+                       }
 
                        gnttab_foreach_grant_in_range(sg_page(sg),
                                                      sg->offset,
@@ -1477,7 +1498,7 @@ static bool blkif_completion(unsigned long *id,
                                                      blkif_copy_from_grant,
                                                      &data);
 
-                       kunmap_atomic(data.bvec_data);
+                       sg_unmap(sg, data.bvec_data, SG_KMAP_ATOMIC);
                }
        }
        /* Add the persistent grant into the list of free grants */
-- 
2.1.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to