Merge tag 'xtensa-20210902' of git://github.com/jcmvbkbc/linux-xtensa
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Sep 2021 20:12:44 +0000 (13:12 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Sep 2021 20:12:44 +0000 (13:12 -0700)
Pull Xtensa updates from Max Filippov:

 - fix kconfig unmet dependency warning for HAVE_FUTEX_CMPXCHG

 - add fairness to handling IRQs of the same priority

 - fix pointer usage before NULL check in ISS console driver

 - build system cleanups

* tag 'xtensa-20210902' of git://github.com/jcmvbkbc/linux-xtensa:
  xtensa: move core-y in arch/xtensa/Makefile to arch/xtensa/Kbuild
  xtensa: build platform directories unconditionally
  xtensa: do not build variants directory
  xtensa: remove unneeded exports
  xtensa: ISS: don't use string pointer before NULL check
  xtensa: add fairness to IRQ handling
  xtensa: fix kconfig unmet dependency warning for HAVE_FUTEX_CMPXCHG

arch/xtensa/Kbuild
arch/xtensa/Kconfig
arch/xtensa/Makefile
arch/xtensa/kernel/traps.c
arch/xtensa/platforms/Makefile [new file with mode: 0644]
arch/xtensa/platforms/iss/console.c

index a4e40e5..fd12f61 100644 (file)
@@ -1 +1,2 @@
 # SPDX-License-Identifier: GPL-2.0-only
+obj-y += kernel/ mm/ platforms/ boot/dts/
index f02b885..9bf2a9b 100644 (file)
@@ -31,7 +31,7 @@ config XTENSA
        select HAVE_DMA_CONTIGUOUS
        select HAVE_EXIT_THREAD
        select HAVE_FUNCTION_TRACER
-       select HAVE_FUTEX_CMPXCHG if !MMU
+       select HAVE_FUTEX_CMPXCHG if !MMU && FUTEX
        select HAVE_HW_BREAKPOINT if PERF_EVENTS
        select HAVE_IRQ_TIME_ACCOUNTING
        select HAVE_PCI
index e9c8f06..96714ef 100644 (file)
@@ -17,7 +17,6 @@
 variant-y := $(patsubst "%",%,$(CONFIG_XTENSA_VARIANT_NAME))
 
 VARIANT = $(variant-y)
-export VARIANT
 
 ifneq ($(VARIANT),)
   ifdef cross_compiling
@@ -33,9 +32,6 @@ platform-$(CONFIG_XTENSA_PLATFORM_XT2000)     := xt2000
 platform-$(CONFIG_XTENSA_PLATFORM_ISS)         := iss
 platform-$(CONFIG_XTENSA_PLATFORM_XTFPGA)      := xtfpga
 
-PLATFORM = $(platform-y)
-export PLATFORM
-
 # temporarily until string.h is fixed
 KBUILD_CFLAGS += -ffreestanding -D__linux__
 KBUILD_CFLAGS += -pipe -mlongcalls -mtext-section-literals
@@ -57,19 +53,11 @@ KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs))
 
 KBUILD_DEFCONFIG := iss_defconfig
 
-# Only build variant and/or platform if it includes a Makefile
-
-buildvar := $(shell test -e $(srctree)/arch/xtensa/variants/$(VARIANT)/Makefile && echo arch/xtensa/variants/$(VARIANT)/)
-buildplf := $(shell test -e $(srctree)/arch/xtensa/platforms/$(PLATFORM)/Makefile && echo arch/xtensa/platforms/$(PLATFORM)/)
-
 # Find libgcc.a
 
 LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
 
 head-y         := arch/xtensa/kernel/head.o
-core-y         += arch/xtensa/kernel/ arch/xtensa/mm/
-core-y         += $(buildvar) $(buildplf)
-core-y                 += arch/xtensa/boot/dts/
 
 libs-y         += arch/xtensa/lib/ $(LIBGCC)
 
index efc3a29..874b6ef 100644 (file)
@@ -268,6 +268,7 @@ void do_interrupt(struct pt_regs *regs)
                XCHAL_INTLEVEL7_MASK,
        };
        struct pt_regs *old_regs;
+       unsigned unhandled = ~0u;
 
        trace_hardirqs_off();
 
@@ -283,6 +284,10 @@ void do_interrupt(struct pt_regs *regs)
                for (level = LOCKLEVEL; level > 0; --level) {
                        if (int_at_level & int_level_mask[level]) {
                                int_at_level &= int_level_mask[level];
+                               if (int_at_level & unhandled)
+                                       int_at_level &= unhandled;
+                               else
+                                       unhandled |= int_level_mask[level];
                                break;
                        }
                }
@@ -290,6 +295,8 @@ void do_interrupt(struct pt_regs *regs)
                if (level == 0)
                        break;
 
+               /* clear lowest pending irq in the unhandled mask */
+               unhandled ^= (int_at_level & -int_at_level);
                do_IRQ(__ffs(int_at_level), regs);
        }
 
diff --git a/arch/xtensa/platforms/Makefile b/arch/xtensa/platforms/Makefile
new file mode 100644 (file)
index 0000000..e2e7e07
--- /dev/null
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0-only
+obj-$(CONFIG_XTENSA_PLATFORM_XT2000)   += xt2000/
+obj-$(CONFIG_XTENSA_PLATFORM_ISS)      += iss/
+obj-$(CONFIG_XTENSA_PLATFORM_XTFPGA)   += xtfpga/
index 81f9889..81d7c7e 100644 (file)
@@ -199,10 +199,10 @@ late_initcall(rs_init);
 
 static void iss_console_write(struct console *co, const char *s, unsigned count)
 {
-       int len = strlen(s);
-
-       if (s != 0 && *s != 0)
+       if (s && *s != 0) {
+               int len = strlen(s);
                simc_write(1, s, count < len ? count : len);
+       }
 }
 
 static struct tty_driver* iss_console_device(struct console *c, int *index)