From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tejun Heo Subject: [PATCH 2/5] ide: add cpu cache flushes after kmapping and modifying a page Date: Sun, 4 Jun 2006 12:41:20 +0900 Message-ID: <1149392480987-git-send-email-htejun@gmail.com> References: <1149392479501-git-send-email-htejun@gmail.com> Reply-To: Tejun Heo Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7BIT Return-path: Received: from nz-out-0102.google.com ([64.233.162.193]:43792 "EHLO nz-out-0102.google.com") by vger.kernel.org with ESMTP id S1751482AbWFDDl1 (ORCPT ); Sat, 3 Jun 2006 23:41:27 -0400 Received: by nz-out-0102.google.com with SMTP id s18so933733nze for ; Sat, 03 Jun 2006 20:41:27 -0700 (PDT) In-Reply-To: <1149392479501-git-send-email-htejun@gmail.com> Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: Jens Axboe , James Bottomley , Dave Miller , bzolnier@gmail.com, james.steward@dynamicratings.com, jgarzik@pobox.com, mattjreimer@gmail.com, Guennadi Liakhovetski , rmk@arm.linux.org.uk, lkml , linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org Cc: Tejun Heo Add calls to flush_kernel_dcache_page() after CPU has kmapped and modified a page. This fixes PIO cache coherency bugs on architectures with aliased caches. Signed-off-by: Tejun Heo --- drivers/ide/ide-floppy.c | 1 + drivers/ide/ide-taskfile.c | 2 ++ 2 files changed, 3 insertions(+), 0 deletions(-) 861367f65bbbbc5c9f5d3a27aab91c587a3a9049 diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index a53e3ce..5be22c2 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c @@ -618,6 +618,7 @@ static void idefloppy_input_buffers (ide data = bvec_kmap_irq(bvec, &flags); drive->hwif->atapi_input_bytes(drive, data, count); + flush_kernel_dcache_page(kmap_atomic_to_page(data)); bvec_kunmap_irq(data, &flags); bcount -= count; diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index 9233b81..c183c07 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c @@ -294,6 +294,8 @@ #endif else taskfile_input_data(drive, buf, SECTOR_WORDS); + if (!write) + flush_kernel_dcache_page(kmap_atomic_to_page(buf)); kunmap_atomic(buf, KM_BIO_SRC_IRQ); #ifdef CONFIG_HIGHMEM local_irq_restore(flags); -- 1.3.2