145 lines
4.5 KiB
Diff
145 lines
4.5 KiB
Diff
From: Cong Wang <amwang@redhat.com>
|
|
Date: Fri, 25 Nov 2011 23:14:24 +0800
|
|
Subject: [PATCH 77/77] hv: remove the second argument of k[un]map_atomic()
|
|
|
|
commit 86cbce4de23f26f1aee8df789d30b0f1ba78c967 upstream.
|
|
|
|
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
Signed-off-by: Cong Wang <amwang@redhat.com>
|
|
[bwh: Adjust filename to apply after move to drivers/scsi; apply changes
|
|
from Linux's merge commit 9f3938346a5c1fa504647670edb5fea5756cfb00.]
|
|
---
|
|
drivers/scsi/storvsc_drv.c | 52 ++++++++++++++++++++++----------------------
|
|
1 file changed, 26 insertions(+), 26 deletions(-)
|
|
|
|
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
|
|
index 695ffc3..83a1972 100644
|
|
--- a/drivers/scsi/storvsc_drv.c
|
|
+++ b/drivers/scsi/storvsc_drv.c
|
|
@@ -481,6 +481,19 @@ cleanup:
|
|
return NULL;
|
|
}
|
|
|
|
+/* Disgusting wrapper functions */
|
|
+static inline unsigned long sg_kmap_atomic(struct scatterlist *sgl, int idx)
|
|
+{
|
|
+ void *addr = kmap_atomic(sg_page(sgl + idx));
|
|
+ return (unsigned long)addr;
|
|
+}
|
|
+
|
|
+static inline void sg_kunmap_atomic(unsigned long addr)
|
|
+{
|
|
+ kunmap_atomic((void *)addr);
|
|
+}
|
|
+
|
|
+
|
|
/* Assume the original sgl has enough room */
|
|
static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
|
|
struct scatterlist *bounce_sgl,
|
|
@@ -499,15 +512,12 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
|
|
local_irq_save(flags);
|
|
|
|
for (i = 0; i < orig_sgl_count; i++) {
|
|
- dest_addr = (unsigned long)kmap_atomic(sg_page((&orig_sgl[i])),
|
|
- KM_IRQ0) + orig_sgl[i].offset;
|
|
+ dest_addr = sg_kmap_atomic(orig_sgl,i) + orig_sgl[i].offset;
|
|
dest = dest_addr;
|
|
destlen = orig_sgl[i].length;
|
|
|
|
if (bounce_addr == 0)
|
|
- bounce_addr =
|
|
- (unsigned long)kmap_atomic(sg_page((&bounce_sgl[j])),
|
|
- KM_IRQ0);
|
|
+ bounce_addr = sg_kmap_atomic(bounce_sgl,j);
|
|
|
|
while (destlen) {
|
|
src = bounce_addr + bounce_sgl[j].offset;
|
|
@@ -523,7 +533,7 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
|
|
|
|
if (bounce_sgl[j].offset == bounce_sgl[j].length) {
|
|
/* full */
|
|
- kunmap_atomic((void *)bounce_addr, KM_IRQ0);
|
|
+ sg_kunmap_atomic(bounce_addr);
|
|
j++;
|
|
|
|
/*
|
|
@@ -537,26 +547,21 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl,
|
|
/*
|
|
* We are done; cleanup and return.
|
|
*/
|
|
- kunmap_atomic((void *)(dest_addr -
|
|
- orig_sgl[i].offset),
|
|
- KM_IRQ0);
|
|
+ sg_kunmap_atomic(dest_addr - orig_sgl[i].offset);
|
|
local_irq_restore(flags);
|
|
return total_copied;
|
|
}
|
|
|
|
/* if we need to use another bounce buffer */
|
|
if (destlen || i != orig_sgl_count - 1)
|
|
- bounce_addr =
|
|
- (unsigned long)kmap_atomic(
|
|
- sg_page((&bounce_sgl[j])), KM_IRQ0);
|
|
+ bounce_addr = sg_kmap_atomic(bounce_sgl,j);
|
|
} else if (destlen == 0 && i == orig_sgl_count - 1) {
|
|
/* unmap the last bounce that is < PAGE_SIZE */
|
|
- kunmap_atomic((void *)bounce_addr, KM_IRQ0);
|
|
+ sg_kunmap_atomic(bounce_addr);
|
|
}
|
|
}
|
|
|
|
- kunmap_atomic((void *)(dest_addr - orig_sgl[i].offset),
|
|
- KM_IRQ0);
|
|
+ sg_kunmap_atomic(dest_addr - orig_sgl[i].offset);
|
|
}
|
|
|
|
local_irq_restore(flags);
|
|
@@ -581,15 +586,12 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl,
|
|
local_irq_save(flags);
|
|
|
|
for (i = 0; i < orig_sgl_count; i++) {
|
|
- src_addr = (unsigned long)kmap_atomic(sg_page((&orig_sgl[i])),
|
|
- KM_IRQ0) + orig_sgl[i].offset;
|
|
+ src_addr = sg_kmap_atomic(orig_sgl,i) + orig_sgl[i].offset;
|
|
src = src_addr;
|
|
srclen = orig_sgl[i].length;
|
|
|
|
if (bounce_addr == 0)
|
|
- bounce_addr =
|
|
- (unsigned long)kmap_atomic(sg_page((&bounce_sgl[j])),
|
|
- KM_IRQ0);
|
|
+ bounce_addr = sg_kmap_atomic(bounce_sgl,j);
|
|
|
|
while (srclen) {
|
|
/* assume bounce offset always == 0 */
|
|
@@ -606,22 +608,20 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl,
|
|
|
|
if (bounce_sgl[j].length == PAGE_SIZE) {
|
|
/* full..move to next entry */
|
|
- kunmap_atomic((void *)bounce_addr, KM_IRQ0);
|
|
+ sg_kunmap_atomic(bounce_addr);
|
|
j++;
|
|
|
|
/* if we need to use another bounce buffer */
|
|
if (srclen || i != orig_sgl_count - 1)
|
|
- bounce_addr =
|
|
- (unsigned long)kmap_atomic(
|
|
- sg_page((&bounce_sgl[j])), KM_IRQ0);
|
|
+ bounce_addr = sg_kmap_atomic(bounce_sgl,j);
|
|
|
|
} else if (srclen == 0 && i == orig_sgl_count - 1) {
|
|
/* unmap the last bounce that is < PAGE_SIZE */
|
|
- kunmap_atomic((void *)bounce_addr, KM_IRQ0);
|
|
+ sg_kunmap_atomic(bounce_addr);
|
|
}
|
|
}
|
|
|
|
- kunmap_atomic((void *)(src_addr - orig_sgl[i].offset), KM_IRQ0);
|
|
+ sg_kunmap_atomic(src_addr - orig_sgl[i].offset);
|
|
}
|
|
|
|
local_irq_restore(flags);
|
|
--
|
|
1.7.9.5
|
|
|