Messages in this thread Patch in this message | | | Date | Fri, 15 Nov 2013 23:05:29 +0100 | From | Helge Deller <> | Subject | [PATCH] aio: fix D-cache aliasing issues |
| |
When a user page mapping is released via kunmap*() functions, the D-cache needs to be flushed via flush_dcache_page() to avoid D-cache aliasing issues.
This patch fixes aio on the parisc platform (and probably others).
Signed-off-by: Helge Deller <deller@gmx.de> To: Benjamin LaHaise <bcrl@kvack.org> To: linux-aio@kvack.org Cc: stable@vger.kernel.org # 3.12+
diff --git a/fs/aio.c b/fs/aio.c index 823efcb..2181821 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -514,6 +514,7 @@ static void free_ioctx(struct work_struct *work) atomic_add(avail, &ctx->reqs_available); ring->head = ring->tail; kunmap_atomic(ring); + flush_dcache_page(ctx->ring_pages[0]); if (atomic_read(&ctx->reqs_available) >= ctx->nr_events - 1) break; @@ -568,6 +569,7 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm) ring = kmap_atomic(ctx->ring_pages[0]); ring->id = ctx->id; kunmap_atomic(ring); + flush_dcache_page(ctx->ring_pages[0]); return 0; } @@ -1032,6 +1034,7 @@ static long aio_read_events_ring(struct kioctx *ctx, head = ring->head; tail = ring->tail; kunmap_atomic(ring); + flush_dcache_page(ctx->ring_pages[0]); pr_debug("h%u t%u m%u\n", head, tail, ctx->nr_events);
| |