for(;;);
 }
 
+static int qcss_tok;   /* query-cpu-stopped-state token */
+
 /* Get state of physical CPU.
  * Return codes:
  *     0       - The processor is in the RTAS stopped state
  */
 static int query_cpu_stopped(unsigned int pcpu)
 {
-       int cpu_status;
-       int status, qcss_tok;
+       int cpu_status, status;
 
-       qcss_tok = rtas_token("query-cpu-stopped-state");
-       if (qcss_tok == RTAS_UNKNOWN_SERVICE)
-               return -1;
        status = rtas_call(qcss_tok, 1, 2, &cpu_status, pcpu);
        if (status != 0) {
                printk(KERN_ERR
 static int __init pseries_cpu_hotplug_init(void)
 {
        rtas_stop_self_args.token = rtas_token("stop-self");
+       qcss_tok = rtas_token("query-cpu-stopped-state");
 
-       ppc_md.cpu_die = pSeries_mach_cpu_die;
+       if (rtas_stop_self_args.token == RTAS_UNKNOWN_SERVICE ||
+                       qcss_tok == RTAS_UNKNOWN_SERVICE) {
+               printk(KERN_INFO "CPU Hotplug not supported by firmware "
+                               "- disabling.\n");
+               return 0;
+       }
 
+       ppc_md.cpu_die = pSeries_mach_cpu_die;
        smp_ops->cpu_disable = pSeries_cpu_disable;
        smp_ops->cpu_die = pSeries_cpu_die;