提交 74da3863 编写于 作者: L Linus Torvalds

Merge tag 'tiny/for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/josh/linux

Pull "tinification" patches from Josh Triplett.

Work on making smaller kernels.

* tag 'tiny/for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/josh/linux:
  bloat-o-meter: Ignore syscall aliases SyS_ and compat_SyS_
  mm: Support compiling out madvise and fadvise
  x86: Support compiling out human-friendly processor feature names
  x86: Drop support for /proc files when !CONFIG_PROC_FS
  x86, boot: Don't compile early_serial_console.c when !CONFIG_EARLY_PRINTK
  x86, boot: Don't compile aslr.c when !CONFIG_RANDOMIZE_BASE
  x86, boot: Use the usual -y -n mechanism for objects in vmlinux
  x86: Add "make tinyconfig" to configure the tiniest possible kernel
  x86, platform, kconfig: move kvmconfig functionality to a helper
...@@ -137,6 +137,7 @@ config X86 ...@@ -137,6 +137,7 @@ config X86
select HAVE_ACPI_APEI if ACPI select HAVE_ACPI_APEI if ACPI
select HAVE_ACPI_APEI_NMI if ACPI select HAVE_ACPI_APEI_NMI if ACPI
select ACPI_LEGACY_TABLES_LOOKUP if ACPI select ACPI_LEGACY_TABLES_LOOKUP if ACPI
select X86_FEATURE_NAMES if PROC_FS
config INSTRUCTION_DECODER config INSTRUCTION_DECODER
def_bool y def_bool y
...@@ -314,6 +315,17 @@ config SMP ...@@ -314,6 +315,17 @@ config SMP
If you don't know what to do here, say N. If you don't know what to do here, say N.
config X86_FEATURE_NAMES
bool "Processor feature human-readable names" if EMBEDDED
default y
---help---
This option compiles in a table of x86 feature bits and corresponding
names. This is required to support /proc/cpuinfo and a few kernel
messages. You can disable this to save space, at the expense of
making those few kernel messages show numeric feature bits instead.
If in doubt, say Y.
config X86_X2APIC config X86_X2APIC
bool "Support x2apic" bool "Support x2apic"
depends on X86_LOCAL_APIC && X86_64 && IRQ_REMAP depends on X86_LOCAL_APIC && X86_64 && IRQ_REMAP
......
...@@ -253,12 +253,6 @@ archclean: ...@@ -253,12 +253,6 @@ archclean:
$(Q)$(MAKE) $(clean)=arch/x86/tools $(Q)$(MAKE) $(clean)=arch/x86/tools
$(Q)$(MAKE) $(clean)=arch/x86/purgatory $(Q)$(MAKE) $(clean)=arch/x86/purgatory
PHONY += kvmconfig
kvmconfig:
$(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target))
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config $(srctree)/arch/x86/configs/kvm_guest.config
$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
define archhelp define archhelp
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
echo ' install - Install kernel using' echo ' install - Install kernel using'
...@@ -272,5 +266,4 @@ define archhelp ...@@ -272,5 +266,4 @@ define archhelp
echo ' bzdisk/fdimage*/isoimage also accept:' echo ' bzdisk/fdimage*/isoimage also accept:'
echo ' FDARGS="..." arguments for the booted kernel' echo ' FDARGS="..." arguments for the booted kernel'
echo ' FDINITRD=file initrd for the booted kernel' echo ' FDINITRD=file initrd for the booted kernel'
echo ' kvmconfig - Enable additional options for guest kernel support'
endef endef
...@@ -35,12 +35,14 @@ setup-y += video-vesa.o ...@@ -35,12 +35,14 @@ setup-y += video-vesa.o
setup-y += video-bios.o setup-y += video-bios.o
targets += $(setup-y) targets += $(setup-y)
hostprogs-y := mkcpustr tools/build hostprogs-y := tools/build
hostprogs-$(CONFIG_X86_FEATURE_NAMES) += mkcpustr
HOST_EXTRACFLAGS += -I$(srctree)/tools/include \ HOST_EXTRACFLAGS += -I$(srctree)/tools/include \
-include include/generated/autoconf.h \ -include include/generated/autoconf.h \
-D__EXPORTED_HEADERS__ -D__EXPORTED_HEADERS__
ifdef CONFIG_X86_FEATURE_NAMES
$(obj)/cpu.o: $(obj)/cpustr.h $(obj)/cpu.o: $(obj)/cpustr.h
quiet_cmd_cpustr = CPUSTR $@ quiet_cmd_cpustr = CPUSTR $@
...@@ -48,6 +50,7 @@ quiet_cmd_cpustr = CPUSTR $@ ...@@ -48,6 +50,7 @@ quiet_cmd_cpustr = CPUSTR $@
targets += cpustr.h targets += cpustr.h
$(obj)/cpustr.h: $(obj)/mkcpustr FORCE $(obj)/cpustr.h: $(obj)/mkcpustr FORCE
$(call if_changed,cpustr) $(call if_changed,cpustr)
endif
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
......
...@@ -26,17 +26,18 @@ LDFLAGS_vmlinux := -T ...@@ -26,17 +26,18 @@ LDFLAGS_vmlinux := -T
hostprogs-y := mkpiggy hostprogs-y := mkpiggy
HOST_EXTRACFLAGS += -I$(srctree)/tools/include HOST_EXTRACFLAGS += -I$(srctree)/tools/include
VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ vmlinux-objs-y := $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \
$(obj)/string.o $(obj)/cmdline.o $(obj)/early_serial_console.o \ $(obj)/string.o $(obj)/cmdline.o \
$(obj)/piggy.o $(obj)/cpuflags.o $(obj)/aslr.o $(obj)/piggy.o $(obj)/cpuflags.o
vmlinux-objs-$(CONFIG_EARLY_PRINTK) += $(obj)/early_serial_console.o
vmlinux-objs-$(CONFIG_RANDOMIZE_BASE) += $(obj)/aslr.o
$(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone
ifeq ($(CONFIG_EFI_STUB), y) vmlinux-objs-$(CONFIG_EFI_STUB) += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o
VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o
endif
$(obj)/vmlinux: $(VMLINUX_OBJS) FORCE $(obj)/vmlinux: $(vmlinux-objs-y) FORCE
$(call if_changed,ld) $(call if_changed,ld)
@: @:
...@@ -44,7 +45,7 @@ OBJCOPYFLAGS_vmlinux.bin := -R .comment -S ...@@ -44,7 +45,7 @@ OBJCOPYFLAGS_vmlinux.bin := -R .comment -S
$(obj)/vmlinux.bin: vmlinux FORCE $(obj)/vmlinux.bin: vmlinux FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)
targets += $(patsubst $(obj)/%,%,$(VMLINUX_OBJS)) vmlinux.bin.all vmlinux.relocs targets += $(patsubst $(obj)/%,%,$(vmlinux-objs-y)) vmlinux.bin.all vmlinux.relocs
CMD_RELOCS = arch/x86/tools/relocs CMD_RELOCS = arch/x86/tools/relocs
quiet_cmd_relocs = RELOCS $@ quiet_cmd_relocs = RELOCS $@
......
#include "misc.h" #include "misc.h"
#ifdef CONFIG_RANDOMIZE_BASE
#include <asm/msr.h> #include <asm/msr.h>
#include <asm/archrandom.h> #include <asm/archrandom.h>
#include <asm/e820.h> #include <asm/e820.h>
...@@ -335,5 +334,3 @@ unsigned char *choose_kernel_location(unsigned char *input, ...@@ -335,5 +334,3 @@ unsigned char *choose_kernel_location(unsigned char *input,
out: out:
return (unsigned char *)choice; return (unsigned char *)choice;
} }
#endif /* CONFIG_RANDOMIZE_BASE */
#include "misc.h" #include "misc.h"
#ifdef CONFIG_EARLY_PRINTK
int early_serial_base; int early_serial_base;
#include "../early_serial_console.c" #include "../early_serial_console.c"
#endif
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
*/ */
#include "boot.h" #include "boot.h"
#ifdef CONFIG_X86_FEATURE_NAMES
#include "cpustr.h" #include "cpustr.h"
#endif
static char *cpu_name(int level) static char *cpu_name(int level)
{ {
...@@ -32,32 +34,13 @@ static char *cpu_name(int level) ...@@ -32,32 +34,13 @@ static char *cpu_name(int level)
} }
} }
int validate_cpu(void) static void show_cap_strs(u32 *err_flags)
{ {
u32 *err_flags;
int cpu_level, req_level;
const unsigned char *msg_strs;
check_cpu(&cpu_level, &req_level, &err_flags);
if (cpu_level < req_level) {
printf("This kernel requires an %s CPU, ",
cpu_name(req_level));
printf("but only detected an %s CPU.\n",
cpu_name(cpu_level));
return -1;
}
if (err_flags) {
int i, j; int i, j;
puts("This kernel requires the following features " #ifdef CONFIG_X86_FEATURE_NAMES
"not present on the CPU:\n"); const unsigned char *msg_strs = (const unsigned char *)x86_cap_strs;
msg_strs = (const unsigned char *)x86_cap_strs;
for (i = 0; i < NCAPINTS; i++) { for (i = 0; i < NCAPINTS; i++) {
u32 e = err_flags[i]; u32 e = err_flags[i];
for (j = 0; j < 32; j++) { for (j = 0; j < 32; j++) {
if (msg_strs[0] < i || if (msg_strs[0] < i ||
(msg_strs[0] == i && msg_strs[1] < j)) { (msg_strs[0] == i && msg_strs[1] < j)) {
...@@ -77,6 +60,37 @@ int validate_cpu(void) ...@@ -77,6 +60,37 @@ int validate_cpu(void)
e >>= 1; e >>= 1;
} }
} }
#else
for (i = 0; i < NCAPINTS; i++) {
u32 e = err_flags[i];
for (j = 0; j < 32; j++) {
if (e & 1)
printf("%d:%d ", i, j);
e >>= 1;
}
}
#endif
}
int validate_cpu(void)
{
u32 *err_flags;
int cpu_level, req_level;
check_cpu(&cpu_level, &req_level, &err_flags);
if (cpu_level < req_level) {
printf("This kernel requires an %s CPU, ",
cpu_name(req_level));
printf("but only detected an %s CPU.\n",
cpu_name(cpu_level));
return -1;
}
if (err_flags) {
puts("This kernel requires the following features "
"not present on the CPU:\n");
show_cap_strs(err_flags);
putchar('\n'); putchar('\n');
return -1; return -1;
} else { } else {
......
...@@ -250,8 +250,15 @@ ...@@ -250,8 +250,15 @@
#include <asm/asm.h> #include <asm/asm.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#ifdef CONFIG_X86_FEATURE_NAMES
extern const char * const x86_cap_flags[NCAPINTS*32]; extern const char * const x86_cap_flags[NCAPINTS*32];
extern const char * const x86_power_flags[32]; extern const char * const x86_power_flags[32];
#define X86_CAP_FMT "%s"
#define x86_cap_flag(flag) x86_cap_flags[flag]
#else
#define X86_CAP_FMT "%d:%d"
#define x86_cap_flag(flag) ((flag) >> 5), ((flag) & 31)
#endif
/* /*
* In order to save room, we index into this array by doing * In order to save room, we index into this array by doing
......
...@@ -13,10 +13,13 @@ nostackp := $(call cc-option, -fno-stack-protector) ...@@ -13,10 +13,13 @@ nostackp := $(call cc-option, -fno-stack-protector)
CFLAGS_common.o := $(nostackp) CFLAGS_common.o := $(nostackp)
obj-y := intel_cacheinfo.o scattered.o topology.o obj-y := intel_cacheinfo.o scattered.o topology.o
obj-y += proc.o capflags.o powerflags.o common.o obj-y += common.o
obj-y += rdrand.o obj-y += rdrand.o
obj-y += match.o obj-y += match.o
obj-$(CONFIG_PROC_FS) += proc.o
obj-$(CONFIG_X86_FEATURE_NAMES) += capflags.o powerflags.o
obj-$(CONFIG_X86_32) += bugs.o obj-$(CONFIG_X86_32) += bugs.o
obj-$(CONFIG_X86_64) += bugs_64.o obj-$(CONFIG_X86_64) += bugs_64.o
...@@ -48,6 +51,7 @@ obj-$(CONFIG_X86_LOCAL_APIC) += perfctr-watchdog.o perf_event_amd_ibs.o ...@@ -48,6 +51,7 @@ obj-$(CONFIG_X86_LOCAL_APIC) += perfctr-watchdog.o perf_event_amd_ibs.o
obj-$(CONFIG_HYPERVISOR_GUEST) += vmware.o hypervisor.o mshyperv.o obj-$(CONFIG_HYPERVISOR_GUEST) += vmware.o hypervisor.o mshyperv.o
ifdef CONFIG_X86_FEATURE_NAMES
quiet_cmd_mkcapflags = MKCAP $@ quiet_cmd_mkcapflags = MKCAP $@
cmd_mkcapflags = $(CONFIG_SHELL) $(srctree)/$(src)/mkcapflags.sh $< $@ cmd_mkcapflags = $(CONFIG_SHELL) $(srctree)/$(src)/mkcapflags.sh $< $@
...@@ -56,3 +60,4 @@ cpufeature = $(src)/../../include/asm/cpufeature.h ...@@ -56,3 +60,4 @@ cpufeature = $(src)/../../include/asm/cpufeature.h
targets += capflags.c targets += capflags.c
$(obj)/capflags.c: $(cpufeature) $(src)/mkcapflags.sh FORCE $(obj)/capflags.c: $(cpufeature) $(src)/mkcapflags.sh FORCE
$(call if_changed,mkcapflags) $(call if_changed,mkcapflags)
endif
...@@ -346,8 +346,8 @@ static void filter_cpuid_features(struct cpuinfo_x86 *c, bool warn) ...@@ -346,8 +346,8 @@ static void filter_cpuid_features(struct cpuinfo_x86 *c, bool warn)
continue; continue;
printk(KERN_WARNING printk(KERN_WARNING
"CPU: CPU feature %s disabled, no CPUID level 0x%x\n", "CPU: CPU feature " X86_CAP_FMT " disabled, no CPUID level 0x%x\n",
x86_cap_flags[df->feature], df->level); x86_cap_flag(df->feature), df->level);
} }
} }
......
...@@ -1540,6 +1540,16 @@ config AIO ...@@ -1540,6 +1540,16 @@ config AIO
by some high performance threaded applications. Disabling by some high performance threaded applications. Disabling
this option saves about 7k. this option saves about 7k.
config ADVISE_SYSCALLS
bool "Enable madvise/fadvise syscalls" if EXPERT
default y
help
This option enables the madvise and fadvise syscalls, used by
applications to advise the kernel about their future memory or file
usage, improving performance. If building an embedded system where no
applications use these syscalls, you can disable this option to save
space.
config PCI_QUIRKS config PCI_QUIRKS
default y default y
bool "Enable PCI quirk workarounds" if EXPERT bool "Enable PCI quirk workarounds" if EXPERT
......
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_KERNEL_XZ=y
CONFIG_OPTIMIZE_INLINING=y
CONFIG_SLOB=y
...@@ -156,6 +156,9 @@ cond_syscall(sys_process_vm_writev); ...@@ -156,6 +156,9 @@ cond_syscall(sys_process_vm_writev);
cond_syscall(compat_sys_process_vm_readv); cond_syscall(compat_sys_process_vm_readv);
cond_syscall(compat_sys_process_vm_writev); cond_syscall(compat_sys_process_vm_writev);
cond_syscall(sys_uselib); cond_syscall(sys_uselib);
cond_syscall(sys_fadvise64);
cond_syscall(sys_fadvise64_64);
cond_syscall(sys_madvise);
/* arch-specific weak syscall entries */ /* arch-specific weak syscall entries */
cond_syscall(sys_pciconfig_read); cond_syscall(sys_pciconfig_read);
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# #
mmu-y := nommu.o mmu-y := nommu.o
mmu-$(CONFIG_MMU) := fremap.o gup.o highmem.o madvise.o memory.o mincore.o \ mmu-$(CONFIG_MMU) := fremap.o gup.o highmem.o memory.o mincore.o \
mlock.o mmap.o mprotect.o mremap.o msync.o rmap.o \ mlock.o mmap.o mprotect.o mremap.o msync.o rmap.o \
vmalloc.o pagewalk.o pgtable-generic.o vmalloc.o pagewalk.o pgtable-generic.o
...@@ -11,7 +11,7 @@ ifdef CONFIG_CROSS_MEMORY_ATTACH ...@@ -11,7 +11,7 @@ ifdef CONFIG_CROSS_MEMORY_ATTACH
mmu-$(CONFIG_MMU) += process_vm_access.o mmu-$(CONFIG_MMU) += process_vm_access.o
endif endif
obj-y := filemap.o mempool.o oom_kill.o fadvise.o \ obj-y := filemap.o mempool.o oom_kill.o \
maccess.o page_alloc.o page-writeback.o \ maccess.o page_alloc.o page-writeback.o \
readahead.o swap.o truncate.o vmscan.o shmem.o \ readahead.o swap.o truncate.o vmscan.o shmem.o \
util.o mmzone.o vmstat.o backing-dev.o \ util.o mmzone.o vmstat.o backing-dev.o \
...@@ -28,6 +28,9 @@ else ...@@ -28,6 +28,9 @@ else
obj-y += bootmem.o obj-y += bootmem.o
endif endif
ifdef CONFIG_MMU
obj-$(CONFIG_ADVISE_SYSCALLS) += fadvise.o madvise.o
endif
obj-$(CONFIG_HAVE_MEMBLOCK) += memblock.o obj-$(CONFIG_HAVE_MEMBLOCK) += memblock.o
obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o
......
...@@ -20,6 +20,8 @@ def getsizes(file): ...@@ -20,6 +20,8 @@ def getsizes(file):
if type in "tTdDbBrR": if type in "tTdDbBrR":
# strip generated symbols # strip generated symbols
if name.startswith("__mod_"): continue if name.startswith("__mod_"): continue
if name.startswith("SyS_"): continue
if name.startswith("compat_SyS_"): continue
if name == "linux_banner": continue if name == "linux_banner": continue
# statics and some other optimizations adds random .NUMBER # statics and some other optimizations adds random .NUMBER
name = re.sub(r'\.[0-9]+', '', name) name = re.sub(r'\.[0-9]+', '', name)
......
...@@ -104,6 +104,23 @@ endif ...@@ -104,6 +104,23 @@ endif
%_defconfig: $(obj)/conf %_defconfig: $(obj)/conf
$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
configfiles=$(wildcard $(srctree)/kernel/configs/$(1).config $(srctree)/arch/$(SRCARCH)/configs/$(1).config)
define mergeconfig
$(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target))
$(if $(call configfiles,$(1)),, $(error No configuration exists for this target on this architecture))
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config $(call configfiles,$(1))
$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
endef
PHONY += kvmconfig
kvmconfig:
$(call mergeconfig,kvm_guest)
PHONY += tinyconfig
tinyconfig: allnoconfig
$(call mergeconfig,tiny)
# Help text used by make help # Help text used by make help
help: help:
@echo ' config - Update current config utilising a line-oriented program' @echo ' config - Update current config utilising a line-oriented program'
...@@ -124,6 +141,8 @@ help: ...@@ -124,6 +141,8 @@ help:
@echo ' randconfig - New config with random answer to all options' @echo ' randconfig - New config with random answer to all options'
@echo ' listnewconfig - List new options' @echo ' listnewconfig - List new options'
@echo ' olddefconfig - Same as silentoldconfig but sets new symbols to their default value' @echo ' olddefconfig - Same as silentoldconfig but sets new symbols to their default value'
@echo ' kvmconfig - Enable additional options for guest kernel support'
@echo ' tinyconfig - Configure the tiniest possible kernel'
# lxdialog stuff # lxdialog stuff
check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册