Skip to content

Commit

Permalink
Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc-merge
Browse files Browse the repository at this point in the history
Fix up delete/modify conflict of arch/ppc/kernel/process.c by hand (it's
gone, gone, gone).

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Linus Torvalds committed Jan 12, 2006
2 parents 9f5974c + 624cee3 commit 45bfe98
Show file tree
Hide file tree
Showing 55 changed files with 298 additions and 1,155 deletions.
6 changes: 3 additions & 3 deletions arch/powerpc/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ CFLAGS_btext.o += -fPIC
endif

obj-y := semaphore.o cputable.o ptrace.o syscalls.o \
irq.o align.o signal_32.o pmc.o vdso.o
irq.o align.o signal_32.o pmc.o vdso.o \
init_task.o process.o
obj-y += vdso32/
obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \
signal_64.o ptrace32.o systbl.o \
Expand Down Expand Up @@ -44,8 +45,7 @@ extra-$(CONFIG_FSL_BOOKE) := head_fsl_booke.o
extra-$(CONFIG_8xx) := head_8xx.o
extra-y += vmlinux.lds

obj-y += process.o init_task.o time.o \
prom.o traps.o setup-common.o udbg.o
obj-y += time.o prom.o traps.o setup-common.o udbg.o
obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o systbl.o
obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o
obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o
Expand Down
5 changes: 3 additions & 2 deletions arch/powerpc/kernel/pci_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ EXPORT_SYMBOL(io_page_mask);
#ifdef CONFIG_PPC_MULTIPLATFORM
static void fixup_resource(struct resource *res, struct pci_dev *dev);
static void do_bus_setup(struct pci_bus *bus);
static void phbs_remap_io(void);
#endif

/* pci_io_base -- the base address from which io bars are offsets.
Expand Down Expand Up @@ -251,6 +252,7 @@ void pcibios_free_controller(struct pci_controller *phb)
kfree(phb);
}

#ifndef CONFIG_PPC_ISERIES
void __devinit pcibios_claim_one_bus(struct pci_bus *b)
{
struct pci_dev *dev;
Expand All @@ -275,7 +277,6 @@ void __devinit pcibios_claim_one_bus(struct pci_bus *b)
EXPORT_SYMBOL_GPL(pcibios_claim_one_bus);
#endif

#ifndef CONFIG_PPC_ISERIES
static void __init pcibios_claim_of_setup(void)
{
struct pci_bus *b;
Expand Down Expand Up @@ -1218,7 +1219,7 @@ int remap_bus_range(struct pci_bus *bus)
}
EXPORT_SYMBOL(remap_bus_range);

void phbs_remap_io(void)
static void phbs_remap_io(void)
{
struct pci_controller *hose, *tmp;

Expand Down
8 changes: 5 additions & 3 deletions arch/powerpc/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,13 +201,13 @@ int dump_spe(struct pt_regs *regs, elf_vrregset_t *evrregs)
}
#endif /* CONFIG_SPE */

#ifndef CONFIG_SMP
/*
* If we are doing lazy switching of CPU state (FP, altivec or SPE),
* and the current task has some state, discard it.
*/
static inline void discard_lazy_cpu_state(void)
void discard_lazy_cpu_state(void)
{
#ifndef CONFIG_SMP
preempt_disable();
if (last_task_used_math == current)
last_task_used_math = NULL;
Expand All @@ -220,9 +220,10 @@ static inline void discard_lazy_cpu_state(void)
last_task_used_spe = NULL;
#endif
preempt_enable();
#endif /* CONFIG_SMP */
}
#endif /* CONFIG_SMP */

#ifdef CONFIG_PPC_MERGE /* XXX for now */
int set_dabr(unsigned long dabr)
{
if (ppc_md.set_dabr)
Expand All @@ -231,6 +232,7 @@ int set_dabr(unsigned long dabr)
mtspr(SPRN_DABR, dabr);
return 0;
}
#endif

#ifdef CONFIG_PPC64
DEFINE_PER_CPU(struct cpu_usage, cpu_usage_array);
Expand Down
28 changes: 24 additions & 4 deletions arch/powerpc/kernel/prom.c
Original file line number Diff line number Diff line change
Expand Up @@ -1100,17 +1100,37 @@ static int __init early_init_dt_scan_memory(unsigned long node,

static void __init early_reserve_mem(void)
{
unsigned long base, size;
unsigned long *reserve_map;
u64 base, size;
u64 *reserve_map;

reserve_map = (unsigned long *)(((unsigned long)initial_boot_params) +
reserve_map = (u64 *)(((unsigned long)initial_boot_params) +
initial_boot_params->off_mem_rsvmap);
#ifdef CONFIG_PPC32
/*
* Handle the case where we might be booting from an old kexec
* image that setup the mem_rsvmap as pairs of 32-bit values
*/
if (*reserve_map > 0xffffffffull) {
u32 base_32, size_32;
u32 *reserve_map_32 = (u32 *)reserve_map;

while (1) {
base_32 = *(reserve_map_32++);
size_32 = *(reserve_map_32++);
if (size_32 == 0)
break;
DBG("reserving: %lx -> %lx\n", base_32, size_32);
lmb_reserve(base_32, size_32);
}
return;
}
#endif
while (1) {
base = *(reserve_map++);
size = *(reserve_map++);
if (size == 0)
break;
DBG("reserving: %lx -> %lx\n", base, size);
DBG("reserving: %llx -> %llx\n", base, size);
lmb_reserve(base, size);
}

Expand Down
8 changes: 4 additions & 4 deletions arch/powerpc/kernel/prom_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ struct prom_t {
};

struct mem_map_entry {
unsigned long base;
unsigned long size;
u64 base;
u64 size;
};

typedef u32 cell_t;
Expand Down Expand Up @@ -897,9 +897,9 @@ static unsigned long __init prom_next_cell(int s, cell_t **cellp)
* If problems seem to show up, it would be a good start to track
* them down.
*/
static void reserve_mem(unsigned long base, unsigned long size)
static void reserve_mem(u64 base, u64 size)
{
unsigned long top = base + size;
u64 top = base + size;
unsigned long cnt = RELOC(mem_reserve_cnt);

if (size == 0)
Expand Down
21 changes: 9 additions & 12 deletions arch/powerpc/kernel/signal_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,15 @@ static long restore_user_regs(struct pt_regs *regs,
if (err)
return 1;

/*
* Do this before updating the thread state in
* current->thread.fpr/vr/evr. That way, if we get preempted
* and another task grabs the FPU/Altivec/SPE, it won't be
* tempted to save the current CPU state into the thread_struct
* and corrupt what we are writing there.
*/
discard_lazy_cpu_state();

/* force the process to reload the FP registers from
current->thread when it next does FP instructions */
regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1);
Expand Down Expand Up @@ -538,18 +547,6 @@ static long restore_user_regs(struct pt_regs *regs,
return 1;
#endif /* CONFIG_SPE */

#ifndef CONFIG_SMP
preempt_disable();
if (last_task_used_math == current)
last_task_used_math = NULL;
if (last_task_used_altivec == current)
last_task_used_altivec = NULL;
#ifdef CONFIG_SPE
if (last_task_used_spe == current)
last_task_used_spe = NULL;
#endif
preempt_enable();
#endif
return 0;
}

Expand Down
20 changes: 11 additions & 9 deletions arch/powerpc/kernel/signal_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,10 +207,20 @@ static long restore_sigcontext(struct pt_regs *regs, sigset_t *set, int sig,

if (!sig)
regs->gpr[13] = save_r13;
err |= __copy_from_user(&current->thread.fpr, &sc->fp_regs, FP_REGS_SIZE);
if (set != NULL)
err |= __get_user(set->sig[0], &sc->oldmask);

/*
* Do this before updating the thread state in
* current->thread.fpr/vr. That way, if we get preempted
* and another task grabs the FPU/Altivec, it won't be
* tempted to save the current CPU state into the thread_struct
* and corrupt what we are writing there.
*/
discard_lazy_cpu_state();

err |= __copy_from_user(&current->thread.fpr, &sc->fp_regs, FP_REGS_SIZE);

#ifdef CONFIG_ALTIVEC
err |= __get_user(v_regs, &sc->v_regs);
err |= __get_user(msr, &sc->gp_regs[PT_MSR]);
Expand All @@ -229,14 +239,6 @@ static long restore_sigcontext(struct pt_regs *regs, sigset_t *set, int sig,
current->thread.vrsave = 0;
#endif /* CONFIG_ALTIVEC */

#ifndef CONFIG_SMP
preempt_disable();
if (last_task_used_math == current)
last_task_used_math = NULL;
if (last_task_used_altivec == current)
last_task_used_altivec = NULL;
preempt_enable();
#endif
/* Force reload of FP/VEC */
regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC);

Expand Down
2 changes: 1 addition & 1 deletion arch/powerpc/platforms/cell/pervasive.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ static void cbe_idle(void)
}
}

int cbe_system_reset_exception(struct pt_regs *regs)
static int cbe_system_reset_exception(struct pt_regs *regs)
{
switch (regs->msr & SRR1_WAKEMASK) {
case SRR1_WAKEEE:
Expand Down
2 changes: 1 addition & 1 deletion arch/powerpc/platforms/cell/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
#define DBG(fmt...)
#endif

void cell_show_cpuinfo(struct seq_file *m)
static void cell_show_cpuinfo(struct seq_file *m)
{
struct device_node *root;
const char *model = "";
Expand Down
4 changes: 3 additions & 1 deletion arch/powerpc/platforms/cell/spufs/syscalls.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
* value of the spu_status register after the SPU has stopped.
*
*/
long do_spu_run(struct file *filp, __u32 __user *unpc, __u32 __user *ustatus)
static long do_spu_run(struct file *filp,
__u32 __user *unpc,
__u32 __user *ustatus)
{
long ret;
struct spufs_inode_info *i;
Expand Down
4 changes: 2 additions & 2 deletions arch/powerpc/platforms/iseries/Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
EXTRA_CFLAGS += -mno-minimal-toc

obj-y += hvlog.o hvlpconfig.o lpardata.o setup.o mf.o lpevents.o \
hvcall.o proc.o htab.o iommu.o misc.o
obj-$(CONFIG_PCI) += pci.o irq.o vpdinfo.o
hvcall.o proc.o htab.o iommu.o misc.o irq.o
obj-$(CONFIG_PCI) += pci.o vpdinfo.o
obj-$(CONFIG_IBMVIO) += vio.o
obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_VIOPATH) += viopath.o
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/platforms/iseries/iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
#include <asm/pci-bridge.h>
#include <asm/iseries/hv_call_xm.h>

#include "iommu.h"

extern struct list_head iSeries_Global_Device_List;


Expand Down
35 changes: 35 additions & 0 deletions arch/powerpc/platforms/iseries/iommu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#ifndef _PLATFORMS_ISERIES_IOMMU_H
#define _PLATFORMS_ISERIES_IOMMU_H

/*
* Copyright (C) 2005 Stephen Rothwell, IBM Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the:
* Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA
*/

struct device_node;
struct iommu_table;

/* Creates table for an individual device node */
extern void iommu_devnode_init_iSeries(struct device_node *dn);

/* Get table parameters from HV */
extern void iommu_table_getparms_iSeries(unsigned long busno,
unsigned char slotno, unsigned char virtbus,
struct iommu_table *tbl);

#endif /* _PLATFORMS_ISERIES_IOMMU_H */
19 changes: 8 additions & 11 deletions arch/powerpc/platforms/iseries/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@
extern void iSeries_smp_message_recv(struct pt_regs *);
#endif

#ifdef CONFIG_PCI

enum pci_event_type {
pe_bus_created = 0, /* PHB has been created */
pe_bus_error = 1, /* PHB has failed */
Expand Down Expand Up @@ -147,20 +149,11 @@ static void int_received(struct pci_event *event, struct pt_regs *regs)
static void pci_event_handler(struct HvLpEvent *event, struct pt_regs *regs)
{
if (event && (event->xType == HvLpEvent_Type_PciIo)) {
switch (event->xFlags.xFunction) {
case HvLpEvent_Function_Int:
if (hvlpevent_is_int(event))
int_received((struct pci_event *)event, regs);
break;
case HvLpEvent_Function_Ack:
else
printk(KERN_ERR
"pci_event_handler: unexpected ack received\n");
break;
default:
printk(KERN_ERR
"pci_event_handler: unexpected event function %d\n",
(int)event->xFlags.xFunction);
break;
}
} else if (event)
printk(KERN_ERR
"pci_event_handler: Unrecognized PCI event type 0x%x\n",
Expand Down Expand Up @@ -334,6 +327,8 @@ int __init iSeries_allocate_IRQ(HvBusNumber bus,
return virtirq;
}

#endif /* CONFIG_PCI */

/*
* Get the next pending IRQ.
*/
Expand All @@ -353,6 +348,7 @@ int iSeries_get_irq(struct pt_regs *regs)
if (hvlpevent_is_pending())
process_hvlpevents(regs);

#ifdef CONFIG_PCI
if (num_pending_irqs) {
spin_lock(&pending_irqs_lock);
for (irq = 0; irq < NR_IRQS; irq++) {
Expand All @@ -366,6 +362,7 @@ int iSeries_get_irq(struct pt_regs *regs)
if (irq >= NR_IRQS)
irq = -2;
}
#endif

return irq;
}
5 changes: 1 addition & 4 deletions arch/powerpc/platforms/iseries/lpardata.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,7 @@ struct ItLpNaca itLpNaca = {
.xPirEnvironMode = 0, /* Piranha stuff */
.xPirConsoleMode = 0,
.xPirDasdMode = 0,
.xLparInstalled = 0,
.xSysPartitioned = 0,
.xHwSyncedTBs = 0,
.xIntProcUtilHmt = 0,
.flags = 0,
.xSpVpdFormat = 0,
.xIntProcRatio = 0,
.xPlicVrmIndex = 0, /* VRM index of PLIC */
Expand Down
Loading

0 comments on commit 45bfe98

Please sign in to comment.