Browse Source

Merge tag 'xtensa-20180914' of git://github.com/jcmvbkbc/linux-xtensa

Pull Xtensa fixes and cleanups from Max Filippov:

 - don't allocate memory in platform_setup as the memory allocator is
   not initialized at that point yet;

 - remove unnecessary ifeq KBUILD_SRC from arch/xtensa/Makefile;

 - enable SG chaining in arch/xtensa/Kconfig.

* tag 'xtensa-20180914' of git://github.com/jcmvbkbc/linux-xtensa:
  xtensa: enable SG chaining in Kconfig
  xtensa: remove unnecessary KBUILD_SRC ifeq conditional
  xtensa: ISS: don't allocate memory in platform_setup
Linus Torvalds 7 years ago
parent
commit
eae4f8851f
3 changed files with 16 additions and 14 deletions
  1. 1 0
      arch/xtensa/Kconfig
  2. 0 4
      arch/xtensa/Makefile
  3. 15 10
      arch/xtensa/platforms/iss/setup.c

+ 1 - 0
arch/xtensa/Kconfig

@@ -4,6 +4,7 @@ config ZONE_DMA
 
 
 config XTENSA
 config XTENSA
 	def_bool y
 	def_bool y
+	select ARCH_HAS_SG_CHAIN
 	select ARCH_HAS_SYNC_DMA_FOR_CPU
 	select ARCH_HAS_SYNC_DMA_FOR_CPU
 	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
 	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
 	select ARCH_NO_COHERENT_DMA_MMAP if !MMU
 	select ARCH_NO_COHERENT_DMA_MMAP if !MMU

+ 0 - 4
arch/xtensa/Makefile

@@ -64,11 +64,7 @@ endif
 vardirs := $(patsubst %,arch/xtensa/variants/%/,$(variant-y))
 vardirs := $(patsubst %,arch/xtensa/variants/%/,$(variant-y))
 plfdirs := $(patsubst %,arch/xtensa/platforms/%/,$(platform-y))
 plfdirs := $(patsubst %,arch/xtensa/platforms/%/,$(platform-y))
 
 
-ifeq ($(KBUILD_SRC),)
-KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(vardirs) $(plfdirs))
-else
 KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs))
 KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs))
-endif
 
 
 KBUILD_DEFCONFIG := iss_defconfig
 KBUILD_DEFCONFIG := iss_defconfig
 
 

+ 15 - 10
arch/xtensa/platforms/iss/setup.c

@@ -78,23 +78,28 @@ static struct notifier_block iss_panic_block = {
 
 
 void __init platform_setup(char **p_cmdline)
 void __init platform_setup(char **p_cmdline)
 {
 {
+	static void *argv[COMMAND_LINE_SIZE / sizeof(void *)] __initdata;
+	static char cmdline[COMMAND_LINE_SIZE] __initdata;
 	int argc = simc_argc();
 	int argc = simc_argc();
 	int argv_size = simc_argv_size();
 	int argv_size = simc_argv_size();
 
 
 	if (argc > 1) {
 	if (argc > 1) {
-		void **argv = alloc_bootmem(argv_size);
-		char *cmdline = alloc_bootmem(argv_size);
-		int i;
+		if (argv_size > sizeof(argv)) {
+			pr_err("%s: command line too long: argv_size = %d\n",
+			       __func__, argv_size);
+		} else {
+			int i;
 
 
-		cmdline[0] = 0;
-		simc_argv((void *)argv);
+			cmdline[0] = 0;
+			simc_argv((void *)argv);
 
 
-		for (i = 1; i < argc; ++i) {
-			if (i > 1)
-				strcat(cmdline, " ");
-			strcat(cmdline, argv[i]);
+			for (i = 1; i < argc; ++i) {
+				if (i > 1)
+					strcat(cmdline, " ");
+				strcat(cmdline, argv[i]);
+			}
+			*p_cmdline = cmdline;
 		}
 		}
-		*p_cmdline = cmdline;
 	}
 	}
 
 
 	atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block);
 	atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block);