standards/54634: [PATCH] add posix_madvise() call to -CURRENT
Bruce M Simpson
bms at spc.org
Sat Jul 19 05:20:15 PDT 2003
>Number: 54634
>Category: standards
>Synopsis: [PATCH] add posix_madvise() call to -CURRENT
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-standards
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sat Jul 19 05:20:13 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator: Bruce M Simpson
>Release: FreeBSD 5.1-RELEASE i386
>Organization:
>Environment:
System: FreeBSD saboteur.dek.spc.org 5.1-RELEASE FreeBSD 5.1-RELEASE #3: Mon Jun 23 06:55:01 BST 2003 root at saboteur.dek.spc.org:/usr/src/sys/i386/compile/SABOTEUR i386
>Description:
Here is a patch to add posix_madvise() -part of the POSIX/C99
conformance project.
>How-To-Repeat:
>Fix:
--- posix_madvise.patch begins here ---
Generated by diffcoll on Sat 21 Jun 2003 10:22:04 BST
diff -uN src/sys/sys/mman.h.orig src/sys/sys/mman.h
--- /usr/src/sys/sys/mman.h.orig Sat Jun 21 09:57:14 2003
+++ /usr/src/sys/sys/mman.h Sat Jun 21 09:59:13 2003
@@ -125,6 +125,11 @@
#define MADV_NOCORE 8 /* do not include these pages in a core file */
#define MADV_CORE 9 /* revert to including pages in a core file */
#define MADV_PROTECT 10 /* protect process from pageout kill */
+#define POSIX_MADV_NORMAL MADV_NORMAL
+#define POSIX_MADV_RANDOM MADV_RANDOM
+#define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL
+#define POSIX_MADV_WILLNEED MADV_WILLNEED
+#define POSIX_MADV_DONTNEED MADV_DONTNEED
/*
* Return bits from mincore
@@ -160,7 +165,7 @@
__BEGIN_DECLS
/*
- * XXX not yet implemented: mlockall(), munlockall(), posix_madvise(),
+ * XXX not yet implemented: mlockall(), munlockall(),
* posix_mem_offset(), posix_typed_mem_get_info(), posix_typed_mem_open().
*/
#if __BSD_VISIBLE
@@ -178,6 +183,7 @@
int munlock(const void *, size_t);
int munmap(void *, size_t);
#if __POSIX_VISIBLE >= 199309
+int posix_madvise(void *, size_t, int);
int shm_open(const char *, int, mode_t);
int shm_unlink(const char *);
#endif
diff -uN src/lib/libc/gen/Makefile.inc.orig src/lib/libc/gen/Makefile.inc
--- /usr/src/lib/libc/gen/Makefile.inc.orig Sat Jun 21 10:02:13 2003
+++ /usr/src/lib/libc/gen/Makefile.inc Sat Jun 21 10:02:56 2003
@@ -19,7 +19,8 @@
initgroups.c isatty.c jrand48.c lcong48.c \
lockf.c lrand48.c mrand48.c nice.c \
nlist.c nrand48.c ntp_gettime.c opendir.c \
- pause.c popen.c posixshm.c pselect.c psignal.c pw_scan.c pwcache.c \
+ pause.c popen.c posixshm.c pmadvise.c \
+ pselect.c psignal.c pw_scan.c pwcache.c \
raise.c readdir.c readpassphrase.c rewinddir.c \
scandir.c seed48.c seekdir.c semctl.c \
setdomainname.c sethostname.c setjmperr.c setmode.c \
diff -uN src/lib/libc/gen/pmadvise.c.orig src/lib/libc/gen/pmadvise.c
--- /usr/src/lib/libc/gen/pmadvise.c.orig Fri Feb 1 00:57:29 2002
+++ /usr/src/lib/libc/gen/pmadvise.c Sat Jun 21 10:01:39 2003
@@ -1,7 +1,7 @@
/*
* The contents of this file are in the public domain.
* Written by Garrett A. Wollman, 2000-10-07.
- *
+ * Updated by Bruce M. Simpson, 2003-06-21.
*/
#include <sys/cdefs.h>
@@ -10,7 +10,7 @@
#include <sys/mman.h>
int
-(posix_madvise)(void *address, size_t size, int how)
+posix_madvise(void *addr, size_t len, int advice)
{
- return posix_madvise(address, size, how);
+ return madvise(addr, len, advice);
}
diff -uN src/lib/libc/sys/Makefile.inc.orig src/lib/libc/sys/Makefile.inc
--- /usr/src/lib/libc/sys/Makefile.inc.orig Sat Jun 21 10:03:26 2003
+++ /usr/src/lib/libc/sys/Makefile.inc Sat Jun 21 10:04:04 2003
@@ -119,6 +119,7 @@
MLINKS+=kqueue.2 kevent.2
MLINKS+=kse.2 kse_create.2 kse.2 kse_exit.2 kse.2 kse_release.2 \
kse.2 kse_wakeup.2 kse.2 kse_thr_interrupt.2
+MLINKS+=madvise.2 posix_madvise.2
MLINKS+=mlock.2 munlock.2
MLINKS+=modnext.2 modfnext.2
MLINKS+=mount.2 unmount.2
diff -uN src/lib/libc/sys/madvise.2.orig src/lib/libc/sys/madvise.2
--- /usr/src/lib/libc/sys/madvise.2.orig Sat Jun 21 10:04:10 2003
+++ /usr/src/lib/libc/sys/madvise.2 Sat Jun 21 10:22:02 2003
@@ -36,7 +36,8 @@
.Dt MADVISE 2
.Os
.Sh NAME
-.Nm madvise
+.Nm madvise ,
+.Nm posix_madvise
.Nd give advice about use of memory
.Sh LIBRARY
.Lb libc
@@ -44,6 +45,8 @@
.In sys/mman.h
.Ft int
.Fn madvise "void *addr" "size_t len" "int behav"
+.Ft int
+.Fn posix_madvise "void *addr" "size_t len" "int advice"
.Sh DESCRIPTION
The
.Fn madvise
@@ -51,6 +54,13 @@
allows a process that has knowledge of its memory behavior
to describe it to the system.
.Pp
+The
+.Fn posix_madvise
+interface is identical and is provided for the purposes of
+standards conformance. The
+.Dv POSIX_
+prefixed definitions should be used when calling this interface.
+.Pp
The known behaviors are:
.Bl -tag -width MADV_SEQUENTIAL
.It Dv MADV_NORMAL
@@ -123,7 +133,44 @@
The process must have superuser privileges.
This should be used judiciously in processes that must remain running
for the system to properly function.
+.It Dv POSIX_MADV_NORMAL
+Same as
+.Dv MADV_NORMAL
+but used with the
+.Fn posix_madvise
+system call.
+.It Dv POSIX_MADV_SEQUENTIAL
+Same as
+.Dv MADV_SEQUENTIAL
+but used with the
+.Fn posix_madvise
+system call.
+.It Dv POSIX_MADV_RANDOM
+Same as
+.Dv MADV_RANDOM
+but used with the
+.Fn posix_madvise
+system call.
+.It Dv POSIX_MADV_WILLNEED
+Same as
+.Dv MADV_WILLNEED
+but used with the
+.Fn posix_madvise
+system call.
+.It Dv POSIX_MADV_WONTNEED
+Same as
+.Dv MADV_WONTNEED
+but used with the
+.Fn posix_madvise
+system call.
.El
+.Sh IMPLEMENTATION NOTES
+The
+.Fn posix_madvise
+function is implemented as a function within libc
+which simply calls the
+.Fn madvise
+system call stub.
.Sh RETURN VALUES
.Rv -std madvise
.Sh ERRORS
@@ -146,6 +193,10 @@
.Xr mprotect 2 ,
.Xr msync 2 ,
.Xr munmap 2
+.Sh STANDARDS
+The
+.Fn posix_madvise
+interface is believed to conform to IEEE Std 1003.1-2001 (``POSIX.1'').
.Sh HISTORY
The
.Fn madvise
--- posix_madvise.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-standards
mailing list