Straightforward conversion, but we have to make use of
SG_MAP_MUST_NOT_FAIL which may BUG_ON in certain cases
in the future.

Signed-off-by: Logan Gunthorpe <log...@deltatee.com>
Cc: Alex Dubov <oa...@yahoo.com>
---
 drivers/memstick/host/jmb38x_ms.c | 11 ++++++-----
 drivers/memstick/host/tifm_ms.c   | 11 ++++++-----
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/memstick/host/jmb38x_ms.c 
b/drivers/memstick/host/jmb38x_ms.c
index 48db922..9019e37 100644
--- a/drivers/memstick/host/jmb38x_ms.c
+++ b/drivers/memstick/host/jmb38x_ms.c
@@ -303,7 +303,6 @@ static int jmb38x_ms_transfer_data(struct jmb38x_ms_host 
*host)
        unsigned int off;
        unsigned int t_size, p_cnt;
        unsigned char *buf;
-       struct page *pg;
        unsigned long flags = 0;
 
        if (host->req->long_data) {
@@ -318,14 +317,14 @@ static int jmb38x_ms_transfer_data(struct jmb38x_ms_host 
*host)
                unsigned int uninitialized_var(p_off);
 
                if (host->req->long_data) {
-                       pg = nth_page(sg_page(&host->req->sg),
-                                     off >> PAGE_SHIFT);
                        p_off = offset_in_page(off);
                        p_cnt = PAGE_SIZE - p_off;
                        p_cnt = min(p_cnt, length);
 
                        local_irq_save(flags);
-                       buf = kmap_atomic(pg) + p_off;
+                       buf = sg_map(&host->req->sg,
+                                    off - host->req->sg.offset,
+                                    SG_KMAP_ATOMIC | SG_MAP_MUST_NOT_FAIL);
                } else {
                        buf = host->req->data + host->block_pos;
                        p_cnt = host->req->data_len - host->block_pos;
@@ -341,7 +340,9 @@ static int jmb38x_ms_transfer_data(struct jmb38x_ms_host 
*host)
                                 : jmb38x_ms_read_reg_data(host, buf, p_cnt);
 
                if (host->req->long_data) {
-                       kunmap_atomic(buf - p_off);
+                       sg_unmap(&host->req->sg, buf,
+                                off - host->req->sg.offset,
+                                SG_KMAP_ATOMIC);
                        local_irq_restore(flags);
                }
 
diff --git a/drivers/memstick/host/tifm_ms.c b/drivers/memstick/host/tifm_ms.c
index 7bafa72..304985d 100644
--- a/drivers/memstick/host/tifm_ms.c
+++ b/drivers/memstick/host/tifm_ms.c
@@ -186,7 +186,6 @@ static unsigned int tifm_ms_transfer_data(struct tifm_ms 
*host)
        unsigned int off;
        unsigned int t_size, p_cnt;
        unsigned char *buf;
-       struct page *pg;
        unsigned long flags = 0;
 
        if (host->req->long_data) {
@@ -203,14 +202,14 @@ static unsigned int tifm_ms_transfer_data(struct tifm_ms 
*host)
                unsigned int uninitialized_var(p_off);
 
                if (host->req->long_data) {
-                       pg = nth_page(sg_page(&host->req->sg),
-                                     off >> PAGE_SHIFT);
                        p_off = offset_in_page(off);
                        p_cnt = PAGE_SIZE - p_off;
                        p_cnt = min(p_cnt, length);
 
                        local_irq_save(flags);
-                       buf = kmap_atomic(pg) + p_off;
+                       buf = sg_map(&host->req->sg,
+                                    off - host->req->sg.offset,
+                                    SG_KMAP_ATOMIC | SG_MAP_MUST_NOT_FAIL);
                } else {
                        buf = host->req->data + host->block_pos;
                        p_cnt = host->req->data_len - host->block_pos;
@@ -221,7 +220,9 @@ static unsigned int tifm_ms_transfer_data(struct tifm_ms 
*host)
                         : tifm_ms_read_data(host, buf, p_cnt);
 
                if (host->req->long_data) {
-                       kunmap_atomic(buf - p_off);
+                       sg_unmap(&host->req->sg, buf,
+                                off - host->req->sg.offset,
+                                SG_KMAP_ATOMIC | SG_MAP_MUST_NOT_FAIL);
                        local_irq_restore(flags);
                }
 
-- 
2.1.4

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to