On Fri, 14 Apr 2006, James Bottomley wrote: > On Sun, 2006-04-02 at 21:57 +0200, Guennadi Liakhovetski wrote: > > + if (fc == 0x40 && > > (srb->dcb->sync_period & WIDE_SYNC)) { > > + /* Read the last byte ... */ > > + if (srb->total_xfer_length > > > 0) { > > + u8 byte = > > DC395x_read8(acb, TRM_S1040_SCSI_FIFO); > > + > > + *virt++ = byte; > > + srb->total_xfer_length--; > > + if > > (debug_enabled(DBG_PIO)) > > + printk(" % > > 02x", byte); > > + } > > + > > + DC395x_write8(acb, > > TRM_S1040_SCSI_CONFIG2, 0); > > + } > > + > > + if (srb->cmd->use_sg) { > > + scsi_kunmap_atomic_sg(base); > > I put this in, but just a warning here. You're modifying a kmapped > page, so you need to call flush_kernel_dcache_page() before unmapping it > otherwise user space may not see the change on VIPT or VIVT CPU (the > data may be in a non congruent cache line). Does the patch below get it right? Thanks Guennadi --- Guennadi Liakhovetski Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@xxxxxx> diff -ur a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c --- a/drivers/scsi/dc395x.c 2006-04-20 00:42:12.000000000 +0200 +++ b/drivers/scsi/dc395x.c 2006-04-20 00:41:58.000000000 +0200 @@ -2343,6 +2343,7 @@ } if (srb->cmd->use_sg) { + flush_kernel_dcache_page(kmap_atomic_to_page(base)); scsi_kunmap_atomic_sg(base); local_irq_restore(flags); } - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html