Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/compat/linuxkpi/common/include/linux/compat.h
39604 views
1
/*-
2
* Copyright (c) 2010 Isilon Systems, Inc.
3
* Copyright (c) 2010 iX Systems, Inc.
4
* Copyright (c) 2010 Panasas, Inc.
5
* Copyright (c) 2013-2017 Mellanox Technologies, Ltd.
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
* 1. Redistributions of source code must retain the above copyright
12
* notice unmodified, this list of conditions, and the following
13
* disclaimer.
14
* 2. Redistributions in binary form must reproduce the above copyright
15
* notice, this list of conditions and the following disclaimer in the
16
* documentation and/or other materials provided with the distribution.
17
*
18
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
*/
29
#ifndef _LINUXKPI_LINUX_COMPAT_H_
30
#define _LINUXKPI_LINUX_COMPAT_H_
31
32
#include <sys/param.h>
33
#include <sys/proc.h>
34
#include <sys/malloc.h>
35
36
struct domainset;
37
struct thread;
38
struct task_struct;
39
40
extern int linux_alloc_current(struct thread *, int flags);
41
extern void linux_free_current(struct task_struct *);
42
extern struct domainset *linux_get_vm_domain_set(int node);
43
44
#define __current_unallocated(td) \
45
__predict_false((td)->td_lkpi_task == NULL)
46
47
static inline void
48
linux_set_current(struct thread *td)
49
{
50
if (__current_unallocated(td))
51
lkpi_alloc_current(td, M_WAITOK);
52
}
53
54
static inline int
55
linux_set_current_flags(struct thread *td, int flags)
56
{
57
if (__current_unallocated(td))
58
return (lkpi_alloc_current(td, flags));
59
return (0);
60
}
61
62
#define compat_ptr(x) ((void *)(uintptr_t)x)
63
#define ptr_to_compat(x) ((uintptr_t)x)
64
65
typedef void fpu_safe_exec_cb_t(void *ctx);
66
void lkpi_fpu_safe_exec(fpu_safe_exec_cb_t func, void *ctx);
67
68
#endif /* _LINUXKPI_LINUX_COMPAT_H_ */
69
70