Subject: Re: sysutils/xosview build failure (was: CVS commit: src/sys)
To: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
From: Bernd Ernesti <netbsd@lists.veego.de>
List: pkgsrc-users
Date: 04/09/2007 17:35:43
--G4iJoqBmSsgzjUCe
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Fri, Mar 16, 2007 at 01:45:22PM +0900, YAMAMOTO Takashi wrote:
> > Hmm, schedstate_percpu is now inside an ifdef _KERNEL and pkgsrc/sysutils/xosview
> > fails to build now:
> > 
> > kernel.cc: In function 'void BSDGetCPUTimes(u_int64_t*)':
> > kernel.cc:418: error: aggregate 'schedstate_percpu ssp' has incomplete type and cannot be defined
> > 
> > Bernd
> 
> i think it should use "uint64_t cp_time[CPUSTATES]" rather than
> schedstate_percpu.

Ok, I think the following patch should fix that problem, where I'm not sure
about the MP case with more then one CPU.

Bernd


--G4iJoqBmSsgzjUCe
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="xosview.patch"

--- bsd/kernel.cc	2007-04-09 16:57:18.000000000 +0200
+++ bsd/kernel.cc	2007-04-09 16:57:29.000000000 +0200
@@ -401,6 +408,8 @@
   static int mib[] = { CTL_KERN, KERN_CPUSTATS };
 #endif
 #if defined(XOSVIEW_NETBSD) && (__NetBSD_Version__ >= 104260000)
+  uint64_t cp_time[CPUSTATES];
+  size_t size = sizeof(cp_time[0]) * CPUSTATES;
   static int mib[] = { CTL_KERN, KERN_CP_TIME };
 #endif
 
@@ -408,14 +417,11 @@
   if (CPUSTATES != 5)
     errx (-1, "Error:  xosview for *BSD expects 5 cpu states!\n");
 #if defined(__NetBSD_Version__) && __NetBSD_Version__ > 104260000 /* > 1.4Z */
-  struct schedstate_percpu ssp;
-  size_t size = sizeof(ssp.spc_cp_time);
-  if (sysctl(mib, 2, ssp.spc_cp_time, &size, NULL, 0) < 0) {
-    fprintf(stderr, "can't get schedstate_percpu: %s\n", strerror(errno));
-    memset(&ssp, 0, sizeof(ssp));
+  if (sysctl(mib, 2, cp_time, &size, NULL, 0) < 0) {
+    fprintf(stderr, "xosview: sysctl kern.cp_time failed: %s\n", strerror(errno));
+    bzero(&cp_time, size);
   }
-  for (size = 0; size < CPUSTATES; size++)
-    timeArray[size] = (long) ssp.spc_cp_time[size];
+  bcopy (cp_time, timeArray, size);
 #else
 #ifdef XOSVIEW_BSDI
   if (sysctl(mib, 2, &cpu, &size, NULL, 0) < 0) {

--G4iJoqBmSsgzjUCe--