Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Russell King - ARM Linux
On Sat, Jul 13, 2013 at 03:42:55AM +0400, Sergei Shtylyov wrote:
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 86d5220..e8275fa 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct
> Scsi_Host *shost)
>
>host_dev = scsi_get_device(shost);
>if (host_dev && host_dev->dma_mask)
> -bounce_limit = *host_dev->dma_mask;
> +bounce_limit = dma_max_pfn(host_dev) << PAGE_SHIFT;
>
 You definitely forgot -1 here.
>
>>> Please explain your point.
>
>> Previously, 'bounce_limit' would look like 0x (unless I'm
>> mistaken), now it would look like 0xf000 which is hardly what we're
>> looking for, no?
>
>Although, -1 won't give us the correct result in this case, it's more 
> like + PAGE_SIZE - 1.

And where it's used is blk_bounce_limit(), the first which that does
is convert it back to a PFN, losing the bottom bits again...

I'm tempted to suggest converting the whole thing to just deal with
PFNs rather than bytes since we only deal with "can we DMA to this"
on a per-page basis.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Sergei Shtylyov

On 07/13/2013 03:08 AM, Sergei Shtylyov wrote:


DMA bounce limit is the maximum direct DMA'able memory beyond which
bounce buffers has to be used to perform dma operations. SCSI driver
relies on dma_mask but its calculation is based on max_*pfn which
don't have uniform meaning across architectures. So make use of
dma_max_pfn() which is expected to return the DMAable maximum pfn
value across architectures.



Cc: Russell King 
Cc: linux-s...@vger.kernel.org



Signed-off-by: Santosh Shilimkar 
---
   drivers/scsi/scsi_lib.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 86d5220..e8275fa 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct
Scsi_Host *shost)

   host_dev = scsi_get_device(shost);
   if (host_dev && host_dev->dma_mask)
-bounce_limit = *host_dev->dma_mask;
+bounce_limit = dma_max_pfn(host_dev) << PAGE_SHIFT;



You definitely forgot -1 here.



Please explain your point.



Previously, 'bounce_limit' would look like 0x (unless I'm
mistaken), now it would look like 0xf000 which is hardly what we're
looking for, no?


   Although, -1 won't give us the correct result in this case, it's 
more like + PAGE_SIZE - 1.


WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Sergei Shtylyov

Hello.

On 07/13/2013 02:25 AM, Russell King - ARM Linux wrote:


DMA bounce limit is the maximum direct DMA'able memory beyond which
bounce buffers has to be used to perform dma operations. SCSI driver
relies on dma_mask but its calculation is based on max_*pfn which
don't have uniform meaning across architectures. So make use of
dma_max_pfn() which is expected to return the DMAable maximum pfn
value across architectures.



Cc: Russell King 
Cc: linux-s...@vger.kernel.org



Signed-off-by: Santosh Shilimkar 
---
   drivers/scsi/scsi_lib.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 86d5220..e8275fa 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct Scsi_Host *shost)

host_dev = scsi_get_device(shost);
if (host_dev && host_dev->dma_mask)
-   bounce_limit = *host_dev->dma_mask;
+   bounce_limit = dma_max_pfn(host_dev) << PAGE_SHIFT;



You definitely forgot -1 here.



Please explain your point.


   Previously, 'bounce_limit' would look like 0x (unless I'm 
mistaken), now it would look like 0xf000 which is hardly what we're 
looking for, no?


WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Russell King - ARM Linux
On Sat, Jul 13, 2013 at 01:55:58AM +0400, Sergei Shtylyov wrote:
> Hello.
>
> On 07/13/2013 01:48 AM, Santosh Shilimkar wrote:
>
>> DMA bounce limit is the maximum direct DMA'able memory beyond which
>> bounce buffers has to be used to perform dma operations. SCSI driver
>> relies on dma_mask but its calculation is based on max_*pfn which
>> don't have uniform meaning across architectures. So make use of
>> dma_max_pfn() which is expected to return the DMAable maximum pfn
>> value across architectures.
>
>> Cc: Russell King 
>> Cc: linux-s...@vger.kernel.org
>
>> Signed-off-by: Santosh Shilimkar 
>> ---
>>   drivers/scsi/scsi_lib.c |2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>
>> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
>> index 86d5220..e8275fa 100644
>> --- a/drivers/scsi/scsi_lib.c
>> +++ b/drivers/scsi/scsi_lib.c
>> @@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct Scsi_Host 
>> *shost)
>>
>>  host_dev = scsi_get_device(shost);
>>  if (host_dev && host_dev->dma_mask)
>> -bounce_limit = *host_dev->dma_mask;
>> +bounce_limit = dma_max_pfn(host_dev) << PAGE_SHIFT;
>
>You definitely forgot -1 here.

Please explain your point.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Sergei Shtylyov

Hello.

On 07/13/2013 01:48 AM, Santosh Shilimkar wrote:


DMA bounce limit is the maximum direct DMA'able memory beyond which
bounce buffers has to be used to perform dma operations. SCSI driver
relies on dma_mask but its calculation is based on max_*pfn which
don't have uniform meaning across architectures. So make use of
dma_max_pfn() which is expected to return the DMAable maximum pfn
value across architectures.



Cc: Russell King 
Cc: linux-s...@vger.kernel.org



Signed-off-by: Santosh Shilimkar 
---
  drivers/scsi/scsi_lib.c |2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 86d5220..e8275fa 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct Scsi_Host *shost)

host_dev = scsi_get_device(shost);
if (host_dev && host_dev->dma_mask)
-   bounce_limit = *host_dev->dma_mask;
+   bounce_limit = dma_max_pfn(host_dev) << PAGE_SHIFT;


   You definitely forgot -1 here.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Sergei Shtylyov

Hello.

On 07/13/2013 01:48 AM, Santosh Shilimkar wrote:


DMA bounce limit is the maximum direct DMA'able memory beyond which
bounce buffers has to be used to perform dma operations. SCSI driver
relies on dma_mask but its calculation is based on max_*pfn which
don't have uniform meaning across architectures. So make use of
dma_max_pfn() which is expected to return the DMAable maximum pfn
value across architectures.



Cc: Russell King li...@arm.linux.org.uk
Cc: linux-s...@vger.kernel.org



Signed-off-by: Santosh Shilimkar santosh.shilim...@ti.com
---
  drivers/scsi/scsi_lib.c |2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 86d5220..e8275fa 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct Scsi_Host *shost)

host_dev = scsi_get_device(shost);
if (host_dev  host_dev-dma_mask)
-   bounce_limit = *host_dev-dma_mask;
+   bounce_limit = dma_max_pfn(host_dev)  PAGE_SHIFT;


   You definitely forgot -1 here.

WBR, Sergei

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Russell King - ARM Linux
On Sat, Jul 13, 2013 at 01:55:58AM +0400, Sergei Shtylyov wrote:
 Hello.

 On 07/13/2013 01:48 AM, Santosh Shilimkar wrote:

 DMA bounce limit is the maximum direct DMA'able memory beyond which
 bounce buffers has to be used to perform dma operations. SCSI driver
 relies on dma_mask but its calculation is based on max_*pfn which
 don't have uniform meaning across architectures. So make use of
 dma_max_pfn() which is expected to return the DMAable maximum pfn
 value across architectures.

 Cc: Russell King li...@arm.linux.org.uk
 Cc: linux-s...@vger.kernel.org

 Signed-off-by: Santosh Shilimkar santosh.shilim...@ti.com
 ---
   drivers/scsi/scsi_lib.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
 index 86d5220..e8275fa 100644
 --- a/drivers/scsi/scsi_lib.c
 +++ b/drivers/scsi/scsi_lib.c
 @@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct Scsi_Host 
 *shost)

  host_dev = scsi_get_device(shost);
  if (host_dev  host_dev-dma_mask)
 -bounce_limit = *host_dev-dma_mask;
 +bounce_limit = dma_max_pfn(host_dev)  PAGE_SHIFT;

