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().
This commit is contained in:
Alfred Perlstein 2002-11-17 04:15:34 +00:00
parent 9df5c871ce
commit f51c1e897d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=106998
6 changed files with 52 additions and 13 deletions

View File

@ -254,20 +254,17 @@ sysconf(name)
return (_POSIX_TIMERS);
#endif
case _SC_AIO_LISTIO_MAX:
defaultresult = _POSIX_AIO_LISTIO_MAX;
mib[0] = CTL_P1003_1B;
mib[1] = CTL_P1003_1B_AIO_LISTIO_MAX;
goto yesno;
goto break;
case _SC_AIO_MAX:
defaultresult = _POSIX_AIO_MAX;
mib[0] = CTL_P1003_1B;
mib[1] = CTL_P1003_1B_AIO_MAX;
goto yesno;
goto break;
case _SC_AIO_PRIO_DELTA_MAX:
defaultresult = 0;
mib[0] = CTL_P1003_1B;
mib[1] = CTL_P1003_1B_AIO_PRIO_DELTA_MAX;
goto yesno;
goto break;
case _SC_DELAYTIMER_MAX:
mib[0] = CTL_P1003_1B;
mib[1] = CTL_P1003_1B_DELAYTIMER_MAX;

View File

@ -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,

View File

@ -376,9 +376,9 @@ aio_unload(void)
rm_at_exit(aio_proc_rundown);
rm_at_exec(aio_proc_rundown);
kqueue_del_filteropts(EVFILT_AIO);
p31b_setcfg(CTL_P1003_1B_AIO_LISTIO_MAX, 0);
p31b_setcfg(CTL_P1003_1B_AIO_MAX, 0);
p31b_setcfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, 0);
p31b_setcfg(CTL_P1003_1B_AIO_LISTIO_MAX, -1);
p31b_setcfg(CTL_P1003_1B_AIO_MAX, -1);
p31b_setcfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, -1);
return (0);
}

View File

@ -63,6 +63,7 @@ int p31b_proc(struct proc *, pid_t, struct proc **);
void p31b_setcfg(int, int);
int p31b_getcfg(int);
int p31b_iscfg(int);
#ifdef _KPOSIX_PRIORITY_SCHEDULING

View File

@ -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,

View File

@ -63,6 +63,7 @@ int p31b_proc(struct proc *, pid_t, struct proc **);
void p31b_setcfg(int, int);
int p31b_getcfg(int);
int p31b_iscfg(int);
#ifdef _KPOSIX_PRIORITY_SCHEDULING