aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2024-01-17 17:50:13 +0100
committerHelge Deller <deller@gmx.de>2024-01-22 22:57:32 +0100
commite39204ffb4e613355880418dba999a6a5d24e1f7 (patch)
treec1abdb988564943312bed30c82250a293b270630
parent141184553a6472160460cbb9bf57d6549433e67d (diff)
downloadparisc-linux-testcases.tar.gz
parisc: Runtime unalignment testcasetestcases
Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--arch/parisc/kernel/smp.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c
index 444154271f237..963205020ae46 100644
--- a/arch/parisc/kernel/smp.c
+++ b/arch/parisc/kernel/smp.c
@@ -330,10 +330,11 @@ void smp_callin(unsigned long pdce_proc)
/*
* Bring one cpu online.
*/
-static int smp_boot_one_cpu(int cpuid, struct task_struct *idle)
+static int noinline smp_boot_one_cpu(int cpuid, struct task_struct *idle)
{
const struct cpuinfo_parisc *p = &per_cpu(cpu_data, cpuid);
long timeout;
+ long t2[2];
#ifdef CONFIG_HOTPLUG_CPU
int i;
@@ -364,7 +365,18 @@ static int smp_boot_one_cpu(int cpuid, struct task_struct *idle)
smp_init_current_idle_task = idle ;
mb();
- printk(KERN_INFO "Releasing cpu %d now, hpa=%lx\n", cpuid, p->hpa);
+ printk(KERN_INFO "Releasing cpu %d now, hpa=%lx vector %x\n", cpuid, p->hpa, PAGE0->vec_rendz);
+ t2[0] = (unsigned long) 0xaabbccdd11223344;
+ t2[1] = (unsigned long) 0x0a0b0c0d01020304;
+ asm("nop ! nop ! nop" : : : "memory");
+ asm volatile("ldw 1(%1),%0" : "=r" (i) : "r"(&t2) : "memory");
+ printk("VAL1 %04x\n", i);
+ asm volatile("ldw 2(%1),%0" : "=r" (i) : "r"(&t2) : "memory");
+ printk("VAL2 %04x\n", i);
+ asm volatile("ldw 3(%1),%0" : "=r" (i) : "r"(&t2) : "memory");
+ printk("VAL3 %04x\n", i);
+ asm volatile("ldw 4(%1),%0" : "=r" (i) : "r"(&t2) : "memory");
+ printk("VAL4 %04x\n", i);
/*
** This gets PDC to release the CPU from a very tight loop.