diff -uprN a/arch/powerpc/kernel/proc_ppc64.c b/arch/powerpc/kernel/proc_ppc64.c --- a/arch/powerpc/kernel/proc_ppc64.c 2006-10-14 05:34:03.000000000 +0200 +++ b/arch/powerpc/kernel/proc_ppc64.c 2006-10-20 08:32:20.000000000 +0200 @@ -51,15 +51,6 @@ static int __init proc_ppc64_create(void if (!root) return 1; - if (!of_find_node_by_path("/rtas")) - return 0; - - if (!proc_mkdir("rtas", root)) - return 1; - - if (!proc_symlink("rtas", NULL, "ppc64/rtas")) - return 1; - return 0; } core_initcall(proc_ppc64_create); diff -uprN a/arch/powerpc/kernel/rtas-proc.c b/arch/powerpc/kernel/rtas-proc.c --- a/arch/powerpc/kernel/rtas-proc.c 2006-10-14 05:34:03.000000000 +0200 +++ b/arch/powerpc/kernel/rtas-proc.c 2006-10-20 08:22:57.000000000 +0200 @@ -253,43 +253,60 @@ static void get_location_code(struct seq static void check_location_string(struct seq_file *m, char *c); static void check_location(struct seq_file *m, char *c); +static int __init proc_rtas_create(void) +{ + struct proc_dir_entry *root; + + root = proc_mkdir("rtas" , NULL); + if (!root) + return -1; + + +#ifdef CONFIG_PPC64 + if (!proc_symlink("rtas", NULL, "ppc64/rtas")) + return -1; +#endif + + return 0; +} + static int __init proc_rtas_init(void) { struct proc_dir_entry *entry; - if (!machine_is(pseries)) - return -ENODEV; - rtas_node = of_find_node_by_name(NULL, "rtas"); if (rtas_node == NULL) return -ENODEV; - entry = create_proc_entry("ppc64/rtas/progress", S_IRUGO|S_IWUSR, NULL); + if (proc_rtas_create() != 0) + return -ENODEV; + + entry = create_proc_entry("/rtas/progress", S_IRUGO|S_IWUSR, NULL); if (entry) entry->proc_fops = &ppc_rtas_progress_operations; - entry = create_proc_entry("ppc64/rtas/clock", S_IRUGO|S_IWUSR, NULL); + entry = create_proc_entry("/rtas/clock", S_IRUGO|S_IWUSR, NULL); if (entry) entry->proc_fops = &ppc_rtas_clock_operations; - entry = create_proc_entry("ppc64/rtas/poweron", S_IWUSR|S_IRUGO, NULL); + entry = create_proc_entry("/rtas/poweron", S_IWUSR|S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_poweron_operations; - entry = create_proc_entry("ppc64/rtas/sensors", S_IRUGO, NULL); + entry = create_proc_entry("/rtas/sensors", S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_sensors_operations; - entry = create_proc_entry("ppc64/rtas/frequency", S_IWUSR|S_IRUGO, + entry = create_proc_entry("/rtas/frequency", S_IWUSR|S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_tone_freq_operations; - entry = create_proc_entry("ppc64/rtas/volume", S_IWUSR|S_IRUGO, NULL); + entry = create_proc_entry("/rtas/volume", S_IWUSR|S_IRUGO, NULL); if (entry) entry->proc_fops = &ppc_rtas_tone_volume_operations; - entry = create_proc_entry("ppc64/rtas/rmo_buffer", S_IRUSR, NULL); + entry = create_proc_entry("/rtas/rmo_buffer", S_IRUSR, NULL); if (entry) entry->proc_fops = &ppc_rtas_rmo_buf_ops;