1 /*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * William Jolitz. 7 * 8 * %sccs.include.redist.c% 9 * 10 * @(#)sys_machdep.c 8.1 (Berkeley) 06/11/93 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 struct vtrace_args { 29 int request; 30 int value; 31 }; 32 vtrace(p, uap, retval) 33 struct proc *p; 34 register struct args *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