mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-18 23:18:20 +00:00
bdc807871d
When the conversion factor between jiffies and milli- or microseconds is not a single multiply or divide, as for the case of HZ == 300, we currently do a multiply followed by a divide. The intervening result, however, is subject to overflows, especially since the fraction is not simplified (for HZ == 300, we multiply by 300 and divide by 1000). This is exposed to the user when passing a large timeout to poll(), for example. This patch replaces the multiply-divide with a reciprocal multiplication on 32-bit platforms. When the input is an unsigned long, there is no portable way to do this on 64-bit platforms there is no portable way to do this since it requires a 128-bit intermediate result (which gcc does support on 64-bit platforms but may generate libgcc calls, e.g. on 64-bit s390), but since the output is a 32-bit integer in the cases affected, just simplify the multiply-divide (*3/10 instead of *300/1000). The reciprocal multiply used can have off-by-one errors in the upper half of the valid output range. This could be avoided at the expense of having to deal with a potential 65-bit intermediate result. Since the intent is to avoid overflow problems and most of the other time conversions are only semiexact, the off-by-one errors were considered an acceptable tradeoff. At Ralf Baechle's suggestion, this version uses a Perl script to compute the necessary constants. We already have dependencies on Perl for kernel compiles. This does, however, require the Perl module Math::BigInt, which is included in the standard Perl distribution starting with version 5.8.0. In order to support older versions of Perl, include a table of canned constants in the script itself, and structure the script so that Math::BigInt isn't required if pulling values from said table. Running the script requires that the HZ value is available from the Makefile. Thus, this patch also adds the Kconfig variable CONFIG_HZ to the architectures which didn't already have it (alpha, cris, frv, h8300, m32r, m68k, m68knommu, sparc, v850, and xtensa.) It does *not* touch the sh or sh64 architectures, since Paul Mundt has dealt with those separately in the sh tree. Signed-off-by: H. Peter Anvin <hpa@zytor.com> Cc: Ralf Baechle <ralf@linux-mips.org>, Cc: Sam Ravnborg <sam@ravnborg.org>, Cc: Paul Mundt <lethal@linux-sh.org>, Cc: Richard Henderson <rth@twiddle.net>, Cc: Michael Starvik <starvik@axis.com>, Cc: David Howells <dhowells@redhat.com>, Cc: Yoshinori Sato <ysato@users.sourceforge.jp>, Cc: Hirokazu Takata <takata@linux-m32r.org>, Cc: Geert Uytterhoeven <geert@linux-m68k.org>, Cc: Roman Zippel <zippel@linux-m68k.org>, Cc: William L. Irwin <sparclinux@vger.kernel.org>, Cc: Chris Zankel <chris@zankel.net>, Cc: H. Peter Anvin <hpa@zytor.com>, Cc: Jan Engelhardt <jengelh@computergmbh.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
353 lines
6.9 KiB
Plaintext
353 lines
6.9 KiB
Plaintext
#############################################################################
|
|
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see Documentation/kbuild/kconfig-language.txt.
|
|
#
|
|
#############################################################################
|
|
|
|
mainmenu "uClinux/v850 (w/o MMU) Kernel Configuration"
|
|
|
|
config MMU
|
|
bool
|
|
default n
|
|
config ZONE_DMA
|
|
bool
|
|
default y
|
|
config RWSEM_GENERIC_SPINLOCK
|
|
bool
|
|
default y
|
|
config RWSEM_XCHGADD_ALGORITHM
|
|
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 GENERIC_HARDIRQS
|
|
bool
|
|
default y
|
|
|
|
config GENERIC_IRQ_PROBE
|
|
bool
|
|
default y
|
|
|
|
config GENERIC_TIME
|
|
bool
|
|
default y
|
|
|
|
config TIME_LOW_RES
|
|
bool
|
|
default y
|
|
|
|
config ARCH_HAS_ILOG2_U32
|
|
bool
|
|
default n
|
|
|
|
config ARCH_HAS_ILOG2_U64
|
|
bool
|
|
default n
|
|
|
|
config ARCH_SUPPORTS_AOUT
|
|
def_bool y
|
|
|
|
# Turn off some random 386 crap that can affect device config
|
|
config ISA
|
|
bool
|
|
default n
|
|
config ISAPNP
|
|
bool
|
|
default n
|
|
config EISA
|
|
bool
|
|
default n
|
|
config MCA
|
|
bool
|
|
default n
|
|
|
|
|
|
#############################################################################
|
|
#### v850-specific config
|
|
|
|
# Define the architecture
|
|
config V850
|
|
bool
|
|
default y
|
|
|
|
menu "Processor type and features"
|
|
|
|
choice
|
|
prompt "Platform"
|
|
default GDB
|
|
config V850E_SIM
|
|
bool "GDB"
|
|
config RTE_CB_MA1
|
|
bool "RTE-V850E/MA1-CB"
|
|
config RTE_CB_NB85E
|
|
bool "RTE-V850E/NB85E-CB"
|
|
config RTE_CB_ME2
|
|
bool "RTE-V850E/ME2-CB"
|
|
config V850E_AS85EP1
|
|
bool "AS85EP1"
|
|
config V850E2_SIM85E2C
|
|
bool "sim85e2c"
|
|
config V850E2_SIM85E2S
|
|
bool "sim85e2s"
|
|
config V850E2_FPGA85E2C
|
|
bool "NA85E2C-FPGA"
|
|
config V850E2_ANNA
|
|
bool "Anna"
|
|
endchoice
|
|
|
|
#### V850E processor-specific config
|
|
|
|
# All CPUs currently supported use the v850e architecture
|
|
config V850E
|
|
bool
|
|
default y
|
|
|
|
# The RTE-V850E/MA1-CB is the only type of V850E/MA1 platform we
|
|
# currently support
|
|
config V850E_MA1
|
|
bool
|
|
depends on RTE_CB_MA1
|
|
default y
|
|
# Similarly for the RTE-V850E/NB85E-CB - V850E/TEG
|
|
config V850E_TEG
|
|
bool
|
|
depends on RTE_CB_NB85E
|
|
default y
|
|
# ... and the RTE-V850E/ME2-CB - V850E/ME2
|
|
config V850E_ME2
|
|
bool
|
|
depends on RTE_CB_ME2
|
|
default y
|
|
|
|
|
|
#### sim85e2-specific config
|
|
|
|
config V850E2_SIM85E2
|
|
bool
|
|
depends on V850E2_SIM85E2C || V850E2_SIM85E2S
|
|
default y
|
|
|
|
|
|
#### V850E2 processor-specific config
|
|
|
|
# V850E2 processors
|
|
config V850E2
|
|
bool
|
|
depends on V850E2_SIM85E2 || V850E2_FPGA85E2C || V850E2_ANNA
|
|
default y
|
|
|
|
|
|
#### RTE-CB platform-specific config
|
|
|
|
# Boards in the RTE-x-CB series
|
|
config RTE_CB
|
|
bool
|
|
depends on RTE_CB_MA1 || RTE_CB_NB85E || RTE_CB_ME2
|
|
default y
|
|
|
|
config RTE_CB_MULTI
|
|
bool
|
|
# RTE_CB_NB85E can either have multi ROM support or not, but
|
|
# other platforms (currently only RTE_CB_MA1) require it.
|
|
prompt "Multi monitor ROM support" if RTE_CB_NB85E
|
|
depends on RTE_CB_MA1 || RTE_CB_NB85E
|
|
default y
|
|
|
|
config RTE_CB_MULTI_DBTRAP
|
|
bool "Pass illegal insn trap / dbtrap to kernel"
|
|
depends on RTE_CB_MULTI
|
|
default n
|
|
|
|
config RTE_CB_MA1_KSRAM
|
|
bool "Kernel in SRAM (limits size of kernel)"
|
|
depends on RTE_CB_MA1 && RTE_CB_MULTI
|
|
default n
|
|
|
|
config RTE_MB_A_PCI
|
|
bool "Mother-A PCI support"
|
|
depends on RTE_CB
|
|
default y
|
|
|
|
# The GBUS is used to talk to the RTE-MOTHER-A board
|
|
config RTE_GBUS_INT
|
|
bool
|
|
depends on RTE_MB_A_PCI
|
|
default y
|
|
|
|
# The only PCI bus we support is on the RTE-MOTHER-A board
|
|
config PCI
|
|
bool
|
|
default RTE_MB_A_PCI
|
|
|
|
#### Some feature-specific configs
|
|
|
|
# Everything except for the GDB simulator uses the same interrupt controller
|
|
config V850E_INTC
|
|
bool
|
|
default !V850E_SIM
|
|
|
|
# Everything except for the various simulators uses the "Timer D" unit
|
|
config V850E_TIMER_D
|
|
bool
|
|
default !V850E_SIM && !V850E2_SIM85E2
|
|
|
|
# Cache control used on some v850e1 processors
|
|
config V850E_CACHE
|
|
bool
|
|
default V850E_TEG || V850E_ME2
|
|
|
|
# Cache control used on v850e2 processors; I think this should
|
|
# actually apply to more, but currently only the SIM85E2S uses it
|
|
config V850E2_CACHE
|
|
bool
|
|
default V850E2_SIM85E2S
|
|
|
|
config NO_CACHE
|
|
bool
|
|
default !V850E_CACHE && !V850E2_CACHE
|
|
|
|
# HZ depends on the platform
|
|
config HZ
|
|
int
|
|
default 24 if V850E_SIM || V850E2_SIM85E2
|
|
default 122 if V850E2_FPGA85E2C
|
|
default 100
|
|
|
|
#### Misc config
|
|
|
|
config ROM_KERNEL
|
|
bool "Kernel in ROM"
|
|
depends on V850E2_ANNA || V850E_AS85EP1 || RTE_CB_ME2
|
|
|
|
# Some platforms pre-zero memory, in which case the kernel doesn't need to
|
|
config ZERO_BSS
|
|
bool
|
|
depends on !V850E2_SIM85E2C
|
|
default y
|
|
|
|
# The crappy-ass zone allocator requires that the start of allocatable
|
|
# memory be aligned to the largest possible allocation.
|
|
config FORCE_MAX_ZONEORDER
|
|
int
|
|
default 8 if V850E2_SIM85E2C || V850E2_FPGA85E2C
|
|
|
|
config V850E_HIGHRES_TIMER
|
|
bool "High resolution timer support"
|
|
depends on V850E_TIMER_D
|
|
config TIME_BOOTUP
|
|
bool "Time bootup"
|
|
depends on V850E_HIGHRES_TIMER
|
|
|
|
config RESET_GUARD
|
|
bool "Reset Guard"
|
|
|
|
source "mm/Kconfig"
|
|
|
|
endmenu
|
|
|
|
|
|
#############################################################################
|
|
|
|
source init/Kconfig
|
|
|
|
#############################################################################
|
|
|
|
menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
|
|
|
|
# config PCI
|
|
# bool "PCI support"
|
|
# help
|
|
# Support for PCI bus.
|
|
|
|
source "drivers/pci/Kconfig"
|
|
|
|
source "drivers/pcmcia/Kconfig"
|
|
|
|
source "drivers/pci/hotplug/Kconfig"
|
|
|
|
endmenu
|
|
|
|
menu "Executable file formats"
|
|
|
|
source "fs/Kconfig.binfmt"
|
|
|
|
endmenu
|
|
|
|
source "net/Kconfig"
|
|
|
|
#############################################################################
|
|
|
|
source "drivers/base/Kconfig"
|
|
|
|
source drivers/mtd/Kconfig
|
|
|
|
source drivers/parport/Kconfig
|
|
|
|
#source drivers/pnp/Kconfig
|
|
|
|
source drivers/block/Kconfig
|
|
|
|
#############################################################################
|
|
|
|
menu "Disk device support"
|
|
|
|
source "drivers/ide/Kconfig"
|
|
|
|
source "drivers/scsi/Kconfig"
|
|
|
|
endmenu
|
|
|
|
#############################################################################
|
|
|
|
|
|
source "drivers/md/Kconfig"
|
|
|
|
source "drivers/message/fusion/Kconfig"
|
|
|
|
source "drivers/ieee1394/Kconfig"
|
|
|
|
source "drivers/message/i2o/Kconfig"
|
|
|
|
source "drivers/net/Kconfig"
|
|
|
|
source "drivers/isdn/Kconfig"
|
|
|
|
#source "drivers/telephony/Kconfig"
|
|
|
|
#
|
|
# input before char - char/joystick depends on it. As does USB.
|
|
#
|
|
source "drivers/input/Kconfig"
|
|
|
|
source "drivers/char/Kconfig"
|
|
|
|
#source drivers/misc/Config.in
|
|
source "drivers/media/Kconfig"
|
|
|
|
source "fs/Kconfig"
|
|
|
|
source "drivers/video/Kconfig"
|
|
|
|
source "sound/Kconfig"
|
|
|
|
source "drivers/usb/Kconfig"
|
|
|
|
source "arch/v850/Kconfig.debug"
|
|
|
|
source "security/Kconfig"
|
|
|
|
source "crypto/Kconfig"
|
|
|
|
source "lib/Kconfig"
|
|
|
|
#############################################################################
|