components/gnome/libgtop/patches/libgtop-04-sysinfo.patch
changeset 7136 ff8962427c9b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/gnome/libgtop/patches/libgtop-04-sysinfo.patch	Sat Oct 15 13:59:18 2016 -0700
@@ -0,0 +1,103 @@
+Solaris implementation of CPU information retrieval backend to fix bug 24898656
+
+Need to submit upstream along with previous patches, once they're cleaned up.
+
+--- libgtop-2.30.0/sysdeps/solaris/sysinfo.c
++++ libgtop-2.30.0/sysdeps/solaris/sysinfo.c
+@@ -37,7 +37,96 @@
+ static void
+ init_sysinfo (glibtop *server)
+ {
++	kstat_ctl_t	*kc;
++	guint		 ncpus;
+ 
++	if (G_LIKELY (sysinfo.flags))
++		return;
++
++	glibtop_init_s (&server, GLIBTOP_SYSDEPS_CPU, 0);
++	ncpus = sysconf(_SC_NPROCESSORS_CONF);
++
++	if (server->machine.kc == NULL)
++		server->machine.kc = kstat_open ();
++	kc = server->machine.kc;
++
++	for (sysinfo.ncpu = 0;
++	     sysinfo.ncpu < GLIBTOP_NCPU && sysinfo.ncpu < ncpus;
++	     sysinfo.ncpu++) {
++		glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu];
++		kstat_t	*ksp;
++		kstat_named_t *k;
++		int status;
++
++		ksp = kstat_lookup(kc, "cpu_info", sysinfo.ncpu, NULL);
++		if (ksp == NULL) {
++			continue;
++		}
++
++		status = kstat_read(kc, ksp, NULL);
++		if (status == -1) {
++			continue;
++		}
++
++		cpuinfo->labels = g_ptr_array_new ();
++
++		cpuinfo->values = g_hash_table_new_full(g_str_hash,
++							g_str_equal,
++							NULL, g_free);
++
++		g_ptr_array_add (cpuinfo->labels, "processor");
++		g_hash_table_insert (cpuinfo->values, "processor",
++				     g_strdup_printf("%u", (guint)sysinfo.ncpu));
++
++		/* Map names from Solaris kstats to Linux /proc/cpuinfo keys */
++		k = (kstat_named_t *) kstat_data_lookup(ksp, "brand");
++		if (k) {
++			g_ptr_array_add (cpuinfo->labels, "model name");
++			g_hash_table_insert (cpuinfo->values, "model name",
++					     g_strdup(k->value.str.addr.ptr));
++		}
++
++		k = (kstat_named_t *) kstat_data_lookup(ksp, "core_id");
++		if (k) {
++			g_ptr_array_add (cpuinfo->labels, "core id");
++			g_hash_table_insert (cpuinfo->values, "core id",
++					     g_strdup_printf("%ld", k->value.l));
++		}
++
++		k = (kstat_named_t *) kstat_data_lookup(ksp, "clock_MHz");
++		if (k) {
++			g_ptr_array_add (cpuinfo->labels, "cpu MHz");
++			g_hash_table_insert (cpuinfo->values, "cpu MHz",
++					     g_strdup_printf("%ld", k->value.l));
++		}
++
++		k = (kstat_named_t *) kstat_data_lookup(ksp, "family");
++		if (k) {
++			g_ptr_array_add (cpuinfo->labels, "cpu family");
++			g_hash_table_insert (cpuinfo->values, "cpu family",
++					     g_strdup_printf("%ld", k->value.l));
++		}
++
++		k = (kstat_named_t *) kstat_data_lookup(ksp, "model");
++		if (k) {
++			g_ptr_array_add (cpuinfo->labels, "model");
++			g_hash_table_insert (cpuinfo->values, "model",
++					     g_strdup_printf("%ld", k->value.l));
++		}
++
++		k = (kstat_named_t *) kstat_data_lookup(ksp, "vendor_id");
++		if (k) {
++			g_ptr_array_add (cpuinfo->labels, "vendor_id");
++			g_hash_table_insert (cpuinfo->values, "vendor_id",
++					     g_strdup(k->value.str.addr.ptr));
++		}
++
++
++
++
++	}
++
++	sysinfo.flags = _glibtop_sysdeps_sysinfo;
+ }
+ 
+ const glibtop_sysinfo *