Revision 38860b2c8bb1b92f61396eb06a63adff916fc31d authored by John David Anglin on 08 November 2021, 21:48:16 UTC, committed by Helge Deller on 13 November 2021, 21:10:56 UTC
For years, there have been random segmentation faults in userspace on
SMP PA-RISC machines.  It occurred to me that this might be a problem in
set_pte_at().  MIPS and some other architectures do cache flushes when
installing PTEs with the present bit set.

Here I have adapted the code in update_mmu_cache() to flush the kernel
mapping when the kernel flush is deferred, or when the kernel mapping
may alias with the user mapping.  This simplifies calls to
update_mmu_cache().

I also changed the barrier in set_pte() from a compiler barrier to a
full memory barrier.  I know this change is not sufficient to fix the
problem.  It might not be needed.

I have had a few days of operation with 5.14.16 to 5.15.1 and haven't
seen any random segmentation faults on rp3440 or c8000 so far.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@kernel.org # 5.12+
1 parent f0d1cfa
Raw File
Kbuild.platforms
# SPDX-License-Identifier: GPL-2.0
# All platforms listed in alphabetic order

platform-$(CONFIG_MIPS_ALCHEMY)		+= alchemy/
platform-$(CONFIG_AR7)			+= ar7/
platform-$(CONFIG_ATH25)		+= ath25/
platform-$(CONFIG_ATH79)		+= ath79/
platform-$(CONFIG_BCM47XX)		+= bcm47xx/
platform-$(CONFIG_BCM63XX)		+= bcm63xx/
platform-$(CONFIG_BMIPS_GENERIC)	+= bmips/
platform-$(CONFIG_CAVIUM_OCTEON_SOC)	+= cavium-octeon/
platform-$(CONFIG_MIPS_COBALT)		+= cobalt/
platform-$(CONFIG_MACH_DECSTATION)	+= dec/
platform-$(CONFIG_MIPS_GENERIC)		+= generic/
platform-$(CONFIG_MACH_JAZZ)		+= jazz/
platform-$(CONFIG_LANTIQ)		+= lantiq/
platform-$(CONFIG_MACH_LOONGSON2EF)	+= loongson2ef/
platform-$(CONFIG_MACH_LOONGSON32)	+= loongson32/
platform-$(CONFIG_MACH_LOONGSON64)	+= loongson64/
platform-$(CONFIG_MIPS_MALTA)		+= mti-malta/
platform-$(CONFIG_MACH_NINTENDO64)	+= n64/
platform-$(CONFIG_PIC32MZDA)		+= pic32/
platform-$(CONFIG_RALINK)		+= ralink/
platform-$(CONFIG_MIKROTIK_RB532)	+= rb532/
platform-$(CONFIG_SGI_IP22)		+= sgi-ip22/
platform-$(CONFIG_SGI_IP27)		+= sgi-ip27/
platform-$(CONFIG_SGI_IP28)		+= sgi-ip22/
platform-$(CONFIG_SGI_IP30)		+= sgi-ip30/
platform-$(CONFIG_SGI_IP32)		+= sgi-ip32/
platform-$(CONFIG_SIBYTE_BCM112X)	+= sibyte/
platform-$(CONFIG_SIBYTE_SB1250)	+= sibyte/
platform-$(CONFIG_SIBYTE_BCM1x55)	+= sibyte/
platform-$(CONFIG_SIBYTE_BCM1x80)	+= sibyte/
platform-$(CONFIG_SNI_RM)		+= sni/
platform-$(CONFIG_MACH_TX39XX)		+= txx9/
platform-$(CONFIG_MACH_TX49XX)		+= txx9/
platform-$(CONFIG_MACH_VR41XX)		+= vr41xx/

# include the platform specific files
include $(patsubst %/, $(srctree)/arch/mips/%/Platform, $(platform-y))
back to top