Re: [patch][9/9] block: remove bio walking

From: Jens Axboe
Date: Thu Sep 09 2004 - 11:01:19 EST


On Thu, Sep 09 2004, Jens Axboe wrote:
> On Thu, Sep 09 2004, Russell King wrote:
> > Essentially, kernel PIO writes data into the page cache, and that action
> > may leave data in the CPU's caches. Since the kernels mappings may not
> > be coherent with mappings in userspace, data written to the kernel
> > mappings may remain in the data cache, and stale data would be visible
> > to user space.
> >
> > There has been talk about using flush_dcache_page() to resolve
> > this issue, but I'm not sure what the outcome was. Certainly
> > flush_dcache_page() is supposed to be used before the data in the
> > kernels page cache is read or written.
>
> Have you ever tested bouncing on arm? It seems to be lacking a
> flush_dcache_page() indeed, how does this look?
>
> ===== mm/highmem.c 1.51 vs edited =====
> --- 1.51/mm/highmem.c 2004-07-29 06:58:32 +02:00
> +++ edited/mm/highmem.c 2004-09-09 17:44:14 +02:00
> @@ -301,6 +301,7 @@
> vfrom = page_address(fromvec->bv_page) + tovec->bv_offset;
>
> bounce_copy_vec(tovec, vfrom);
> + flush_dcache_page(tovec->bv_page);
> }
> }

Not even enough, here's a better one.

===== mm/highmem.c 1.51 vs edited =====
--- 1.51/mm/highmem.c 2004-07-29 06:58:32 +02:00
+++ edited/mm/highmem.c 2004-09-09 17:47:58 +02:00
@@ -300,6 +300,7 @@
*/
vfrom = page_address(fromvec->bv_page) + tovec->bv_offset;

+ flush_dcache_page(tovec->bv_page);
bounce_copy_vec(tovec, vfrom);
}
}
@@ -406,6 +407,7 @@
if (rw == WRITE) {
char *vto, *vfrom;

+ flush_dcache_page(from->bv_page);
vto = page_address(to->bv_page) + to->bv_offset;
vfrom = kmap(from->bv_page) + from->bv_offset;
memcpy(vto, vfrom, to->bv_len);

--
Jens Axboe

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/