xref: /titanic_44/usr/src/lib/libast/common/vmalloc/vmset.c (revision 28f13c3500015535924009a4989df87cf213fb99)
1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *           Copyright (c) 1985-2007 AT&T Knowledge Ventures            *
5 *                      and is licensed under the                       *
6 *                  Common Public License, Version 1.0                  *
7 *                      by AT&T Knowledge Ventures                      *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *            http://www.opensource.org/licenses/cpl1.0.txt             *
11 *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *                 Glenn Fowler <gsf@research.att.com>                  *
18 *                  David Korn <dgk@research.att.com>                   *
19 *                   Phong Vo <kpv@research.att.com>                    *
20 *                                                                      *
21 ***********************************************************************/
22 #if defined(_UWIN) && defined(_BLD_ast)
23 
24 void _STUB_vmset(){}
25 
26 #else
27 
28 #include	"vmhdr.h"
29 
30 
31 /*	Set the control flags for a region.
32 **
33 **	Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94.
34 */
35 #if __STD_C
36 int vmset(reg Vmalloc_t* vm, int flags, int on)
37 #else
38 int vmset(vm, flags, on)
39 reg Vmalloc_t*	vm;	/* region being worked on		*/
40 int		flags;	/* flags must be in VM_FLAGS		*/
41 int		on;	/* !=0 if turning on, else turning off	*/
42 #endif
43 {
44 	reg int		mode;
45 	reg Vmdata_t*	vd = vm->data;
46 
47 	if(flags == 0 && on == 0)
48 		return vd->mode;
49 
50 	if(!(vd->mode&VM_TRUST) )
51 	{	if(ISLOCK(vd,0))
52 			return 0;
53 		SETLOCK(vd,0);
54 	}
55 
56 	mode = vd->mode;
57 
58 	if(on)
59 		vd->mode |=  (flags&VM_FLAGS);
60 	else	vd->mode &= ~(flags&VM_FLAGS);
61 
62 	if(vd->mode&(VM_TRACE|VM_MTDEBUG))
63 		vd->mode &= ~VM_TRUST;
64 
65 	CLRLOCK(vd,0);
66 
67 	return mode;
68 }
69 
70 #endif
71