xref: /netbsd-src/sys/compat/linux/common/linux_limit.h (revision eab380320695b8901777f834601151f48dd29933)
1*eab38032Sriastradh /* 	$NetBSD: linux_limit.h,v 1.10 2024/10/01 16:41:29 riastradh Exp $ */
2ee0c5b44Smanu 
3ee0c5b44Smanu /*-
4ee0c5b44Smanu  * Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc.
5ee0c5b44Smanu  * All rights reserved.
6ee0c5b44Smanu  *
7ee0c5b44Smanu  * This code is derived from software contributed to The NetBSD Foundation
8ee0c5b44Smanu  * by Frank van der Linden and Eric Haszlakiewicz; by Jason R. Thorpe
9ee0c5b44Smanu  * of the Numerical Aerospace Simulation Facility, NASA Ames Research Center.
10ee0c5b44Smanu  *
11ee0c5b44Smanu  * Redistribution and use in source and binary forms, with or without
12ee0c5b44Smanu  * modification, are permitted provided that the following conditions
13ee0c5b44Smanu  * are met:
14ee0c5b44Smanu  * 1. Redistributions of source code must retain the above copyright
15ee0c5b44Smanu  *    notice, this list of conditions and the following disclaimer.
16ee0c5b44Smanu  * 2. Redistributions in binary form must reproduce the above copyright
17ee0c5b44Smanu  *    notice, this list of conditions and the following disclaimer in the
18ee0c5b44Smanu  *    documentation and/or other materials provided with the distribution.
19ee0c5b44Smanu  *
20ee0c5b44Smanu  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21ee0c5b44Smanu  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22ee0c5b44Smanu  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23ee0c5b44Smanu  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24ee0c5b44Smanu  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25ee0c5b44Smanu  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26ee0c5b44Smanu  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27ee0c5b44Smanu  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28ee0c5b44Smanu  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29ee0c5b44Smanu  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30ee0c5b44Smanu  * POSSIBILITY OF SUCH DAMAGE.
31ee0c5b44Smanu  */
32ee0c5b44Smanu 
33ee0c5b44Smanu #ifndef _LINUX_LIMIT_H_
34ee0c5b44Smanu #define _LINUX_LIMIT_H_
35ee0c5b44Smanu 
36f2af9174Sdsl static int linux_to_bsd_limit(int);
37ee0c5b44Smanu 
388f021900Sryo #define bsd_to_linux_rlimit64_1(l, b, f) \
39ee0c5b44Smanu     (l)->f = ((b)->f == RLIM_INFINITY || \
40ee0c5b44Smanu 	     ((b)->f & 0x8000000000000000UL) != 0) ? \
41ee0c5b44Smanu     LINUX_RLIM_INFINITY : (b)->f
428f021900Sryo #define bsd_to_linux_rlimit32_1(l, b, f) \
43ee0c5b44Smanu     (l)->f = ((b)->f == RLIM_INFINITY || \
44ee0c5b44Smanu 	     ((b)->f & 0xffffffff00000000ULL) != 0) ? \
45ee0c5b44Smanu     LINUX_RLIM_INFINITY : (int32_t)(b)->f
468f021900Sryo 
478f021900Sryo #define bsd_to_linux_rlimit64(l, b) \
488f021900Sryo     bsd_to_linux_rlimit64_1(l, b, rlim_cur); \
498f021900Sryo     bsd_to_linux_rlimit64_1(l, b, rlim_max)
508f021900Sryo #define bsd_to_linux_rlimit32(l, b) \
518f021900Sryo     bsd_to_linux_rlimit32_1(l, b, rlim_cur); \
528f021900Sryo     bsd_to_linux_rlimit32_1(l, b, rlim_max)
538f021900Sryo 
548f021900Sryo #ifdef LINUX_LARGEFILE64
558f021900Sryo #define bsd_to_linux_rlimit(l, b)	bsd_to_linux_rlimit64(l, b)
568f021900Sryo #else
578f021900Sryo #define bsd_to_linux_rlimit(l, b)	bsd_to_linux_rlimit32(l, b)
58ee0c5b44Smanu #endif
59ee0c5b44Smanu 
60ee0c5b44Smanu #define linux_to_bsd_rlimit1(b, l, f) \
61ee0c5b44Smanu     (b)->f = (l)->f == LINUX_RLIM_INFINITY ? RLIM_INFINITY : (l)->f
62ee0c5b44Smanu #define linux_to_bsd_rlimit(b, l) \
63ee0c5b44Smanu     linux_to_bsd_rlimit1(b, l, rlim_cur); \
64ee0c5b44Smanu     linux_to_bsd_rlimit1(b, l, rlim_max)
65ee0c5b44Smanu 
66511ffdebSjoerg #define linux32_to_bsd_rlimit1(b, l, f) \
67361da585Snjoly     (b)->f = (l)->f == LINUX32_RLIM_INFINITY ? RLIM_INFINITY : (uint32_t)(l)->f
68511ffdebSjoerg #define linux32_to_bsd_rlimit(b, l) \
69511ffdebSjoerg     linux32_to_bsd_rlimit1(b, l, rlim_cur); \
70511ffdebSjoerg     linux32_to_bsd_rlimit1(b, l, rlim_max)
71511ffdebSjoerg 
72ee0c5b44Smanu static int
739fca5da6Scegger linux_to_bsd_limit(int lim)
74ee0c5b44Smanu {
75ee0c5b44Smanu 	switch (lim) {
76ee0c5b44Smanu 	case LINUX_RLIMIT_CPU:
77ee0c5b44Smanu 		return RLIMIT_CPU;
78ee0c5b44Smanu 	case LINUX_RLIMIT_FSIZE:
79ee0c5b44Smanu 		return RLIMIT_FSIZE;
80ee0c5b44Smanu 	case LINUX_RLIMIT_DATA:
81ee0c5b44Smanu 		return RLIMIT_DATA;
82ee0c5b44Smanu 	case LINUX_RLIMIT_STACK:
83ee0c5b44Smanu 		return RLIMIT_STACK;
84ee0c5b44Smanu 	case LINUX_RLIMIT_CORE:
85ee0c5b44Smanu 		return RLIMIT_CORE;
86ee0c5b44Smanu 	case LINUX_RLIMIT_RSS:
87ee0c5b44Smanu 		return RLIMIT_RSS;
88ee0c5b44Smanu 	case LINUX_RLIMIT_NPROC:
89ee0c5b44Smanu 		return RLIMIT_NPROC;
90ee0c5b44Smanu 	case LINUX_RLIMIT_NOFILE:
91ee0c5b44Smanu 		return RLIMIT_NOFILE;
92ee0c5b44Smanu 	case LINUX_RLIMIT_MEMLOCK:
93ee0c5b44Smanu 		return RLIMIT_MEMLOCK;
94ee0c5b44Smanu 	case LINUX_RLIMIT_AS:
95fcc02354Smrg 		return RLIMIT_AS;
96ee0c5b44Smanu 	case LINUX_RLIMIT_LOCKS:
9725cb9c57Schristos 	case LINUX_RLIMIT_SIGPENDING:
9825cb9c57Schristos 	case LINUX_RLIMIT_MSGQUEUE:
9925cb9c57Schristos 	case LINUX_RLIMIT_NICE:
10025cb9c57Schristos 	case LINUX_RLIMIT_RTPRIO:
10125cb9c57Schristos 	case LINUX_RLIMIT_RTTIME:
102ee0c5b44Smanu 		return -EOPNOTSUPP;
103ee0c5b44Smanu 	default:
104ee0c5b44Smanu 		return -EINVAL;
105ee0c5b44Smanu 	}
106ee0c5b44Smanu }
107ee0c5b44Smanu 
108ee0c5b44Smanu 
109ee0c5b44Smanu #endif /* _LINUX_LIMIT_H_ */
110