diff --git a/[refs] b/[refs] index 139f5192aa15..20baabad02e0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e6c69bd39199656a8bbd0569edaff60574ff9cac +refs/heads/master: a2a979821b6ab75a4f143cfaa1c4672cc259ec10 diff --git a/trunk/Documentation/kbuild/makefiles.txt b/trunk/Documentation/kbuild/makefiles.txt index d802ce88bedc..9a1586590d82 100644 --- a/trunk/Documentation/kbuild/makefiles.txt +++ b/trunk/Documentation/kbuild/makefiles.txt @@ -31,7 +31,7 @@ This document describes the Linux kernel Makefiles. === 6 Architecture Makefiles --- 6.1 Set variables to tweak the build to the architecture - --- 6.2 Add prerequisites to archprepare: + --- 6.2 Add prerequisites to prepare: --- 6.3 List directories to visit when descending --- 6.4 Architecture specific boot images --- 6.5 Building non-kbuild targets @@ -734,18 +734,18 @@ When kbuild executes the following steps are followed (roughly): for loadable kernel modules. ---- 6.2 Add prerequisites to archprepare: +--- 6.2 Add prerequisites to prepare: - The archprepare: rule is used to list prerequisites that needs to be + The prepare: rule is used to list prerequisites that needs to be built before starting to descend down in the subdirectories. This is usual header files containing assembler constants. Example: - #arch/arm/Makefile - archprepare: maketools + #arch/s390/Makefile + prepare: include/asm-$(ARCH)/offsets.h - In this example the file target maketools will be processed - before descending down in the subdirectories. + In this example the file include/asm-$(ARCH)/offsets.h will + be built before descending down in the subdirectories. See also chapter XXX-TODO that describe how kbuild supports generating offset header files. diff --git a/trunk/Makefile b/trunk/Makefile index 45e5a38fbc7a..382298f37adf 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -491,7 +491,6 @@ include .config # If .config is newer than include/linux/autoconf.h, someone tinkered # with it and forgot to run make oldconfig include/linux/autoconf.h: .config - $(Q)mkdir -p include/linux $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig else # Dummy target needed, because used as prerequisite @@ -777,20 +776,15 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ; # Error messages still appears in the original language .PHONY: $(vmlinux-dirs) -$(vmlinux-dirs): prepare scripts +$(vmlinux-dirs): prepare-all scripts $(Q)$(MAKE) $(build)=$@ # Things we need to do before we recursively start building the kernel -# or the modules are listed in "prepare". -# A multi level approach is used. prepareN is processed before prepareN-1. -# archprepare is used in arch Makefiles and when processed asm symlink, -# version.h and scripts_basic is processed / created. - -# Listed in dependency order -.PHONY: prepare archprepare prepare0 prepare1 prepare2 prepare3 +# or the modules are listed in "prepare-all". +# A multi level approach is used. prepare1 is updated first, then prepare0. +# prepare-all is the collection point for the prepare targets. -# prepare-all is deprecated, use prepare as valid replacement -.PHONY: prepare-all +.PHONY: prepare-all prepare prepare0 prepare1 prepare2 prepare3 # prepare3 is used to check if we are building in a separate output directory, # and if so do: @@ -819,13 +813,11 @@ ifneq ($(KBUILD_MODULES),) $(Q)mkdir -p $(MODVERDIR) endif -archprepare: prepare1 scripts_basic - -prepare0: archprepare FORCE +prepare0: prepare prepare1 FORCE $(Q)$(MAKE) $(build)=. # All the preparing.. -prepare prepare-all: prepare0 +prepare-all: prepare0 # Leave this as default for preprocessing vmlinux.lds.S, which is now # done in arch/$(ARCH)/kernel/Makefile @@ -916,7 +908,7 @@ modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) # Target to prepare building external modules .PHONY: modules_prepare -modules_prepare: prepare scripts +modules_prepare: prepare-all scripts # Target to install modules .PHONY: modules_install diff --git a/trunk/arch/arm/Makefile b/trunk/arch/arm/Makefile index 130e6228b587..e625ac66f49b 100644 --- a/trunk/arch/arm/Makefile +++ b/trunk/arch/arm/Makefile @@ -175,7 +175,7 @@ else endif @touch $@ -archprepare: maketools include/asm-arm/.arch +prepare: maketools include/asm-arm/.arch .PHONY: maketools FORCE maketools: include/linux/version.h FORCE diff --git a/trunk/arch/cris/Makefile b/trunk/arch/cris/Makefile index ea65d585cf5e..a00043a91f16 100644 --- a/trunk/arch/cris/Makefile +++ b/trunk/arch/cris/Makefile @@ -107,7 +107,7 @@ archclean: rm -f timage vmlinux.bin decompress.bin rescue.bin cramfs.img rm -rf $(LD_SCRIPT).tmp -archprepare: $(SRC_ARCH)/.links $(srctree)/include/asm-$(ARCH)/.arch +prepare: $(SRC_ARCH)/.links $(srctree)/include/asm-$(ARCH)/.arch # Create some links to make all tools happy $(SRC_ARCH)/.links: diff --git a/trunk/arch/ia64/Makefile b/trunk/arch/ia64/Makefile index 70f8ed2748d1..7ed678cf5e41 100644 --- a/trunk/arch/ia64/Makefile +++ b/trunk/arch/ia64/Makefile @@ -82,7 +82,7 @@ unwcheck: vmlinux archclean: $(Q)$(MAKE) $(clean)=$(boot) -archprepare: include/asm-ia64/.offsets.h.stamp +prepare: include/asm-ia64/.offsets.h.stamp include/asm-ia64/.offsets.h.stamp: mkdir -p include/asm-ia64 diff --git a/trunk/arch/mips/kernel/asm-offsets.c b/trunk/arch/mips/kernel/offset.c similarity index 100% rename from trunk/arch/mips/kernel/asm-offsets.c rename to trunk/arch/mips/kernel/offset.c diff --git a/trunk/arch/ppc/Makefile b/trunk/arch/ppc/Makefile index 16e2675f3270..6dd7b50e0669 100644 --- a/trunk/arch/ppc/Makefile +++ b/trunk/arch/ppc/Makefile @@ -107,7 +107,7 @@ archclean: # Temporary hack until we have migrated to asm-powerpc $(Q)rm -rf arch/$(ARCH)/include -archprepare: checkbin +prepare: checkbin # Temporary hack until we have migrated to asm-powerpc include/asm: arch/$(ARCH)/include/asm diff --git a/trunk/arch/sh/Makefile b/trunk/arch/sh/Makefile index 4a3049080b41..19f00d57acf0 100644 --- a/trunk/arch/sh/Makefile +++ b/trunk/arch/sh/Makefile @@ -152,7 +152,7 @@ endif @touch $@ -archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach +prepare: maketools include/asm-sh/.cpu include/asm-sh/.mach .PHONY: maketools FORCE maketools: include/linux/version.h FORCE diff --git a/trunk/arch/sh64/Makefile b/trunk/arch/sh64/Makefile index 8ca57ffa2b70..39073734a476 100644 --- a/trunk/arch/sh64/Makefile +++ b/trunk/arch/sh64/Makefile @@ -73,7 +73,7 @@ compressed: zImage archclean: $(Q)$(MAKE) $(clean)=$(boot) -archprepare: arch/$(ARCH)/lib/syscalltab.h +prepare: arch/$(ARCH)/lib/syscalltab.h define filechk_gen-syscalltab (set -e; \ diff --git a/trunk/arch/um/Makefile b/trunk/arch/um/Makefile index ce987266dac6..154803a22698 100644 --- a/trunk/arch/um/Makefile +++ b/trunk/arch/um/Makefile @@ -107,7 +107,7 @@ else $(shell cd $(ARCH_DIR) && ln -sf Kconfig.$(SUBARCH) Kconfig.arch) endif -archprepare: $(ARCH_SYMLINKS) $(SYS_HEADERS) $(GEN_HEADERS) +prepare: $(ARCH_SYMLINKS) $(SYS_HEADERS) $(GEN_HEADERS) LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib diff --git a/trunk/arch/xtensa/Makefile b/trunk/arch/xtensa/Makefile index 98fac8489aed..67ef4cd173b9 100644 --- a/trunk/arch/xtensa/Makefile +++ b/trunk/arch/xtensa/Makefile @@ -66,7 +66,7 @@ boot := arch/xtensa/boot archinc := include/asm-xtensa -archprepare: $(archinc)/.platform +prepare: $(archinc)/.platform # Update machine cpu and platform symlinks if something which affects # them changed. diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index 4b83cb230006..ed3bb19d1337 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -904,6 +904,8 @@ extern int task_curr(const task_t *p); extern int idle_cpu(int cpu); extern int sched_setscheduler(struct task_struct *, int, struct sched_param *); extern task_t *idle_task(int cpu); +extern task_t *curr_task(int cpu); +extern void set_curr_task(int cpu, task_t *p); void yield(void); diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index dbd4490afec1..e9ff04a9b56d 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -3576,6 +3576,32 @@ task_t *idle_task(int cpu) return cpu_rq(cpu)->idle; } +/** + * curr_task - return the current task for a given cpu. + * @cpu: the processor in question. + */ +task_t *curr_task(int cpu) +{ + return cpu_curr(cpu); +} + +/** + * set_curr_task - set the current task for a given cpu. + * @cpu: the processor in question. + * @p: the task pointer to set. + * + * Description: This function must only be used when non-maskable interrupts + * are serviced on a separate stack. It allows the architecture to switch the + * notion of the current task on a cpu in a non-blocking manner. This function + * must be called with interrupts disabled, the caller must save the original + * value of the current task (see curr_task() above) and restore that value + * before reenabling interrupts. + */ +void set_curr_task(int cpu, task_t *p) +{ + cpu_curr(cpu) = p; +} + /** * find_process_by_pid - find a process with a matching PID value. * @pid: the pid in question.