ia64: Make sure that we have a mmiowb function real early
authorTony Luck <tony.luck@intel.com>
Thu, 16 May 2019 01:04:14 +0000 (18:04 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 16 May 2019 01:43:46 +0000 (18:43 -0700)
Generic kernels feed many operation through the "machvec" logic to get
the correct form of the operation for the current system.  "mmiowb()" is
one of those operations.

Although machvec is initialized very early in boot, it isn't early
enough for a recent upstream kernel change that added mmiowb to the
spin_unlock() path.

Statically initialize the mmiowb field of machvec so that we won't die
with a call through a NULL pointer.  This should be safe because we do
the real initialization of machvec before bringing up any addtional CPUs
or doing any I/O.

Fixes: 49ca6462fc9e ("ia64/mmiowb: Add unconditional mmiowb() to arch_spin_unlock()")
Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/ia64/kernel/machvec.c

index 1b604d02250bee2b8b0ea41d3236ac62ac17b6c6..ebd82535f51b7dc29af27a89258a0b683b472475 100644 (file)
@@ -10,7 +10,9 @@
 
 #include <asm/page.h>
 
-struct ia64_machine_vector ia64_mv;
+struct ia64_machine_vector ia64_mv = {
+       .mmiowb = ___ia64_mmiowb
+};
 EXPORT_SYMBOL(ia64_mv);
 
 static struct ia64_machine_vector * __init