1 /*
2 * Copyright (c) 2010 Kip Macy. All rights reserved.
3 * Copyright (C) 2017-2021 THL A29 Limited, a Tencent company.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright notice, this
10 * list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 * Derived in part from libplebnet's pn_kern_synch.c.
27 */
28
29 #include <sys/cdefs.h>
30 __FBSDID("$FreeBSD$");
31
32 #include <sys/param.h>
33
34 #include <sys/systm.h>
35 #include <sys/condvar.h>
36 #include <sys/kdb.h>
37 #include <sys/kernel.h>
38 #include <sys/ktr.h>
39 #include <sys/lock.h>
40 #include <sys/malloc.h>
41 #include <sys/mutex.h>
42 #include <sys/proc.h>
43 #include <sys/resourcevar.h>
44 #include <sys/sched.h>
45 #include <sys/signalvar.h>
46 #include <sys/sleepqueue.h>
47 #include <sys/smp.h>
48 #include <sys/sx.h>
49 #include <sys/sysctl.h>
50 #include <sys/vmmeter.h>
51 #ifdef KTRACE
52 #include <sys/uio.h>
53 #include <sys/ktrace.h>
54 #endif
55
56 #include "ff_host_interface.h"
57
58 int hogticks;
59 static uint8_t pause_wchan[MAXCPU];
60
61 typedef struct sleep_entry {
62 LIST_ENTRY(sleep_entry) list_entry;
63 void *chan;
64 const char *wmesg;
65 struct cv cond;
66 int waiters;
67 } *sleep_entry_t;
68
69 static void synch_setup(void *dummy);
70 SYSINIT(synch_setup, SI_SUB_INTR, SI_ORDER_FIRST, synch_setup,
71 NULL);
72
73 static struct se_head *se_active;
74 static u_long se_hashmask;
75 static struct mtx synch_lock;
76 #define SE_HASH(chan) (((uintptr_t)chan) & se_hashmask)
77 LIST_HEAD(se_head, sleep_entry);
78
79 static void
synch_setup(void * arg)80 synch_setup(void *arg)
81 {
82 mtx_init(&synch_lock, "synch_lock", NULL, MTX_DEF);
83 se_active = hashinit(64, M_TEMP, &se_hashmask);
84 }
85
86 int
_sleep(const void * _Nonnull chan,struct lock_object * lock,int priority,const char * wmesg,sbintime_t sbt,sbintime_t pr,int flags)87 _sleep(const void * _Nonnull chan, struct lock_object *lock, int priority,
88 const char *wmesg, sbintime_t sbt, sbintime_t pr, int flags)
89 {
90 //FIXME:we couldn't really sleep.
91 return (EPERM);
92 }
93
94 //FIXME.
95 int
msleep_spin_sbt(const void * _Nonnull chan,struct mtx * mtx,const char * wmesg,sbintime_t sbt,sbintime_t pr,int flags)96 msleep_spin_sbt(const void * _Nonnull chan, struct mtx *mtx, const char *wmesg,
97 sbintime_t sbt, sbintime_t pr, int flags)
98 {
99 return (0);
100 }
101
102 int
pause_sbt(const char * wmesg,sbintime_t sbt,sbintime_t pr,int flags)103 pause_sbt(const char *wmesg, sbintime_t sbt, sbintime_t pr, int flags)
104 {
105 return (_sleep(&pause_wchan[curcpu], NULL, 0, wmesg, sbt, pr, flags));
106 }
107
108 void
wakeup(const void * chan)109 wakeup(const void *chan)
110 {
111
112 }
113
114
115 void
wakeup_one(const void * chan)116 wakeup_one(const void *chan)
117 {
118
119 }
120
121 void
kern_yield(int prio)122 kern_yield(int prio)
123 {
124
125 }
126
127 void
wakeup_any(const void * ident)128 wakeup_any(const void *ident)
129 {
130
131 }
132
133