powerpc/pseries: Switch pseries drivers to use machine_xxx_initcall()
authorMichael Ellerman <mpe@ellerman.id.au>
Wed, 16 Jul 2014 02:02:43 +0000 (12:02 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 28 Jul 2014 04:11:26 +0000 (14:11 +1000)
A lot of the code in platforms/pseries is using non-machine initcalls.
That means if a kernel built with pseries support runs on another
platform, for example powernv, the initcalls will still run.

Most of these cases are OK, though sometimes only due to luck. Some were
having more effect:

 * hcall_inst_init
  - Checking FW_FEATURE_LPAR which is set on ps3 & celleb.
 * mobility_sysfs_init
  - created sysfs files unconditionally
  - but no effect due to ENOSYS from rtas_ibm_suspend_me()
 * apo_pm_init
  - created sysfs, allows write
  - nothing checks the value written to though
 * alloc_dispatch_log_kmem_cache
  - creating kmem_cache on non-pseries machines

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/pseries/dtl.c
arch/powerpc/platforms/pseries/eeh_pseries.c
arch/powerpc/platforms/pseries/hvCall_inst.c
arch/powerpc/platforms/pseries/mobility.c
arch/powerpc/platforms/pseries/msi.c
arch/powerpc/platforms/pseries/power.c
arch/powerpc/platforms/pseries/ras.c
arch/powerpc/platforms/pseries/reconfig.c
arch/powerpc/platforms/pseries/rng.c
arch/powerpc/platforms/pseries/setup.c
arch/powerpc/platforms/pseries/suspend.c

index 7d61498e45c082fee52f370be623dd8f97114f62..1062f71f5a85c4740c20027299c2acc664389fbe 100644 (file)
@@ -29,6 +29,7 @@
 #include <asm/lppaca.h>
 #include <asm/debug.h>
 #include <asm/plpar_wrappers.h>
+#include <asm/machdep.h>
 
 struct dtl {
        struct dtl_entry        *buf;
@@ -391,4 +392,4 @@ err_remove_dir:
 err:
        return rc;
 }
-arch_initcall(dtl_init);
+machine_arch_initcall(pseries, dtl_init);
index 0bec0c02c5e718cc493dad1b273b09150b5f6632..476a5d8b0b363e438fc8b5dff0ef138994efed97 100644 (file)
@@ -743,10 +743,7 @@ static struct eeh_ops pseries_eeh_ops = {
  */
 static int __init eeh_pseries_init(void)
 {
-       int ret = -EINVAL;
-
-       if (!machine_is(pseries))
-               return ret;
+       int ret;
 
        ret = eeh_ops_register(&pseries_eeh_ops);
        if (!ret)
@@ -757,5 +754,4 @@ static int __init eeh_pseries_init(void)
 
        return ret;
 }
-
-early_initcall(eeh_pseries_init);
+machine_early_initcall(pseries, eeh_pseries_init);
index cf4e7736e4f1809eafde15d1512647c15bad0478..4575f0c9e521203898e2a5158a6697fd271d1aef 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/firmware.h>
 #include <asm/cputable.h>
 #include <asm/trace.h>
+#include <asm/machdep.h>
 
 DEFINE_PER_CPU(struct hcall_stats[HCALL_STAT_ARRAY_SIZE], hcall_stats);
 
@@ -162,4 +163,4 @@ static int __init hcall_inst_init(void)
 
        return 0;
 }
-__initcall(hcall_inst_init);
+machine_device_initcall(pseries, hcall_inst_init);
index bde7ebad3949c941c31fd7b6df67ba4bb15ee32c..d146fef038b82823834b6e1ce48c55339b1721bb 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/delay.h>
 #include <linux/slab.h>
 
+#include <asm/machdep.h>
 #include <asm/rtas.h>
 #include "pseries.h"
 
@@ -362,4 +363,4 @@ static int __init mobility_sysfs_init(void)
 
        return rc;
 }
-device_initcall(mobility_sysfs_init);
+machine_device_initcall(pseries, mobility_sysfs_init);
index 0c882e83c4ce29373f6d3957b7de34979d9fae98..18ff4626d74e0cc24de7ec6c1bab902f0f8e215a 100644 (file)
@@ -16,6 +16,7 @@
 #include <asm/rtas.h>
 #include <asm/hw_irq.h>
 #include <asm/ppc-pci.h>
+#include <asm/machdep.h>
 
 static int query_token, change_token;
 
@@ -532,5 +533,4 @@ static int rtas_msi_init(void)
 
        return 0;
 }
-arch_initcall(rtas_msi_init);
-
+machine_arch_initcall(pseries, rtas_msi_init);
index 6d62662364468182e47b3907db74bba5728f5d06..c26eadde434c9a3f0ffa53257324b75bf12b1c96 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/string.h>
 #include <linux/errno.h>
 #include <linux/init.h>
+#include <asm/machdep.h>
 
 unsigned long rtas_poweron_auto; /* default and normal state is 0 */
 
@@ -71,11 +72,11 @@ static int __init pm_init(void)
                return -ENOMEM;
        return sysfs_create_group(power_kobj, &attr_group);
 }
-core_initcall(pm_init);
+machine_core_initcall(pseries, pm_init);
 #else
 static int __init apo_pm_init(void)
 {
        return (sysfs_create_file(power_kobj, &auto_poweron_attr.attr));
 }
-__initcall(apo_pm_init);
+machine_device_initcall(pseries, apo_pm_init);
 #endif
index 9c5778e6ed4b07e02cb9c3da1142e724c6c00d0c..dff05b9eb94682267fed3a79c9ad72998ec7d053 100644 (file)
@@ -71,7 +71,7 @@ static int __init init_ras_IRQ(void)
 
        return 0;
 }
-subsys_initcall(init_ras_IRQ);
+machine_subsys_initcall(pseries, init_ras_IRQ);
 
 #define EPOW_SHUTDOWN_NORMAL                           1
 #define EPOW_SHUTDOWN_ON_UPS                           2
index 1c0a60d988678ebf1f80f5ddc30beaa3f1f40094..0f319521e0020b674ed6c8e49e53ef394ebdda0f 100644 (file)
@@ -446,13 +446,10 @@ static int proc_ppc64_create_ofdt(void)
 {
        struct proc_dir_entry *ent;
 
-       if (!machine_is(pseries))
-               return 0;
-
        ent = proc_create("powerpc/ofdt", S_IWUSR, NULL, &ofdt_fops);
        if (ent)
                proc_set_size(ent, 0);
 
        return 0;
 }
-__initcall(proc_ppc64_create_ofdt);
+machine_device_initcall(pseries, proc_ppc64_create_ofdt);
index 72a102758d4e5f54e8540b5e78e6417f1a23da3d..e09608770909cac6af0466e5d9eca37994ef28a6 100644 (file)
@@ -42,4 +42,4 @@ static __init int rng_init(void)
 
        return 0;
 }
-subsys_initcall(rng_init);
+machine_subsys_initcall(pseries, rng_init);
index f2f40e64658f054aa650d1fd329a74b5dc478bde..cfe8a6389a513a29b5b49fc720d9682430eebcac 100644 (file)
@@ -351,7 +351,7 @@ static int alloc_dispatch_log_kmem_cache(void)
 
        return alloc_dispatch_logs();
 }
-early_initcall(alloc_dispatch_log_kmem_cache);
+machine_early_initcall(pseries, alloc_dispatch_log_kmem_cache);
 
 static void pseries_lpar_idle(void)
 {
index b87b97849d4c4d6e95295a519cec8f6e335d6e2e..e76aefae2aa2b1020e90180b6f4e930acece7294 100644 (file)
@@ -265,7 +265,7 @@ static int __init pseries_suspend_init(void)
 {
        int rc;
 
-       if (!machine_is(pseries) || !firmware_has_feature(FW_FEATURE_LPAR))
+       if (!firmware_has_feature(FW_FEATURE_LPAR))
                return 0;
 
        suspend_data.token = rtas_token("ibm,suspend-me");
@@ -280,5 +280,4 @@ static int __init pseries_suspend_init(void)
        suspend_set_ops(&pseries_suspend_ops);
        return 0;
 }
-
-__initcall(pseries_suspend_init);
+machine_device_initcall(pseries, pseries_suspend_init);