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