mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] arc: Hardcode ARCH_DMA_MINALIGN to max line length we may have
@ 2017-07-18 14:31 Alexey Brodkin
  2017-07-18 15:36 ` Vineet Gupta
  0 siblings, 1 reply; 2+ messages in thread
From: Alexey Brodkin @ 2017-07-18 14:31 UTC (permalink / raw)
  To: linux-snps-arc; +Cc: linux-kernel, Vineet Gupta, Alexey Brodkin

Current implementation relies on L1 line length which might easily
be smaller than L2 line (which is usually the case BTW).

Imagine this typical case: L2 line is 128 bytes while L1 line is
64-bytes. Now we want to allocate small buffer and later use it for DMA
(consider IOC is not available).

kmalloc() allocates small KMALLOC_MIN_SIZE-sized, KMALLOC_MIN_SIZE-aligned
That way if buffer happens to be aligned to L1 line and not L2 line we'll be
flushing and invalidating extra portions of data from L2 which will cause
cache coherency issues.

And since KMALLOC_MIN_SIZE is bound to ARCH_DMA_MINALIGN the fix could
be simple - set ARCH_DMA_MINALIGN to the largest cache line we may ever
get. As of today neither L1 of ARC700 and ARC HS38 nor SLC might not be
longer than 128 bytes.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
---
 arch/arc/include/asm/cache.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arc/include/asm/cache.h b/arch/arc/include/asm/cache.h
index 19ebddffb279..e45eac8c5980 100644
--- a/arch/arc/include/asm/cache.h
+++ b/arch/arc/include/asm/cache.h
@@ -47,7 +47,8 @@
 	: "r"(data), "r"(ptr));		\
 })
 
-#define ARCH_DMA_MINALIGN      L1_CACHE_BYTES
+/* Largest line length for either L1 or L2 is 128 bytes */
+#define ARCH_DMA_MINALIGN      128
 
 extern void arc_cache_init(void);
 extern char *arc_cache_mumbojumbo(int cpu_id, char *buf, int len);
-- 
2.7.5

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

* Re: [PATCH] arc: Hardcode ARCH_DMA_MINALIGN to max line length we may have
  2017-07-18 14:31 [PATCH] arc: Hardcode ARCH_DMA_MINALIGN to max line length we may have Alexey Brodkin
@ 2017-07-18 15:36 ` Vineet Gupta
  0 siblings, 0 replies; 2+ messages in thread
From: Vineet Gupta @ 2017-07-18 15:36 UTC (permalink / raw)
  To: Alexey Brodkin, linux-snps-arc; +Cc: linux-kernel, Vineet Gupta, Alexey Brodkin

On 07/18/2017 07:31 AM, Alexey Brodkin wrote:
> Current implementation relies on L1 line length which might easily
> be smaller than L2 line (which is usually the case BTW).
>
> Imagine this typical case: L2 line is 128 bytes while L1 line is
> 64-bytes. Now we want to allocate small buffer and later use it for DMA
> (consider IOC is not available).
>
> kmalloc() allocates small KMALLOC_MIN_SIZE-sized, KMALLOC_MIN_SIZE-aligned
> That way if buffer happens to be aligned to L1 line and not L2 line we'll be
> flushing and invalidating extra portions of data from L2 which will cause
> cache coherency issues.
>
> And since KMALLOC_MIN_SIZE is bound to ARCH_DMA_MINALIGN the fix could
> be simple - set ARCH_DMA_MINALIGN to the largest cache line we may ever
> get. As of today neither L1 of ARC700 and ARC HS38 nor SLC might not be
> longer than 128 bytes.

The patch itself makes sense - but is this preventive / code review thing or does 
it really fix soem issue at your end ?

> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> ---
>   arch/arc/include/asm/cache.h | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arc/include/asm/cache.h b/arch/arc/include/asm/cache.h
> index 19ebddffb279..e45eac8c5980 100644
> --- a/arch/arc/include/asm/cache.h
> +++ b/arch/arc/include/asm/cache.h
> @@ -47,7 +47,8 @@
>   	: "r"(data), "r"(ptr));		\
>   })
>   
> -#define ARCH_DMA_MINALIGN      L1_CACHE_BYTES
> +/* Largest line length for either L1 or L2 is 128 bytes */
> +#define ARCH_DMA_MINALIGN      128
>   
>   extern void arc_cache_init(void);
>   extern char *arc_cache_mumbojumbo(int cpu_id, char *buf, int len);

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

end of thread, other threads:[~2017-07-18 15:37 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-18 14:31 [PATCH] arc: Hardcode ARCH_DMA_MINALIGN to max line length we may have Alexey Brodkin
2017-07-18 15:36 ` Vineet Gupta

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

all inboxes | Powered by JetHome®