~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/rdma/ib_umem.h

Version: ~ [ linux-5.19-rc3 ] ~ [ linux-5.18.5 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.48 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.123 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.199 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.248 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.284 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.319 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (c) 2007 Cisco Systems.  All rights reserved.
  3  *
  4  * This software is available to you under a choice of one of two
  5  * licenses.  You may choose to be licensed under the terms of the GNU
  6  * General Public License (GPL) Version 2, available from the file
  7  * COPYING in the main directory of this source tree, or the
  8  * OpenIB.org BSD license below:
  9  *
 10  *     Redistribution and use in source and binary forms, with or
 11  *     without modification, are permitted provided that the following
 12  *     conditions are met:
 13  *
 14  *      - Redistributions of source code must retain the above
 15  *        copyright notice, this list of conditions and the following
 16  *        disclaimer.
 17  *
 18  *      - Redistributions in binary form must reproduce the above
 19  *        copyright notice, this list of conditions and the following
 20  *        disclaimer in the documentation and/or other materials
 21  *        provided with the distribution.
 22  *
 23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 30  * SOFTWARE.
 31  */
 32 
 33 #ifndef IB_UMEM_H
 34 #define IB_UMEM_H
 35 
 36 #include <linux/list.h>
 37 #include <linux/scatterlist.h>
 38 #include <linux/workqueue.h>
 39 #include <rdma/ib_verbs.h>
 40 
 41 struct ib_ucontext;
 42 struct ib_umem_odp;
 43 
 44 struct ib_umem {
 45         struct ib_device       *ibdev;
 46         struct mm_struct       *owning_mm;
 47         size_t                  length;
 48         unsigned long           address;
 49         u32 writable : 1;
 50         u32 is_odp : 1;
 51         struct work_struct      work;
 52         struct sg_table sg_head;
 53         int             nmap;
 54         unsigned int    sg_nents;
 55 };
 56 
 57 /* Returns the offset of the umem start relative to the first page. */
 58 static inline int ib_umem_offset(struct ib_umem *umem)
 59 {
 60         return umem->address & ~PAGE_MASK;
 61 }
 62 
 63 static inline size_t ib_umem_num_pages(struct ib_umem *umem)
 64 {
 65         return (ALIGN(umem->address + umem->length, PAGE_SIZE) -
 66                 ALIGN_DOWN(umem->address, PAGE_SIZE)) >>
 67                PAGE_SHIFT;
 68 }
 69 
 70 #ifdef CONFIG_INFINIBAND_USER_MEM
 71 
 72 struct ib_umem *ib_umem_get(struct ib_device *device, unsigned long addr,
 73                             size_t size, int access);
 74 void ib_umem_release(struct ib_umem *umem);
 75 int ib_umem_page_count(struct ib_umem *umem);
 76 int ib_umem_copy_from(void *dst, struct ib_umem *umem, size_t offset,
 77                       size_t length);
 78 unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem,
 79                                      unsigned long pgsz_bitmap,
 80                                      unsigned long virt);
 81 
 82 #else /* CONFIG_INFINIBAND_USER_MEM */
 83 
 84 #include <linux/err.h>
 85 
 86 static inline struct ib_umem *ib_umem_get(struct ib_device *device,
 87                                           unsigned long addr, size_t size,
 88                                           int access)
 89 {
 90         return ERR_PTR(-EINVAL);
 91 }
 92 static inline void ib_umem_release(struct ib_umem *umem) { }
 93 static inline int ib_umem_page_count(struct ib_umem *umem) { return 0; }
 94 static inline int ib_umem_copy_from(void *dst, struct ib_umem *umem, size_t offset,
 95                                     size_t length) {
 96         return -EINVAL;
 97 }
 98 static inline int ib_umem_find_best_pgsz(struct ib_umem *umem,
 99                                          unsigned long pgsz_bitmap,
100                                          unsigned long virt) {
101         return -EINVAL;
102 }
103 
104 #endif /* CONFIG_INFINIBAND_USER_MEM */
105 
106 #endif /* IB_UMEM_H */
107 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp