public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [SCSI] scsi_lib: use correct DMA device in __scsi_alloc_queue
@ 2012-03-22  5:52 Lin Ming
  2012-03-22 11:24 ` Sergei Shtylyov
  0 siblings, 1 reply; 3+ messages in thread
From: Lin Ming @ 2012-03-22  5:52 UTC (permalink / raw)
  To: James E.J. Bottomley
  Cc: Jörg Sommer, Jeff Garzik, Tejun Heo, linux-scsi, linux-ide

Currently, __scsi_alloc_queue uses SCSI host's parent device
as DMA device to set segment boundary. But the parent device may not
refer to the DMA device. For example, for ATA disk, SCSI host's parent
device now refers to ATA port.

Since commit d139b9b([SCSI] scsi_lib_dma: fix bug with dma maps on
nested scsi objects), a new field Scsi_Host->dma_device was introduced
to refer to the real DMA device.

Use ->dma_device in __scsi_alloc_queue to correctly set segment
boundary.

And use scsi_add_host_with_dma in ata_scsi_add_hosts to pass in the
correct DMA device.

Bug report: http://marc.info/?l=linux-ide&m=133177818318187&w=2

Reported-and-tested-by: Jörg Sommer <joerg@alea.gnuu.de>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
---
 drivers/ata/libata-scsi.c |    3 ++-
 drivers/scsi/scsi_lib.c   |    2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 7ae1e77..e47f889 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -3398,7 +3398,8 @@ int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
 		 */
 		shost->max_host_blocked = 1;
 
-		rc = scsi_add_host(ap->scsi_host, &ap->tdev);
+		rc = scsi_add_host_with_dma(ap->scsi_host,
+						&ap->tdev, ap->host->dev);
 		if (rc)
 			goto err_add;
 	}
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index f85cfa6..486088b 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1642,7 +1642,7 @@ struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost,
 					 request_fn_proc *request_fn)
 {
 	struct request_queue *q;
-	struct device *dev = shost->shost_gendev.parent;
+	struct device *dev = shost->dma_dev;
 
 	q = blk_init_queue(request_fn, NULL);
 	if (!q)
-- 
1.7.2.5




^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] [SCSI] scsi_lib: use correct DMA device in __scsi_alloc_queue
  2012-03-22  5:52 [PATCH] [SCSI] scsi_lib: use correct DMA device in __scsi_alloc_queue Lin Ming
@ 2012-03-22 11:24 ` Sergei Shtylyov
  2012-03-22 15:28   ` Lin Ming
  0 siblings, 1 reply; 3+ messages in thread
From: Sergei Shtylyov @ 2012-03-22 11:24 UTC (permalink / raw)
  To: Lin Ming
  Cc: James E.J. Bottomley, Jörg Sommer, Jeff Garzik, Tejun Heo,
	linux-scsi, linux-ide

Hello.

On 22-03-2012 9:52, Lin Ming wrote:

> Currently, __scsi_alloc_queue uses SCSI host's parent device
> as DMA device to set segment boundary. But the parent device may not
> refer to the DMA device. For example, for ATA disk, SCSI host's parent
> device now refers to ATA port.

> Since commit d139b9b([SCSI] scsi_lib_dma: fix bug with dma maps on
> nested scsi objects), a new field Scsi_Host->dma_device was introduced

    Only the field is named 'dma_dev', isn't it?

> to refer to the real DMA device.

> Use ->dma_device in __scsi_alloc_queue to correctly set segment
> boundary.

> And use scsi_add_host_with_dma in ata_scsi_add_hosts to pass in the
> correct DMA device.

    Perhaps this should be split into two patches.

> Bug report: http://marc.info/?l=linux-ide&m=133177818318187&w=2

> Reported-and-tested-by: Jörg Sommer<joerg@alea.gnuu.de>
> Signed-off-by: Lin Ming<ming.m.lin@intel.com>
[...]

> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index f85cfa6..486088b 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -1642,7 +1642,7 @@ struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost,
>   					 request_fn_proc *request_fn)
>   {
>   	struct request_queue *q;
> -	struct device *dev = shost->shost_gendev.parent;
> +	struct device *dev = shost->dma_dev;
>
>   	q = blk_init_queue(request_fn, NULL);
>   	if (!q)

WBR, Sergei

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] [SCSI] scsi_lib: use correct DMA device in __scsi_alloc_queue
  2012-03-22 11:24 ` Sergei Shtylyov
@ 2012-03-22 15:28   ` Lin Ming
  0 siblings, 0 replies; 3+ messages in thread
From: Lin Ming @ 2012-03-22 15:28 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: James E.J. Bottomley, Jörg Sommer, Jeff Garzik, Tejun Heo,
	linux-scsi, linux-ide

On Thu, Mar 22, 2012 at 7:24 PM, Sergei Shtylyov <sshtylyov@mvista.com> wrote:
> Hello.
>
>
> On 22-03-2012 9:52, Lin Ming wrote:
>
>> Currently, __scsi_alloc_queue uses SCSI host's parent device
>> as DMA device to set segment boundary. But the parent device may not
>> refer to the DMA device. For example, for ATA disk, SCSI host's parent
>> device now refers to ATA port.
>
>
>> Since commit d139b9b([SCSI] scsi_lib_dma: fix bug with dma maps on
>> nested scsi objects), a new field Scsi_Host->dma_device was introduced
>
>
>   Only the field is named 'dma_dev', isn't it?

Yes, my typo.

>
>
>> to refer to the real DMA device.
>
>
>> Use ->dma_device in __scsi_alloc_queue to correctly set segment
>> boundary.
>
>
>> And use scsi_add_host_with_dma in ata_scsi_add_hosts to pass in the
>> correct DMA device.
>
>
>   Perhaps this should be split into two patches.

Good idea.

Will split and resend.

Thanks,
Lin Ming

>
>
>> Bug report: http://marc.info/?l=linux-ide&m=133177818318187&w=2
>
>
>> Reported-and-tested-by: Jörg Sommer<joerg@alea.gnuu.de>
>> Signed-off-by: Lin Ming<ming.m.lin@intel.com>
>
> [...]
>
>
>> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
>> index f85cfa6..486088b 100644
>> --- a/drivers/scsi/scsi_lib.c
>> +++ b/drivers/scsi/scsi_lib.c
>> @@ -1642,7 +1642,7 @@ struct request_queue *__scsi_alloc_queue(struct
>> Scsi_Host *shost,
>>                                         request_fn_proc *request_fn)
>>  {
>>        struct request_queue *q;
>> -       struct device *dev = shost->shost_gendev.parent;
>> +       struct device *dev = shost->dma_dev;
>>
>>        q = blk_init_queue(request_fn, NULL);
>>        if (!q)
>
>
> WBR, Sergei
>
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-03-22 15:28 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-22  5:52 [PATCH] [SCSI] scsi_lib: use correct DMA device in __scsi_alloc_queue Lin Ming
2012-03-22 11:24 ` Sergei Shtylyov
2012-03-22 15:28   ` Lin Ming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox