Commit 20c4856b authored by Linus Torvalds's avatar Linus Torvalds

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()
parents c4d36a82 627aa944
...@@ -142,7 +142,6 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/ ...@@ -142,7 +142,6 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
# Default to zImage, override when needed # Default to zImage, override when needed
defaultimage-y := zImage defaultimage-y := zImage
defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage
KBUILD_IMAGE := $(defaultimage-y) KBUILD_IMAGE := $(defaultimage-y)
all: $(KBUILD_IMAGE) all: $(KBUILD_IMAGE)
......
...@@ -11,20 +11,18 @@ ...@@ -11,20 +11,18 @@
# bootloader and increase compatibility with OpenFirmware. # bootloader and increase compatibility with OpenFirmware.
# #
# To this end we need to define BOOTCC, etc, as the tools # To this end we need to define BOOTCC, etc, as the tools
# needed to build the 32 bit image. These are normally HOSTCC, # needed to build the 32 bit image. That's normally the same
# but may be a third compiler if, for example, you are cross # compiler for the rest of the kernel, with the -m32 flag added.
# 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.
# To make it easier to setup a cross compiler, # To make it easier to setup a cross compiler,
# CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE # CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
# in the toplevel makefile. # in the toplevel makefile.
all: $(obj)/zImage all: $(obj)/zImage
HOSTCC := gcc BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
BOOTCFLAGS := $(HOSTCFLAGS) -fno-builtin -nostdinc -isystem \ -fno-strict-aliasing -Os -msoft-float -pipe \
$(shell $(CROSS32CC) -print-file-name=include) -fPIC -fomit-frame-pointer -fno-builtin -fPIC -nostdinc \
-isystem $(shell $(CROSS32CC) -print-file-name=include)
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
ifeq ($(call cc-option-yn, -fstack-protector),y) ifeq ($(call cc-option-yn, -fstack-protector),y)
...@@ -33,8 +31,8 @@ endif ...@@ -33,8 +31,8 @@ endif
BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj) BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj)
$(obj)/44x.o: BOOTCFLAGS += -Wa,-mbooke $(obj)/44x.o: BOOTCFLAGS += -mcpu=440
$(obj)/ebony.o: BOOTCFLAGS += -Wa,-mbooke $(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
zlib := inffast.c inflate.c inftrees.c zlib := inffast.c inflate.c inftrees.c
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
...@@ -136,6 +134,7 @@ image-$(CONFIG_PPC_EFIKA) += zImage.chrp ...@@ -136,6 +134,7 @@ image-$(CONFIG_PPC_EFIKA) += zImage.chrp
image-$(CONFIG_PPC_PMAC) += zImage.pmac image-$(CONFIG_PPC_PMAC) += zImage.pmac
image-$(CONFIG_PPC_HOLLY) += zImage.holly-elf image-$(CONFIG_PPC_HOLLY) += zImage.holly-elf
image-$(CONFIG_PPC_PRPMC2800) += zImage.prpmc2800 image-$(CONFIG_PPC_PRPMC2800) += zImage.prpmc2800
image-$(CONFIG_PPC_ISERIES) += zImage.iseries
image-$(CONFIG_DEFAULT_UIMAGE) += uImage image-$(CONFIG_DEFAULT_UIMAGE) += uImage
ifneq ($(CONFIG_DEVICE_TREE),"") ifneq ($(CONFIG_DEVICE_TREE),"")
...@@ -185,6 +184,9 @@ $(obj)/zImage.initrd.%: vmlinux $(wrapperbits) ...@@ -185,6 +184,9 @@ $(obj)/zImage.initrd.%: vmlinux $(wrapperbits)
$(obj)/zImage.%: vmlinux $(wrapperbits) $(obj)/zImage.%: vmlinux $(wrapperbits)
$(call if_changed,wrap,$*) $(call if_changed,wrap,$*)
$(obj)/zImage.iseries: vmlinux
$(STRIP) -s -R .comment $< -o $@
$(obj)/zImage.ps3: vmlinux $(obj)/zImage.ps3: vmlinux
$(STRIP) -s -R .comment $< -o $@ $(STRIP) -s -R .comment $< -o $@
......
...@@ -129,7 +129,7 @@ case "$platform" in ...@@ -129,7 +129,7 @@ case "$platform" in
pmac|pseries|chrp) pmac|pseries|chrp)
platformo=$object/of.o platformo=$object/of.o
;; ;;
pmaccoff) coff)
platformo=$object/of.o platformo=$object/of.o
lds=$object/zImage.coff.lds lds=$object/zImage.coff.lds
;; ;;
...@@ -220,7 +220,7 @@ case "$platform" in ...@@ -220,7 +220,7 @@ case "$platform" in
pseries|chrp) pseries|chrp)
$object/addnote "$ofile" $object/addnote "$ofile"
;; ;;
pmaccoff) coff)
${CROSS}objcopy -O aixcoff-rs6000 --set-start "$entry" "$ofile" ${CROSS}objcopy -O aixcoff-rs6000 --set-start "$entry" "$ofile"
$object/hack-coff "$ofile" $object/hack-coff "$ofile"
;; ;;
......
...@@ -489,7 +489,7 @@ struct irq_host *irq_alloc_host(unsigned int revmap_type, ...@@ -489,7 +489,7 @@ struct irq_host *irq_alloc_host(unsigned int revmap_type,
case IRQ_HOST_MAP_LINEAR: case IRQ_HOST_MAP_LINEAR:
rmap = (unsigned int *)(host + 1); rmap = (unsigned int *)(host + 1);
for (i = 0; i < revmap_arg; i++) for (i = 0; i < revmap_arg; i++)
rmap[i] = IRQ_NONE; rmap[i] = NO_IRQ;
host->revmap_data.linear.size = revmap_arg; host->revmap_data.linear.size = revmap_arg;
smp_wmb(); smp_wmb();
host->revmap_data.linear.revmap = rmap; host->revmap_data.linear.revmap = rmap;
...@@ -614,7 +614,7 @@ unsigned int irq_create_mapping(struct irq_host *host, ...@@ -614,7 +614,7 @@ unsigned int irq_create_mapping(struct irq_host *host,
* host->ops->map() to update the flags * host->ops->map() to update the flags
*/ */
virq = irq_find_mapping(host, hwirq); virq = irq_find_mapping(host, hwirq);
if (virq != IRQ_NONE) { if (virq != NO_IRQ) {
if (host->ops->remap) if (host->ops->remap)
host->ops->remap(host, virq, hwirq); host->ops->remap(host, virq, hwirq);
pr_debug("irq: -> existing mapping on virq %d\n", virq); pr_debug("irq: -> existing mapping on virq %d\n", virq);
...@@ -741,7 +741,7 @@ void irq_dispose_mapping(unsigned int virq) ...@@ -741,7 +741,7 @@ void irq_dispose_mapping(unsigned int virq)
switch(host->revmap_type) { switch(host->revmap_type) {
case IRQ_HOST_MAP_LINEAR: case IRQ_HOST_MAP_LINEAR:
if (hwirq < host->revmap_data.linear.size) if (hwirq < host->revmap_data.linear.size)
host->revmap_data.linear.revmap[hwirq] = IRQ_NONE; host->revmap_data.linear.revmap[hwirq] = NO_IRQ;
break; break;
case IRQ_HOST_MAP_TREE: case IRQ_HOST_MAP_TREE:
/* Check if radix tree allocated yet */ /* Check if radix tree allocated yet */
......
...@@ -1171,11 +1171,12 @@ EXPORT_SYMBOL(of_find_node_by_name); ...@@ -1171,11 +1171,12 @@ EXPORT_SYMBOL(of_find_node_by_name);
/** /**
* of_find_node_by_type - Find a node by its "device_type" property * of_find_node_by_type - Find a node by its "device_type" property
* @from: The node to start searching from or NULL, the node * @from: The node to start searching from, or NULL to start searching
* you pass will not be searched, only the next one * the entire device tree. The node you pass will not be
* will; typically, you pass what the previous call * searched, only the next one will; typically, you pass
* returned. of_node_put() will be called on it * what the previous call returned. of_node_put() will be
* @name: The type string to match against * called on from for you.
* @type: The type string to match against
* *
* Returns a node pointer with refcount incremented, use * Returns a node pointer with refcount incremented, use
* of_node_put() on it when done. * of_node_put() on it when done.
......
...@@ -218,6 +218,7 @@ set_single_step(struct task_struct *task) ...@@ -218,6 +218,7 @@ set_single_step(struct task_struct *task)
regs->msr |= MSR_SE; regs->msr |= MSR_SE;
#endif #endif
} }
set_tsk_thread_flag(task, TIF_SINGLESTEP);
} }
static inline void static inline void
...@@ -233,6 +234,7 @@ clear_single_step(struct task_struct *task) ...@@ -233,6 +234,7 @@ clear_single_step(struct task_struct *task)
regs->msr &= ~MSR_SE; regs->msr &= ~MSR_SE;
#endif #endif
} }
clear_tsk_thread_flag(task, TIF_SINGLESTEP);
} }
#endif /* CONFIG_PPC32 */ #endif /* CONFIG_PPC32 */
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/reg.h> #include <asm/reg.h>
#include <asm/smp.h>
#include "pasemi.h" #include "pasemi.h"
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/udbg.h> #include <asm/udbg.h>
#include <asm/lv1call.h> #include <asm/lv1call.h>
#include <asm/smp.h>
#include "platform.h" #include "platform.h"
......
...@@ -752,6 +752,7 @@ void __init xics_init_IRQ(void) ...@@ -752,6 +752,7 @@ void __init xics_init_IRQ(void)
void xics_request_IPIs(void) void xics_request_IPIs(void)
{ {
unsigned int ipi; unsigned int ipi;
int rc;
ipi = irq_create_mapping(xics_host, XICS_IPI); ipi = irq_create_mapping(xics_host, XICS_IPI);
BUG_ON(ipi == NO_IRQ); BUG_ON(ipi == NO_IRQ);
...@@ -762,11 +763,12 @@ void xics_request_IPIs(void) ...@@ -762,11 +763,12 @@ void xics_request_IPIs(void)
*/ */
set_irq_handler(ipi, handle_percpu_irq); set_irq_handler(ipi, handle_percpu_irq);
if (firmware_has_feature(FW_FEATURE_LPAR)) if (firmware_has_feature(FW_FEATURE_LPAR))
request_irq(ipi, xics_ipi_action_lpar, IRQF_DISABLED, rc = request_irq(ipi, xics_ipi_action_lpar, IRQF_DISABLED,
"IPI", NULL); "IPI", NULL);
else else
request_irq(ipi, xics_ipi_action_direct, IRQF_DISABLED, rc = request_irq(ipi, xics_ipi_action_direct, IRQF_DISABLED,
"IPI", NULL); "IPI", NULL);
BUG_ON(rc);
} }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
......
#include <linux/module.h> #include <linux/module.h>
#include <asm/ibm4xx.h>
#include <asm/ocp.h> #include <asm/ocp.h>
struct ocp_sys_info_data ocp_sys_info = { struct ocp_sys_info_data ocp_sys_info = {
......
...@@ -114,7 +114,7 @@ config PMAC_SMU ...@@ -114,7 +114,7 @@ config PMAC_SMU
config PMAC_APM_EMU config PMAC_APM_EMU
tristate "APM emulation" tristate "APM emulation"
select APM_EMULATION select APM_EMULATION
depends on ADB_PMU && PM depends on ADB_PMU && PM && PPC32
config PMAC_MEDIABAY config PMAC_MEDIABAY
bool "Support PowerBook hotswap media bay" bool "Support PowerBook hotswap media bay"
......
...@@ -90,7 +90,8 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, ...@@ -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, static inline struct page *pte_alloc_one(struct mm_struct *mm,
unsigned long address) 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) static inline void pte_free_kernel(pte_t *pte)
......
...@@ -38,6 +38,15 @@ extern void pte_free_finish(void); ...@@ -38,6 +38,15 @@ extern void pte_free_finish(void);
static inline void tlb_flush(struct mmu_gather *tlb) 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(); pte_free_finish();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment