ARM: outer cache: add WARN_ON() to outer_disable()
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 16 Mar 2014 13:14:38 +0000 (13:14 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 29 May 2014 23:47:23 +0000 (00:47 +0100)
Add WARN_ON() conditions to outer_disable() to ensure that its
requirements aren't violated.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/outercache.h
arch/arm/mm/Makefile
arch/arm/mm/l2c-common.c [new file with mode: 0644]

index 2615b3d9e807d47a137a7250103cc32962a57c05..e96f194bf3d45f719e966cfe3c9c27860ba5347e 100644 (file)
@@ -96,11 +96,7 @@ static inline void outer_flush_all(void)
  * cache is pushed out to lower levels of system memory.  The note and
  * conditions above concerning outer_flush_all() applies here.
  */
-static inline void outer_disable(void)
-{
-       if (outer_cache.disable)
-               outer_cache.disable();
-}
+extern void outer_disable(void);
 
 /**
  * outer_resume - restore the cache configuration and re-enable outer cache
index 7f39ce2f841fb1f9056269c1a8ce415b89a21191..de5a6a27081bf92e30c3eecc9e108f4bfd1f08ab 100644 (file)
@@ -95,6 +95,7 @@ obj-$(CONFIG_CPU_V7M)         += proc-v7m.o
 AFLAGS_proc-v6.o       :=-Wa,-march=armv6
 AFLAGS_proc-v7.o       :=-Wa,-march=armv7-a
 
+obj-$(CONFIG_OUTER_CACHE)      += l2c-common.o
 obj-$(CONFIG_CACHE_FEROCEON_L2)        += cache-feroceon-l2.o
 obj-$(CONFIG_CACHE_L2X0)       += cache-l2x0.o
 obj-$(CONFIG_CACHE_XSC3L2)     += cache-xsc3l2.o
diff --git a/arch/arm/mm/l2c-common.c b/arch/arm/mm/l2c-common.c
new file mode 100644 (file)
index 0000000..10a3cf2
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2010 ARM Ltd.
+ * Written by Catalin Marinas <catalin.marinas@arm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/bug.h>
+#include <linux/smp.h>
+#include <asm/outercache.h>
+
+void outer_disable(void)
+{
+       WARN_ON(!irqs_disabled());
+       WARN_ON(num_online_cpus() > 1);
+
+       if (outer_cache.disable)
+               outer_cache.disable();
+}