 cc17b27a2b
			
		
	
	
		cc17b27a2b
		
	
	
	
	
		
			
			3 sets of libraries are built now: . ack: all libraries that ack can compile (/usr/lib/i386/) . clang+elf: all libraries with minix headers (/usr/lib/) . clang+elf: all libraries with netbsd headers (/usr/netbsd/) Once everything can be compiled with netbsd libraries and headers, the /usr/netbsd hierarchy will be obsolete and its libraries compiled with netbsd headers will be installed in /usr/lib, and its headers in /usr/include. (i.e. minix libc and current minix headers set will be gone.) To use the NetBSD libc system (libraries + headers) before it is the default libc, see: http://wiki.minix3.org/en/DevelopersGuide/UsingNetBSDCode This wiki page also documents the maintenance of the patch files of minix-specific changes to imported NetBSD code. Changes in this commit: . libsys: Add NBSD compilation and create a safe NBSD-based libc. . Port rest of libraries (except libddekit) to new header system. . Enable compilation of libddekit with new headers. . Enable kernel compilation with new headers. . Enable drivers compilation with new headers. . Port legacy commands to new headers and libc. . Port servers to new headers. . Add <sys/sigcontext.h> in compat library. . Remove dependency file in tree. . Enable compilation of common/lib/libc/atomic in libsys . Do not generate RCSID strings in libc. . Temporarily disable zoneinfo as they are incompatible with NetBSD format . obj-nbsd for .gitignore . Procfs: use only integer arithmetic. (Antoine Leca) . Increase ramdisk size to create NBSD-based images. . Remove INCSYMLINKS handling hack. . Add nbsd_include/sys/exec_elf.h . Enable ELF compilation with NBSD libc. . Add 'make nbsdsrc' in tools to download reference NetBSD sources. . Automate minix-port.patch creation. . Avoid using fstavfs() as it is *extremely* slow and unneeded. . Set err() as PRIVATE to avoid name clash with libc. . [NBSD] servers/vm: remove compilation warnings. . u32 is not a long in NBSD headers. . UPDATING info on netbsd hierarchy . commands fixes for netbsd libc
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* ProcFS - util.c - by Alen Stojanov and David van Moolenbroek */
 | |
| 
 | |
| #include "inc.h"
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *				procfs_getloadavg			     *
 | |
|  *===========================================================================*/
 | |
| PUBLIC int procfs_getloadavg(struct load *loadavg, int nelem)
 | |
| {
 | |
| 	/* Retrieve system load average information.
 | |
| 	 */
 | |
| 	struct loadinfo loadinfo;
 | |
| 	u32_t system_hz, ticks_per_slot;
 | |
| 	int p, unfilled_ticks;
 | |
| 	int minutes[3] = { 1, 5, 15 };
 | |
| 	ssize_t l;
 | |
| 
 | |
| 	if(nelem < 1) {
 | |
| 		errno = ENOSPC;
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	system_hz = sys_hz();
 | |
| 
 | |
| 	if((l=sys_getloadinfo(&loadinfo)) != OK)
 | |
| 		return -1;
 | |
| 	if(nelem > 3)
 | |
| 		nelem = 3;
 | |
| 
 | |
| 	/* How many ticks are missing from the newest-filled slot? */
 | |
| 	ticks_per_slot = _LOAD_UNIT_SECS * system_hz;
 | |
| 	unfilled_ticks =
 | |
| 		ticks_per_slot - (loadinfo.last_clock % ticks_per_slot);
 | |
| 
 | |
| 	for(p = 0; p < nelem; p++) {
 | |
| 		int h, slots;
 | |
| 		int latest = loadinfo.proc_last_slot;
 | |
| 		slots = minutes[p] * 60 / _LOAD_UNIT_SECS;
 | |
| 		loadavg[p].proc_load = 0;
 | |
| 
 | |
| 		/* Add up the total number of process ticks for this number
 | |
| 		 * of minutes (minutes[p]). Start with the newest slot, which
 | |
| 		 * is latest, and count back for the number of slots that
 | |
| 		 * correspond to the right number of minutes. Take wraparound
 | |
| 		 * into account by calculating the index modulo _LOAD_HISTORY,
 | |
| 		 * which is the number of slots of history kept.
 | |
| 		 */
 | |
| 		for(h = 0; h < slots; h++) {
 | |
| 			int slot;
 | |
| 			slot = (latest - h + _LOAD_HISTORY) % _LOAD_HISTORY;
 | |
| 			loadavg[p].proc_load +=
 | |
| 				 loadinfo.proc_load_history[slot];
 | |
| 			l += (double) loadinfo.proc_load_history[slot];
 | |
| 		}
 | |
| 
 | |
| 		/* The load average over this number of minutes is the number
 | |
| 		 * of process-ticks divided by the number of ticks, not
 | |
| 		 * counting the number of ticks the last slot hasn't been
 | |
| 		 * around yet.
 | |
| 		 */
 | |
| 		loadavg[p].ticks = slots * ticks_per_slot - unfilled_ticks;
 | |
| 	}
 | |
| 
 | |
| 	return nelem;
 | |
| }
 |