Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Sun, 3 Jun 2007 19:29:15 +0000 (12:29 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sun, 3 Jun 2007 19:29:15 +0000 (12:29 -0700)
* '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()

13 files changed:
arch/powerpc/Makefile
arch/powerpc/boot/Makefile
arch/powerpc/boot/wrapper
arch/powerpc/kernel/irq.c
arch/powerpc/kernel/prom.c
arch/powerpc/kernel/ptrace.c
arch/powerpc/platforms/pasemi/idle.c
arch/powerpc/platforms/ps3/interrupt.c
arch/powerpc/platforms/pseries/xics.c
arch/ppc/syslib/ibm_ocp.c
drivers/macintosh/Kconfig
include/asm-powerpc/pgalloc-64.h
include/asm-powerpc/tlb.h

index 6238b58..fbafd96 100644 (file)
@@ -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)
index 8378898..ff27019 100644 (file)
 #      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 $@
 
index 2ed8b8b..da77adc 100755 (executable)
@@ -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"
     ;;
index 068377a..42c8ed6 100644 (file)
@@ -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 */
index 066a6a7..af42dda 100644 (file)
@@ -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.
index f4f391c..bf76562 100644 (file)
@@ -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 */
 
index 03cd45d..3c962d5 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <asm/machdep.h>
 #include <asm/reg.h>
+#include <asm/smp.h>
 
 #include "pasemi.h"
 
index 9da82c2..ec9030d 100644 (file)
@@ -25,6 +25,7 @@
 #include <asm/machdep.h>
 #include <asm/udbg.h>
 #include <asm/lv1call.h>
+#include <asm/smp.h>
 
 #include "platform.h"
 
index b854e7f..f1df942 100644 (file)
@@ -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 */
 
index 3f6e55c..2ee1766 100644 (file)
@@ -1,4 +1,5 @@
 #include <linux/module.h>
+#include <asm/ibm4xx.h>
 #include <asm/ocp.h>
 
 struct ocp_sys_info_data ocp_sys_info = {
index f44c94a..ee699a7 100644 (file)
@@ -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"
index d9a3a8c..94d0294 100644 (file)
@@ -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)
index 0a17682..6671404 100644 (file)
@@ -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();
 }