1 /* 2 * Copyright (c) 1982, 1986 Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)sys_machdep.c 7.6 (Berkeley) 12/16/90 8 */ 9 10 #include "sys/param.h" 11 #include "sys/systm.h" 12 #include "sys/ioctl.h" 13 #include "sys/file.h" 14 #include "sys/time.h" 15 #include "sys/proc.h" 16 #include "sys/uio.h" 17 #include "sys/kernel.h" 18 #include "sys/mtio.h" 19 #include "sys/buf.h" 20 #include "sys/trace.h" 21 22 #ifdef TRACE 23 int nvualarm; 24 25 vtrace(p, uap, retval) 26 struct proc *p; 27 register struct args { 28 int request; 29 int value; 30 } *uap; 31 int *retval; 32 { 33 int vdoualarm(); 34 35 switch (uap->request) { 36 37 case VTR_DISABLE: /* disable a trace point */ 38 case VTR_ENABLE: /* enable a trace point */ 39 if (uap->value < 0 || uap->value >= TR_NFLAGS) 40 return (EINVAL); 41 *retval = traceflags[uap->value]; 42 traceflags[uap->value] = uap->request; 43 break; 44 45 case VTR_VALUE: /* return a trace point setting */ 46 if (uap->value < 0 || uap->value >= TR_NFLAGS) 47 return (EINVAL); 48 *retval = traceflags[uap->value]; 49 break; 50 51 case VTR_UALARM: /* set a real-time ualarm, less than 1 min */ 52 if (uap->value <= 0 || uap->value > 60 * hz || nvualarm > 5) 53 return (EINVAL); 54 nvualarm++; 55 timeout(vdoualarm, (caddr_t)p->p_pid, uap->value); 56 break; 57 58 case VTR_STAMP: 59 trace(TR_STAMP, uap->value, p->p_pid); 60 break; 61 } 62 return (0); 63 } 64 65 vdoualarm(arg) 66 int arg; 67 { 68 register struct proc *p; 69 70 p = pfind(arg); 71 if (p) 72 psignal(p, 16); 73 nvualarm--; 74 } 75 #endif 76