Browse Source
Beginning of merging vDPA, new PCI ID, a new virtio balloon stat, intel iommu rework fixing a couple of security problems (no CVEs yet), fixes all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJbBX2cAAoJECgfDbjSjVRpOEYIAIR6KGkwbAJ9SnO9B71DQHl1 yYYgM7i2HwyZ1YPnXOYWnI1lzQ1bARTf2krQJFGmfjlDaueFf9KnXdNByoVCmG8m UhF/rQp3DcJ4wTABktPtME8gWdQxKPmDxlN5W3f29Zrm3g9S+Hshi+sfPZUkBxL4 gQMFRctb2SxvQXG+lusHVwo1oF6pzGZMmX35906he3m4xS/cfoeCP7Qj6nSvHZq7 lsLoOeYxHtXWA9gTYxpd7zW+hhUxkspoOqcXySHfO7e5enJANaulTxKuC0T+6HL4 O2iUM+1wjUYE0tQcNJ6x7emA82k5OdG2OMD6gbR1oSdquttJo7+4R+goqpb44rc= =NUoY -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging pc, pci, virtio, vhost: fixes, features Beginning of merging vDPA, new PCI ID, a new virtio balloon stat, intel iommu rework fixing a couple of security problems (no CVEs yet), fixes all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Wed 23 May 2018 15:41:32 BST # gpg: using RSA key 281F0DB8D28D5469 # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * remotes/mst/tags/for_upstream: (28 commits) intel-iommu: rework the page walk logic util: implement simple iova tree intel-iommu: trace domain id during page walk intel-iommu: pass in address space when page walk intel-iommu: introduce vtd_page_walk_info intel-iommu: only do page walk for MAP notifiers intel-iommu: add iommu lock intel-iommu: remove IntelIOMMUNotifierNode intel-iommu: send PSI always even if across PDEs nvdimm: fix typo in label-size definition contrib/vhost-user-blk: enable protocol feature for vhost-user-blk hw/virtio: Fix brace Werror with clang 6.0.0 libvhost-user: Send messages with no data vhost-user+postcopy: Use qemu_set_nonblock virtio: support setting memory region based host notifier vhost-user: support receiving file descriptors in slave_read vhost-user: add Net prefix to internal state structure linux-headers: add kvm header for mips linux-headers: add unistd.h on all arches update-linux-headers.sh: unistd.h, kvm consistency ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>pull/68/head
54 changed files with 1731 additions and 456 deletions
@ -0,0 +1,134 @@ |
|||
/*
|
|||
* An very simplified iova tree implementation based on GTree. |
|||
* |
|||
* Copyright 2018 Red Hat, Inc. |
|||
* |
|||
* Authors: |
|||
* Peter Xu <peterx@redhat.com> |
|||
* |
|||
* This work is licensed under the terms of the GNU GPL, version 2 or later. |
|||
*/ |
|||
#ifndef IOVA_TREE_H |
|||
#define IOVA_TREE_H |
|||
|
|||
/*
|
|||
* Currently the iova tree will only allow to keep ranges |
|||
* information, and no extra user data is allowed for each element. A |
|||
* benefit is that we can merge adjacent ranges internally within the |
|||
* tree. It can save a lot of memory when the ranges are splitted but |
|||
* mostly continuous. |
|||
* |
|||
* Note that current implementation does not provide any thread |
|||
* protections. Callers of the iova tree should be responsible |
|||
* for the thread safety issue. |
|||
*/ |
|||
|
|||
#include "qemu/osdep.h" |
|||
#include "exec/memory.h" |
|||
#include "exec/hwaddr.h" |
|||
|
|||
#define IOVA_OK (0) |
|||
#define IOVA_ERR_INVALID (-1) /* Invalid parameters */ |
|||
#define IOVA_ERR_OVERLAP (-2) /* IOVA range overlapped */ |
|||
|
|||
typedef struct IOVATree IOVATree; |
|||
typedef struct DMAMap { |
|||
hwaddr iova; |
|||
hwaddr translated_addr; |
|||
hwaddr size; /* Inclusive */ |
|||
IOMMUAccessFlags perm; |
|||
} QEMU_PACKED DMAMap; |
|||
typedef gboolean (*iova_tree_iterator)(DMAMap *map); |
|||
|
|||
/**
|
|||
* iova_tree_new: |
|||
* |
|||
* Create a new iova tree. |
|||
* |
|||
* Returns: the tree pointer when succeeded, or NULL if error. |
|||
*/ |
|||
IOVATree *iova_tree_new(void); |
|||
|
|||
/**
|
|||
* iova_tree_insert: |
|||
* |
|||
* @tree: the iova tree to insert |
|||
* @map: the mapping to insert |
|||
* |
|||
* Insert an iova range to the tree. If there is overlapped |
|||
* ranges, IOVA_ERR_OVERLAP will be returned. |
|||
* |
|||
* Return: 0 if succeeded, or <0 if error. |
|||
*/ |
|||
int iova_tree_insert(IOVATree *tree, DMAMap *map); |
|||
|
|||
/**
|
|||
* iova_tree_remove: |
|||
* |
|||
* @tree: the iova tree to remove range from |
|||
* @map: the map range to remove |
|||
* |
|||
* Remove mappings from the tree that are covered by the map range |
|||
* provided. The range does not need to be exactly what has inserted, |
|||
* all the mappings that are included in the provided range will be |
|||
* removed from the tree. Here map->translated_addr is meaningless. |
|||
* |
|||
* Return: 0 if succeeded, or <0 if error. |
|||
*/ |
|||
int iova_tree_remove(IOVATree *tree, DMAMap *map); |
|||
|
|||
/**
|
|||
* iova_tree_find: |
|||
* |
|||
* @tree: the iova tree to search from |
|||
* @map: the mapping to search |
|||
* |
|||
* Search for a mapping in the iova tree that overlaps with the |
|||
* mapping range specified. Only the first found mapping will be |
|||
* returned. |
|||
* |
|||
* Return: DMAMap pointer if found, or NULL if not found. Note that |
|||
* the returned DMAMap pointer is maintained internally. User should |
|||
* only read the content but never modify or free the content. Also, |
|||
* user is responsible to make sure the pointer is valid (say, no |
|||
* concurrent deletion in progress). |
|||
*/ |
|||
DMAMap *iova_tree_find(IOVATree *tree, DMAMap *map); |
|||
|
|||
/**
|
|||
* iova_tree_find_address: |
|||
* |
|||
* @tree: the iova tree to search from |
|||
* @iova: the iova address to find |
|||
* |
|||
* Similar to iova_tree_find(), but it tries to find mapping with |
|||
* range iova=iova & size=0. |
|||
* |
|||
* Return: same as iova_tree_find(). |
|||
*/ |
|||
DMAMap *iova_tree_find_address(IOVATree *tree, hwaddr iova); |
|||
|
|||
/**
|
|||
* iova_tree_foreach: |
|||
* |
|||
* @tree: the iova tree to iterate on |
|||
* @iterator: the interator for the mappings, return true to stop |
|||
* |
|||
* Iterate over the iova tree. |
|||
* |
|||
* Return: 1 if found any overlap, 0 if not, <0 if error. |
|||
*/ |
|||
void iova_tree_foreach(IOVATree *tree, iova_tree_iterator iterator); |
|||
|
|||
/**
|
|||
* iova_tree_destroy: |
|||
* |
|||
* @tree: the iova tree to destroy |
|||
* |
|||
* Destroy an existing iova tree. |
|||
* |
|||
* Return: None. |
|||
*/ |
|||
void iova_tree_destroy(IOVATree *tree); |
|||
|
|||
#endif |
|||
@ -0,0 +1 @@ |
|||
#include <asm-generic/bitsperlong.h> |
|||
@ -1,2 +0,0 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#include <asm-generic/kvm_para.h> |
|||
@ -0,0 +1,24 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
/*
|
|||
* Copyright (C) 2012 ARM Ltd. |
|||
* |
|||
* This program is free software; you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License version 2 as |
|||
* published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
#ifndef __ASM_BITSPERLONG_H |
|||
#define __ASM_BITSPERLONG_H |
|||
|
|||
#define __BITS_PER_LONG 64 |
|||
|
|||
#include <asm-generic/bitsperlong.h> |
|||
|
|||
#endif /* __ASM_BITSPERLONG_H */ |
|||
@ -1 +0,0 @@ |
|||
#include <asm-generic/kvm_para.h> |
|||
@ -0,0 +1,16 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#ifndef __ASM_GENERIC_BITS_PER_LONG |
|||
#define __ASM_GENERIC_BITS_PER_LONG |
|||
|
|||
/*
|
|||
* There seems to be no way of detecting this automatically from user |
|||
* space, so 64 bit architectures should override this in their |
|||
* bitsperlong.h. In particular, an architecture that supports |
|||
* both 32 and 64 bit user space must not rely on CONFIG_64BIT |
|||
* to decide it, but rather check a compiler provided macro. |
|||
*/ |
|||
#ifndef __BITS_PER_LONG |
|||
#define __BITS_PER_LONG 32 |
|||
#endif |
|||
|
|||
#endif /* __ASM_GENERIC_BITS_PER_LONG */ |
|||
@ -1,4 +0,0 @@ |
|||
/*
|
|||
* There isn't anything here, but the file must not be empty or patch |
|||
* will delete it. |
|||
*/ |
|||
@ -0,0 +1,781 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#include <asm/bitsperlong.h> |
|||
|
|||
/*
|
|||
* This file contains the system call numbers, based on the |
|||
* layout of the x86-64 architecture, which embeds the |
|||
* pointer to the syscall in the table. |
|||
* |
|||
* As a basic principle, no duplication of functionality |
|||
* should be added, e.g. we don't use lseek when llseek |
|||
* is present. New architectures should use this file |
|||
* and implement the less feature-full calls in user space. |
|||
*/ |
|||
|
|||
#ifndef __SYSCALL |
|||
#define __SYSCALL(x, y) |
|||
#endif |
|||
|
|||
#if __BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT) |
|||
#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32) |
|||
#else |
|||
#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) |
|||
#endif |
|||
|
|||
#ifdef __SYSCALL_COMPAT |
|||
#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _comp) |
|||
#define __SC_COMP_3264(_nr, _32, _64, _comp) __SYSCALL(_nr, _comp) |
|||
#else |
|||
#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _sys) |
|||
#define __SC_COMP_3264(_nr, _32, _64, _comp) __SC_3264(_nr, _32, _64) |
|||
#endif |
|||
|
|||
#define __NR_io_setup 0 |
|||
__SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup) |
|||
#define __NR_io_destroy 1 |
|||
__SYSCALL(__NR_io_destroy, sys_io_destroy) |
|||
#define __NR_io_submit 2 |
|||
__SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit) |
|||
#define __NR_io_cancel 3 |
|||
__SYSCALL(__NR_io_cancel, sys_io_cancel) |
|||
#define __NR_io_getevents 4 |
|||
__SC_COMP(__NR_io_getevents, sys_io_getevents, compat_sys_io_getevents) |
|||
|
|||
/* fs/xattr.c */ |
|||
#define __NR_setxattr 5 |
|||
__SYSCALL(__NR_setxattr, sys_setxattr) |
|||
#define __NR_lsetxattr 6 |
|||
__SYSCALL(__NR_lsetxattr, sys_lsetxattr) |
|||
#define __NR_fsetxattr 7 |
|||
__SYSCALL(__NR_fsetxattr, sys_fsetxattr) |
|||
#define __NR_getxattr 8 |
|||
__SYSCALL(__NR_getxattr, sys_getxattr) |
|||
#define __NR_lgetxattr 9 |
|||
__SYSCALL(__NR_lgetxattr, sys_lgetxattr) |
|||
#define __NR_fgetxattr 10 |
|||
__SYSCALL(__NR_fgetxattr, sys_fgetxattr) |
|||
#define __NR_listxattr 11 |
|||
__SYSCALL(__NR_listxattr, sys_listxattr) |
|||
#define __NR_llistxattr 12 |
|||
__SYSCALL(__NR_llistxattr, sys_llistxattr) |
|||
#define __NR_flistxattr 13 |
|||
__SYSCALL(__NR_flistxattr, sys_flistxattr) |
|||
#define __NR_removexattr 14 |
|||
__SYSCALL(__NR_removexattr, sys_removexattr) |
|||
#define __NR_lremovexattr 15 |
|||
__SYSCALL(__NR_lremovexattr, sys_lremovexattr) |
|||
#define __NR_fremovexattr 16 |
|||
__SYSCALL(__NR_fremovexattr, sys_fremovexattr) |
|||
|
|||
/* fs/dcache.c */ |
|||
#define __NR_getcwd 17 |
|||
__SYSCALL(__NR_getcwd, sys_getcwd) |
|||
|
|||
/* fs/cookies.c */ |
|||
#define __NR_lookup_dcookie 18 |
|||
__SC_COMP(__NR_lookup_dcookie, sys_lookup_dcookie, compat_sys_lookup_dcookie) |
|||
|
|||
/* fs/eventfd.c */ |
|||
#define __NR_eventfd2 19 |
|||
__SYSCALL(__NR_eventfd2, sys_eventfd2) |
|||
|
|||
/* fs/eventpoll.c */ |
|||
#define __NR_epoll_create1 20 |
|||
__SYSCALL(__NR_epoll_create1, sys_epoll_create1) |
|||
#define __NR_epoll_ctl 21 |
|||
__SYSCALL(__NR_epoll_ctl, sys_epoll_ctl) |
|||
#define __NR_epoll_pwait 22 |
|||
__SC_COMP(__NR_epoll_pwait, sys_epoll_pwait, compat_sys_epoll_pwait) |
|||
|
|||
/* fs/fcntl.c */ |
|||
#define __NR_dup 23 |
|||
__SYSCALL(__NR_dup, sys_dup) |
|||
#define __NR_dup3 24 |
|||
__SYSCALL(__NR_dup3, sys_dup3) |
|||
#define __NR3264_fcntl 25 |
|||
__SC_COMP_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl, compat_sys_fcntl64) |
|||
|
|||
/* fs/inotify_user.c */ |
|||
#define __NR_inotify_init1 26 |
|||
__SYSCALL(__NR_inotify_init1, sys_inotify_init1) |
|||
#define __NR_inotify_add_watch 27 |
|||
__SYSCALL(__NR_inotify_add_watch, sys_inotify_add_watch) |
|||
#define __NR_inotify_rm_watch 28 |
|||
__SYSCALL(__NR_inotify_rm_watch, sys_inotify_rm_watch) |
|||
|
|||
/* fs/ioctl.c */ |
|||
#define __NR_ioctl 29 |
|||
__SC_COMP(__NR_ioctl, sys_ioctl, compat_sys_ioctl) |
|||
|
|||
/* fs/ioprio.c */ |
|||
#define __NR_ioprio_set 30 |
|||
__SYSCALL(__NR_ioprio_set, sys_ioprio_set) |
|||
#define __NR_ioprio_get 31 |
|||
__SYSCALL(__NR_ioprio_get, sys_ioprio_get) |
|||
|
|||
/* fs/locks.c */ |
|||
#define __NR_flock 32 |
|||
__SYSCALL(__NR_flock, sys_flock) |
|||
|
|||
/* fs/namei.c */ |
|||
#define __NR_mknodat 33 |
|||
__SYSCALL(__NR_mknodat, sys_mknodat) |
|||
#define __NR_mkdirat 34 |
|||
__SYSCALL(__NR_mkdirat, sys_mkdirat) |
|||
#define __NR_unlinkat 35 |
|||
__SYSCALL(__NR_unlinkat, sys_unlinkat) |
|||
#define __NR_symlinkat 36 |
|||
__SYSCALL(__NR_symlinkat, sys_symlinkat) |
|||
#define __NR_linkat 37 |
|||
__SYSCALL(__NR_linkat, sys_linkat) |
|||
#ifdef __ARCH_WANT_RENAMEAT |
|||
/* renameat is superseded with flags by renameat2 */ |
|||
#define __NR_renameat 38 |
|||
__SYSCALL(__NR_renameat, sys_renameat) |
|||
#endif /* __ARCH_WANT_RENAMEAT */ |
|||
|
|||
/* fs/namespace.c */ |
|||
#define __NR_umount2 39 |
|||
__SYSCALL(__NR_umount2, sys_umount) |
|||
#define __NR_mount 40 |
|||
__SC_COMP(__NR_mount, sys_mount, compat_sys_mount) |
|||
#define __NR_pivot_root 41 |
|||
__SYSCALL(__NR_pivot_root, sys_pivot_root) |
|||
|
|||
/* fs/nfsctl.c */ |
|||
#define __NR_nfsservctl 42 |
|||
__SYSCALL(__NR_nfsservctl, sys_ni_syscall) |
|||
|
|||
/* fs/open.c */ |
|||
#define __NR3264_statfs 43 |
|||
__SC_COMP_3264(__NR3264_statfs, sys_statfs64, sys_statfs, \ |
|||
compat_sys_statfs64) |
|||
#define __NR3264_fstatfs 44 |
|||
__SC_COMP_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs, \ |
|||
compat_sys_fstatfs64) |
|||
#define __NR3264_truncate 45 |
|||
__SC_COMP_3264(__NR3264_truncate, sys_truncate64, sys_truncate, \ |
|||
compat_sys_truncate64) |
|||
#define __NR3264_ftruncate 46 |
|||
__SC_COMP_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate, \ |
|||
compat_sys_ftruncate64) |
|||
|
|||
#define __NR_fallocate 47 |
|||
__SC_COMP(__NR_fallocate, sys_fallocate, compat_sys_fallocate) |
|||
#define __NR_faccessat 48 |
|||
__SYSCALL(__NR_faccessat, sys_faccessat) |
|||
#define __NR_chdir 49 |
|||
__SYSCALL(__NR_chdir, sys_chdir) |
|||
#define __NR_fchdir 50 |
|||
__SYSCALL(__NR_fchdir, sys_fchdir) |
|||
#define __NR_chroot 51 |
|||
__SYSCALL(__NR_chroot, sys_chroot) |
|||
#define __NR_fchmod 52 |
|||
__SYSCALL(__NR_fchmod, sys_fchmod) |
|||
#define __NR_fchmodat 53 |
|||
__SYSCALL(__NR_fchmodat, sys_fchmodat) |
|||
#define __NR_fchownat 54 |
|||
__SYSCALL(__NR_fchownat, sys_fchownat) |
|||
#define __NR_fchown 55 |
|||
__SYSCALL(__NR_fchown, sys_fchown) |
|||
#define __NR_openat 56 |
|||
__SC_COMP(__NR_openat, sys_openat, compat_sys_openat) |
|||
#define __NR_close 57 |
|||
__SYSCALL(__NR_close, sys_close) |
|||
#define __NR_vhangup 58 |
|||
__SYSCALL(__NR_vhangup, sys_vhangup) |
|||
|
|||
/* fs/pipe.c */ |
|||
#define __NR_pipe2 59 |
|||
__SYSCALL(__NR_pipe2, sys_pipe2) |
|||
|
|||
/* fs/quota.c */ |
|||
#define __NR_quotactl 60 |
|||
__SYSCALL(__NR_quotactl, sys_quotactl) |
|||
|
|||
/* fs/readdir.c */ |
|||
#define __NR_getdents64 61 |
|||
__SYSCALL(__NR_getdents64, sys_getdents64) |
|||
|
|||
/* fs/read_write.c */ |
|||
#define __NR3264_lseek 62 |
|||
__SC_3264(__NR3264_lseek, sys_llseek, sys_lseek) |
|||
#define __NR_read 63 |
|||
__SYSCALL(__NR_read, sys_read) |
|||
#define __NR_write 64 |
|||
__SYSCALL(__NR_write, sys_write) |
|||
#define __NR_readv 65 |
|||
__SC_COMP(__NR_readv, sys_readv, compat_sys_readv) |
|||
#define __NR_writev 66 |
|||
__SC_COMP(__NR_writev, sys_writev, compat_sys_writev) |
|||
#define __NR_pread64 67 |
|||
__SC_COMP(__NR_pread64, sys_pread64, compat_sys_pread64) |
|||
#define __NR_pwrite64 68 |
|||
__SC_COMP(__NR_pwrite64, sys_pwrite64, compat_sys_pwrite64) |
|||
#define __NR_preadv 69 |
|||
__SC_COMP(__NR_preadv, sys_preadv, compat_sys_preadv) |
|||
#define __NR_pwritev 70 |
|||
__SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev) |
|||
|
|||
/* fs/sendfile.c */ |
|||
#define __NR3264_sendfile 71 |
|||
__SYSCALL(__NR3264_sendfile, sys_sendfile64) |
|||
|
|||
/* fs/select.c */ |
|||
#define __NR_pselect6 72 |
|||
__SC_COMP(__NR_pselect6, sys_pselect6, compat_sys_pselect6) |
|||
#define __NR_ppoll 73 |
|||
__SC_COMP(__NR_ppoll, sys_ppoll, compat_sys_ppoll) |
|||
|
|||
/* fs/signalfd.c */ |
|||
#define __NR_signalfd4 74 |
|||
__SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4) |
|||
|
|||
/* fs/splice.c */ |
|||
#define __NR_vmsplice 75 |
|||
__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice) |
|||
#define __NR_splice 76 |
|||
__SYSCALL(__NR_splice, sys_splice) |
|||
#define __NR_tee 77 |
|||
__SYSCALL(__NR_tee, sys_tee) |
|||
|
|||
/* fs/stat.c */ |
|||
#define __NR_readlinkat 78 |
|||
__SYSCALL(__NR_readlinkat, sys_readlinkat) |
|||
#define __NR3264_fstatat 79 |
|||
__SC_3264(__NR3264_fstatat, sys_fstatat64, sys_newfstatat) |
|||
#define __NR3264_fstat 80 |
|||
__SC_3264(__NR3264_fstat, sys_fstat64, sys_newfstat) |
|||
|
|||
/* fs/sync.c */ |
|||
#define __NR_sync 81 |
|||
__SYSCALL(__NR_sync, sys_sync) |
|||
#define __NR_fsync 82 |
|||
__SYSCALL(__NR_fsync, sys_fsync) |
|||
#define __NR_fdatasync 83 |
|||
__SYSCALL(__NR_fdatasync, sys_fdatasync) |
|||
#ifdef __ARCH_WANT_SYNC_FILE_RANGE2 |
|||
#define __NR_sync_file_range2 84 |
|||
__SC_COMP(__NR_sync_file_range2, sys_sync_file_range2, \ |
|||
compat_sys_sync_file_range2) |
|||
#else |
|||
#define __NR_sync_file_range 84 |
|||
__SC_COMP(__NR_sync_file_range, sys_sync_file_range, \ |
|||
compat_sys_sync_file_range) |
|||
#endif |
|||
|
|||
/* fs/timerfd.c */ |
|||
#define __NR_timerfd_create 85 |
|||
__SYSCALL(__NR_timerfd_create, sys_timerfd_create) |
|||
#define __NR_timerfd_settime 86 |
|||
__SC_COMP(__NR_timerfd_settime, sys_timerfd_settime, \ |
|||
compat_sys_timerfd_settime) |
|||
#define __NR_timerfd_gettime 87 |
|||
__SC_COMP(__NR_timerfd_gettime, sys_timerfd_gettime, \ |
|||
compat_sys_timerfd_gettime) |
|||
|
|||
/* fs/utimes.c */ |
|||
#define __NR_utimensat 88 |
|||
__SC_COMP(__NR_utimensat, sys_utimensat, compat_sys_utimensat) |
|||
|
|||
/* kernel/acct.c */ |
|||
#define __NR_acct 89 |
|||
__SYSCALL(__NR_acct, sys_acct) |
|||
|
|||
/* kernel/capability.c */ |
|||
#define __NR_capget 90 |
|||
__SYSCALL(__NR_capget, sys_capget) |
|||
#define __NR_capset 91 |
|||
__SYSCALL(__NR_capset, sys_capset) |
|||
|
|||
/* kernel/exec_domain.c */ |
|||
#define __NR_personality 92 |
|||
__SYSCALL(__NR_personality, sys_personality) |
|||
|
|||
/* kernel/exit.c */ |
|||
#define __NR_exit 93 |
|||
__SYSCALL(__NR_exit, sys_exit) |
|||
#define __NR_exit_group 94 |
|||
__SYSCALL(__NR_exit_group, sys_exit_group) |
|||
#define __NR_waitid 95 |
|||
__SC_COMP(__NR_waitid, sys_waitid, compat_sys_waitid) |
|||
|
|||
/* kernel/fork.c */ |
|||
#define __NR_set_tid_address 96 |
|||
__SYSCALL(__NR_set_tid_address, sys_set_tid_address) |
|||
#define __NR_unshare 97 |
|||
__SYSCALL(__NR_unshare, sys_unshare) |
|||
|
|||
/* kernel/futex.c */ |
|||
#define __NR_futex 98 |
|||
__SC_COMP(__NR_futex, sys_futex, compat_sys_futex) |
|||
#define __NR_set_robust_list 99 |
|||
__SC_COMP(__NR_set_robust_list, sys_set_robust_list, \ |
|||
compat_sys_set_robust_list) |
|||
#define __NR_get_robust_list 100 |
|||
__SC_COMP(__NR_get_robust_list, sys_get_robust_list, \ |
|||
compat_sys_get_robust_list) |
|||
|
|||
/* kernel/hrtimer.c */ |
|||
#define __NR_nanosleep 101 |
|||
__SC_COMP(__NR_nanosleep, sys_nanosleep, compat_sys_nanosleep) |
|||
|
|||
/* kernel/itimer.c */ |
|||
#define __NR_getitimer 102 |
|||
__SC_COMP(__NR_getitimer, sys_getitimer, compat_sys_getitimer) |
|||
#define __NR_setitimer 103 |
|||
__SC_COMP(__NR_setitimer, sys_setitimer, compat_sys_setitimer) |
|||
|
|||
/* kernel/kexec.c */ |
|||
#define __NR_kexec_load 104 |
|||
__SC_COMP(__NR_kexec_load, sys_kexec_load, compat_sys_kexec_load) |
|||
|
|||
/* kernel/module.c */ |
|||
#define __NR_init_module 105 |
|||
__SYSCALL(__NR_init_module, sys_init_module) |
|||
#define __NR_delete_module 106 |
|||
__SYSCALL(__NR_delete_module, sys_delete_module) |
|||
|
|||
/* kernel/posix-timers.c */ |
|||
#define __NR_timer_create 107 |
|||
__SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create) |
|||
#define __NR_timer_gettime 108 |
|||
__SC_COMP(__NR_timer_gettime, sys_timer_gettime, compat_sys_timer_gettime) |
|||
#define __NR_timer_getoverrun 109 |
|||
__SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun) |
|||
#define __NR_timer_settime 110 |
|||
__SC_COMP(__NR_timer_settime, sys_timer_settime, compat_sys_timer_settime) |
|||
#define __NR_timer_delete 111 |
|||
__SYSCALL(__NR_timer_delete, sys_timer_delete) |
|||
#define __NR_clock_settime 112 |
|||
__SC_COMP(__NR_clock_settime, sys_clock_settime, compat_sys_clock_settime) |
|||
#define __NR_clock_gettime 113 |
|||
__SC_COMP(__NR_clock_gettime, sys_clock_gettime, compat_sys_clock_gettime) |
|||
#define __NR_clock_getres 114 |
|||
__SC_COMP(__NR_clock_getres, sys_clock_getres, compat_sys_clock_getres) |
|||
#define __NR_clock_nanosleep 115 |
|||
__SC_COMP(__NR_clock_nanosleep, sys_clock_nanosleep, \ |
|||
compat_sys_clock_nanosleep) |
|||
|
|||
/* kernel/printk.c */ |
|||
#define __NR_syslog 116 |
|||
__SYSCALL(__NR_syslog, sys_syslog) |
|||
|
|||
/* kernel/ptrace.c */ |
|||
#define __NR_ptrace 117 |
|||
__SYSCALL(__NR_ptrace, sys_ptrace) |
|||
|
|||
/* kernel/sched/core.c */ |
|||
#define __NR_sched_setparam 118 |
|||
__SYSCALL(__NR_sched_setparam, sys_sched_setparam) |
|||
#define __NR_sched_setscheduler 119 |
|||
__SYSCALL(__NR_sched_setscheduler, sys_sched_setscheduler) |
|||
#define __NR_sched_getscheduler 120 |
|||
__SYSCALL(__NR_sched_getscheduler, sys_sched_getscheduler) |
|||
#define __NR_sched_getparam 121 |
|||
__SYSCALL(__NR_sched_getparam, sys_sched_getparam) |
|||
#define __NR_sched_setaffinity 122 |
|||
__SC_COMP(__NR_sched_setaffinity, sys_sched_setaffinity, \ |
|||
compat_sys_sched_setaffinity) |
|||
#define __NR_sched_getaffinity 123 |
|||
__SC_COMP(__NR_sched_getaffinity, sys_sched_getaffinity, \ |
|||
compat_sys_sched_getaffinity) |
|||
#define __NR_sched_yield 124 |
|||
__SYSCALL(__NR_sched_yield, sys_sched_yield) |
|||
#define __NR_sched_get_priority_max 125 |
|||
__SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max) |
|||
#define __NR_sched_get_priority_min 126 |
|||
__SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min) |
|||
#define __NR_sched_rr_get_interval 127 |
|||
__SC_COMP(__NR_sched_rr_get_interval, sys_sched_rr_get_interval, \ |
|||
compat_sys_sched_rr_get_interval) |
|||
|
|||
/* kernel/signal.c */ |
|||
#define __NR_restart_syscall 128 |
|||
__SYSCALL(__NR_restart_syscall, sys_restart_syscall) |
|||
#define __NR_kill 129 |
|||
__SYSCALL(__NR_kill, sys_kill) |
|||
#define __NR_tkill 130 |
|||
__SYSCALL(__NR_tkill, sys_tkill) |
|||
#define __NR_tgkill 131 |
|||
__SYSCALL(__NR_tgkill, sys_tgkill) |
|||
#define __NR_sigaltstack 132 |
|||
__SC_COMP(__NR_sigaltstack, sys_sigaltstack, compat_sys_sigaltstack) |
|||
#define __NR_rt_sigsuspend 133 |
|||
__SC_COMP(__NR_rt_sigsuspend, sys_rt_sigsuspend, compat_sys_rt_sigsuspend) |
|||
#define __NR_rt_sigaction 134 |
|||
__SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction) |
|||
#define __NR_rt_sigprocmask 135 |
|||
__SC_COMP(__NR_rt_sigprocmask, sys_rt_sigprocmask, compat_sys_rt_sigprocmask) |
|||
#define __NR_rt_sigpending 136 |
|||
__SC_COMP(__NR_rt_sigpending, sys_rt_sigpending, compat_sys_rt_sigpending) |
|||
#define __NR_rt_sigtimedwait 137 |
|||
__SC_COMP(__NR_rt_sigtimedwait, sys_rt_sigtimedwait, \ |
|||
compat_sys_rt_sigtimedwait) |
|||
#define __NR_rt_sigqueueinfo 138 |
|||
__SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \ |
|||
compat_sys_rt_sigqueueinfo) |
|||
#define __NR_rt_sigreturn 139 |
|||
__SC_COMP(__NR_rt_sigreturn, sys_rt_sigreturn, compat_sys_rt_sigreturn) |
|||
|
|||
/* kernel/sys.c */ |
|||
#define __NR_setpriority 140 |
|||
__SYSCALL(__NR_setpriority, sys_setpriority) |
|||
#define __NR_getpriority 141 |
|||
__SYSCALL(__NR_getpriority, sys_getpriority) |
|||
#define __NR_reboot 142 |
|||
__SYSCALL(__NR_reboot, sys_reboot) |
|||
#define __NR_setregid 143 |
|||
__SYSCALL(__NR_setregid, sys_setregid) |
|||
#define __NR_setgid 144 |
|||
__SYSCALL(__NR_setgid, sys_setgid) |
|||
#define __NR_setreuid 145 |
|||
__SYSCALL(__NR_setreuid, sys_setreuid) |
|||
#define __NR_setuid 146 |
|||
__SYSCALL(__NR_setuid, sys_setuid) |
|||
#define __NR_setresuid 147 |
|||
__SYSCALL(__NR_setresuid, sys_setresuid) |
|||
#define __NR_getresuid 148 |
|||
__SYSCALL(__NR_getresuid, sys_getresuid) |
|||
#define __NR_setresgid 149 |
|||
__SYSCALL(__NR_setresgid, sys_setresgid) |
|||
#define __NR_getresgid 150 |
|||
__SYSCALL(__NR_getresgid, sys_getresgid) |
|||
#define __NR_setfsuid 151 |
|||
__SYSCALL(__NR_setfsuid, sys_setfsuid) |
|||
#define __NR_setfsgid 152 |
|||
__SYSCALL(__NR_setfsgid, sys_setfsgid) |
|||
#define __NR_times 153 |
|||
__SC_COMP(__NR_times, sys_times, compat_sys_times) |
|||
#define __NR_setpgid 154 |
|||
__SYSCALL(__NR_setpgid, sys_setpgid) |
|||
#define __NR_getpgid 155 |
|||
__SYSCALL(__NR_getpgid, sys_getpgid) |
|||
#define __NR_getsid 156 |
|||
__SYSCALL(__NR_getsid, sys_getsid) |
|||
#define __NR_setsid 157 |
|||
__SYSCALL(__NR_setsid, sys_setsid) |
|||
#define __NR_getgroups 158 |
|||
__SYSCALL(__NR_getgroups, sys_getgroups) |
|||
#define __NR_setgroups 159 |
|||
__SYSCALL(__NR_setgroups, sys_setgroups) |
|||
#define __NR_uname 160 |
|||
__SYSCALL(__NR_uname, sys_newuname) |
|||
#define __NR_sethostname 161 |
|||
__SYSCALL(__NR_sethostname, sys_sethostname) |
|||
#define __NR_setdomainname 162 |
|||
__SYSCALL(__NR_setdomainname, sys_setdomainname) |
|||
#define __NR_getrlimit 163 |
|||
__SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit) |
|||
#define __NR_setrlimit 164 |
|||
__SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit) |
|||
#define __NR_getrusage 165 |
|||
__SC_COMP(__NR_getrusage, sys_getrusage, compat_sys_getrusage) |
|||
#define __NR_umask 166 |
|||
__SYSCALL(__NR_umask, sys_umask) |
|||
#define __NR_prctl 167 |
|||
__SYSCALL(__NR_prctl, sys_prctl) |
|||
#define __NR_getcpu 168 |
|||
__SYSCALL(__NR_getcpu, sys_getcpu) |
|||
|
|||
/* kernel/time.c */ |
|||
#define __NR_gettimeofday 169 |
|||
__SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday) |
|||
#define __NR_settimeofday 170 |
|||
__SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday) |
|||
#define __NR_adjtimex 171 |
|||
__SC_COMP(__NR_adjtimex, sys_adjtimex, compat_sys_adjtimex) |
|||
|
|||
/* kernel/timer.c */ |
|||
#define __NR_getpid 172 |
|||
__SYSCALL(__NR_getpid, sys_getpid) |
|||
#define __NR_getppid 173 |
|||
__SYSCALL(__NR_getppid, sys_getppid) |
|||
#define __NR_getuid 174 |
|||
__SYSCALL(__NR_getuid, sys_getuid) |
|||
#define __NR_geteuid 175 |
|||
__SYSCALL(__NR_geteuid, sys_geteuid) |
|||
#define __NR_getgid 176 |
|||
__SYSCALL(__NR_getgid, sys_getgid) |
|||
#define __NR_getegid 177 |
|||
__SYSCALL(__NR_getegid, sys_getegid) |
|||
#define __NR_gettid 178 |
|||
__SYSCALL(__NR_gettid, sys_gettid) |
|||
#define __NR_sysinfo 179 |
|||
__SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo) |
|||
|
|||
/* ipc/mqueue.c */ |
|||
#define __NR_mq_open 180 |
|||
__SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open) |
|||
#define __NR_mq_unlink 181 |
|||
__SYSCALL(__NR_mq_unlink, sys_mq_unlink) |
|||
#define __NR_mq_timedsend 182 |
|||
__SC_COMP(__NR_mq_timedsend, sys_mq_timedsend, compat_sys_mq_timedsend) |
|||
#define __NR_mq_timedreceive 183 |
|||
__SC_COMP(__NR_mq_timedreceive, sys_mq_timedreceive, \ |
|||
compat_sys_mq_timedreceive) |
|||
#define __NR_mq_notify 184 |
|||
__SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify) |
|||
#define __NR_mq_getsetattr 185 |
|||
__SC_COMP(__NR_mq_getsetattr, sys_mq_getsetattr, compat_sys_mq_getsetattr) |
|||
|
|||
/* ipc/msg.c */ |
|||
#define __NR_msgget 186 |
|||
__SYSCALL(__NR_msgget, sys_msgget) |
|||
#define __NR_msgctl 187 |
|||
__SC_COMP(__NR_msgctl, sys_msgctl, compat_sys_msgctl) |
|||
#define __NR_msgrcv 188 |
|||
__SC_COMP(__NR_msgrcv, sys_msgrcv, compat_sys_msgrcv) |
|||
#define __NR_msgsnd 189 |
|||
__SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd) |
|||
|
|||
/* ipc/sem.c */ |
|||
#define __NR_semget 190 |
|||
__SYSCALL(__NR_semget, sys_semget) |
|||
#define __NR_semctl 191 |
|||
__SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl) |
|||
#define __NR_semtimedop 192 |
|||
__SC_COMP(__NR_semtimedop, sys_semtimedop, compat_sys_semtimedop) |
|||
#define __NR_semop 193 |
|||
__SYSCALL(__NR_semop, sys_semop) |
|||
|
|||
/* ipc/shm.c */ |
|||
#define __NR_shmget 194 |
|||
__SYSCALL(__NR_shmget, sys_shmget) |
|||
#define __NR_shmctl 195 |
|||
__SC_COMP(__NR_shmctl, sys_shmctl, compat_sys_shmctl) |
|||
#define __NR_shmat 196 |
|||
__SC_COMP(__NR_shmat, sys_shmat, compat_sys_shmat) |
|||
#define __NR_shmdt 197 |
|||
__SYSCALL(__NR_shmdt, sys_shmdt) |
|||
|
|||
/* net/socket.c */ |
|||
#define __NR_socket 198 |
|||
__SYSCALL(__NR_socket, sys_socket) |
|||
#define __NR_socketpair 199 |
|||
__SYSCALL(__NR_socketpair, sys_socketpair) |
|||
#define __NR_bind 200 |
|||
__SYSCALL(__NR_bind, sys_bind) |
|||
#define __NR_listen 201 |
|||
__SYSCALL(__NR_listen, sys_listen) |
|||
#define __NR_accept 202 |
|||
__SYSCALL(__NR_accept, sys_accept) |
|||
#define __NR_connect 203 |
|||
__SYSCALL(__NR_connect, sys_connect) |
|||
#define __NR_getsockname 204 |
|||
__SYSCALL(__NR_getsockname, sys_getsockname) |
|||
#define __NR_getpeername 205 |
|||
__SYSCALL(__NR_getpeername, sys_getpeername) |
|||
#define __NR_sendto 206 |
|||
__SYSCALL(__NR_sendto, sys_sendto) |
|||
#define __NR_recvfrom 207 |
|||
__SC_COMP(__NR_recvfrom, sys_recvfrom, compat_sys_recvfrom) |
|||
#define __NR_setsockopt 208 |
|||
__SC_COMP(__NR_setsockopt, sys_setsockopt, compat_sys_setsockopt) |
|||
#define __NR_getsockopt 209 |
|||
__SC_COMP(__NR_getsockopt, sys_getsockopt, compat_sys_getsockopt) |
|||
#define __NR_shutdown 210 |
|||
__SYSCALL(__NR_shutdown, sys_shutdown) |
|||
#define __NR_sendmsg 211 |
|||
__SC_COMP(__NR_sendmsg, sys_sendmsg, compat_sys_sendmsg) |
|||
#define __NR_recvmsg 212 |
|||
__SC_COMP(__NR_recvmsg, sys_recvmsg, compat_sys_recvmsg) |
|||
|
|||
/* mm/filemap.c */ |
|||
#define __NR_readahead 213 |
|||
__SC_COMP(__NR_readahead, sys_readahead, compat_sys_readahead) |
|||
|
|||
/* mm/nommu.c, also with MMU */ |
|||
#define __NR_brk 214 |
|||
__SYSCALL(__NR_brk, sys_brk) |
|||
#define __NR_munmap 215 |
|||
__SYSCALL(__NR_munmap, sys_munmap) |
|||
#define __NR_mremap 216 |
|||
__SYSCALL(__NR_mremap, sys_mremap) |
|||
|
|||
/* security/keys/keyctl.c */ |
|||
#define __NR_add_key 217 |
|||
__SYSCALL(__NR_add_key, sys_add_key) |
|||
#define __NR_request_key 218 |
|||
__SYSCALL(__NR_request_key, sys_request_key) |
|||
#define __NR_keyctl 219 |
|||
__SC_COMP(__NR_keyctl, sys_keyctl, compat_sys_keyctl) |
|||
|
|||
/* arch/example/kernel/sys_example.c */ |
|||
#define __NR_clone 220 |
|||
__SYSCALL(__NR_clone, sys_clone) |
|||
#define __NR_execve 221 |
|||
__SC_COMP(__NR_execve, sys_execve, compat_sys_execve) |
|||
|
|||
#define __NR3264_mmap 222 |
|||
__SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap) |
|||
/* mm/fadvise.c */ |
|||
#define __NR3264_fadvise64 223 |
|||
__SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64) |
|||
|
|||
/* mm/, CONFIG_MMU only */ |
|||
#ifndef __ARCH_NOMMU |
|||
#define __NR_swapon 224 |
|||
__SYSCALL(__NR_swapon, sys_swapon) |
|||
#define __NR_swapoff 225 |
|||
__SYSCALL(__NR_swapoff, sys_swapoff) |
|||
#define __NR_mprotect 226 |
|||
__SYSCALL(__NR_mprotect, sys_mprotect) |
|||
#define __NR_msync 227 |
|||
__SYSCALL(__NR_msync, sys_msync) |
|||
#define __NR_mlock 228 |
|||
__SYSCALL(__NR_mlock, sys_mlock) |
|||
#define __NR_munlock 229 |
|||
__SYSCALL(__NR_munlock, sys_munlock) |
|||
#define __NR_mlockall 230 |
|||
__SYSCALL(__NR_mlockall, sys_mlockall) |
|||
#define __NR_munlockall 231 |
|||
__SYSCALL(__NR_munlockall, sys_munlockall) |
|||
#define __NR_mincore 232 |
|||
__SYSCALL(__NR_mincore, sys_mincore) |
|||
#define __NR_madvise 233 |
|||
__SYSCALL(__NR_madvise, sys_madvise) |
|||
#define __NR_remap_file_pages 234 |
|||
__SYSCALL(__NR_remap_file_pages, sys_remap_file_pages) |
|||
#define __NR_mbind 235 |
|||
__SC_COMP(__NR_mbind, sys_mbind, compat_sys_mbind) |
|||
#define __NR_get_mempolicy 236 |
|||
__SC_COMP(__NR_get_mempolicy, sys_get_mempolicy, compat_sys_get_mempolicy) |
|||
#define __NR_set_mempolicy 237 |
|||
__SC_COMP(__NR_set_mempolicy, sys_set_mempolicy, compat_sys_set_mempolicy) |
|||
#define __NR_migrate_pages 238 |
|||
__SC_COMP(__NR_migrate_pages, sys_migrate_pages, compat_sys_migrate_pages) |
|||
#define __NR_move_pages 239 |
|||
__SC_COMP(__NR_move_pages, sys_move_pages, compat_sys_move_pages) |
|||
#endif |
|||
|
|||
#define __NR_rt_tgsigqueueinfo 240 |
|||
__SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \ |
|||
compat_sys_rt_tgsigqueueinfo) |
|||
#define __NR_perf_event_open 241 |
|||
__SYSCALL(__NR_perf_event_open, sys_perf_event_open) |
|||
#define __NR_accept4 242 |
|||
__SYSCALL(__NR_accept4, sys_accept4) |
|||
#define __NR_recvmmsg 243 |
|||
__SC_COMP(__NR_recvmmsg, sys_recvmmsg, compat_sys_recvmmsg) |
|||
|
|||
/*
|
|||
* Architectures may provide up to 16 syscalls of their own |
|||
* starting with this value. |
|||
*/ |
|||
#define __NR_arch_specific_syscall 244 |
|||
|
|||
#define __NR_wait4 260 |
|||
__SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4) |
|||
#define __NR_prlimit64 261 |
|||
__SYSCALL(__NR_prlimit64, sys_prlimit64) |
|||
#define __NR_fanotify_init 262 |
|||
__SYSCALL(__NR_fanotify_init, sys_fanotify_init) |
|||
#define __NR_fanotify_mark 263 |
|||
__SYSCALL(__NR_fanotify_mark, sys_fanotify_mark) |
|||
#define __NR_name_to_handle_at 264 |
|||
__SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at) |
|||
#define __NR_open_by_handle_at 265 |
|||
__SC_COMP(__NR_open_by_handle_at, sys_open_by_handle_at, \ |
|||
compat_sys_open_by_handle_at) |
|||
#define __NR_clock_adjtime 266 |
|||
__SC_COMP(__NR_clock_adjtime, sys_clock_adjtime, compat_sys_clock_adjtime) |
|||
#define __NR_syncfs 267 |
|||
__SYSCALL(__NR_syncfs, sys_syncfs) |
|||
#define __NR_setns 268 |
|||
__SYSCALL(__NR_setns, sys_setns) |
|||
#define __NR_sendmmsg 269 |
|||
__SC_COMP(__NR_sendmmsg, sys_sendmmsg, compat_sys_sendmmsg) |
|||
#define __NR_process_vm_readv 270 |
|||
__SC_COMP(__NR_process_vm_readv, sys_process_vm_readv, \ |
|||
compat_sys_process_vm_readv) |
|||
#define __NR_process_vm_writev 271 |
|||
__SC_COMP(__NR_process_vm_writev, sys_process_vm_writev, \ |
|||
compat_sys_process_vm_writev) |
|||
#define __NR_kcmp 272 |
|||
__SYSCALL(__NR_kcmp, sys_kcmp) |
|||
#define __NR_finit_module 273 |
|||
__SYSCALL(__NR_finit_module, sys_finit_module) |
|||
#define __NR_sched_setattr 274 |
|||
__SYSCALL(__NR_sched_setattr, sys_sched_setattr) |
|||
#define __NR_sched_getattr 275 |
|||
__SYSCALL(__NR_sched_getattr, sys_sched_getattr) |
|||
#define __NR_renameat2 276 |
|||
__SYSCALL(__NR_renameat2, sys_renameat2) |
|||
#define __NR_seccomp 277 |
|||
__SYSCALL(__NR_seccomp, sys_seccomp) |
|||
#define __NR_getrandom 278 |
|||
__SYSCALL(__NR_getrandom, sys_getrandom) |
|||
#define __NR_memfd_create 279 |
|||
__SYSCALL(__NR_memfd_create, sys_memfd_create) |
|||
#define __NR_bpf 280 |
|||
__SYSCALL(__NR_bpf, sys_bpf) |
|||
#define __NR_execveat 281 |
|||
__SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat) |
|||
#define __NR_userfaultfd 282 |
|||
__SYSCALL(__NR_userfaultfd, sys_userfaultfd) |
|||
#define __NR_membarrier 283 |
|||
__SYSCALL(__NR_membarrier, sys_membarrier) |
|||
#define __NR_mlock2 284 |
|||
__SYSCALL(__NR_mlock2, sys_mlock2) |
|||
#define __NR_copy_file_range 285 |
|||
__SYSCALL(__NR_copy_file_range, sys_copy_file_range) |
|||
#define __NR_preadv2 286 |
|||
__SC_COMP(__NR_preadv2, sys_preadv2, compat_sys_preadv2) |
|||
#define __NR_pwritev2 287 |
|||
__SC_COMP(__NR_pwritev2, sys_pwritev2, compat_sys_pwritev2) |
|||
#define __NR_pkey_mprotect 288 |
|||
__SYSCALL(__NR_pkey_mprotect, sys_pkey_mprotect) |
|||
#define __NR_pkey_alloc 289 |
|||
__SYSCALL(__NR_pkey_alloc, sys_pkey_alloc) |
|||
#define __NR_pkey_free 290 |
|||
__SYSCALL(__NR_pkey_free, sys_pkey_free) |
|||
#define __NR_statx 291 |
|||
__SYSCALL(__NR_statx, sys_statx) |
|||
|
|||
#undef __NR_syscalls |
|||
#define __NR_syscalls 292 |
|||
|
|||
/*
|
|||
* 32 bit systems traditionally used different |
|||
* syscalls for off_t and loff_t arguments, while |
|||
* 64 bit systems only need the off_t version. |
|||
* For new 32 bit platforms, there is no need to |
|||
* implement the old 32 bit off_t syscalls, so |
|||
* they take different names. |
|||
* Here we map the numbers so that both versions |
|||
* use the same syscall table layout. |
|||
*/ |
|||
#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT) |
|||
#define __NR_fcntl __NR3264_fcntl |
|||
#define __NR_statfs __NR3264_statfs |
|||
#define __NR_fstatfs __NR3264_fstatfs |
|||
#define __NR_truncate __NR3264_truncate |
|||
#define __NR_ftruncate __NR3264_ftruncate |
|||
#define __NR_lseek __NR3264_lseek |
|||
#define __NR_sendfile __NR3264_sendfile |
|||
#define __NR_newfstatat __NR3264_fstatat |
|||
#define __NR_fstat __NR3264_fstat |
|||
#define __NR_mmap __NR3264_mmap |
|||
#define __NR_fadvise64 __NR3264_fadvise64 |
|||
#ifdef __NR3264_stat |
|||
#define __NR_stat __NR3264_stat |
|||
#define __NR_lstat __NR3264_lstat |
|||
#endif |
|||
#else |
|||
#define __NR_fcntl64 __NR3264_fcntl |
|||
#define __NR_statfs64 __NR3264_statfs |
|||
#define __NR_fstatfs64 __NR3264_fstatfs |
|||
#define __NR_truncate64 __NR3264_truncate |
|||
#define __NR_ftruncate64 __NR3264_ftruncate |
|||
#define __NR_llseek __NR3264_lseek |
|||
#define __NR_sendfile64 __NR3264_sendfile |
|||
#define __NR_fstatat64 __NR3264_fstatat |
|||
#define __NR_fstat64 __NR3264_fstat |
|||
#define __NR_mmap2 __NR3264_mmap |
|||
#define __NR_fadvise64_64 __NR3264_fadvise64 |
|||
#ifdef __NR3264_stat |
|||
#define __NR_stat64 __NR3264_stat |
|||
#define __NR_lstat64 __NR3264_lstat |
|||
#endif |
|||
#endif |
|||
@ -0,0 +1,9 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#ifndef __ASM_MIPS_BITSPERLONG_H |
|||
#define __ASM_MIPS_BITSPERLONG_H |
|||
|
|||
#define __BITS_PER_LONG _MIPS_SZLONG |
|||
|
|||
#include <asm-generic/bitsperlong.h> |
|||
|
|||
#endif /* __ASM_MIPS_BITSPERLONG_H */ |
|||
@ -1,5 +0,0 @@ |
|||
#ifndef _ASM_MIPS_KVM_PARA_H |
|||
#define _ASM_MIPS_KVM_PARA_H |
|||
|
|||
|
|||
#endif /* _ASM_MIPS_KVM_PARA_H */ |
|||
@ -0,0 +1,45 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
/*
|
|||
* This file is subject to the terms and conditions of the GNU General Public |
|||
* License. See the file "COPYING" in the main directory of this archive |
|||
* for more details. |
|||
* |
|||
* Copyright (C) 1996, 1999, 2001 Ralf Baechle |
|||
* Copyright (C) 1999 Silicon Graphics, Inc. |
|||
* Copyright (C) 2001 MIPS Technologies, Inc. |
|||
*/ |
|||
#ifndef __ASM_SGIDEFS_H |
|||
#define __ASM_SGIDEFS_H |
|||
|
|||
/*
|
|||
* Using a Linux compiler for building Linux seems logic but not to |
|||
* everybody. |
|||
*/ |
|||
#ifndef __linux__ |
|||
#error Use a Linux compiler or give up. |
|||
#endif |
|||
|
|||
/*
|
|||
* Definitions for the ISA levels |
|||
* |
|||
* With the introduction of MIPS32 / MIPS64 instruction sets definitions |
|||
* MIPS ISAs are no longer subsets of each other. Therefore comparisons |
|||
* on these symbols except with == may result in unexpected results and |
|||
* are forbidden! |
|||
*/ |
|||
#define _MIPS_ISA_MIPS1 1 |
|||
#define _MIPS_ISA_MIPS2 2 |
|||
#define _MIPS_ISA_MIPS3 3 |
|||
#define _MIPS_ISA_MIPS4 4 |
|||
#define _MIPS_ISA_MIPS5 5 |
|||
#define _MIPS_ISA_MIPS32 6 |
|||
#define _MIPS_ISA_MIPS64 7 |
|||
|
|||
/*
|
|||
* Subprogram calling convention |
|||
*/ |
|||
#define _MIPS_SIM_ABI32 1 |
|||
#define _MIPS_SIM_NABI32 2 |
|||
#define _MIPS_SIM_ABI64 3 |
|||
|
|||
#endif /* __ASM_SGIDEFS_H */ |
|||
@ -0,0 +1,13 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#ifndef __ASM_POWERPC_BITSPERLONG_H |
|||
#define __ASM_POWERPC_BITSPERLONG_H |
|||
|
|||
#if defined(__powerpc64__) |
|||
# define __BITS_PER_LONG 64 |
|||
#else |
|||
# define __BITS_PER_LONG 32 |
|||
#endif |
|||
|
|||
#include <asm-generic/bitsperlong.h> |
|||
|
|||
#endif /* __ASM_POWERPC_BITSPERLONG_H */ |
|||
@ -1,99 +0,0 @@ |
|||
/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */ |
|||
/*
|
|||
* ePAPR hcall interface |
|||
* |
|||
* Copyright 2008-2011 Freescale Semiconductor, Inc. |
|||
* |
|||
* Author: Timur Tabi <timur@freescale.com> |
|||
* |
|||
* This file is provided under a dual BSD/GPL license. When using or |
|||
* redistributing this file, you may do so under either license. |
|||
* |
|||
* Redistribution and use in source and binary forms, with or without |
|||
* modification, are permitted provided that the following conditions are met: |
|||
* * Redistributions of source code must retain the above copyright |
|||
* notice, this list of conditions and the following disclaimer. |
|||
* * 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. |
|||
* * Neither the name of Freescale Semiconductor nor the |
|||
* names of its contributors may be used to endorse or promote products |
|||
* derived from this software without specific prior written permission. |
|||
* |
|||
* |
|||
* ALTERNATIVELY, this software may be distributed under the terms of the |
|||
* GNU General Public License ("GPL") as published by the Free Software |
|||
* Foundation, either version 2 of that License or (at your option) any |
|||
* later version. |
|||
* |
|||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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. |
|||
*/ |
|||
|
|||
#ifndef _ASM_POWERPC_EPAPR_HCALLS_H |
|||
#define _ASM_POWERPC_EPAPR_HCALLS_H |
|||
|
|||
#define EV_BYTE_CHANNEL_SEND 1 |
|||
#define EV_BYTE_CHANNEL_RECEIVE 2 |
|||
#define EV_BYTE_CHANNEL_POLL 3 |
|||
#define EV_INT_SET_CONFIG 4 |
|||
#define EV_INT_GET_CONFIG 5 |
|||
#define EV_INT_SET_MASK 6 |
|||
#define EV_INT_GET_MASK 7 |
|||
#define EV_INT_IACK 9 |
|||
#define EV_INT_EOI 10 |
|||
#define EV_INT_SEND_IPI 11 |
|||
#define EV_INT_SET_TASK_PRIORITY 12 |
|||
#define EV_INT_GET_TASK_PRIORITY 13 |
|||
#define EV_DOORBELL_SEND 14 |
|||
#define EV_MSGSND 15 |
|||
#define EV_IDLE 16 |
|||
|
|||
/* vendor ID: epapr */ |
|||
#define EV_LOCAL_VENDOR_ID 0 /* for private use */ |
|||
#define EV_EPAPR_VENDOR_ID 1 |
|||
#define EV_FSL_VENDOR_ID 2 /* Freescale Semiconductor */ |
|||
#define EV_IBM_VENDOR_ID 3 /* IBM */ |
|||
#define EV_GHS_VENDOR_ID 4 /* Green Hills Software */ |
|||
#define EV_ENEA_VENDOR_ID 5 /* Enea */ |
|||
#define EV_WR_VENDOR_ID 6 /* Wind River Systems */ |
|||
#define EV_AMCC_VENDOR_ID 7 /* Applied Micro Circuits */ |
|||
#define EV_KVM_VENDOR_ID 42 /* KVM */ |
|||
|
|||
/* The max number of bytes that a byte channel can send or receive per call */ |
|||
#define EV_BYTE_CHANNEL_MAX_BYTES 16 |
|||
|
|||
|
|||
#define _EV_HCALL_TOKEN(id, num) (((id) << 16) | (num)) |
|||
#define EV_HCALL_TOKEN(hcall_num) _EV_HCALL_TOKEN(EV_EPAPR_VENDOR_ID, hcall_num) |
|||
|
|||
/* epapr return codes */ |
|||
#define EV_SUCCESS 0 |
|||
#define EV_EPERM 1 /* Operation not permitted */ |
|||
#define EV_ENOENT 2 /* Entry Not Found */ |
|||
#define EV_EIO 3 /* I/O error occurred */ |
|||
#define EV_EAGAIN 4 /* The operation had insufficient |
|||
* resources to complete and should be |
|||
* retried |
|||
*/ |
|||
#define EV_ENOMEM 5 /* There was insufficient memory to |
|||
* complete the operation */ |
|||
#define EV_EFAULT 6 /* Bad guest address */ |
|||
#define EV_ENODEV 7 /* No such device */ |
|||
#define EV_EINVAL 8 /* An argument supplied to the hcall |
|||
was out of range or invalid */ |
|||
#define EV_INTERNAL 9 /* An internal error occurred */ |
|||
#define EV_CONFIG 10 /* A configuration error was detected */ |
|||
#define EV_INVALID_STATE 11 /* The object is in an invalid state */ |
|||
#define EV_UNIMPLEMENTED 12 /* Unimplemented hypercall */ |
|||
#define EV_BUFFER_OVERFLOW 13 /* Caller-supplied buffer too small */ |
|||
|
|||
#endif /* _ASM_POWERPC_EPAPR_HCALLS_H */ |
|||
@ -1,98 +0,0 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
/*
|
|||
* This program is free software; you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License, version 2, as |
|||
* published by the Free Software Foundation. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, write to the Free Software |
|||
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|||
* |
|||
* Copyright IBM Corp. 2008 |
|||
* |
|||
* Authors: Hollis Blanchard <hollisb@us.ibm.com> |
|||
*/ |
|||
|
|||
#ifndef __POWERPC_KVM_PARA_H__ |
|||
#define __POWERPC_KVM_PARA_H__ |
|||
|
|||
#include <linux/types.h> |
|||
|
|||
/*
|
|||
* Additions to this struct must only occur at the end, and should be |
|||
* accompanied by a KVM_MAGIC_FEAT flag to advertise that they are present |
|||
* (albeit not necessarily relevant to the current target hardware platform). |
|||
* |
|||
* Struct fields are always 32 or 64 bit aligned, depending on them being 32 |
|||
* or 64 bit wide respectively. |
|||
* |
|||
* See Documentation/virtual/kvm/ppc-pv.txt |
|||
*/ |
|||
struct kvm_vcpu_arch_shared { |
|||
__u64 scratch1; |
|||
__u64 scratch2; |
|||
__u64 scratch3; |
|||
__u64 critical; /* Guest may not get interrupts if == r1 */ |
|||
__u64 sprg0; |
|||
__u64 sprg1; |
|||
__u64 sprg2; |
|||
__u64 sprg3; |
|||
__u64 srr0; |
|||
__u64 srr1; |
|||
__u64 dar; /* dear on BookE */ |
|||
__u64 msr; |
|||
__u32 dsisr; |
|||
__u32 int_pending; /* Tells the guest if we have an interrupt */ |
|||
__u32 sr[16]; |
|||
__u32 mas0; |
|||
__u32 mas1; |
|||
__u64 mas7_3; |
|||
__u64 mas2; |
|||
__u32 mas4; |
|||
__u32 mas6; |
|||
__u32 esr; |
|||
__u32 pir; |
|||
|
|||
/*
|
|||
* SPRG4-7 are user-readable, so we can only keep these consistent |
|||
* between the shared area and the real registers when there's an |
|||
* intervening exit to KVM. This also applies to SPRG3 on some |
|||
* chips. |
|||
* |
|||
* This suffices for access by guest userspace, since in PR-mode |
|||
* KVM, an exit must occur when changing the guest's MSR[PR]. |
|||
* If the guest kernel writes to SPRG3-7 via the shared area, it |
|||
* must also use the shared area for reading while in kernel space. |
|||
*/ |
|||
__u64 sprg4; |
|||
__u64 sprg5; |
|||
__u64 sprg6; |
|||
__u64 sprg7; |
|||
}; |
|||
|
|||
#define KVM_SC_MAGIC_R0 0x4b564d21 /* "KVM!" */ |
|||
|
|||
#define KVM_HCALL_TOKEN(num) _EV_HCALL_TOKEN(EV_KVM_VENDOR_ID, num) |
|||
|
|||
#include <asm/epapr_hcalls.h> |
|||
|
|||
#define KVM_FEATURE_MAGIC_PAGE 1 |
|||
|
|||
/* Magic page flags from host to guest */ |
|||
|
|||
#define KVM_MAGIC_FEAT_SR (1 << 0) |
|||
|
|||
/* MASn, ESR, PIR, and high SPRGs */ |
|||
#define KVM_MAGIC_FEAT_MAS0_TO_SPRG7 (1 << 1) |
|||
|
|||
/* Magic page flags from guest to host */ |
|||
|
|||
#define MAGIC_PAGE_FLAG_NOT_MAPPED_NX (1 << 0) |
|||
|
|||
|
|||
#endif /* __POWERPC_KVM_PARA_H__ */ |
|||
@ -0,0 +1,14 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#ifndef __ASM_S390_BITSPERLONG_H |
|||
#define __ASM_S390_BITSPERLONG_H |
|||
|
|||
#ifndef __s390x__ |
|||
#define __BITS_PER_LONG 32 |
|||
#else |
|||
#define __BITS_PER_LONG 64 |
|||
#endif |
|||
|
|||
#include <asm-generic/bitsperlong.h> |
|||
|
|||
#endif /* __ASM_S390_BITSPERLONG_H */ |
|||
|
|||
@ -1,8 +0,0 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
/*
|
|||
* User API definitions for paravirtual devices on s390 |
|||
* |
|||
* Copyright IBM Corp. 2008 |
|||
* |
|||
* Author(s): Christian Borntraeger <borntraeger@de.ibm.com> |
|||
*/ |
|||
@ -0,0 +1,14 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#ifndef __ASM_X86_BITSPERLONG_H |
|||
#define __ASM_X86_BITSPERLONG_H |
|||
|
|||
#if defined(__x86_64__) && !defined(__ILP32__) |
|||
# define __BITS_PER_LONG 64 |
|||
#else |
|||
# define __BITS_PER_LONG 32 |
|||
#endif |
|||
|
|||
#include <asm-generic/bitsperlong.h> |
|||
|
|||
#endif /* __ASM_X86_BITSPERLONG_H */ |
|||
|
|||
@ -1,35 +0,0 @@ |
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|||
#ifndef __LINUX_KVM_PARA_H |
|||
#define __LINUX_KVM_PARA_H |
|||
|
|||
/*
|
|||
* This header file provides a method for making a hypercall to the host |
|||
* Architectures should define: |
|||
* - kvm_hypercall0, kvm_hypercall1... |
|||
* - kvm_arch_para_features |
|||
* - kvm_para_available |
|||
*/ |
|||
|
|||
/* Return values for hypercalls */ |
|||
#define KVM_ENOSYS 1000 |
|||
#define KVM_EFAULT EFAULT |
|||
#define KVM_E2BIG E2BIG |
|||
#define KVM_EPERM EPERM |
|||
#define KVM_EOPNOTSUPP 95 |
|||
|
|||
#define KVM_HC_VAPIC_POLL_IRQ 1 |
|||
#define KVM_HC_MMU_OP 2 |
|||
#define KVM_HC_FEATURES 3 |
|||
#define KVM_HC_PPC_MAP_MAGIC_PAGE 4 |
|||
#define KVM_HC_KICK_CPU 5 |
|||
#define KVM_HC_MIPS_GET_CLOCK_FREQ 6 |
|||
#define KVM_HC_MIPS_EXIT_VM 7 |
|||
#define KVM_HC_MIPS_CONSOLE_OUTPUT 8 |
|||
#define KVM_HC_CLOCK_PAIRING 9 |
|||
|
|||
/*
|
|||
* hypercalls use architecture specific |
|||
*/ |
|||
#include <asm/kvm_para.h> |
|||
|
|||
#endif /* __LINUX_KVM_PARA_H */ |
|||
@ -0,0 +1,114 @@ |
|||
/*
|
|||
* IOVA tree implementation based on GTree. |
|||
* |
|||
* Copyright 2018 Red Hat, Inc. |
|||
* |
|||
* Authors: |
|||
* Peter Xu <peterx@redhat.com> |
|||
* |
|||
* This work is licensed under the terms of the GNU GPL, version 2 or later. |
|||
*/ |
|||
|
|||
#include <glib.h> |
|||
#include "qemu/iova-tree.h" |
|||
|
|||
struct IOVATree { |
|||
GTree *tree; |
|||
}; |
|||
|
|||
static int iova_tree_compare(gconstpointer a, gconstpointer b, gpointer data) |
|||
{ |
|||
const DMAMap *m1 = a, *m2 = b; |
|||
|
|||
if (m1->iova > m2->iova + m2->size) { |
|||
return 1; |
|||
} |
|||
|
|||
if (m1->iova + m1->size < m2->iova) { |
|||
return -1; |
|||
} |
|||
|
|||
/* Overlapped */ |
|||
return 0; |
|||
} |
|||
|
|||
IOVATree *iova_tree_new(void) |
|||
{ |
|||
IOVATree *iova_tree = g_new0(IOVATree, 1); |
|||
|
|||
/* We don't have values actually, no need to free */ |
|||
iova_tree->tree = g_tree_new_full(iova_tree_compare, NULL, g_free, NULL); |
|||
|
|||
return iova_tree; |
|||
} |
|||
|
|||
DMAMap *iova_tree_find(IOVATree *tree, DMAMap *map) |
|||
{ |
|||
return g_tree_lookup(tree->tree, map); |
|||
} |
|||
|
|||
DMAMap *iova_tree_find_address(IOVATree *tree, hwaddr iova) |
|||
{ |
|||
DMAMap map = { .iova = iova, .size = 0 }; |
|||
|
|||
return iova_tree_find(tree, &map); |
|||
} |
|||
|
|||
static inline void iova_tree_insert_internal(GTree *gtree, DMAMap *range) |
|||
{ |
|||
/* Key and value are sharing the same range data */ |
|||
g_tree_insert(gtree, range, range); |
|||
} |
|||
|
|||
int iova_tree_insert(IOVATree *tree, DMAMap *map) |
|||
{ |
|||
DMAMap *new; |
|||
|
|||
if (map->iova + map->size < map->iova || map->perm == IOMMU_NONE) { |
|||
return IOVA_ERR_INVALID; |
|||
} |
|||
|
|||
/* We don't allow to insert range that overlaps with existings */ |
|||
if (iova_tree_find(tree, map)) { |
|||
return IOVA_ERR_OVERLAP; |
|||
} |
|||
|
|||
new = g_new0(DMAMap, 1); |
|||
memcpy(new, map, sizeof(*new)); |
|||
iova_tree_insert_internal(tree->tree, new); |
|||
|
|||
return IOVA_OK; |
|||
} |
|||
|
|||
static gboolean iova_tree_traverse(gpointer key, gpointer value, |
|||
gpointer data) |
|||
{ |
|||
iova_tree_iterator iterator = data; |
|||
DMAMap *map = key; |
|||
|
|||
g_assert(key == value); |
|||
|
|||
return iterator(map); |
|||
} |
|||
|
|||
void iova_tree_foreach(IOVATree *tree, iova_tree_iterator iterator) |
|||
{ |
|||
g_tree_foreach(tree->tree, iova_tree_traverse, iterator); |
|||
} |
|||
|
|||
int iova_tree_remove(IOVATree *tree, DMAMap *map) |
|||
{ |
|||
DMAMap *overlap; |
|||
|
|||
while ((overlap = iova_tree_find(tree, map))) { |
|||
g_tree_remove(tree->tree, overlap); |
|||
} |
|||
|
|||
return IOVA_OK; |
|||
} |
|||
|
|||
void iova_tree_destroy(IOVATree *tree) |
|||
{ |
|||
g_tree_destroy(tree->tree); |
|||
g_free(tree); |
|||
} |
|||
Loading…
Reference in new issue