diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-03 12:29:15 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-03 12:29:15 -0700 |
commit | 20c4856b1d1939647f71dce5e54fe69fde80013f (patch) | |
tree | bfd8e91ad10acf867934d74c1cf9448f38c9fcd2 | |
parent | c4d36a822e7c51cd6ffcf9133854d5e32489d269 (diff) | |
parent | 627aa944a17ba82ca3ba87dc1d6ee85bd314ec79 (diff) | |
download | linux-20c4856b1d1939647f71dce5e54fe69fde80013f.tar.bz2 |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
[POWERPC] Fix zImage.coff generation for 32-bit pmac
[POWERPC] Fix compile breakage for IBM/AMCC 4xx arch/ppc platforms
[POWERPC] Don't allow PMAC_APM_EMU for 64-bit
[POWERPC] Compare irq numbers with NO_IRQ not IRQ_NONE
[POWERPC] Fix return from pte_alloc_one() in out-of-memory case
[POWERPC] Fix compile warning in pseries xics code
[POWERPC] Don't use HOSTCFLAGS in BOOTCFLAGS
[POWERPC] Create a zImage for legacy iSeries
[POWERPC] pasemi idle uses hard_smp_processor_id
[POWERPC] ps3/interrupt.c uses get_hard_smp_processor_id
[POWERPC] Fix possible access to free pages
[POWERPC] Fix compiler/assembler flags for Ebony platform boot files
[POWERPC] Fix ppc32 single-stepping out of syscalls
[POWERPC] Update documentation for of_find_node_by_type()
-rw-r--r-- | arch/powerpc/Makefile | 1 | ||||
-rw-r--r-- | arch/powerpc/boot/Makefile | 22 | ||||
-rwxr-xr-x | arch/powerpc/boot/wrapper | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/irq.c | 6 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom.c | 11 | ||||
-rw-r--r-- | arch/powerpc/kernel/ptrace.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pasemi/idle.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/interrupt.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/xics.c | 10 | ||||
-rw-r--r-- | arch/ppc/syslib/ibm_ocp.c | 1 | ||||
-rw-r--r-- | drivers/macintosh/Kconfig | 2 | ||||
-rw-r--r-- | include/asm-powerpc/pgalloc-64.h | 3 | ||||
-rw-r--r-- | include/asm-powerpc/tlb.h | 9 |
13 files changed, 46 insertions, 27 deletions
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 6238b5875fd1..fbafd965dcd2 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -142,7 +142,6 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/ # Default to zImage, override when needed defaultimage-y := zImage -defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage KBUILD_IMAGE := $(defaultimage-y) all: $(KBUILD_IMAGE) diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 83788986b93b..ff2701949ee1 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile @@ -11,20 +11,18 @@ # bootloader and increase compatibility with OpenFirmware. # # To this end we need to define BOOTCC, etc, as the tools -# needed to build the 32 bit image. These are normally HOSTCC, -# but may be a third compiler if, for example, you are cross -# compiling from an intel box. Once the 64bit ppc gcc is -# stable it will probably simply be a compiler switch to -# compile for 32bit mode. +# needed to build the 32 bit image. That's normally the same +# compiler for the rest of the kernel, with the -m32 flag added. # To make it easier to setup a cross compiler, # CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE # in the toplevel makefile. all: $(obj)/zImage -HOSTCC := gcc -BOOTCFLAGS := $(HOSTCFLAGS) -fno-builtin -nostdinc -isystem \ - $(shell $(CROSS32CC) -print-file-name=include) -fPIC +BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ + -fno-strict-aliasing -Os -msoft-float -pipe \ + -fomit-frame-pointer -fno-builtin -fPIC -nostdinc \ + -isystem $(shell $(CROSS32CC) -print-file-name=include) BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc ifeq ($(call cc-option-yn, -fstack-protector),y) @@ -33,8 +31,8 @@ endif BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj) -$(obj)/44x.o: BOOTCFLAGS += -Wa,-mbooke -$(obj)/ebony.o: BOOTCFLAGS += -Wa,-mbooke +$(obj)/44x.o: BOOTCFLAGS += -mcpu=440 +$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440 zlib := inffast.c inflate.c inftrees.c zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h @@ -136,6 +134,7 @@ image-$(CONFIG_PPC_EFIKA) += zImage.chrp image-$(CONFIG_PPC_PMAC) += zImage.pmac image-$(CONFIG_PPC_HOLLY) += zImage.holly-elf image-$(CONFIG_PPC_PRPMC2800) += zImage.prpmc2800 +image-$(CONFIG_PPC_ISERIES) += zImage.iseries image-$(CONFIG_DEFAULT_UIMAGE) += uImage ifneq ($(CONFIG_DEVICE_TREE),"") @@ -185,6 +184,9 @@ $(obj)/zImage.initrd.%: vmlinux $(wrapperbits) $(obj)/zImage.%: vmlinux $(wrapperbits) $(call if_changed,wrap,$*) +$(obj)/zImage.iseries: vmlinux + $(STRIP) -s -R .comment $< -o $@ + $(obj)/zImage.ps3: vmlinux $(STRIP) -s -R .comment $< -o $@ diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper index 2ed8b8b3f0ec..da77adc73078 100755 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper @@ -129,7 +129,7 @@ case "$platform" in pmac|pseries|chrp) platformo=$object/of.o ;; -pmaccoff) +coff) platformo=$object/of.o lds=$object/zImage.coff.lds ;; @@ -220,7 +220,7 @@ case "$platform" in pseries|chrp) $object/addnote "$ofile" ;; -pmaccoff) +coff) ${CROSS}objcopy -O aixcoff-rs6000 --set-start "$entry" "$ofile" $object/hack-coff "$ofile" ;; diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 068377a2a8dc..42c8ed6ed528 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -489,7 +489,7 @@ struct irq_host *irq_alloc_host(unsigned int revmap_type, case IRQ_HOST_MAP_LINEAR: rmap = (unsigned int *)(host + 1); for (i = 0; i < revmap_arg; i++) - rmap[i] = IRQ_NONE; + rmap[i] = NO_IRQ; host->revmap_data.linear.size = revmap_arg; smp_wmb(); host->revmap_data.linear.revmap = rmap; @@ -614,7 +614,7 @@ unsigned int irq_create_mapping(struct irq_host *host, * host->ops->map() to update the flags */ virq = irq_find_mapping(host, hwirq); - if (virq != IRQ_NONE) { + if (virq != NO_IRQ) { if (host->ops->remap) host->ops->remap(host, virq, hwirq); pr_debug("irq: -> existing mapping on virq %d\n", virq); @@ -741,7 +741,7 @@ void irq_dispose_mapping(unsigned int virq) switch(host->revmap_type) { case IRQ_HOST_MAP_LINEAR: if (hwirq < host->revmap_data.linear.size) - host->revmap_data.linear.revmap[hwirq] = IRQ_NONE; + host->revmap_data.linear.revmap[hwirq] = NO_IRQ; break; case IRQ_HOST_MAP_TREE: /* Check if radix tree allocated yet */ diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 066a6a7a25b8..af42ddab3ab4 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c @@ -1171,11 +1171,12 @@ EXPORT_SYMBOL(of_find_node_by_name); /** * of_find_node_by_type - Find a node by its "device_type" property - * @from: The node to start searching from or NULL, the node - * you pass will not be searched, only the next one - * will; typically, you pass what the previous call - * returned. of_node_put() will be called on it - * @name: The type string to match against + * @from: The node to start searching from, or NULL to start searching + * the entire device tree. The node you pass will not be + * searched, only the next one will; typically, you pass + * what the previous call returned. of_node_put() will be + * called on from for you. + * @type: The type string to match against * * Returns a node pointer with refcount incremented, use * of_node_put() on it when done. diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index f4f391cdd8f5..bf76562167c3 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c @@ -218,6 +218,7 @@ set_single_step(struct task_struct *task) regs->msr |= MSR_SE; #endif } + set_tsk_thread_flag(task, TIF_SINGLESTEP); } static inline void @@ -233,6 +234,7 @@ clear_single_step(struct task_struct *task) regs->msr &= ~MSR_SE; #endif } + clear_tsk_thread_flag(task, TIF_SINGLESTEP); } #endif /* CONFIG_PPC32 */ diff --git a/arch/powerpc/platforms/pasemi/idle.c b/arch/powerpc/platforms/pasemi/idle.c index 03cd45d8fefa..3c962d5757be 100644 --- a/arch/powerpc/platforms/pasemi/idle.c +++ b/arch/powerpc/platforms/pasemi/idle.c @@ -26,6 +26,7 @@ #include <asm/machdep.h> #include <asm/reg.h> +#include <asm/smp.h> #include "pasemi.h" diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c index 9da82c266ba9..ec9030dbb5f1 100644 --- a/arch/powerpc/platforms/ps3/interrupt.c +++ b/arch/powerpc/platforms/ps3/interrupt.c @@ -25,6 +25,7 @@ #include <asm/machdep.h> #include <asm/udbg.h> #include <asm/lv1call.h> +#include <asm/smp.h> #include "platform.h" diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index b854e7f1001c..f1df942072bb 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c @@ -752,6 +752,7 @@ skip_gserver_check: void xics_request_IPIs(void) { unsigned int ipi; + int rc; ipi = irq_create_mapping(xics_host, XICS_IPI); BUG_ON(ipi == NO_IRQ); @@ -762,11 +763,12 @@ void xics_request_IPIs(void) */ set_irq_handler(ipi, handle_percpu_irq); if (firmware_has_feature(FW_FEATURE_LPAR)) - request_irq(ipi, xics_ipi_action_lpar, IRQF_DISABLED, - "IPI", NULL); + rc = request_irq(ipi, xics_ipi_action_lpar, IRQF_DISABLED, + "IPI", NULL); else - request_irq(ipi, xics_ipi_action_direct, IRQF_DISABLED, - "IPI", NULL); + rc = request_irq(ipi, xics_ipi_action_direct, IRQF_DISABLED, + "IPI", NULL); + BUG_ON(rc); } #endif /* CONFIG_SMP */ diff --git a/arch/ppc/syslib/ibm_ocp.c b/arch/ppc/syslib/ibm_ocp.c index 3f6e55c79181..2ee176610e7c 100644 --- a/arch/ppc/syslib/ibm_ocp.c +++ b/arch/ppc/syslib/ibm_ocp.c @@ -1,4 +1,5 @@ #include <linux/module.h> +#include <asm/ibm4xx.h> #include <asm/ocp.h> struct ocp_sys_info_data ocp_sys_info = { diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig index f44c94abd883..ee699a7d6214 100644 --- a/drivers/macintosh/Kconfig +++ b/drivers/macintosh/Kconfig @@ -114,7 +114,7 @@ config PMAC_SMU config PMAC_APM_EMU tristate "APM emulation" select APM_EMULATION - depends on ADB_PMU && PM + depends on ADB_PMU && PM && PPC32 config PMAC_MEDIABAY bool "Support PowerBook hotswap media bay" diff --git a/include/asm-powerpc/pgalloc-64.h b/include/asm-powerpc/pgalloc-64.h index d9a3a8ca58a1..94d0294341d6 100644 --- a/include/asm-powerpc/pgalloc-64.h +++ b/include/asm-powerpc/pgalloc-64.h @@ -90,7 +90,8 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) { - return virt_to_page(pte_alloc_one_kernel(mm, address)); + pte_t *pte = pte_alloc_one_kernel(mm, address); + return pte ? virt_to_page(pte) : NULL; } static inline void pte_free_kernel(pte_t *pte) diff --git a/include/asm-powerpc/tlb.h b/include/asm-powerpc/tlb.h index 0a17682663d8..66714042e438 100644 --- a/include/asm-powerpc/tlb.h +++ b/include/asm-powerpc/tlb.h @@ -38,6 +38,15 @@ extern void pte_free_finish(void); static inline void tlb_flush(struct mmu_gather *tlb) { + struct ppc64_tlb_batch *tlbbatch = &__get_cpu_var(ppc64_tlb_batch); + + /* If there's a TLB batch pending, then we must flush it because the + * pages are going to be freed and we really don't want to have a CPU + * access a freed page because it has a stale TLB + */ + if (tlbbatch->index) + __flush_tlb_pending(tlbbatch); + pte_free_finish(); } |