xref: /titanic_41/usr/src/lib/libast/common/vmalloc/vmset.c (revision 5203bc321053fb87d7073c7640548fab73634793)
1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                  Common Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
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, inuse;
45 	reg Vmdata_t*	vd = vm->data;
46 
47 	if(flags == 0 && on == 0)
48 		return vd->mode;
49 
50 	SETINUSE(vd, inuse);
51 	if(!(vd->mode&VM_TRUST) )
52 	{	if(ISLOCK(vd,0))
53 		{	CLRINUSE(vd, inuse);
54 			return 0;
55 		}
56 		SETLOCK(vd,0);
57 	}
58 
59 	mode = vd->mode;
60 
61 	if(on)
62 		vd->mode |=  (flags&VM_FLAGS);
63 	else	vd->mode &= ~(flags&VM_FLAGS);
64 
65 	if(vd->mode&(VM_TRACE|VM_MTDEBUG))
66 		vd->mode &= ~VM_TRUST;
67 
68 	CLRLOCK(vd,0);
69 	CLRINUSE(vd, inuse);
70 
71 	return mode;
72 }
73 
74 #endif
75