All of lore.kernel.org
 help / color / mirror / Atom feed
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: mm: avoid attempting to flush the gate_vma with VIVT caches
Date: Thu, 19 Jul 2012 13:28:14 +0100	[thread overview]
Message-ID: <20120719122814.GE29153@mudshark.cambridge.arm.com> (raw)
In-Reply-To: <1342455826-9425-1-git-send-email-will.deacon@arm.com>

Gilles, Uros,

On Mon, Jul 16, 2012 at 05:23:46PM +0100, Will Deacon wrote:
> The vivt_flush_cache_{range,page} functions check that the mm_struct
> of the VMA being flushed has been active on the current CPU before
> performing the cache maintenance.
> 
> The gate_vma has a NULL mm_struct pointer and, as such, will cause a
> kernel fault if we try to flush it with the above operations. This
> happens during ELF core dumps, which include the gate_vma as it may be
> useful for debugging purposes.
> 
> This patch adds checks to the VIVT cache flushing functions so that VMAs
> with a NULL mm_struct are ignored.

Would one of you be able to test this patch please? I've not managed to
trigger the bug you reported on my boards, so it would be useful to know
whether or not this patch solves the problem for you.

Thanks,

Will

> diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h
> index 004c1bc..8cf828e 100644
> --- a/arch/arm/include/asm/cacheflush.h
> +++ b/arch/arm/include/asm/cacheflush.h
> @@ -215,7 +215,9 @@ static inline void vivt_flush_cache_mm(struct mm_struct *mm)
>  static inline void
>  vivt_flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end)
>  {
> -	if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm)))
> +	struct mm_struct *mm = vma->vm_mm;
> +
> +	if (mm && cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm)))
>  		__cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end),
>  					vma->vm_flags);
>  }
> @@ -223,7 +225,9 @@ vivt_flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned
>  static inline void
>  vivt_flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn)
>  {
> -	if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) {
> +	struct mm_struct *mm = vma->vm_mm;
> +
> +	if (mm && cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) {
>  		unsigned long addr = user_addr & PAGE_MASK;
>  		__cpuc_flush_user_range(addr, addr + PAGE_SIZE, vma->vm_flags);
>  	}
> -- 
> 1.7.4.1
> 

  reply	other threads:[~2012-07-19 12:28 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-16 16:23 [PATCH] ARM: mm: avoid attempting to flush the gate_vma with VIVT caches Will Deacon
2012-07-19 12:28 ` Will Deacon [this message]
2012-07-19 13:03   ` Uros Bizjak
2012-07-19 16:37     ` Will Deacon
2012-07-20 20:41   ` Gilles Chanteperdrix
2012-07-21 13:18     ` Gilles Chanteperdrix
2012-07-21 14:35       ` Will Deacon
2012-07-21 14:40         ` Gilles Chanteperdrix
2012-07-21 14:47           ` Gilles Chanteperdrix
2012-07-22 13:03             ` Will Deacon
2012-07-22 13:26               ` Gilles Chanteperdrix
2012-07-22 15:09                 ` Will Deacon
2012-07-22 15:35                   ` Gilles Chanteperdrix
2012-07-22 16:57                   ` Uros Bizjak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120719122814.GE29153@mudshark.cambridge.arm.com \
    --to=will.deacon@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.