Re: [PATCH] MIPS: BMIPS: fix bmips_wr_vec()

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

 



On Tue, May 26, 2015 at 11:25:08PM -0700, Petri Gynther wrote:

> bmips_wr_vec() copies exception vector code from start to dst.
> 
> The call to dma_cache_wback() needs to flush (end-start) bytes,
> starting at dst, from write-back cache to memory.
> 
> Signed-off-by: Petri Gynther <pgynther@xxxxxxxxxx>
> ---
>  arch/mips/kernel/smp-bmips.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
> index fd528d7..336708a 100644
> --- a/arch/mips/kernel/smp-bmips.c
> +++ b/arch/mips/kernel/smp-bmips.c
> @@ -444,7 +444,7 @@ struct plat_smp_ops bmips5000_smp_ops = {
>  static void bmips_wr_vec(unsigned long dst, char *start, char *end)
>  {
>  	memcpy((void *)dst, start, end - start);
> -	dma_cache_wback((unsigned long)start, end - start);
> +	dma_cache_wback(dst, end - start);

dma_cache_wback is a guess what - DMA function.  It doesn't handle
I-caches at all and on some platforms might actually do nothing at all.
or use other optimizations that only work for DMA buffers and it's not
SMP aware - nor will it.  So if it ever worked for your case then just
because you're lucky.  This really should use flush_icache_range which
also conveniently for your code takes an end pointer as argument.

  Ralf





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux