 43c09ce792
			
		
	
	
	43c09ce792
	
	
	
		
			
			This patch fixes a rarely-happened but severe scheduling problem of
the recent m32r kernel of 2.6.17-rc3 or later.
In the following previous m32r patch, the switch_to macro was
modified not to do unnecessary push/pop operations for tuning.
> [PATCH] m32r: update switch_to macro for tuning
> 4127272c38
In this modification, only 'lr' and 'sp' registers are push/pop'ed,
assuming that the m32r kernel is always compiled with
-fomit-frame-pointer option.
However, in 2.6 kernel, kernel/sched.c is irregularly compiled
with -fno-omit-frame-pointer if CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER
is not defined.
 -- kernel/Makefile --
   :
 ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
 # According to Alan Modra <alan@linuxcare.com.au>, the -fno-omit-frame-pointer is
 # needed for x86 only.  Why this used to be enabled for all architectures is beyond
 # me.  I suspect most platforms don't need this, but until we know that for sure
 # I turn this off for IA-64 only.  Andreas Schwab says it's also needed on m68k
 # to get a correct value for the wait-channel (WCHAN in ps). --davidm
 CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer
 endif
   :
 ---
Therefore, for the recent m32r kernel, we have to push/pop 'fp'
(frame pointer) if CONFIG_FRAME_POINTER is defined or
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER is not defined.
Signed-off-by: Hitoshi Yamamoto <hitoshiy@linux-m32r.org>
Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
	
			
		
			
				
	
	
		
			414 lines
		
	
	
	
		
			9.5 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			414 lines
		
	
	
	
		
			9.5 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # For a description of the syntax of this configuration file,
 | |
| # see Documentation/kbuild/kconfig-language.txt.
 | |
| #
 | |
| 
 | |
| mainmenu "Linux/M32R Kernel Configuration"
 | |
| 
 | |
| config M32R
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config SBUS
 | |
| 	bool
 | |
| 
 | |
| config GENERIC_ISA_DMA
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config ZONE_DMA
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config GENERIC_HARDIRQS
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config GENERIC_IRQ_PROBE
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config NO_IOPORT
 | |
| 	def_bool y
 | |
| 
 | |
| source "init/Kconfig"
 | |
| 
 | |
| 
 | |
| menu "Processor type and features"
 | |
| 
 | |
| choice
 | |
| 	prompt "Platform Type"
 | |
| 	default PLAT_MAPPI
 | |
| 
 | |
| config PLAT_MAPPI
 | |
| 	bool "Mappi-I"
 | |
| 	help
 | |
| 	  The Mappi-I is an FPGA board for SOC (System-On-a-Chip) prototyping.
 | |
| 	  You can operate a Linux system on this board by using an M32R
 | |
| 	  softmacro core, which is a fully-synthesizable functional model
 | |
| 	  described in Verilog-HDL.
 | |
| 
 | |
| 	  The Mappi-I board was the first platform, which had been used
 | |
| 	  to port and develop a Linux system for the M32R processor.
 | |
| 	  Currently, the Mappi-II, an heir to the Mappi-I, is available.
 | |
| 
 | |
| config PLAT_USRV
 | |
| 	bool "uServer"
 | |
| 
 | |
| config PLAT_M32700UT
 | |
| 	bool "M32700UT"
 | |
| 	help
 | |
| 	  The M3T-M32700UT is an evaluation board based on uT-Engine
 | |
| 	  specification.  This board has an M32700 (Chaos) evaluation chip.
 | |
| 	  You can say Y for SMP, because the M32700 is a single chip
 | |
| 	  multiprocessor.
 | |
| 
 | |
| config PLAT_OPSPUT
 | |
| 	bool "OPSPUT"
 | |
| 	help
 | |
| 	  The OPSPUT is an evaluation board based on uT-Engine
 | |
| 	  specification.  This board has a OPSP-REP chip.
 | |
| 
 | |
| config PLAT_OAKS32R
 | |
| 	bool "OAKS32R"
 | |
| 	help
 | |
| 	  The OAKS32R is a tiny, inexpensive evaluation board.
 | |
| 	  Please note that if you say Y here and choose chip "M32102",
 | |
| 	  say N for MMU and select a no-MMU version kernel, otherwise
 | |
| 	  a kernel with MMU support will not work, because the M32102
 | |
| 	  is a microcontroller for embedded systems and it has no MMU.
 | |
| 
 | |
| config PLAT_MAPPI2
 | |
|        bool "Mappi-II(M3A-ZA36/M3A-ZA52)"
 | |
| 
 | |
| config PLAT_MAPPI3
 | |
|        bool "Mappi-III(M3A-2170)"
 | |
| 
 | |
| config PLAT_M32104UT
 | |
| 	bool "M32104UT"
 | |
| 	help
 | |
| 	  The M3T-M32104UT is an reference board based on uT-Engine
 | |
| 	  specification.  This board has a M32104 chip.
 | |
| 
 | |
| endchoice
 | |
| 
 | |
| choice
 | |
| 	prompt "Processor family"
 | |
| 	default CHIP_M32700
 | |
| 
 | |
| config CHIP_M32700
 | |
| 	bool "M32700 (Chaos)"
 | |
| 
 | |
| config CHIP_M32102
 | |
| 	bool "M32102"
 | |
| 
 | |
| config CHIP_M32104
 | |
| 	bool "M32104"
 | |
| 	depends on PLAT_M32104UT
 | |
| 
 | |
| config CHIP_VDEC2
 | |
|        bool "VDEC2"
 | |
| 
 | |
| config CHIP_OPSP
 | |
|        bool "OPSP"
 | |
| 
 | |
| endchoice
 | |
| 
 | |
| config MMU
 | |
| 	bool "Support for memory management hardware"
 | |
| 	depends on CHIP_M32700 || CHIP_VDEC2 || CHIP_OPSP
 | |
| 	default y
 | |
| 
 | |
| config TLB_ENTRIES
 | |
|        int "TLB Entries"
 | |
|        depends on CHIP_M32700 || CHIP_VDEC2 || CHIP_OPSP
 | |
|        default 32 if CHIP_M32700 || CHIP_OPSP
 | |
|        default 16 if CHIP_VDEC2
 | |
| 
 | |
| 
 | |
| config ISA_M32R
 | |
|         bool
 | |
| 	depends on CHIP_M32102 || CHIP_M32104
 | |
| 	default y
 | |
| 
 | |
| config ISA_M32R2
 | |
| 	bool
 | |
| 	depends on CHIP_M32700 || CHIP_VDEC2 || CHIP_OPSP
 | |
| 	default y
 | |
| 
 | |
| config ISA_DSP_LEVEL2
 | |
| 	bool
 | |
| 	depends on CHIP_M32700 || CHIP_OPSP
 | |
| 	default y
 | |
| 
 | |
| config ISA_DUAL_ISSUE
 | |
| 	bool
 | |
| 	depends on CHIP_M32700 || CHIP_OPSP
 | |
| 	default y
 | |
| 
 | |
| config BUS_CLOCK
 | |
| 	int "Bus Clock [Hz] (integer)"
 | |
| 	default "70000000" if PLAT_MAPPI
 | |
| 	default "25000000" if PLAT_USRV
 | |
| 	default "50000000" if PLAT_MAPPI3
 | |
| 	default "50000000" if PLAT_M32700UT
 | |
| 	default "50000000" if PLAT_OPSPUT
 | |
| 	default "54000000" if PLAT_M32104UT
 | |
| 	default "33333333" if PLAT_OAKS32R
 | |
| 	default "20000000" if PLAT_MAPPI2
 | |
| 
 | |
| config TIMER_DIVIDE
 | |
| 	int "Timer divider (integer)"
 | |
| 	default "128"
 | |
| 
 | |
| config CPU_LITTLE_ENDIAN
 | |
|         bool "Generate little endian code"
 | |
| 	default n
 | |
| 
 | |
| config MEMORY_START
 | |
| 	hex "Physical memory start address (hex)"
 | |
| 	default "08000000" if PLAT_MAPPI || PLAT_MAPPI2 || PLAT_MAPPI3
 | |
| 	default "08000000" if PLAT_USRV
 | |
| 	default "08000000" if PLAT_M32700UT
 | |
| 	default "08000000" if PLAT_OPSPUT
 | |
| 	default "04000000" if PLAT_M32104UT
 | |
| 	default "01000000" if PLAT_OAKS32R
 | |
| 
 | |
| config MEMORY_SIZE
 | |
| 	hex "Physical memory size (hex)"
 | |
| 	default "08000000" if PLAT_MAPPI3
 | |
| 	default "04000000" if PLAT_MAPPI || PLAT_MAPPI2
 | |
| 	default "02000000" if PLAT_USRV
 | |
| 	default "01000000" if PLAT_M32700UT
 | |
| 	default "01000000" if PLAT_OPSPUT
 | |
| 	default "01000000" if PLAT_M32104UT
 | |
| 	default "00800000" if PLAT_OAKS32R
 | |
| 
 | |
| config NOHIGHMEM
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config ARCH_DISCONTIGMEM_ENABLE
 | |
| 	bool "Internal RAM Support"
 | |
| 	depends on CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104
 | |
| 	default y
 | |
| 
 | |
| source "mm/Kconfig"
 | |
| 
 | |
| config IRAM_START
 | |
| 	hex "Internal memory start address (hex)"
 | |
| 	default "00f00000" if !CHIP_M32104
 | |
| 	default "00700000" if CHIP_M32104
 | |
| 	depends on (CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104) && DISCONTIGMEM
 | |
| 
 | |
| config IRAM_SIZE
 | |
| 	hex "Internal memory size (hex)"
 | |
| 	depends on (CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104) && DISCONTIGMEM
 | |
| 	default "00080000" if CHIP_M32700
 | |
| 	default "00010000" if CHIP_M32102 || CHIP_OPSP || CHIP_M32104
 | |
| 	default "00008000" if CHIP_VDEC2
 | |
| 
 | |
| #
 | |
| # Define implied options from the CPU selection here
 | |
| #
 | |
| 
 | |
| config RWSEM_GENERIC_SPINLOCK
 | |
| 	bool
 | |
| 	depends on M32R
 | |
| 	default y
 | |
| 
 | |
| config RWSEM_XCHGADD_ALGORITHM
 | |
| 	bool
 | |
| 	default n
 | |
| 
 | |
| config ARCH_HAS_ILOG2_U32
 | |
| 	bool
 | |
| 	default n
 | |
| 
 | |
| config ARCH_HAS_ILOG2_U64
 | |
| 	bool
 | |
| 	default n
 | |
| 
 | |
| config GENERIC_FIND_NEXT_BIT
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config GENERIC_HWEIGHT
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config GENERIC_CALIBRATE_DELAY
 | |
| 	bool
 | |
| 	default y
 | |
| 
 | |
| config SCHED_NO_NO_OMIT_FRAME_POINTER
 | |
|         bool
 | |
|         default y
 | |
| 
 | |
| config PREEMPT
 | |
| 	bool "Preemptible Kernel"
 | |
| 	help
 | |
| 	  This option reduces the latency of the kernel when reacting to
 | |
| 	  real-time or interactive events by allowing a low priority process to
 | |
| 	  be preempted even if it is in kernel mode executing a system call.
 | |
| 	  This allows applications to run more reliably even when the system is
 | |
| 	  under load.
 | |
| 
 | |
| 	  Say Y here if you are building a kernel for a desktop, embedded
 | |
| 	  or real-time system.  Say N if you are unsure.
 | |
| 
 | |
| config SMP
 | |
| 	bool "Symmetric multi-processing support"
 | |
| 	---help---
 | |
| 	  This enables support for systems with more than one CPU. If you have
 | |
| 	  a system with only one CPU, like most personal computers, say N. If
 | |
| 	  you have a system with more than one CPU, say Y.
 | |
| 
 | |
| 	  If you say N here, the kernel will run on single and multiprocessor
 | |
| 	  machines, but will use only one CPU of a multiprocessor machine. If
 | |
| 	  you say Y here, the kernel will run on many, but not all,
 | |
| 	  singleprocessor machines. On a singleprocessor machine, the kernel
 | |
| 	  will run faster if you say N here.
 | |
| 
 | |
| 	  People using multiprocessor machines who say Y here should also say
 | |
| 	  Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
 | |
| 	  Management" code will be disabled if you say Y here.
 | |
| 
 | |
| 	  See also the <file:Documentation/smp.txt>,
 | |
| 	  and the SMP-HOWTO available at
 | |
| 	  <http://www.linuxdoc.org/docs.html#howto>.
 | |
| 
 | |
| 	  If you don't know what to do here, say N.
 | |
| 
 | |
| config CHIP_M32700_TS1
 | |
| 	bool "Workaround code for the M32700 TS1 chip's bug"
 | |
| 	depends on (CHIP_M32700 && SMP)
 | |
| 	default n
 | |
| 
 | |
| config NR_CPUS
 | |
| 	int "Maximum number of CPUs (2-32)"
 | |
| 	range 2 32
 | |
| 	depends on SMP
 | |
| 	default "2"
 | |
| 	help
 | |
| 	  This allows you to specify the maximum number of CPUs which this
 | |
| 	  kernel will support.  The maximum supported value is 32 and the
 | |
| 	  minimum value which makes sense is 2.
 | |
| 
 | |
| 	  This is purely to save memory - each supported CPU adds
 | |
| 	  approximately eight kilobytes to the kernel image.
 | |
| 
 | |
| # Common NUMA Features
 | |
| config NUMA
 | |
| 	bool "Numa Memory Allocation Support"
 | |
| 	depends on SMP && BROKEN
 | |
| 	default n
 | |
| 
 | |
| config NODES_SHIFT
 | |
| 	int
 | |
| 	default "1"
 | |
| 	depends on NEED_MULTIPLE_NODES
 | |
| 
 | |
| # turning this on wastes a bunch of space.
 | |
| # Summit needs it only when NUMA is on
 | |
| config BOOT_IOREMAP
 | |
| 	bool
 | |
| 	depends on NUMA
 | |
| 	default n
 | |
| 
 | |
| endmenu
 | |
| 
 | |
| 
 | |
| menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
 | |
| 
 | |
| config PCI
 | |
| 	bool "PCI support"
 | |
| 	depends on BROKEN
 | |
| 	default n
 | |
| 	help
 | |
| 	  Find out whether you have a PCI motherboard. PCI is the name of a
 | |
| 	  bus system, i.e. the way the CPU talks to the other stuff inside
 | |
| 	  your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
 | |
| 	  VESA. If you have PCI, say Y, otherwise N.
 | |
| 
 | |
| 	  The PCI-HOWTO, available from
 | |
| 	  <http://www.linuxdoc.org/docs.html#howto>, contains valuable
 | |
| 	  information about which PCI hardware does work under Linux and which
 | |
| 	  doesn't.
 | |
| 
 | |
| choice
 | |
| 	prompt "PCI access mode"
 | |
| 	depends on PCI
 | |
| 	default PCI_GOANY
 | |
| 
 | |
| config PCI_GOBIOS
 | |
| 	bool "BIOS"
 | |
| 	---help---
 | |
| 	  On PCI systems, the BIOS can be used to detect the PCI devices and
 | |
| 	  determine their configuration. However, some old PCI motherboards
 | |
| 	  have BIOS bugs and may crash if this is done. Also, some embedded
 | |
| 	  PCI-based systems don't have any BIOS at all. Linux can also try to
 | |
| 	  detect the PCI hardware directly without using the BIOS.
 | |
| 
 | |
| 	  With this option, you can specify how Linux should detect the PCI
 | |
| 	  devices. If you choose "BIOS", the BIOS will be used, if you choose
 | |
| 	  "Direct", the BIOS won't be used, and if you choose "Any", the
 | |
| 	  kernel will try the direct access method and falls back to the BIOS
 | |
| 	  if that doesn't work. If unsure, go with the default, which is
 | |
| 	  "Any".
 | |
| 
 | |
| config PCI_GODIRECT
 | |
| 	bool "Direct"
 | |
| 
 | |
| config PCI_GOANY
 | |
| 	bool "Any"
 | |
| 
 | |
| endchoice
 | |
| 
 | |
| config PCI_BIOS
 | |
| 	bool
 | |
| 	depends on PCI && (PCI_GOBIOS || PCI_GOANY)
 | |
| 	default y
 | |
| 
 | |
| config PCI_DIRECT
 | |
| 	bool
 | |
|  	depends on PCI && (PCI_GODIRECT || PCI_GOANY)
 | |
| 	default y
 | |
| 
 | |
| source "drivers/pci/Kconfig"
 | |
| 
 | |
| config ISA
 | |
| 	bool "ISA support"
 | |
| 	help
 | |
| 	  Find out whether you have ISA slots on your motherboard.  ISA is the
 | |
| 	  name of a bus system, i.e. the way the CPU talks to the other stuff
 | |
| 	  inside your box.  If you have ISA, say Y, otherwise N.
 | |
| 
 | |
| source "drivers/pcmcia/Kconfig"
 | |
| 
 | |
| source "drivers/pci/hotplug/Kconfig"
 | |
| 
 | |
| endmenu
 | |
| 
 | |
| 
 | |
| menu "Executable file formats"
 | |
| 
 | |
| source "fs/Kconfig.binfmt"
 | |
| 
 | |
| endmenu
 | |
| 
 | |
| source "net/Kconfig"
 | |
| 
 | |
| source "drivers/Kconfig"
 | |
| 
 | |
| source "fs/Kconfig"
 | |
| 
 | |
| source "arch/m32r/oprofile/Kconfig"
 | |
| 
 | |
| source "arch/m32r/Kconfig.debug"
 | |
| 
 | |
| source "security/Kconfig"
 | |
| 
 | |
| source "crypto/Kconfig"
 | |
| 
 | |
| source "lib/Kconfig"
 |