|
@@ -15,6 +15,7 @@
|
|
|
#include <asm/ebcdic.h>
|
|
|
#include <asm/sysinfo.h>
|
|
|
#include <asm/cpcmd.h>
|
|
|
+#include <asm/topology.h>
|
|
|
|
|
|
/* Sigh, math-emu. Don't ask. */
|
|
|
#include <asm/sfp-util.h>
|
|
@@ -84,6 +85,35 @@ static int stsi_1_1_1(struct sysinfo_1_1_1 *info, char *page, int len)
|
|
|
return len;
|
|
|
}
|
|
|
|
|
|
+static int stsi_15_1_x(struct sysinfo_15_1_x *info, char *page, int len)
|
|
|
+{
|
|
|
+ static int max_mnest;
|
|
|
+ int i, rc;
|
|
|
+
|
|
|
+ len += sprintf(page + len, "\n");
|
|
|
+ if (!MACHINE_HAS_TOPOLOGY)
|
|
|
+ return len;
|
|
|
+ if (max_mnest) {
|
|
|
+ stsi(info, 15, 1, max_mnest);
|
|
|
+ } else {
|
|
|
+ for (max_mnest = 6; max_mnest > 1; max_mnest--) {
|
|
|
+ rc = stsi(info, 15, 1, max_mnest);
|
|
|
+ if (rc != -ENOSYS)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ len += sprintf(page + len, "CPU Topology HW: ");
|
|
|
+ for (i = 0; i < TOPOLOGY_NR_MAG; i++)
|
|
|
+ len += sprintf(page + len, " %d", info->mag[i]);
|
|
|
+ len += sprintf(page + len, "\n");
|
|
|
+ store_topology(info);
|
|
|
+ len += sprintf(page + len, "CPU Topology SW: ");
|
|
|
+ for (i = 0; i < TOPOLOGY_NR_MAG; i++)
|
|
|
+ len += sprintf(page + len, " %d", info->mag[i]);
|
|
|
+ len += sprintf(page + len, "\n");
|
|
|
+ return len;
|
|
|
+}
|
|
|
+
|
|
|
static int stsi_1_2_2(struct sysinfo_1_2_2 *info, char *page, int len)
|
|
|
{
|
|
|
struct sysinfo_1_2_2_extension *ext;
|
|
@@ -94,7 +124,6 @@ static int stsi_1_2_2(struct sysinfo_1_2_2 *info, char *page, int len)
|
|
|
ext = (struct sysinfo_1_2_2_extension *)
|
|
|
((unsigned long) info + info->acc_offset);
|
|
|
|
|
|
- len += sprintf(page + len, "\n");
|
|
|
len += sprintf(page + len, "CPUs Total: %d\n",
|
|
|
info->cpus_total);
|
|
|
len += sprintf(page + len, "CPUs Configured: %d\n",
|
|
@@ -223,6 +252,9 @@ static int proc_read_sysinfo(char *page, char **start,
|
|
|
if (level >= 1)
|
|
|
len = stsi_1_1_1((struct sysinfo_1_1_1 *) info, page, len);
|
|
|
|
|
|
+ if (level >= 1)
|
|
|
+ len = stsi_15_1_x((struct sysinfo_15_1_x *) info, page, len);
|
|
|
+
|
|
|
if (level >= 1)
|
|
|
len = stsi_1_2_2((struct sysinfo_1_2_2 *) info, page, len);
|
|
|
|