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