1*433d6423SLionel Sambuc #include <sys/cdefs.h> 2*433d6423SLionel Sambuc #include "namespace.h" 3*433d6423SLionel Sambuc #include <lib.h> 4*433d6423SLionel Sambuc 5*433d6423SLionel Sambuc #include <string.h> 6*433d6423SLionel Sambuc #include <unistd.h> 7*433d6423SLionel Sambuc #include <sys/resource.h> 8*433d6423SLionel Sambuc 9*433d6423SLionel Sambuc int getrusage(int who, struct rusage *r_usage) 10*433d6423SLionel Sambuc { 11*433d6423SLionel Sambuc int rc; 12*433d6423SLionel Sambuc message m; 13*433d6423SLionel Sambuc 14*433d6423SLionel Sambuc memset(&m, 0, sizeof(m)); 15*433d6423SLionel Sambuc m.m_lc_pm_rusage.who = who; 16*433d6423SLionel Sambuc m.m_lc_pm_rusage.addr = (vir_bytes)r_usage; 17*433d6423SLionel Sambuc 18*433d6423SLionel Sambuc if (r_usage == NULL) { 19*433d6423SLionel Sambuc errno = EFAULT; 20*433d6423SLionel Sambuc return -1; 21*433d6423SLionel Sambuc } 22*433d6423SLionel Sambuc if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN) { 23*433d6423SLionel Sambuc errno = EINVAL; 24*433d6423SLionel Sambuc return -1; 25*433d6423SLionel Sambuc } 26*433d6423SLionel Sambuc 27*433d6423SLionel Sambuc memset(r_usage, 0, sizeof(struct rusage)); 28*433d6423SLionel Sambuc if ((rc = _syscall(PM_PROC_NR, PM_GETRUSAGE, &m)) < 0) 29*433d6423SLionel Sambuc return rc; 30*433d6423SLionel Sambuc 31*433d6423SLionel Sambuc memset(&m, 0, sizeof(m)); 32*433d6423SLionel Sambuc m.m_lc_vfs_rusage.addr = (vir_bytes)r_usage; 33*433d6423SLionel Sambuc if ((rc = _syscall(VFS_PROC_NR, VFS_GETRUSAGE, &m)) < 0) 34*433d6423SLionel Sambuc return rc; 35*433d6423SLionel Sambuc 36*433d6423SLionel Sambuc memset(&m, 0, sizeof(m)); 37*433d6423SLionel Sambuc m.m_lc_vm_rusage.addr = (vir_bytes)r_usage; 38*433d6423SLionel Sambuc return _syscall(VM_PROC_NR, VM_GETRUSAGE, &m); 39*433d6423SLionel Sambuc } 40