xref: /dflybsd-src/usr.sbin/makefs/hammer2/hammer2_compat.h (revision 6b47f3ea0add18fe433924e96d23c8a42f668f93)
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