[PATCH] aacraid: add cpu cache flush after kmapping and modifying a page

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Updated patch to address overlap with patches introduced by FUJITA
Tomonori <fujita.tomonori@xxxxxxxxxxxxx>. Tejun, please inspect.

This attached aacraid specific portion of the patch is against current
scsi-misc-2.6.

ObligatoryDisclaimer: Please accept my condolences regarding Outlook's
handling of patch content.

Signed-off-by: Mark Salyzyn <aacraid@xxxxxxxxxxx>

 drivers/scsi/aacraid/aachba.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Sincerely -- Mark Salyzyn

> -----Original Message-----
> From: linux-scsi-owner@xxxxxxxxxxxxxxx 
> [mailto:linux-scsi-owner@xxxxxxxxxxxxxxx] On Behalf Of Salyzyn, Mark
> Sent: Tuesday, May 29, 2007 12:54 PM
> To: James Bottomley; Tejun Heo
> Cc: linux-scsi@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH 4/5] SCSI: add cpu cache flushes after 
> kmapping and modifying a page
> 
> 
> What ever became of the following patch? I have enclosed the 
> incremental
> aacraid version of this patch to permit closure if the following was
> rejected because of another portion.
> 
> This attached aacraid specific portion of the patch is against current
> scsi-misc-2.6.
> 
> ObligatoryDisclaimer: Please accept my condolences regarding Outlook's
> handling of patch content.
> 
> Signed-off-by: Mark Salyzyn <aacraid@xxxxxxxxxxx>
> 
> Sincerely -- Mark Salyzyn
> 
> -----Original Message-----
> From: linux-scsi-owner@xxxxxxxxxxxxxxx
> [mailto:linux-scsi-owner@xxxxxxxxxxxxxxx] On Behalf Of Tejun Heo
> Sent: Saturday, June 03, 2006 11:41 PM
> To: Jens Axboe; James Bottomley; Dave Miller; bzolnier@xxxxxxxxx;
> james.steward@xxxxxxxxxxxxxxxxxx; jgarzik@xxxxxxxxx;
> mattjreimer@xxxxxxxxx; Guennadi Liakhovetski; rmk@xxxxxxxxxxxxxxxx;
> lkml; linux-ide@xxxxxxxxxxxxxxx; linux-scsi@xxxxxxxxxxxxxxx;
> htejun@xxxxxxxxx
> Cc: Tejun Heo
> Subject: [PATCH 4/5] SCSI: add cpu cache flushes after kmapping and
> modifying a page
> 
> 
> 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 <htejun@xxxxxxxxx>
> 
> ---
> 
>  drivers/scsi/3w-9xxx.c        |    1 +
>  drivers/scsi/3w-xxxx.c        |    1 +
>  drivers/scsi/aacraid/aachba.c |    4 +++-
>  drivers/scsi/ide-scsi.c       |    1 +
>  drivers/scsi/ips.c            |    2 ++
>  drivers/scsi/iscsi_tcp.c      |    1 +
>  drivers/scsi/megaraid.c       |    2 ++
>  drivers/scsi/qlogicpti.c      |    1 +
>  drivers/scsi/scsi_debug.c     |    1 +
>  drivers/scsi/scsi_lib.c       |    1 +
>  10 files changed, 14 insertions(+), 1 deletions(-)
> 
> 9b4bdd1409efb726d4a6561a4f7e2aff878ab4f4
> diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
> index caeb6d2..172f16b 100644
> --- a/drivers/scsi/3w-9xxx.c
> +++ b/drivers/scsi/3w-9xxx.c
> @@ -1948,6 +1948,7 @@ static void twa_scsiop_execute_scsi_comp
>  			local_irq_save(flags);
>  			buf = kmap_atomic(sg->page, KM_IRQ0) +
> sg->offset;
>  			memcpy(buf,
> tw_dev->generic_buffer_virt[request_id], sg->length);
> +			flush_kernel_dcache_page(kmap_atomic_to_page(buf
> - sg->offset));
>  			kunmap_atomic(buf - sg->offset, KM_IRQ0);
>  			local_irq_restore(flags);
>  		}
> diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
> index e8e41e6..8449551 100644
> --- a/drivers/scsi/3w-xxxx.c
> +++ b/drivers/scsi/3w-xxxx.c
> @@ -1527,6 +1527,7 @@ static void tw_transfer_internal(TW_Devi
>  		struct scatterlist *sg;
>  
>  		sg = (struct scatterlist *)cmd->request_buffer;
> +		flush_kernel_dcache_page(kmap_atomic_to_page(buf -
> sg->offset));
>  		kunmap_atomic(buf - sg->offset, KM_IRQ0);
>  		local_irq_restore(flags);
>  	}
> diff --git a/drivers/scsi/aacraid/aachba.c
> b/drivers/scsi/aacraid/aachba.c
> index 642a3b4..b7c00b8 100644
> --- a/drivers/scsi/aacraid/aachba.c
> +++ b/drivers/scsi/aacraid/aachba.c
> @@ -376,8 +376,10 @@ static void aac_internal_transfer(struct
>  
>  	memcpy(buf + offset, data, transfer_len - offset);
>  
> -	if (scsicmd->use_sg) 
> +	if (scsicmd->use_sg) {
> +		flush_kernel_dcache_page(kmap_atomic_to_page(buf -
> sg->offset));
>  		kunmap_atomic(buf - sg->offset, KM_IRQ0);
> +	}
>  
>  }
>  
> diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
> index 39b760a..9c28b95 100644
> --- a/drivers/scsi/ide-scsi.c
> +++ b/drivers/scsi/ide-scsi.c
> @@ -189,6 +189,7 @@ static void idescsi_input_buffers (ide_d
>  					pc->sg->offset;
>  			drive->hwif->atapi_input_bytes(drive,
>  						buf + pc->b_count,
> count);
> +			flush_kernel_dcache_page(kmap_atomic_to_page(buf
> - pc->sg->offset));
>  			kunmap_atomic(buf - pc->sg->offset, KM_IRQ0);
>  			local_irq_restore(flags);
>  		} else {
> diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
> index a4c0b04..29eb3f0 100644
> --- a/drivers/scsi/ips.c
> +++ b/drivers/scsi/ips.c
> @@ -3682,6 +3682,8 @@ ips_scmd_buf_write(Scsi_Cmnd * scmd, voi
>  			local_irq_save(flags);
>  			buffer = kmap_atomic(sg[i].page, KM_IRQ0) +
> sg[i].offset;
>  			memcpy(buffer, &cdata[xfer_cnt], min_cnt);
> +                        flush_kernel_dcache_page(
> +                                kmap_atomic_to_page(buffer -
> sg[i].offset));
>  			kunmap_atomic(buffer - sg[i].offset, KM_IRQ0);
>  			local_irq_restore(flags);
>  
> diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
> index 2068b66..ae9784c 100644
> --- a/drivers/scsi/iscsi_tcp.c
> +++ b/drivers/scsi/iscsi_tcp.c
> @@ -945,6 +945,7 @@ static int iscsi_scsi_data_in(struct isc
>  		dest = kmap_atomic(sg[i].page, KM_SOFTIRQ0);
>  		rc = iscsi_ctask_copy(conn, ctask, dest + sg[i].offset,
>  				      sg[i].length, offset);
> +		flush_kernel_dcache_page(kmap_atomic_to_page(dest));
>  		kunmap_atomic(dest, KM_SOFTIRQ0);
>  		if (rc == -EAGAIN)
>  			/* continue with the next SKB/PDU */
> diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
> index de35ffe..7cb7590 100644
> --- a/drivers/scsi/megaraid.c
> +++ b/drivers/scsi/megaraid.c
> @@ -671,6 +671,8 @@ #endif
>  				struct scatterlist *sg;
>  
>  				sg = (struct scatterlist
> *)cmd->request_buffer;
> +				flush_kernel_dcache_page(
> +					kmap_atomic_to_page(buf -
> sg->offset));
>  				kunmap_atomic(buf - sg->offset,
> KM_IRQ0);
>  			}
>  			cmd->result = (DID_OK << 16);
> diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
> index c7e78dc..f8201f2 100644
> --- a/drivers/scsi/qlogicpti.c
> +++ b/drivers/scsi/qlogicpti.c
> @@ -1146,6 +1146,7 @@ static void scsi_rbuf_put(struct scsi_cm
>  		struct scatterlist *sg;
>  
>  		sg = (struct scatterlist *) cmd->request_buffer;
> +		flush_kernel_dcache_page(kmap_atomic_to_page(buf -
> sg->offset));
>  		kunmap_atomic(buf - sg->offset, KM_IRQ0);
>  	}
>  }
> diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
> index 5a5d2af..88543db 100644
> --- a/drivers/scsi/scsi_debug.c
> +++ b/drivers/scsi/scsi_debug.c
> @@ -511,6 +511,7 @@ static int fill_from_dev_buffer(struct s
>  				len = arr_len - req_len;
>  			}
>  			memcpy(kaddr_off, arr + req_len, len);
> +
> flush_kernel_dcache_page(kmap_atomic_to_page(kaddr));
>  			kunmap_atomic(kaddr, KM_USER0);
>  			act_len += len;
>  		}
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 764a8b3..8bb2f6c 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -945,6 +945,7 @@ void scsi_io_completion(struct scsi_cmnd
>  			unsigned long flags;
>  			char *to = bio_kmap_irq(req->bio, &flags);
>  			memcpy(to, cmd->buffer, cmd->bufflen);
> +
> flush_kernel_dcache_page(kmap_atomic_to_page(to));
>  			bio_kunmap_irq(to, &flags);
>  		}
>  		kfree(cmd->buffer);
> -- 
> 1.3.2
> 

Attachment: aacraid_flush_dcache2.patch
Description: aacraid_flush_dcache2.patch


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux