[SPARC64]: Give more accurate errors in dr_cpu_configure().

When cpu_up() fails, we can discern the most likely cause.

If cpu_present() is false, this means the cpu did not appear
in the MD.  If -ENODEV is the error return value, then
the processor did not boot properly into the kernel.

Pass this information back in the dr-cpu response packet.

Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/arch/sparc64/kernel/ds.c b/arch/sparc64/kernel/ds.c
index d412cf8..b633171 100644
--- a/arch/sparc64/kernel/ds.c
+++ b/arch/sparc64/kernel/ds.c
@@ -535,11 +535,21 @@
 		printk(KERN_INFO PFX "Starting cpu %d...\n", cpu);
 		err = cpu_up(cpu);
 		if (err) {
+			__u32 res = DR_CPU_RES_FAILURE;
+			__u32 stat = DR_CPU_STAT_UNCONFIGURED;
+
+			if (!cpu_present(cpu)) {
+				/* CPU not present in MD */
+				res = DR_CPU_RES_NOT_IN_MD;
+				stat = DR_CPU_STAT_NOT_PRESENT;
+			} else if (err == -ENODEV) {
+				/* CPU did not call in successfully */
+				res = DR_CPU_RES_CPU_NOT_RESPONDING;
+			}
+
 			printk(KERN_INFO PFX "CPU startup failed err=%d\n",
 			       err);
-			dr_cpu_mark(resp, cpu, ncpus,
-				    DR_CPU_RES_FAILURE,
-				    DR_CPU_STAT_UNCONFIGURED);
+			dr_cpu_mark(resp, cpu, ncpus, res, stat);
 		}
 	}