1 /*
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * Copyright (c) 2022 Tomohiro Kusumi <tkusumi@netbsd.org>
5  * Copyright (c) 2011-2022 The DragonFly Project.  All rights reserved.
6  *
7  * This code is derived from software contributed to The DragonFly Project
8  * by Matthew Dillon <dillon@dragonflybsd.org>
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in
18  *    the documentation and/or other materials provided with the
19  *    distribution.
20  * 3. Neither the name of The DragonFly Project nor the names of its
21  *    contributors may be used to endorse or promote products derived
22  *    from this software without specific, prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
28  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
32  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
33  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
34  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35  * SUCH DAMAGE.
36  */
37 
38 #ifndef _HAMMER2_HAMMER2_COMPAT_H
39 #define _HAMMER2_HAMMER2_COMPAT_H
40 
41 #include <sys/statvfs.h>
42 #include <sys/spinlock.h>
43 #include <sys/uio.h> /* struct iovec */
44 
45 #include <stdio.h>
46 #include <stdlib.h>
47 #include <string.h>
48 #include <util.h> /* ecalloc */
49 #include <assert.h>
50 #include <err.h>
51 
52 #include "ffs/buf.h"
53 
54 #define INVARIANTS
55 
56 #define MALLOC_DECLARE(type)				struct __hack
57 #define MALLOC_DEFINE(type, shortdesc, longdesc)	struct __hack
58 
59 #define SYSCTL_NODE(parent, nbr, name, access, handler, descr)	struct __hack
60 #define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr)	struct __hack
61 #define SYSCTL_LONG(parent, nbr, name, access, ptr, val, descr)	struct __hack
62 
63 #define VFS_SET(vfsops, fsname, flags)	struct __hack
64 
65 #define MODULE_VERSION(module, version)	struct __hack
66 
67 #define VOP_FSYNC(vp, waitfor, flags)	(0)
68 
69 #define kprintf(s, ...)		printf(s, ## __VA_ARGS__)
70 #define krateprintf(r, X, ...)	kprintf(X, ## __VA_ARGS__)
71 #define ksnprintf(s, n, ...)	snprintf(s, n, ## __VA_ARGS__)
72 #define kstrdup(str, type)	strdup(str)
73 
74 #define kmalloc_create(typep, descr)	do{}while(0)
75 #define kmalloc_destroy(typep)		do{}while(0)
76 #define kmalloc(size, type, flags)	ecalloc(1, size)
77 #define krealloc(addr, size, type, flags)	realloc(addr, size)
78 #define kfree(addr, type)		free(addr)
79 
80 #define kmalloc_create_obj(typep, descr, objsize)	do{}while(0)
81 #define kmalloc_destroy_obj(type)			do{}while(0)
82 #define kmalloc_obj(size, type, flags)			ecalloc(1, size)
83 #define kfree_obj(addr, type)				free(addr)
84 
85 #define kmalloc_raise_limit(typep, bytes)		do{}while(0)
86 
87 #define KASSERT(exp, msg)	do { if (!(exp)) panic msg; } while(0)
88 //#define KASSERT(exp, msg)	assert(exp)
89 #define KKASSERT(exp)		assert(exp)
90 
91 #define	__debugvar
92 
93 #define panic(s, ...)		errx(1, s, ## __VA_ARGS__)
94 
95 #define ERESTART	(-1)
96 
97 #define LK_SHARED	0x00000001
98 #define LK_EXCLUSIVE	0x00000002
99 #define LK_RELEASE	0x00000006
100 #define LK_NOWAIT	0x00000010
101 #define LK_RETRY	0x00020000
102 #define LK_PCATCH	0x04000000
103 
104 #define MTX_EXCLUSIVE	0x80000000
105 #define MTX_MASK	0x0FFFFFFF
106 
107 #define IO_APPEND	0x0002
108 #define IO_SYNC		0x0004
109 #define IO_ASYNC	0x0080
110 #define IO_DIRECT	0x0100
111 #define IO_RECURSE	0x0200
112 
113 #define IO_SEQMAX	0x7F
114 #define IO_SEQSHIFT	16
115 
116 #define VROOT		0x00000001
117 #define VKVABIO		0x00000040
118 #define VLASTWRITETS	0x00080000
119 
120 #define VNOVAL		(-1)
121 
122 #define FORCECLOSE	0x0002
123 
124 #define GETBLK_BHEAVY	0x0002
125 #define GETBLK_KVABIO	0x0010
126 
127 #define NOOFFSET	(-1LL)
128 
129 #define KNOTE(list, hint)
130 
131 #define NOTE_DELETE	0x0001
132 #define NOTE_WRITE	0x0002
133 #define NOTE_EXTEND	0x0004
134 #define NOTE_LINK	0x0010
135 
136 extern int hz;
137 extern int ticks;
138 extern int64_t vnode_count;
139 
140 struct thread {
141 	void *td_proc;
142 };
143 
144 typedef struct thread *thread_t;
145 extern struct thread *curthread;
146 
147 struct lwkt_token {
148 };
149 
150 typedef struct lwkt_token *lwkt_token_t;
151 
152 struct mount {
153 	int mnt_flag;
154 	int mnt_kern_flag;
155 	struct statfs mnt_stat;
156 	struct statvfs mnt_vstat;
157 	qaddr_t mnt_data;
158 	unsigned int mnt_iosize_max;
159 };
160 
161 struct bio {
162 	struct m_buf *bio_buf;
163 	off_t bio_offset;
164 };
165 
166 struct bio_track {
167 };
168 
169 struct namecache {
170 	u_char nc_nlen;
171 	char *nc_name;
172 };
173 
174 struct nchandle {
175 	struct namecache *ncp;
176 };
177 
178 struct vop_generic_args {
179 	int a_reserved[4];
180 };
181 
182 struct vop_open_args {
183 	struct m_vnode *a_vp;
184 	int a_mode;
185 	struct ucred *a_cred;
186 	struct file **a_fpp;
187 };
188 
189 struct vop_close_args {
190 	struct m_vnode *a_vp;
191 	int a_fflag;
192 	struct file *a_fp;
193 };
194 
195 struct vop_access_args {
196 	struct m_vnode *a_vp;
197 	int a_mode;
198 	int a_flags;
199 	struct ucred *a_cred;
200 };
201 
202 struct vop_getattr_args {
203 	struct m_vnode *a_vp;
204 	struct vattr *a_vap;
205 };
206 
207 struct vop_getattr_lite_args {
208 	struct m_vnode *a_vp;
209 	struct vattr_lite *a_lvap;
210 };
211 
212 struct vop_setattr_args {
213 	struct m_vnode *a_vp;
214 	struct vattr *a_vap;
215 	struct ucred *a_cred;
216 };
217 
218 struct vop_read_args {
219 	struct m_vnode *a_vp;
220 	struct uio *a_uio;
221 	int a_ioflag;
222 	struct ucred *a_cred;
223 };
224 
225 struct vop_write_args {
226 	struct m_vnode *a_vp;
227 	struct uio *a_uio;
228 	int a_ioflag;
229 	struct ucred *a_cred;
230 };
231 
232 struct vop_ioctl_args {
233 	struct m_vnode *a_vp;
234 	u_long a_command;
235 	caddr_t a_data;
236 	int a_fflag;
237 	struct ucred *a_cred;
238 	struct sysmsg *a_sysmsg;
239 };
240 
241 struct vop_kqfilter_args {
242 	struct m_vnode *a_vp;
243 	struct knote *a_kn;
244 };
245 
246 struct vop_fsync_args {
247 	struct m_vnode *a_vp;
248 	int a_waitfor;
249 	int a_flags;
250 };
251 
252 struct vop_readdir_args {
253 	struct m_vnode *a_vp;
254 	struct uio *a_uio;
255 	struct ucred *a_cred;
256 	int *a_eofflag;
257 	int *a_ncookies;
258 	off_t **a_cookies;
259 	int *a_ndirent; /* makefs */
260 };
261 
262 struct vop_readlink_args {
263 	struct m_vnode *a_vp;
264 	struct uio *a_uio;
265 	struct ucred *a_cred;
266 };
267 
268 struct vop_inactive_args {
269 	struct m_vnode *a_vp;
270 };
271 
272 struct vop_reclaim_args {
273 	struct m_vnode *a_vp;
274 };
275 
276 struct vop_bmap_args {
277 	struct m_vnode *a_vp;
278 	off_t a_loffset;
279 	off_t *a_doffsetp;
280 	int *a_runp;
281 	int *a_runb;
282 	buf_cmd_t a_cmd;
283 };
284 
285 struct vop_strategy_args {
286 	struct m_vnode *a_vp;
287 	struct bio *a_bio;
288 };
289 
290 struct vop_advlock_args {
291 	struct m_vnode *a_vp;
292 	caddr_t a_id;
293 	int a_op;
294 	struct flock *a_fl;
295 	int a_flags;
296 };
297 
298 struct vop_getpages_args {
299 	struct m_vnode *a_vp;
300 	int a_count;
301 	int a_reqpage;
302 	//vm_ooffset_t a_offset;
303 	int a_seqaccess;
304 };
305 
306 struct vop_putpages_args {
307 	struct m_vnode *a_vp;
308 	int a_count;
309 	int a_flags;
310 	int *a_rtvals;
311 	//vm_ooffset_t a_offset;
312 };
313 
314 struct vop_mountctl_args {
315 	int a_op;
316 	struct file *a_fp;
317 	const void *a_ctl;
318 	int a_ctllen;
319 	void *a_buf;
320 	int a_buflen;
321 	int *a_res;
322 	struct m_vnode *a_vp;
323 };
324 
325 struct vop_markatime_args {
326 	int a_op;
327 	struct m_vnode *a_vp;
328 	struct ucred *a_cred;
329 };
330 
331 struct vop_nresolve_args {
332 	struct nchandle *a_nch;
333 	struct m_vnode *a_dvp;
334 	struct ucred *a_cred;
335 	struct m_vnode **a_vpp; /* makefs */
336 };
337 
338 struct vop_nlookupdotdot_args {
339 	struct m_vnode *a_dvp;
340 	struct m_vnode **a_vpp;
341 	struct ucred *a_cred;
342 	char **a_fakename;
343 };
344 
345 struct vop_ncreate_args {
346 	struct nchandle *a_nch;
347 	struct m_vnode *a_dvp;
348 	struct m_vnode **a_vpp;
349 	struct ucred *a_cred;
350 	struct vattr *a_vap;
351 };
352 
353 struct vop_nmkdir_args {
354 	struct nchandle *a_nch;
355 	struct m_vnode *a_dvp;
356 	struct m_vnode **a_vpp;
357 	struct ucred *a_cred;
358 	struct vattr *a_vap;
359 };
360 
361 struct vop_nmknod_args {
362 	struct nchandle *a_nch;
363 	struct m_vnode *a_dvp;
364 	struct m_vnode **a_vpp;
365 	struct ucred *a_cred;
366 	struct vattr *a_vap;
367 };
368 
369 struct vop_nlink_args {
370 	struct nchandle *a_nch;
371 	struct m_vnode *a_dvp;
372 	struct m_vnode *a_vp;
373 	struct ucred *a_cred;
374 };
375 
376 struct vop_nsymlink_args {
377 	struct nchandle *a_nch;
378 	struct m_vnode *a_dvp;
379 	struct m_vnode **a_vpp;
380 	struct ucred *a_cred;
381 	struct vattr *a_vap;
382 	char *a_target;
383 };
384 
385 struct vop_nremove_args {
386 	struct nchandle *a_nch;
387 	struct m_vnode *a_dvp;
388 	struct ucred *a_cred;
389 };
390 
391 struct vop_nrmdir_args {
392 	struct nchandle *a_nch;
393 	struct m_vnode *a_dvp;
394 	struct ucred *a_cred;
395 };
396 
397 struct vop_nrename_args {
398 	struct nchandle *a_fnch;
399 	struct nchandle *a_tnch;
400 	struct m_vnode *a_fdvp;
401 	struct m_vnode *a_tdvp;
402 	struct ucred *a_cred;
403 };
404 
405 #define vop_defaultop	NULL
406 #define vop_stdgetpages	NULL
407 #define vop_stdputpages	NULL
408 #define vop_stdnoread	NULL
409 #define vop_stdnowrite	NULL
410 #define fifo_vnoperate	NULL
411 
412 struct vop_ops {
413 	int (*vop_default)(struct vop_generic_args *);
414 	int (*vop_open)(struct vop_open_args *);
415 	int (*vop_close)(struct vop_close_args *);
416 	int (*vop_access)(struct vop_access_args *);
417 	int (*vop_getattr)(struct vop_getattr_args *);
418 	int (*vop_getattr_lite)(struct vop_getattr_lite_args *);
419 	int (*vop_setattr)(struct vop_setattr_args *);
420 	int (*vop_read)(struct vop_read_args *);
421 	int (*vop_write)(struct vop_write_args *);
422 	int (*vop_ioctl)(struct vop_ioctl_args *);
423 	int (*vop_kqfilter)(struct vop_kqfilter_args *);
424 	int (*vop_fsync)(struct vop_fsync_args *);
425 	int (*vop_readdir)(struct vop_readdir_args *);
426 	int (*vop_readlink)(struct vop_readlink_args *);
427 	int (*vop_inactive)(struct vop_inactive_args *);
428 	int (*vop_reclaim)(struct vop_reclaim_args *);
429 	int (*vop_bmap)(struct vop_bmap_args *);
430 	int (*vop_strategy)(struct vop_strategy_args *);
431 	int (*vop_advlock)(struct vop_advlock_args *);
432 	int (*vop_getpages)(struct vop_getpages_args *);
433 	int (*vop_putpages)(struct vop_putpages_args *);
434 	int (*vop_mountctl)(struct vop_mountctl_args *);
435 	int (*vop_markatime)(struct vop_markatime_args *);
436 	int (*vop_nresolve)(struct vop_nresolve_args *);
437 	int (*vop_nlookupdotdot)(struct vop_nlookupdotdot_args *);
438 	int (*vop_ncreate)(struct vop_ncreate_args *);
439 	int (*vop_nmkdir)(struct vop_nmkdir_args *);
440 	int (*vop_nmknod)(struct vop_nmknod_args *);
441 	int (*vop_nlink)(struct vop_nlink_args *);
442 	int (*vop_nsymlink)(struct vop_nsymlink_args *);
443 	int (*vop_nremove)(struct vop_nremove_args *);
444 	int (*vop_nrmdir)(struct vop_nrmdir_args *);
445 	int (*vop_nrename)(struct vop_nrename_args *);
446 };
447 
448 enum uio_seg {
449 	UIO_USERSPACE,
450 	UIO_SYSSPACE,
451 	UIO_NOCOPY,
452 };
453 
454 enum uio_rw {
455 	UIO_READ,
456 	UIO_WRITE
457 };
458 
459 struct uio {
460 	struct iovec *uio_iov;
461 	int uio_iovcnt;
462 	off_t uio_offset;
463 	size_t uio_resid;
464 	enum uio_seg uio_segflg;
465 	enum uio_rw uio_rw;
466 	struct thread *uio_td;
467 };
468 
469 /*
470  * Since makefs(8) is a single thread program, there should never be any
471  * lock contention.  Therefore, lock(9)/mutex(9)/spinlock(9) emulation always
472  * succeed.  Similarly, tsleep(9) should never be called.
473  */
474 struct lock {
475 	int reserved;
476 };
477 
478 typedef struct {
479 	unsigned int mtx_lock;
480 } mtx_t;
481 
482 typedef mtx_t hammer2_mtx_t;
483 
484 typedef u_int mtx_state_t;
485 typedef mtx_state_t hammer2_mtx_state_t;
486 
487 typedef struct spinlock hammer2_spin_t;
488 
489 static __inline
490 void
cpu_pause(void)491 cpu_pause(void)
492 {
493 }
494 
495 static __inline
496 void
cpu_mfence(void)497 cpu_mfence(void)
498 {
499 }
500 
501 static __inline
502 void
cpu_lfence(void)503 cpu_lfence(void)
504 {
505 }
506 
507 static __inline
508 void
cpu_sfence(void)509 cpu_sfence(void)
510 {
511 }
512 
513 static __inline
514 void
cpu_ccfence(void)515 cpu_ccfence(void)
516 {
517 }
518 
519 static __inline
520 void
trigger_syncer(struct mount * mp)521 trigger_syncer(struct mount *mp)
522 {
523 }
524 
525 static __inline
526 void
trigger_syncer_start(struct mount * mp)527 trigger_syncer_start(struct mount *mp)
528 {
529 }
530 
531 static __inline
532 void
trigger_syncer_stop(struct mount * mp)533 trigger_syncer_stop(struct mount *mp)
534 {
535 }
536 
537 static __inline
538 int
vfs_mountedon(struct m_vnode * vp)539 vfs_mountedon(struct m_vnode *vp)
540 {
541 	return (0);
542 }
543 
544 static __inline
545 uid_t
vop_helper_create_uid(struct mount * mp,mode_t dmode,uid_t duid,struct ucred * cred,mode_t * modep)546 vop_helper_create_uid(struct mount *mp, mode_t dmode, uid_t duid,
547 			struct ucred *cred, mode_t *modep)
548 {
549 	return (getuid());
550 }
551 
552 static __inline
553 int
vinitvmio(struct m_vnode * vp,off_t filesize,int blksize,int boff)554 vinitvmio(struct m_vnode *vp, off_t filesize, int blksize, int boff)
555 {
556 	return (0);
557 }
558 
559 static __inline
560 int
getnewvnode(enum vtagtype tag,struct mount * mp,struct m_vnode ** vpp,int lktimeout,int lkflags)561 getnewvnode(enum vtagtype tag, struct mount *mp, struct m_vnode **vpp,
562 		int lktimeout, int lkflags)
563 {
564 	struct m_vnode *vp;
565 
566 	vp = ecalloc(1, sizeof(*vp));
567 	vp->v_logical = 1;
568 	vp->v_malloced = 1;
569 	*vpp = vp;
570 
571 	vnode_count++;
572 
573 	return (0);
574 }
575 
576 /* not freesomevnodes() */
577 static __inline
578 void
freevnode(struct m_vnode * vp)579 freevnode(struct m_vnode *vp)
580 {
581 	assert(vp->v_malloced);
582 	free(vp);
583 
584 	vnode_count--;
585 }
586 
587 static __inline
588 int
vn_lock(struct m_vnode * vp,int flags)589 vn_lock(struct m_vnode *vp, int flags)
590 {
591 	return (0);
592 }
593 
594 static __inline
595 void
vn_unlock(struct m_vnode * vp)596 vn_unlock(struct m_vnode *vp)
597 {
598 }
599 
600 static __inline
601 int
vget(struct m_vnode * vp,int flags)602 vget(struct m_vnode *vp, int flags)
603 {
604 	return (0);
605 }
606 
607 static __inline
608 void
vput(struct m_vnode * vp)609 vput(struct m_vnode *vp)
610 {
611 }
612 
613 static __inline
614 void
vrele(struct m_vnode * vp)615 vrele(struct m_vnode *vp)
616 {
617 }
618 
619 static __inline
620 void
vhold(struct m_vnode * vp)621 vhold(struct m_vnode *vp)
622 {
623 }
624 
625 static __inline
626 void
vdrop(struct m_vnode * vp)627 vdrop(struct m_vnode *vp)
628 {
629 }
630 
631 static __inline
632 void
vx_put(struct m_vnode * vp)633 vx_put(struct m_vnode *vp)
634 {
635 }
636 
637 static __inline
638 void
vx_downgrade(struct m_vnode * vp)639 vx_downgrade(struct m_vnode *vp)
640 {
641 }
642 
643 static __inline
644 void
vfinalize(struct m_vnode * vp)645 vfinalize(struct m_vnode *vp)
646 {
647 }
648 
649 static __inline
650 void
vsetflags(struct m_vnode * vp,int flags)651 vsetflags(struct m_vnode *vp, int flags)
652 {
653 }
654 
655 static __inline
656 void
vclrflags(struct m_vnode * vp,int flags)657 vclrflags(struct m_vnode *vp, int flags)
658 {
659 }
660 
661 static __inline
662 void
vsetisdirty(struct m_vnode * vp)663 vsetisdirty(struct m_vnode *vp)
664 {
665 }
666 
667 static __inline
668 void
vclrisdirty(struct m_vnode * vp)669 vclrisdirty(struct m_vnode *vp)
670 {
671 }
672 
673 static __inline
674 int
vfsync(struct m_vnode * vp,int waitfor,int passes,int (* checkdef)(struct m_buf *),int (* waitoutput)(struct m_vnode *,struct thread *))675 vfsync(struct m_vnode *vp, int waitfor, int passes,
676 	int (*checkdef)(struct m_buf *),
677 	int (*waitoutput)(struct m_vnode *, struct thread *))
678 {
679 	return (0);
680 }
681 
682 static __inline
683 int
nvtruncbuf(struct m_vnode * vp,off_t length,int blksize,int boff,int flags)684 nvtruncbuf(struct m_vnode *vp, off_t length, int blksize, int boff, int flags)
685 {
686 	return (0);
687 }
688 
689 static __inline
690 int
nvextendbuf(struct m_vnode * vp,off_t olength,off_t nlength,int oblksize,int nblksize,int oboff,int nboff,int flags)691 nvextendbuf(struct m_vnode *vp, off_t olength, off_t nlength, int oblksize,
692 		int nblksize, int oboff, int nboff, int flags)
693 {
694 	return (0);
695 }
696 
697 static __inline
698 void
addaliasu(struct m_vnode * vp,int x,int y)699 addaliasu(struct m_vnode *vp, int x, int y)
700 {
701 }
702 
703 static __inline
704 void
bheavy(struct m_buf * bp)705 bheavy(struct m_buf *bp)
706 {
707 }
708 
709 static __inline
710 void
bkvasync(struct m_buf * bp)711 bkvasync(struct m_buf *bp)
712 {
713 }
714 
715 static __inline
716 void
bwillwrite(int bytes)717 bwillwrite(int bytes)
718 {
719 }
720 
721 static __inline
722 void
BUF_KERNPROC(struct m_buf * bp)723 BUF_KERNPROC(struct m_buf *bp)
724 {
725 }
726 
727 static __inline
728 int
bio_track_wait(struct bio_track * track,int slp_flags,int slp_timo)729 bio_track_wait(struct bio_track *track, int slp_flags, int slp_timo)
730 {
731 	return (0);
732 }
733 
734 static __inline
735 void
cache_setvp(struct nchandle * nch,struct m_vnode * vp)736 cache_setvp(struct nchandle *nch, struct m_vnode *vp)
737 {
738 }
739 
740 static __inline
741 void
cache_setunresolved(struct nchandle * nch)742 cache_setunresolved(struct nchandle *nch)
743 {
744 }
745 
746 static __inline
747 void
lockinit(struct lock * lkp,const char * wmesg,int timo,int flags)748 lockinit(struct lock *lkp, const char *wmesg, int timo, int flags)
749 {
750 }
751 
752 static __inline
753 int
lockmgr(struct lock * lkp,uint32_t flags)754 lockmgr(struct lock *lkp, uint32_t flags)
755 {
756 	return (0);
757 }
758 
759 static __inline
760 int
hammer2_mtx_ex(hammer2_mtx_t * mtx)761 hammer2_mtx_ex(hammer2_mtx_t *mtx)
762 {
763 	mtx->mtx_lock |= MTX_EXCLUSIVE;
764 	mtx->mtx_lock++;
765 	return (0);
766 }
767 
768 static __inline
769 int
hammer2_mtx_ex_try(hammer2_mtx_t * mtx)770 hammer2_mtx_ex_try(hammer2_mtx_t *mtx)
771 {
772 	mtx->mtx_lock |= MTX_EXCLUSIVE;
773 	mtx->mtx_lock++;
774 	return (0);
775 }
776 
777 static __inline
778 int
hammer2_mtx_sh(hammer2_mtx_t * mtx)779 hammer2_mtx_sh(hammer2_mtx_t *mtx)
780 {
781 	mtx->mtx_lock |= MTX_EXCLUSIVE;
782 	mtx->mtx_lock++;
783 	return (0);
784 }
785 
786 static __inline
787 void
hammer2_mtx_sh_again(hammer2_mtx_t * mtx)788 hammer2_mtx_sh_again(hammer2_mtx_t *mtx)
789 {
790 	mtx->mtx_lock |= MTX_EXCLUSIVE;
791 	mtx->mtx_lock++;
792 }
793 
794 static __inline
795 int
hammer2_mtx_sh_try(hammer2_mtx_t * mtx)796 hammer2_mtx_sh_try(hammer2_mtx_t *mtx)
797 {
798 	mtx->mtx_lock |= MTX_EXCLUSIVE;
799 	mtx->mtx_lock++;
800 	return (0);
801 }
802 
803 static __inline
804 void
hammer2_mtx_unlock(hammer2_mtx_t * mtx)805 hammer2_mtx_unlock(hammer2_mtx_t *mtx)
806 {
807 	mtx->mtx_lock &= ~MTX_EXCLUSIVE;
808 	mtx->mtx_lock--;
809 }
810 
811 static __inline
812 int
hammer2_mtx_upgrade_try(hammer2_mtx_t * mtx)813 hammer2_mtx_upgrade_try(hammer2_mtx_t *mtx)
814 {
815 	return (0);
816 }
817 
818 static __inline
819 int
hammer2_mtx_downgrade(hammer2_mtx_t * mtx)820 hammer2_mtx_downgrade(hammer2_mtx_t *mtx)
821 {
822 	return (0);
823 }
824 
825 static __inline
826 int
hammer2_mtx_owned(hammer2_mtx_t * mtx)827 hammer2_mtx_owned(hammer2_mtx_t *mtx)
828 {
829 	return (1); /* XXX for asserts */
830 }
831 
832 static __inline
833 void
hammer2_mtx_init(hammer2_mtx_t * mtx,const char * ident)834 hammer2_mtx_init(hammer2_mtx_t *mtx, const char *ident)
835 {
836 	mtx->mtx_lock = 0;
837 }
838 
839 static __inline
840 hammer2_mtx_state_t
hammer2_mtx_temp_release(hammer2_mtx_t * mtx)841 hammer2_mtx_temp_release(hammer2_mtx_t *mtx)
842 {
843 	return (0);
844 }
845 
846 static __inline
847 void
hammer2_mtx_temp_restore(hammer2_mtx_t * mtx,hammer2_mtx_state_t state)848 hammer2_mtx_temp_restore(hammer2_mtx_t *mtx, hammer2_mtx_state_t state)
849 {
850 }
851 
852 static __inline
853 int
hammer2_mtx_refs(hammer2_mtx_t * mtx)854 hammer2_mtx_refs(hammer2_mtx_t *mtx)
855 {
856 	return (mtx->mtx_lock & MTX_MASK);
857 }
858 
859 static __inline
860 void
hammer2_spin_init(hammer2_spin_t * mtx,const char * ident)861 hammer2_spin_init(hammer2_spin_t *mtx, const char *ident)
862 {
863 	mtx->lock = 0;
864 }
865 
866 static __inline
867 void
hammer2_spin_sh(hammer2_spin_t * mtx)868 hammer2_spin_sh(hammer2_spin_t *mtx)
869 {
870 	mtx->lock++;
871 }
872 
873 static __inline
874 void
hammer2_spin_ex(hammer2_spin_t * mtx)875 hammer2_spin_ex(hammer2_spin_t *mtx)
876 {
877 	mtx->lock++;
878 }
879 
880 static __inline
881 void
hammer2_spin_unsh(hammer2_spin_t * mtx)882 hammer2_spin_unsh(hammer2_spin_t *mtx)
883 {
884 	mtx->lock--;
885 }
886 
887 static __inline
888 void
hammer2_spin_unex(hammer2_spin_t * mtx)889 hammer2_spin_unex(hammer2_spin_t *mtx)
890 {
891 	mtx->lock--;
892 }
893 
894 static __inline
895 void
lwkt_gettoken(lwkt_token_t tok)896 lwkt_gettoken(lwkt_token_t tok)
897 {
898 }
899 
900 static __inline
901 void
lwkt_reltoken(lwkt_token_t tok)902 lwkt_reltoken(lwkt_token_t tok)
903 {
904 }
905 
906 static __inline
907 void
lwkt_yield(void)908 lwkt_yield(void)
909 {
910 }
911 
912 static __inline
913 int
tsleep(const volatile void * ident,int flags,const char * wmesg,int timo)914 tsleep(const volatile void *ident, int flags, const char *wmesg, int timo)
915 {
916 	assert(0);
917 }
918 
919 static __inline
920 void
tsleep_interlock(const volatile void * ident,int flags)921 tsleep_interlock(const volatile void *ident, int flags)
922 {
923 	assert(0);
924 }
925 
926 static __inline
927 void
wakeup(const volatile void * ident)928 wakeup(const volatile void *ident)
929 {
930 	assert(0);
931 }
932 
933 static __inline
934 void
print_backtrace(int count)935 print_backtrace(int count)
936 {
937 }
938 
939 static __inline
940 void
Debugger(const char * msg)941 Debugger(const char *msg)
942 {
943 	panic("%s: %s", __func__, msg);
944 }
945 
946 #endif /* _HAMMER2_HAMMER2_COMPAT_H */
947