Anyone seen a problem like this? cfe_cpu_start() works fine on a 32 bit kernel, but not on 64. I added a function to cfe/smp.c: static asmlinkage void dummy() { prom_printf("dummy called\n"); } This serves as the simplest possible "hello world". If I substitute this for the function passed to cfe_cpu_start(), on a 32 bit kernel, the slave CPU calls the function and the message is printed on the serial console. On a 64 bit kernel, the function is never reached. The API call returns, but the secondary CPU never calls in. The sign-extension of the address looks good. The function pointer looks like FFFFFFFF8XXXXXXX. This is cast to long before being assigned into the right field of the CFE request structure, where it is converted to 64 bit unsigned. Inside CFE, the CPU is just looping around waiting for the address to call with a direct jump. So it's a puzzling problem.