FD.io VPP  v20.01-48-g3e0dafb74
Vector Packet Processing
physmem_funcs.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 /*
16  * physmem.h: virtual <-> physical memory mapping for VLIB buffers
17  *
18  * Copyright (c) 2008 Eliot Dresselhaus
19  *
20  * Permission is hereby granted, free of charge, to any person obtaining
21  * a copy of this software and associated documentation files (the
22  * "Software"), to deal in the Software without restriction, including
23  * without limitation the rights to use, copy, modify, merge, publish,
24  * distribute, sublicense, and/or sell copies of the Software, and to
25  * permit persons to whom the Software is furnished to do so, subject to
26  * the following conditions:
27  *
28  * The above copyright notice and this permission notice shall be
29  * included in all copies or substantial portions of the Software.
30  *
31  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38  */
39 
40 #ifndef included_vlib_physmem_funcs_h
41 #define included_vlib_physmem_funcs_h
42 
43 #include <vppinfra/clib.h>
44 #include <vppinfra/clib_error.h>
45 #include <vlib/physmem.h>
46 #include <vlib/main.h>
47 
50  uword size, u32 log2_page_sz,
51  u32 numa_node, u32 * map_index);
52 
54 
55 always_inline void *
57 {
59  return clib_pmalloc_alloc_aligned (pm, n_bytes, alignment);
60 }
61 
62 always_inline void *
64  uword alignment, u32 numa_node)
65 {
67  return clib_pmalloc_alloc_aligned_on_numa (pm, n_bytes, alignment,
68  numa_node);
69 }
70 
71 /* By default allocate I/O memory with cache line alignment. */
72 always_inline void *
74 {
76 }
77 
78 always_inline void *
80  uword n_bytes, uword alignment)
81 {
83  vlib_physmem_map_t *map = vlib_physmem_get_map (vm, physmem_map_index);
84  return clib_pmalloc_alloc_from_arena (pm, map->base, n_bytes,
86 }
87 
88 always_inline void
90 {
91  if (p)
93 }
94 
97 {
99  return clib_pmalloc_get_page_index (pm, mem);
100 }
101 
104 {
106  return clib_pmalloc_get_pa (pm, mem);
107 }
108 
111 {
112  return clib_error_return (0, "unknown error");
113 }
114 
115 #endif /* included_vlib_physmem_funcs_h */
116 
117 /*
118  * fd.io coding-style-patch-verification: ON
119  *
120  * Local Variables:
121  * eval: (c-set-style "gnu")
122  * End:
123  */
static void * vlib_physmem_alloc_aligned_on_numa(vlib_main_t *vm, uword n_bytes, uword alignment, u32 numa_node)
Definition: physmem_funcs.h:63
vlib_physmem_main_t physmem_main
Definition: main.h:155
static void * vlib_physmem_alloc(vlib_main_t *vm, uword n_bytes)
Definition: physmem_funcs.h:73
unsigned long u64
Definition: types.h:89
static clib_error_t * vlib_physmem_last_error(struct vlib_main_t *vm)
void * clib_pmalloc_alloc_aligned_on_numa(clib_pmalloc_main_t *pm, uword size, uword align, u32 numa_node)
Definition: pmalloc.c:508
clib_error_t * vlib_physmem_init(vlib_main_t *vm)
Definition: physmem.c:94
static u32 clib_pmalloc_get_page_index(clib_pmalloc_main_t *pm, void *va)
Definition: pmalloc.h:131
void * clib_pmalloc_alloc_aligned(clib_pmalloc_main_t *pm, uword size, uword align)
Definition: pmalloc.c:515
clib_pmalloc_main_t * pmalloc_main
Definition: physmem.h:64
static void * vlib_physmem_alloc_aligned(vlib_main_t *vm, uword n_bytes, uword alignment)
Definition: physmem_funcs.h:56
#define clib_error_return(e, args...)
Definition: error.h:99
unsigned int u32
Definition: types.h:88
void * clib_pmalloc_alloc_from_arena(clib_pmalloc_main_t *pm, void *arena_va, uword size, uword align)
Definition: pmalloc.c:522
u64 size
Definition: vhost_user.h:140
clib_error_t * vlib_physmem_shared_map_create(vlib_main_t *vm, char *name, uword size, u32 log2_page_sz, u32 numa_node, u32 *map_index)
Definition: physmem.c:42
#define always_inline
Definition: ipsec.h:28
vlib_main_t * vm
Definition: in2out_ed.c:1810
static void vlib_physmem_free(vlib_main_t *vm, void *p)
Definition: physmem_funcs.h:89
static u64 vlib_physmem_get_page_index(vlib_main_t *vm, void *mem)
Definition: physmem_funcs.h:96
string name[64]
Definition: ip.api:44
vlib_physmem_map_t * vlib_physmem_get_map(vlib_main_t *vm, u32 index)
Definition: physmem.c:87
void clib_pmalloc_free(clib_pmalloc_main_t *pm, void *va)
Definition: pmalloc.c:552
static u64 vlib_physmem_get_pa(vlib_main_t *vm, void *mem)
u64 uword
Definition: types.h:112
void * mem
static void * vlib_physmem_alloc_from_map(vlib_main_t *vm, u32 physmem_map_index, uword n_bytes, uword alignment)
Definition: physmem_funcs.h:79
#define CLIB_CACHE_LINE_BYTES
Definition: cache.h:59
static uword clib_pmalloc_get_pa(clib_pmalloc_main_t *pm, void *va)
Definition: pmalloc.h:149