You definitely forgot -1 here.

Please explain your point.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Sergei Shtylyov

Hello.

On 07/13/2013 02:25 AM, Russell King - ARM Linux wrote:


DMA bounce limit is the maximum direct DMA'able memory beyond which
bounce buffers has to be used to perform dma operations. SCSI driver
relies on dma_mask but its calculation is based on max_*pfn which
don't have uniform meaning across architectures. So make use of
dma_max_pfn() which is expected to return the DMAable maximum pfn
value across architectures.



Cc: Russell King li...@arm.linux.org.uk
Cc: linux-s...@vger.kernel.org



Signed-off-by: Santosh Shilimkar santosh.shilim...@ti.com
---
   drivers/scsi/scsi_lib.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 86d5220..e8275fa 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct Scsi_Host *shost)

host_dev = scsi_get_device(shost);
if (host_dev  host_dev-dma_mask)
-   bounce_limit = *host_dev-dma_mask;
+   bounce_limit = dma_max_pfn(host_dev)  PAGE_SHIFT;



You definitely forgot -1 here.



Please explain your point.


   Previously, 'bounce_limit' would look like 0x (unless I'm 
mistaken), now it would look like 0xf000 which is hardly what we're 
looking for, no?


WBR, Sergei

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Sergei Shtylyov

On 07/13/2013 03:08 AM, Sergei Shtylyov wrote:


DMA bounce limit is the maximum direct DMA'able memory beyond which
bounce buffers has to be used to perform dma operations. SCSI driver
relies on dma_mask but its calculation is based on max_*pfn which
don't have uniform meaning across architectures. So make use of
dma_max_pfn() which is expected to return the DMAable maximum pfn
value across architectures.



Cc: Russell King li...@arm.linux.org.uk
Cc: linux-s...@vger.kernel.org



Signed-off-by: Santosh Shilimkar santosh.shilim...@ti.com
---
   drivers/scsi/scsi_lib.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 86d5220..e8275fa 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct
Scsi_Host *shost)

   host_dev = scsi_get_device(shost);
   if (host_dev  host_dev-dma_mask)
-bounce_limit = *host_dev-dma_mask;
+bounce_limit = dma_max_pfn(host_dev)  PAGE_SHIFT;



You definitely forgot -1 here.



Please explain your point.



Previously, 'bounce_limit' would look like 0x (unless I'm
mistaken), now it would look like 0xf000 which is hardly what we're
looking for, no?


   Although, -1 won't give us the correct result in this case, it's 
more like + PAGE_SIZE - 1.


WBR, Sergei

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFC/RFT PATCH 3/5] scsi: Use dma_max_pfn(dev) helper for bounce_limit calculations

2013-07-12 Thread Russell King - ARM Linux
On Sat, Jul 13, 2013 at 03:42:55AM +0400, Sergei Shtylyov wrote:
 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
 index 86d5220..e8275fa 100644
 --- a/drivers/scsi/scsi_lib.c
 +++ b/drivers/scsi/scsi_lib.c
 @@ -1668,7 +1668,7 @@ u64 scsi_calculate_bounce_limit(struct
 Scsi_Host *shost)

host_dev = scsi_get_device(shost);
if (host_dev  host_dev-dma_mask)
 -bounce_limit = *host_dev-dma_mask;
 +bounce_limit = dma_max_pfn(host_dev)  PAGE_SHIFT;

 You definitely forgot -1 here.

 Please explain your point.

 Previously, 'bounce_limit' would look like 0x (unless I'm
 mistaken), now it would look like 0xf000 which is hardly what we're
 looking for, no?

Although, -1 won't give us the correct result in this case, it's more 
 like + PAGE_SIZE - 1.

And where it's used is blk_bounce_limit(), the first which that does
is convert it back to a PFN, losing the bottom bits again...

I'm tempted to suggest converting the whole thing to just deal with
PFNs rather than bytes since we only deal with can we DMA to this
on a per-page basis.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/