+ struct device_node *cpus = NULL;
+ unsigned int *reg;
+ int reglen;
+ int ncpus = 0;
+ int cpuid;
+ unsigned int phys;
+
+ /* Count CPUs in the device-tree */
+ cpuid = 1; /* the boot cpu is logical cpu 0 */
+ while ((cpus = of_find_node_by_type(cpus, "cpu")) != NULL) {
+ phys = ncpus;
+ reg = (unsigned int *) get_property(cpus, "reg", ®len);
+ if (reg && reglen >= sizeof(unsigned int))
+ /* hmmm, not having a reg property would be bad */
+ phys = *reg;
+ if (phys != boot_cpuid_phys) {
+ set_hard_smp_processor_id(cpuid, phys);
+ ++cpuid;
+ }
+ ++ncpus;
+ }
+
+ printk(KERN_INFO "CHRP SMP probe found %d cpus\n", ncpus);
+
+ /* Nothing more to do if less than 2 of them */
+ if (ncpus <= 1)
+ return 1;
+
+ mpic_request_ipis();