All of lore.kernel.org
 help / color / mirror / Atom feed
From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: cache-v7: Disable preemption when reading CCSIDR
Date: Sat, 4 Feb 2012 18:00:16 +0000	[thread overview]
Message-ID: <20120204180016.GB30910@arm.com> (raw)
In-Reply-To: <1328234629-32735-1-git-send-email-sboyd@codeaurora.org>

On Fri, Feb 03, 2012 at 02:03:49AM +0000, Stephen Boyd wrote:
> armv7's flush_cache_all() flushes caches via set/way. To
> determine the cache attributes (line size, number of sets,
> etc.) the assembly first writes the CSSELR register to select a
> cache level and then reads the CCSIDR register. The CSSELR register
> is banked per-cpu and is used to determine which cache level CCSIDR
> reads. If the task is migrated between when the CSSELR is written and
> the CCSIDR is read the CCSIDR value may be for an unexpected cache
> level (for example L1 instead of L2) and incorrect cache flushing
> could occur.
> 
> Disable interrupts across the write and read so that the correct
> cache attributes are read and used for the cache flushing
> routine. We disable interrupts instead of disabling preemption
> because the critical section is only 3 instructions and we want
> to call v7_dcache_flush_all from __v7_setup which doesn't have a
> full kernel stack with a struct thread_info.
> 
> This fixes a problem we see in scm_call() when flush_cache_all()
> is called from preemptible context and sometimes the L2 cache is
> not properly flushed out.
> 
> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Nicolas Pitre <nico@fluxnic.net>

Acked-by: Catalin Marinas <catalin.marinas@arm.com>

-- 
Catalin

WARNING: multiple messages have this Message-ID (diff)
From: Catalin Marinas <catalin.marinas@arm.com>
To: Stephen Boyd <sboyd@codeaurora.org>
Cc: "linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Nicolas Pitre <nico@fluxnic.net>
Subject: Re: [PATCH] ARM: cache-v7: Disable preemption when reading CCSIDR
Date: Sat, 4 Feb 2012 18:00:16 +0000	[thread overview]
Message-ID: <20120204180016.GB30910@arm.com> (raw)
In-Reply-To: <1328234629-32735-1-git-send-email-sboyd@codeaurora.org>

On Fri, Feb 03, 2012 at 02:03:49AM +0000, Stephen Boyd wrote:
> armv7's flush_cache_all() flushes caches via set/way. To
> determine the cache attributes (line size, number of sets,
> etc.) the assembly first writes the CSSELR register to select a
> cache level and then reads the CCSIDR register. The CSSELR register
> is banked per-cpu and is used to determine which cache level CCSIDR
> reads. If the task is migrated between when the CSSELR is written and
> the CCSIDR is read the CCSIDR value may be for an unexpected cache
> level (for example L1 instead of L2) and incorrect cache flushing
> could occur.
> 
> Disable interrupts across the write and read so that the correct
> cache attributes are read and used for the cache flushing
> routine. We disable interrupts instead of disabling preemption
> because the critical section is only 3 instructions and we want
> to call v7_dcache_flush_all from __v7_setup which doesn't have a
> full kernel stack with a struct thread_info.
> 
> This fixes a problem we see in scm_call() when flush_cache_all()
> is called from preemptible context and sometimes the L2 cache is
> not properly flushed out.
> 
> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Nicolas Pitre <nico@fluxnic.net>

Acked-by: Catalin Marinas <catalin.marinas@arm.com>

-- 
Catalin

  parent reply	other threads:[~2012-02-04 18:00 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-02 19:24 [PATCH] ARM: cache-v7: Disable preemption when reading CCSIDR Stephen Boyd
2012-02-02 19:24 ` Stephen Boyd
2012-02-02 20:44 ` Russell King - ARM Linux
2012-02-02 20:44   ` Russell King - ARM Linux
2012-02-02 21:38   ` Nicolas Pitre
2012-02-02 21:38     ` Nicolas Pitre
2012-02-02 23:36     ` Stephen Boyd
2012-02-02 23:36       ` Stephen Boyd
2012-02-03  0:36       ` Russell King - ARM Linux
2012-02-03  0:36         ` Russell King - ARM Linux
2012-02-03  0:49         ` Stephen Boyd
2012-02-03  0:49           ` Stephen Boyd
2012-02-03  1:18           ` Nicolas Pitre
2012-02-03  1:18             ` Nicolas Pitre
2012-02-03  1:18             ` Nicolas Pitre
2012-02-03  2:03             ` Stephen Boyd
2012-02-03  2:03               ` Stephen Boyd
2012-02-03  2:35               ` Nicolas Pitre
2012-02-03  2:35                 ` Nicolas Pitre
2012-02-03  2:37                 ` Stephen Boyd
2012-02-03  2:37                   ` Stephen Boyd
2012-02-03  3:04                   ` Nicolas Pitre
2012-02-03  3:04                     ` Nicolas Pitre
2012-02-03 11:15                     ` Sergei Shtylyov
2012-02-03 11:15                       ` Sergei Shtylyov
2012-02-04 18:00               ` Catalin Marinas [this message]
2012-02-04 18:00                 ` Catalin Marinas
2012-02-13 17:54               ` Rabin Vincent
2012-02-13 17:54                 ` Rabin Vincent
2012-02-13 18:09                 ` Nicolas Pitre
2012-02-13 18:09                   ` Nicolas Pitre
2012-02-13 18:13                   ` Stephen Boyd
2012-02-13 18:13                     ` Stephen Boyd
2012-02-13 18:15                     ` Russell King - ARM Linux
2012-02-13 18:15                       ` Russell King - ARM Linux
2012-02-13 22:23                       ` Stephen Boyd
2012-02-13 22:23                         ` Stephen Boyd
2012-02-13 23:29                         ` Russell King - ARM Linux
2012-02-13 23:29                           ` Russell King - ARM Linux
2012-02-14 14:15                           ` Rabin Vincent
2012-02-14 14:15                             ` Rabin Vincent
2012-02-14 17:30                             ` Nicolas Pitre
2012-02-14 17:30                               ` Nicolas Pitre
2012-02-14 18:07                             ` Stephen Boyd
2012-02-14 18:07                               ` Stephen Boyd
2012-02-03  1:16         ` Nicolas Pitre
2012-02-03  1:16           ` Nicolas Pitre
2012-02-07  3:34         ` Saravana Kannan
2012-02-07  3:34           ` Saravana Kannan
2012-02-07 17:42           ` Stephen Boyd
2012-02-07 17:42             ` Stephen Boyd

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=20120204180016.GB30910@arm.com \
    --to=catalin.marinas@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.