Add the rest of the kernel support for the sem_ API in kern/uipc_sem.c.
Option 'P1003_1B_SEMAPHORES' to compile them in, or load the "sem" module to activate them. Have kern/makesyscalls.sh emit an include for sys/_semaphore.h into sysproto.h to pull in the typedef for semid_t. Add the syscalls to the syscall table as module stubs.
This commit is contained in:
parent
efaa658806
commit
6d5dec35b7
@ -115,8 +115,9 @@ s/\$//g
|
||||
printf " * created from%s\n */\n\n", $0 > sysarg
|
||||
printf "#ifndef %s\n", sysproto_h > sysarg
|
||||
printf "#define\t%s\n\n", sysproto_h > sysarg
|
||||
printf "#include <sys/signal.h>\n\n" > sysarg
|
||||
printf "#include <sys/acl.h>\n\n" > sysarg
|
||||
printf "#include <sys/signal.h>\n" > sysarg
|
||||
printf "#include <sys/acl.h>\n" > sysarg
|
||||
printf "#include <posix4/_semaphore.h>\n\n" > sysarg
|
||||
printf "struct proc;\n\n" > sysarg
|
||||
printf "struct thread;\n\n" > sysarg
|
||||
printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg
|
||||
|
@ -92,12 +92,23 @@ P1B_SYSCTL(CTL_P1003_1B_TIMER_MAX, timer_max);
|
||||
|
||||
/* p31b_setcfg: Set the configuration
|
||||
*/
|
||||
void p31b_setcfg(int num, int value)
|
||||
void
|
||||
p31b_setcfg(int num, int value)
|
||||
{
|
||||
|
||||
if (num >= 1 && num < CTL_P1003_1B_MAXID)
|
||||
facility[num - 1] = value;
|
||||
}
|
||||
|
||||
int
|
||||
p31b_getcfg(int num)
|
||||
{
|
||||
|
||||
if (num >= 1 && num < CTL_P1003_1B_MAXID)
|
||||
return (facility[num - 1]);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Turn on indications for standard (non-configurable) kernel features.
|
||||
*/
|
||||
|
@ -569,3 +569,18 @@
|
||||
struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
|
||||
394 MSTD BSD { int mac_syscall(const char *policy, int call, \
|
||||
void *arg); }
|
||||
395 UNIMPL NOHIDE nosys
|
||||
396 UNIMPL NOHIDE nosys
|
||||
397 UNIMPL NOHIDE nosys
|
||||
398 UNIMPL NOHIDE nosys
|
||||
399 UNIMPL NOHIDE nosys
|
||||
400 MNOSTD BSD { int ksem_close(semid_t id); }
|
||||
401 MNOSTD BSD { int ksem_post(semid_t id); }
|
||||
402 MNOSTD BSD { int ksem_wait(semid_t id); }
|
||||
403 MNOSTD BSD { int ksem_trywait(semid_t id); }
|
||||
404 MNOSTD BSD { int ksem_init(semid_t *idp, unsigned int value); }
|
||||
405 MNOSTD BSD { int ksem_open(semid_t *idp, const char *name, \
|
||||
int oflag, mode_t mode, unsigned int value); }
|
||||
406 MNOSTD BSD { int ksem_unlink(const char *name); }
|
||||
407 MNOSTD BSD { int ksem_getvalue(semid_t id, int *val); }
|
||||
408 MNOSTD BSD { int ksem_destroy(semid_t id); }
|
||||
|
@ -77,6 +77,7 @@ SUBDIR= 3dfx \
|
||||
${_random} \
|
||||
rl \
|
||||
rp \
|
||||
sem \
|
||||
sf \
|
||||
sis \
|
||||
sk \
|
||||
|
8
sys/modules/sem/Makefile
Normal file
8
sys/modules/sem/Makefile
Normal file
@ -0,0 +1,8 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../../kern
|
||||
|
||||
KMOD= sem
|
||||
SRCS= uipc_sem.c opt_posix.h
|
||||
|
||||
.include <bsd.kmod.mk>
|
71
sys/posix4/_semaphore.h
Normal file
71
sys/posix4/_semaphore.h
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (c) 2002 Alfred Perlstein <alfred@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
#ifndef __SEMAPHORE_H_
|
||||
#define __SEMAPHORE_H_
|
||||
|
||||
typedef intptr_t semid_t;
|
||||
|
||||
#ifndef _KERNEL
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*
|
||||
* Semaphore definitions.
|
||||
*/
|
||||
struct sem {
|
||||
#define SEM_MAGIC ((u_int32_t) 0x09fa4012)
|
||||
u_int32_t magic;
|
||||
pthread_mutex_t lock;
|
||||
pthread_cond_t gtzero;
|
||||
u_int32_t count;
|
||||
u_int32_t nwaiters;
|
||||
#define SEM_USER (NULL)
|
||||
semid_t semid; /* semaphore id if kernel (shared) semaphore */
|
||||
int syssem; /* 1 if kernel (shared) semaphore */
|
||||
LIST_ENTRY(sem) entry;
|
||||
struct sem **backpointer;
|
||||
};
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
int ksem_close(semid_t id);
|
||||
int ksem_post(semid_t id);
|
||||
int ksem_wait(semid_t id);
|
||||
int ksem_trywait(semid_t id);
|
||||
int ksem_init(semid_t *idp, unsigned int value);
|
||||
int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode,
|
||||
unsigned int value);
|
||||
int ksem_unlink(const char *name);
|
||||
int ksem_getvalue(semid_t id, int *val);
|
||||
int ksem_destroy(semid_t id);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
#endif /* __SEMAPHORE_H_ */
|
@ -64,6 +64,7 @@ MALLOC_DECLARE(M_P31B);
|
||||
int p31b_proc(struct proc *, pid_t, struct proc **);
|
||||
|
||||
void p31b_setcfg(int, int);
|
||||
int p31b_getcfg(int);
|
||||
|
||||
#ifdef _KPOSIX_PRIORITY_SCHEDULING
|
||||
|
||||
|
@ -92,12 +92,23 @@ P1B_SYSCTL(CTL_P1003_1B_TIMER_MAX, timer_max);
|
||||
|
||||
/* p31b_setcfg: Set the configuration
|
||||
*/
|
||||
void p31b_setcfg(int num, int value)
|
||||
void
|
||||
p31b_setcfg(int num, int value)
|
||||
{
|
||||
|
||||
if (num >= 1 && num < CTL_P1003_1B_MAXID)
|
||||
facility[num - 1] = value;
|
||||
}
|
||||
|
||||
int
|
||||
p31b_getcfg(int num)
|
||||
{
|
||||
|
||||
if (num >= 1 && num < CTL_P1003_1B_MAXID)
|
||||
return (facility[num - 1]);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Turn on indications for standard (non-configurable) kernel features.
|
||||
*/
|
||||
|
71
sys/sys/_semaphore.h
Normal file
71
sys/sys/_semaphore.h
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (c) 2002 Alfred Perlstein <alfred@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
#ifndef __SEMAPHORE_H_
|
||||
#define __SEMAPHORE_H_
|
||||
|
||||
typedef intptr_t semid_t;
|
||||
|
||||
#ifndef _KERNEL
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*
|
||||
* Semaphore definitions.
|
||||
*/
|
||||
struct sem {
|
||||
#define SEM_MAGIC ((u_int32_t) 0x09fa4012)
|
||||
u_int32_t magic;
|
||||
pthread_mutex_t lock;
|
||||
pthread_cond_t gtzero;
|
||||
u_int32_t count;
|
||||
u_int32_t nwaiters;
|
||||
#define SEM_USER (NULL)
|
||||
semid_t semid; /* semaphore id if kernel (shared) semaphore */
|
||||
int syssem; /* 1 if kernel (shared) semaphore */
|
||||
LIST_ENTRY(sem) entry;
|
||||
struct sem **backpointer;
|
||||
};
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
int ksem_close(semid_t id);
|
||||
int ksem_post(semid_t id);
|
||||
int ksem_wait(semid_t id);
|
||||
int ksem_trywait(semid_t id);
|
||||
int ksem_init(semid_t *idp, unsigned int value);
|
||||
int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode,
|
||||
unsigned int value);
|
||||
int ksem_unlink(const char *name);
|
||||
int ksem_getvalue(semid_t id, int *val);
|
||||
int ksem_destroy(semid_t id);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
#endif /* __SEMAPHORE_H_ */
|
@ -64,6 +64,7 @@ MALLOC_DECLARE(M_P31B);
|
||||
int p31b_proc(struct proc *, pid_t, struct proc **);
|
||||
|
||||
void p31b_setcfg(int, int);
|
||||
int p31b_getcfg(int);
|
||||
|
||||
#ifdef _KPOSIX_PRIORITY_SCHEDULING
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user