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 v2 02/10] ARM: l2x0: fix invalidate-all function to avoid livelock
Date: Thu,  9 Jun 2011 16:58:54 +0100	[thread overview]
Message-ID: <1307635142-11312-3-git-send-email-will.deacon@arm.com> (raw)
In-Reply-To: <1307635142-11312-1-git-send-email-will.deacon@arm.com>

With the L2 cache disabled, exclusive memory access instructions may
cease to function correctly, leading to livelock when trying to acquire
a spinlock.

The l2x0 invalidate-all routine *must* run with the cache disabled and so
needs to take extra care not to take any locks along the way.

This patch modifies the invalidation routine to avoid locking. Since
the cache is disabled, we make the assumption that other CPUs are not
executing background maintenance tasks on the L2 cache whilst we are
invalidating it.

Signed-off-by: Will Deacon <will.deacon@arm.com>
---
 arch/arm/mm/cache-l2x0.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
index 2bce3be..fe5630f 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -148,16 +148,17 @@ static void l2x0_clean_all(void)
 
 static void l2x0_inv_all(void)
 {
-	unsigned long flags;
-
-	/* invalidate all ways */
-	spin_lock_irqsave(&l2x0_lock, flags);
 	/* Invalidating when L2 is enabled is a nono */
 	BUG_ON(readl(l2x0_base + L2X0_CTRL) & 1);
+
+	/*
+	 * invalidate all ways
+	 * Since the L2 is disabled, exclusive accessors may not be
+	 * available to us, so avoid taking any locks.
+	 */
 	writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_INV_WAY);
 	cache_wait_way(l2x0_base + L2X0_INV_WAY, l2x0_way_mask);
 	cache_sync();
-	spin_unlock_irqrestore(&l2x0_lock, flags);
 }
 
 static void l2x0_inv_range(unsigned long start, unsigned long end)
-- 
1.7.0.4

  parent reply	other threads:[~2011-06-09 15:58 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-09 15:58 [PATCH v2 00/10] MMU disabling code and kexec fixes Will Deacon
2011-06-09 15:58 ` [PATCH v2 01/10] ARM: l2x0: fix disabling function to avoid livelock Will Deacon
2011-06-09 15:58 ` Will Deacon [this message]
2011-06-09 15:58 ` [PATCH v2 03/10] ARM: proc: add definition of cpu_reset for ARMv6 and ARMv7 cores Will Deacon
2011-06-09 15:58 ` [PATCH v2 04/10] ARM: lib: add switch_stack function for safely changing stack Will Deacon
2011-06-09 16:11   ` Dave Martin
2011-06-09 16:20     ` Dave Martin
2011-06-09 15:58 ` [PATCH v2 05/10] ARM: idmap: add header file for identity mapping functions Will Deacon
2011-06-10  9:13   ` Frank Hofmann
2011-06-09 15:58 ` [PATCH v2 06/10] ARM: reset: allow kernelspace mappings to be flat mapped during reset Will Deacon
2011-06-09 15:58 ` [PATCH v2 07/10] ARM: multi-cpu: remove arguments from CPU proc macros Will Deacon
2011-06-09 15:59 ` [PATCH v2 08/10] ARM: reset: add reset functionality for jumping to a physical address Will Deacon
2011-06-09 15:59 ` [PATCH v2 09/10] ARM: kexec: use arm_machine_reset for branching to the reboot buffer Will Deacon
2011-06-09 15:59 ` [PATCH v2 10/10] ARM: stop: execute platform callback from cpu_stop code Will Deacon

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=1307635142-11312-3-git-send-email-will.deacon@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.