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