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