Merge commit 'v2.6.30-rc1' into perfcounters/core
Conflicts: arch/powerpc/include/asm/systbl.h arch/powerpc/include/asm/unistd.h include/linux/init_task.h Merge reason: the conflicts are non-trivial: PowerPC placement of sys_perf_counter_open has to be mixed with the new preadv/pwrite syscalls. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@ -94,7 +94,7 @@ static int dma_direct_dma_supported(struct device *dev, u64 mask)
|
||||
* done via some global so platforms can set the limit in case
|
||||
* they have limited DMA windows
|
||||
*/
|
||||
return mask >= DMA_32BIT_MASK;
|
||||
return mask >= DMA_BIT_MASK(32);
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
|
@ -145,6 +145,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX)
|
||||
beq 1f
|
||||
PPC_LL r4,_MSR-STACK_FRAME_OVERHEAD(r5)
|
||||
li r3,MSR_FP|MSR_FE0|MSR_FE1
|
||||
#ifdef CONFIG_VSX
|
||||
BEGIN_FTR_SECTION
|
||||
oris r3,r3,MSR_VSX@h
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_VSX)
|
||||
#endif
|
||||
andc r4,r4,r3 /* disable FP for previous task */
|
||||
PPC_STL r4,_MSR-STACK_FRAME_OVERHEAD(r5)
|
||||
1:
|
||||
|
@ -293,7 +293,7 @@ __ftrace_make_nop(struct module *mod,
|
||||
if (tramp & 0x8000)
|
||||
tramp -= 0x10000;
|
||||
|
||||
pr_debug(" %x ", tramp);
|
||||
pr_debug(" %lx ", tramp);
|
||||
|
||||
if (tramp != addr) {
|
||||
printk(KERN_ERR
|
||||
@ -564,7 +564,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
|
||||
if (unlikely(atomic_read(¤t->tracing_graph_pause)))
|
||||
return;
|
||||
|
||||
#if CONFIG_PPC64
|
||||
#ifdef CONFIG_PPC64
|
||||
/* non core kernel code needs to save and restore the TOC */
|
||||
if (REGION_ID(self_addr) != KERNEL_REGION_ID)
|
||||
return_hooker = (unsigned long)&mod_return_to_handler;
|
||||
|
@ -677,11 +677,13 @@ unsigned int irq_create_mapping(struct irq_host *host,
|
||||
return NO_IRQ;
|
||||
}
|
||||
}
|
||||
pr_debug("irq: -> obtained virq %d\n", virq);
|
||||
|
||||
if (irq_setup_virq(host, virq, hwirq))
|
||||
return NO_IRQ;
|
||||
|
||||
printk(KERN_DEBUG "irq: irq %lu on host %s mapped to virtual irq %u\n",
|
||||
hwirq, host->of_node ? host->of_node->full_name : "null", virq);
|
||||
|
||||
return virq;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(irq_create_mapping);
|
||||
|
@ -434,6 +434,21 @@ static void pseries_cmo_data(struct seq_file *m)
|
||||
seq_printf(m, "cmo_page_size=%lu\n", cmo_get_page_size());
|
||||
}
|
||||
|
||||
static void splpar_dispatch_data(struct seq_file *m)
|
||||
{
|
||||
int cpu;
|
||||
unsigned long dispatches = 0;
|
||||
unsigned long dispatch_dispersions = 0;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
dispatches += lppaca[cpu].yield_count;
|
||||
dispatch_dispersions += lppaca[cpu].dispersion_count;
|
||||
}
|
||||
|
||||
seq_printf(m, "dispatches=%lu\n", dispatches);
|
||||
seq_printf(m, "dispatch_dispersions=%lu\n", dispatch_dispersions);
|
||||
}
|
||||
|
||||
static int pseries_lparcfg_data(struct seq_file *m, void *v)
|
||||
{
|
||||
int partition_potential_processors;
|
||||
@ -460,6 +475,7 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
|
||||
parse_ppp_data(m);
|
||||
parse_mpp_data(m);
|
||||
pseries_cmo_data(m);
|
||||
splpar_dispatch_data(m);
|
||||
|
||||
seq_printf(m, "purr=%ld\n", get_purr());
|
||||
} else { /* non SPLPAR case */
|
||||
|
@ -495,7 +495,15 @@ _GLOBAL(giveup_altivec)
|
||||
stvx vr0,r4,r3
|
||||
beq 1f
|
||||
ld r4,_MSR-STACK_FRAME_OVERHEAD(r5)
|
||||
#ifdef CONFIG_VSX
|
||||
BEGIN_FTR_SECTION
|
||||
lis r3,(MSR_VEC|MSR_VSX)@h
|
||||
FTR_SECTION_ELSE
|
||||
lis r3,MSR_VEC@h
|
||||
ALT_FTR_SECTION_END_IFSET(CPU_FTR_VSX)
|
||||
#else
|
||||
lis r3,MSR_VEC@h
|
||||
#endif
|
||||
andc r4,r4,r3 /* disable FP for previous task */
|
||||
std r4,_MSR-STACK_FRAME_OVERHEAD(r5)
|
||||
1:
|
||||
|
@ -76,7 +76,7 @@ struct of_device* of_platform_device_create(struct device_node *np,
|
||||
return NULL;
|
||||
|
||||
dev->dma_mask = 0xffffffffUL;
|
||||
dev->dev.coherent_dma_mask = DMA_32BIT_MASK;
|
||||
dev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
dev->dev.bus = &of_platform_bus_type;
|
||||
|
||||
|
@ -614,7 +614,7 @@ static unsigned char ibm_architecture_vec[] = {
|
||||
W(0xffffffff), /* virt_base */
|
||||
W(0xffffffff), /* virt_size */
|
||||
W(0xffffffff), /* load_base */
|
||||
W(64), /* 128MB min RMA */
|
||||
W(64), /* 64MB min RMA */
|
||||
W(0xffffffff), /* full client load */
|
||||
0, /* min RMA percentage of total RAM */
|
||||
48, /* max log_2(hash table size) */
|
||||
@ -732,15 +732,17 @@ static void __init prom_send_capabilities(void)
|
||||
root = call_prom("open", 1, 1, ADDR("/"));
|
||||
if (root != 0) {
|
||||
/* try calling the ibm,client-architecture-support method */
|
||||
prom_printf("Calling ibm,client-architecture...");
|
||||
if (call_prom_ret("call-method", 3, 2, &ret,
|
||||
ADDR("ibm,client-architecture-support"),
|
||||
root,
|
||||
ADDR(ibm_architecture_vec)) == 0) {
|
||||
/* the call exists... */
|
||||
if (ret)
|
||||
prom_printf("WARNING: ibm,client-architecture"
|
||||
prom_printf("\nWARNING: ibm,client-architecture"
|
||||
"-support call FAILED!\n");
|
||||
call_prom("close", 1, 0, root);
|
||||
prom_printf(" done\n");
|
||||
return;
|
||||
}
|
||||
call_prom("close", 1, 0, root);
|
||||
@ -1083,7 +1085,7 @@ static void __init prom_instantiate_rtas(void)
|
||||
return;
|
||||
}
|
||||
|
||||
prom_printf("instantiating rtas at 0x%x ...", base);
|
||||
prom_printf("instantiating rtas at 0x%x...", base);
|
||||
|
||||
if (call_prom_ret("call-method", 3, 2, &entry,
|
||||
ADDR("instantiate-rtas"),
|
||||
@ -1495,7 +1497,7 @@ static int __init prom_find_machine_type(void)
|
||||
return PLATFORM_GENERIC;
|
||||
x = prom_getproplen(rtas, "ibm,hypertas-functions");
|
||||
if (x != PROM_ERROR) {
|
||||
prom_printf("Hypertas detected, assuming LPAR !\n");
|
||||
prom_debug("Hypertas detected, assuming LPAR !\n");
|
||||
return PLATFORM_PSERIES_LPAR;
|
||||
}
|
||||
return PLATFORM_PSERIES;
|
||||
@ -1544,7 +1546,7 @@ static void __init prom_check_displays(void)
|
||||
};
|
||||
const unsigned char *clut;
|
||||
|
||||
prom_printf("Looking for displays\n");
|
||||
prom_debug("Looking for displays\n");
|
||||
for (node = 0; prom_next_node(&node); ) {
|
||||
memset(type, 0, sizeof(type));
|
||||
prom_getprop(node, "device_type", type, sizeof(type));
|
||||
@ -1562,7 +1564,7 @@ static void __init prom_check_displays(void)
|
||||
if (call_prom("package-to-path", 3, 1, node, path,
|
||||
PROM_SCRATCH_SIZE-10) == PROM_ERROR)
|
||||
continue;
|
||||
prom_printf("found display : %s, opening ... ", path);
|
||||
prom_printf("found display : %s, opening... ", path);
|
||||
|
||||
ih = call_prom("open", 1, 1, path);
|
||||
if (ih == 0) {
|
||||
@ -2387,7 +2389,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
|
||||
/*
|
||||
* Now finally create the flattened device-tree
|
||||
*/
|
||||
prom_printf("copying OF device tree ...\n");
|
||||
prom_printf("copying OF device tree...\n");
|
||||
flatten_device_tree();
|
||||
|
||||
/*
|
||||
@ -2402,7 +2404,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
|
||||
* Call OF "quiesce" method to shut down pending DMA's from
|
||||
* devices etc...
|
||||
*/
|
||||
prom_printf("Calling quiesce ...\n");
|
||||
prom_printf("Calling quiesce...\n");
|
||||
call_prom("quiesce", 0, 0);
|
||||
|
||||
/*
|
||||
|
@ -67,7 +67,8 @@ static long compat_ptrace_old(struct task_struct *child, long request,
|
||||
/* Macros to workout the correct index for the FPR in the thread struct */
|
||||
#define FPRNUMBER(i) (((i) - PT_FPR0) >> 1)
|
||||
#define FPRHALF(i) (((i) - PT_FPR0) & 1)
|
||||
#define FPRINDEX(i) TS_FPRWIDTH * FPRNUMBER(i) + FPRHALF(i)
|
||||
#define FPRINDEX(i) TS_FPRWIDTH * FPRNUMBER(i) * 2 + FPRHALF(i)
|
||||
#define FPRINDEX_3264(i) (TS_FPRWIDTH * ((i) - PT_FPR0))
|
||||
|
||||
long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
||||
compat_ulong_t caddr, compat_ulong_t cdata)
|
||||
@ -168,8 +169,9 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
||||
CHECK_FULL_REGS(child->thread.regs);
|
||||
if (numReg >= PT_FPR0) {
|
||||
flush_fp_to_thread(child);
|
||||
tmp = ((unsigned long int *)child->thread.fpr)
|
||||
[FPRINDEX(numReg)];
|
||||
/* get 64 bit FPR */
|
||||
tmp = ((u64 *)child->thread.fpr)
|
||||
[FPRINDEX_3264(numReg)];
|
||||
} else { /* register within PT_REGS struct */
|
||||
tmp = ptrace_get_reg(child, numReg);
|
||||
}
|
||||
@ -262,8 +264,13 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
||||
freg = (freg & 0xfffffffful) | (data << 32);
|
||||
ret = ptrace_put_reg(child, numReg, freg);
|
||||
} else {
|
||||
u64 *tmp;
|
||||
flush_fp_to_thread(child);
|
||||
((unsigned int *)child->thread.regs)[index] = data;
|
||||
/* get 64 bit FPR ... */
|
||||
tmp = &(((u64 *)child->thread.fpr)
|
||||
[FPRINDEX_3264(numReg)]);
|
||||
/* ... write the 32 bit part we want */
|
||||
((u32 *)tmp)[index % 2] = data;
|
||||
ret = 0;
|
||||
}
|
||||
break;
|
||||
|
@ -36,7 +36,6 @@
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/lmb.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/prom.h>
|
||||
#include <asm/processor.h>
|
||||
|
Reference in New Issue
Block a user