diff --git a/lib/libkse/arch/i386/include/pthread_md.h b/lib/libkse/arch/i386/include/pthread_md.h index cb5a3443a345..ad0dfd61cb37 100644 --- a/lib/libkse/arch/i386/include/pthread_md.h +++ b/lib/libkse/arch/i386/include/pthread_md.h @@ -51,4 +51,16 @@ extern int _thr_getcontext(ucontext_t *); #define THR_ALIGNBYTES 15 #define THR_ALIGN(td) (((unsigned)(td) + THR_ALIGNBYTES) & ~THR_ALIGNBYTES) + +/* + * KSE Specific Data. + */ +struct ksd { + int ldt; +#define KSDF_INITIALIZED 0x01 + long flags; + void *base; + long size; +}; + #endif diff --git a/lib/libkse/arch/ia64/Makefile.inc b/lib/libkse/arch/ia64/Makefile.inc index b3aafbd34c62..4b8d9d2da8b1 100644 --- a/lib/libkse/arch/ia64/Makefile.inc +++ b/lib/libkse/arch/ia64/Makefile.inc @@ -2,4 +2,4 @@ .PATH: ${.CURDIR}/arch/${MACHINE_ARCH}/${MACHINE_ARCH} -SRCS+= ksd.c thr_enter_uts.S thr_switch.S +SRCS+= thr_enter_uts.S thr_switch.S diff --git a/lib/libkse/arch/ia64/include/pthread_md.h b/lib/libkse/arch/ia64/include/pthread_md.h index 93a179d2ec7f..096543589fac 100644 --- a/lib/libkse/arch/ia64/include/pthread_md.h +++ b/lib/libkse/arch/ia64/include/pthread_md.h @@ -35,4 +35,10 @@ #define THR_ALIGNBYTES 15 #define THR_ALIGN(td) (((uintptr_t)(td) + THR_ALIGNBYTES) & ~THR_ALIGNBYTES) +/* KSE Specific Data. */ +struct ksd { + void *ksd_base; + int ksd_size; +}; + #endif /* _PTHREAD_MD_H_ */ diff --git a/lib/libkse/thread/thr_kern.c b/lib/libkse/thread/thr_kern.c index 2641890a747a..d1a20062d0fc 100644 --- a/lib/libkse/thread/thr_kern.c +++ b/lib/libkse/thread/thr_kern.c @@ -52,8 +52,8 @@ __FBSDID("$FreeBSD$"); #include "atomic_ops.h" #include "thr_private.h" -#include "pthread_md.h" #include "libc_private.h" +#include "ksd.h" /*#define DEBUG_THREAD_KERN */ #ifdef DEBUG_THREAD_KERN diff --git a/lib/libkse/thread/thr_private.h b/lib/libkse/thread/thr_private.h index 092f86d84262..367202592710 100644 --- a/lib/libkse/thread/thr_private.h +++ b/lib/libkse/thread/thr_private.h @@ -54,7 +54,6 @@ #include #include -#include "ksd.h" #include "lock.h" #include "pthread_md.h" diff --git a/lib/libpthread/arch/i386/i386/ksd.c b/lib/libpthread/arch/i386/i386/ksd.c index 791c63665ab2..4e959594eb27 100644 --- a/lib/libpthread/arch/i386/i386/ksd.c +++ b/lib/libpthread/arch/i386/i386/ksd.c @@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include "pthread_md.h" #include "ksd.h" #define LDT_ENTRIES 8192 diff --git a/lib/libpthread/arch/i386/include/ksd.h b/lib/libpthread/arch/i386/include/ksd.h index 0b38505e82a3..4921238d1e0d 100644 --- a/lib/libpthread/arch/i386/include/ksd.h +++ b/lib/libpthread/arch/i386/include/ksd.h @@ -34,21 +34,8 @@ #include -struct pthread; -struct __ucontext; struct kse; -/* - * KSE Specific Data. - */ -struct ksd { - int ldt; -#define KSDF_INITIALIZED 0x01 - long flags; - void *base; - long size; -}; - /* * Evaluates to the byte offset of the per-kse variable name. */ diff --git a/lib/libpthread/arch/i386/include/pthread_md.h b/lib/libpthread/arch/i386/include/pthread_md.h index cb5a3443a345..ad0dfd61cb37 100644 --- a/lib/libpthread/arch/i386/include/pthread_md.h +++ b/lib/libpthread/arch/i386/include/pthread_md.h @@ -51,4 +51,16 @@ extern int _thr_getcontext(ucontext_t *); #define THR_ALIGNBYTES 15 #define THR_ALIGN(td) (((unsigned)(td) + THR_ALIGNBYTES) & ~THR_ALIGNBYTES) + +/* + * KSE Specific Data. + */ +struct ksd { + int ldt; +#define KSDF_INITIALIZED 0x01 + long flags; + void *base; + long size; +}; + #endif diff --git a/lib/libpthread/arch/ia64/Makefile.inc b/lib/libpthread/arch/ia64/Makefile.inc index b3aafbd34c62..4b8d9d2da8b1 100644 --- a/lib/libpthread/arch/ia64/Makefile.inc +++ b/lib/libpthread/arch/ia64/Makefile.inc @@ -2,4 +2,4 @@ .PATH: ${.CURDIR}/arch/${MACHINE_ARCH}/${MACHINE_ARCH} -SRCS+= ksd.c thr_enter_uts.S thr_switch.S +SRCS+= thr_enter_uts.S thr_switch.S diff --git a/lib/libpthread/arch/ia64/include/ksd.h b/lib/libpthread/arch/ia64/include/ksd.h new file mode 100644 index 000000000000..8878132bdf3a --- /dev/null +++ b/lib/libpthread/arch/ia64/include/ksd.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2003 Marcel Moolenaar + * 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 ``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 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 _KSD_H_ +#define _KSD_H_ + +struct kse; +struct pthread; + +register struct kse *_tp __asm("%r13"); + +static __inline int +_ksd_create(struct ksd *ksd, void *base, int size) +{ + ksd->ksd_base = base; + ksd->ksd_size = size; + return (0); +} + +static __inline struct kse * +_ksd_curkse() +{ + /* XXX why not simply return _tp? */ + return ((struct kse *)_tp->k_mbx.km_udata); +} + +static __inline struct pthread * +_ksd_curthread() +{ + return (_tp->k_curthread); +} + +static __inline void +_ksd_destroy(struct ksd *ksd) +{ +} + +static __inline kse_critical_t +_ksd_get_tmbx() +{ + return (_tp->k_mbx.km_curthread); +} + +static __inline kse_critical_t +_ksd_readandclear_tmbx() +{ + kse_critical_t crit; + __asm("xchg8 %0=[%1],r0" : "=r"(crit) + : "r"(&_tp->k_mbx.km_curthread)); + return (crit); +} + +static __inline void +_ksd_set_tmbx(kse_critical_t crit) +{ + _tp->k_mbx.km_curthread = crit; +} + +static __inline int +_ksd_setprivate(struct ksd *ksd) +{ + _tp = (struct kse *)ksd->ksd_base; + return (0); +} + +#endif /* _KSD_H_ */ diff --git a/lib/libpthread/arch/ia64/include/pthread_md.h b/lib/libpthread/arch/ia64/include/pthread_md.h index 93a179d2ec7f..096543589fac 100644 --- a/lib/libpthread/arch/ia64/include/pthread_md.h +++ b/lib/libpthread/arch/ia64/include/pthread_md.h @@ -35,4 +35,10 @@ #define THR_ALIGNBYTES 15 #define THR_ALIGN(td) (((uintptr_t)(td) + THR_ALIGNBYTES) & ~THR_ALIGNBYTES) +/* KSE Specific Data. */ +struct ksd { + void *ksd_base; + int ksd_size; +}; + #endif /* _PTHREAD_MD_H_ */ diff --git a/lib/libpthread/thread/thr_kern.c b/lib/libpthread/thread/thr_kern.c index 2641890a747a..d1a20062d0fc 100644 --- a/lib/libpthread/thread/thr_kern.c +++ b/lib/libpthread/thread/thr_kern.c @@ -52,8 +52,8 @@ __FBSDID("$FreeBSD$"); #include "atomic_ops.h" #include "thr_private.h" -#include "pthread_md.h" #include "libc_private.h" +#include "ksd.h" /*#define DEBUG_THREAD_KERN */ #ifdef DEBUG_THREAD_KERN diff --git a/lib/libpthread/thread/thr_private.h b/lib/libpthread/thread/thr_private.h index 092f86d84262..367202592710 100644 --- a/lib/libpthread/thread/thr_private.h +++ b/lib/libpthread/thread/thr_private.h @@ -54,7 +54,6 @@ #include #include -#include "ksd.h" #include "lock.h" #include "pthread_md.h"