summaryrefslogtreecommitdiffstats
path: root/sys/kern/posix4_mib.c
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2002-11-17 04:15:34 +0000
committeralfred <alfred@FreeBSD.org>2002-11-17 04:15:34 +0000
commit404161b0ebc663732ff605fa1cec5fc6f2cbf76d (patch)
treee2dfa1f642b4d621b045178bb552f0214e31be7a /sys/kern/posix4_mib.c
parent788d21c22efba82ded14c4c83035501ce6be4936 (diff)
downloadFreeBSD-src-404161b0ebc663732ff605fa1cec5fc6f2cbf76d.zip
FreeBSD-src-404161b0ebc663732ff605fa1cec5fc6f2cbf76d.tar.gz
Rework the sysconf(3) interaction with aio:
sysconf.c: Use 'break' rather than 'goto yesno' in sysconf.c so that we report a '0' return value from the kernel sysctl. vfs_aio.c: Make aio reset its configuration parameters to -1 after unloading instead of 0. posix4_mib.c: Initialize the aio configuration parameters to -1 to indicate that it is not loaded. Add a facility (p31b_iscfg()) to determine if a posix4 facility has been initialized to avoid having to re-order the SYSINITs. Use p31b_iscfg() to determine if aio has had a chance to run yet which is likely if it is compiled into the kernel and avoid spamming its values. Introduce a macro P31B_VALID() instead of doing the same comparison over and over. posix4.h: Prototype p31b_iscfg().
Diffstat (limited to 'sys/kern/posix4_mib.c')
-rw-r--r--sys/kern/posix4_mib.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/sys/kern/posix4_mib.c b/sys/kern/posix4_mib.c
index 6f1fe46..12d5fec 100644
--- a/sys/kern/posix4_mib.c
+++ b/sys/kern/posix4_mib.c
@@ -40,6 +40,7 @@
#include <posix4/posix4.h>
static int facility[CTL_P1003_1B_MAXID - 1];
+static int facility_initialized[CTL_P1003_1B_MAXID - 1];
/* OID_AUTO isn't working with sysconf(3). I guess I'd have to
* modify it to do a lookup by name from the index.
@@ -92,25 +93,38 @@ P1B_SYSCTL(CTL_P1003_1B_SEM_VALUE_MAX, sem_value_max);
P1B_SYSCTL(CTL_P1003_1B_SIGQUEUE_MAX, sigqueue_max);
P1B_SYSCTL(CTL_P1003_1B_TIMER_MAX, timer_max);
+#define P31B_VALID(num) ((num) >= 1 && (num) < CTL_P1003_1B_MAXID)
+
/* p31b_setcfg: Set the configuration
*/
void
p31b_setcfg(int num, int value)
{
- if (num >= 1 && num < CTL_P1003_1B_MAXID)
+ if (P31B_VALID(num)) {
facility[num - 1] = value;
+ facility_initialized[num - 1] = 1;
+ }
}
int
p31b_getcfg(int num)
{
- if (num >= 1 && num < CTL_P1003_1B_MAXID)
+ if (P31B_VALID(num))
return (facility[num - 1]);
return (0);
}
+int
+p31b_iscfg(int num)
+{
+
+ if (P31B_VALID(num))
+ return (facility_initialized[num - 1]);
+ return (0);
+}
+
/*
* Turn on indications for standard (non-configurable) kernel features.
*/
@@ -121,6 +135,12 @@ p31b_set_standard(void *dummy)
p31b_setcfg(CTL_P1003_1B_MAPPED_FILES, 1);
p31b_setcfg(CTL_P1003_1B_SHARED_MEMORY_OBJECTS, 1);
p31b_setcfg(CTL_P1003_1B_PAGESIZE, PAGE_SIZE);
+ if (!p31b_iscfg(CTL_P1003_1B_AIO_LISTIO_MAX))
+ p31b_setcfg(CTL_P1003_1B_AIO_LISTIO_MAX, -1);
+ if (!p31b_iscfg(CTL_P1003_1B_AIO_MAX))
+ p31b_setcfg(CTL_P1003_1B_AIO_MAX, -1);
+ if (!p31b_iscfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX))
+ p31b_setcfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, -1);
}
SYSINIT(p31b_set_standard, SI_SUB_P1003_1B, SI_ORDER_ANY, p31b_set_standard,
OpenPOWER on IntegriCloud