FD.io VPP  v20.01-9-g24064d02a
Vector Packet Processing
svm.h
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * svm.h - shared VM allocation, mmap(...MAP_FIXED...)
4  * brain police
5  *
6  * Copyright (c) 2009 Cisco and/or its affiliates.
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at:
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *------------------------------------------------------------------
19  */
20 
21 #ifndef __included_svm_h__
22 #define __included_svm_h__
23 
24 #include <pthread.h>
25 #include <vppinfra/clib.h>
26 #include <vppinfra/mem.h>
27 #include <svm/svm_common.h>
28 
29 #define MMAP_PAGESIZE (clib_mem_get_page_size())
30 
31 static inline void *
33 {
34  u8 *oldheap;
36  u8 *rv;
37 
38  pthread_mutex_lock (&rp->mutex);
39  oldheap = clib_mem_set_heap (rp->data_heap);
40  rv = clib_mem_alloc (size);
41  clib_mem_set_heap (oldheap);
42  pthread_mutex_unlock (&rp->mutex);
43  return (rv);
44 }
45 
46 static inline void *
48  uword size, uword align, uword offset)
49 {
50  u8 *oldheap;
52  u8 *rv;
53 
54  pthread_mutex_lock (&rp->mutex);
55  oldheap = clib_mem_set_heap (rp->data_heap);
56  rv = clib_mem_alloc_aligned_at_offset (size, align, offset,
57  1 /* yes, call os_out_of_memory */ );
58  clib_mem_set_heap (oldheap);
59  pthread_mutex_unlock (&rp->mutex);
60  return (rv);
61 }
62 
63 static inline void
64 svm_mem_free (svm_region_t * rp, void *ptr)
65 {
66  u8 *oldheap;
68 
69  pthread_mutex_lock (&rp->mutex);
70  oldheap = clib_mem_set_heap (rp->data_heap);
71  clib_mem_free (ptr);
72  clib_mem_set_heap (oldheap);
73  pthread_mutex_unlock (&rp->mutex);
74 
75 }
76 
77 static inline void *
79 {
80  u8 *oldheap;
81  oldheap = clib_mem_set_heap (rp->region_heap);
82  return ((void *) oldheap);
83 }
84 
85 static inline void *
87 {
88  u8 *oldheap;
89  oldheap = clib_mem_set_heap (rp->data_heap);
90  return ((void *) oldheap);
91 }
92 
93 static inline void
94 svm_pop_heap (void *oldheap)
95 {
96  clib_mem_set_heap (oldheap);
97 }
98 
99 #endif /* __included_svm_h__ */
100 
101 /*
102  * fd.io coding-style-patch-verification: ON
103  *
104  * Local Variables:
105  * eval: (c-set-style "gnu")
106  * End:
107  */
static void svm_pop_heap(void *oldheap)
Definition: svm.h:94
static void * clib_mem_alloc_aligned_at_offset(uword size, uword align, uword align_offset, int os_out_of_memory_on_failure)
Definition: mem.h:113
unsigned char u8
Definition: types.h:56
static void svm_mem_free(svm_region_t *rp, void *ptr)
Definition: svm.h:64
static void * svm_push_data_heap(svm_region_t *rp)
Definition: svm.h:86
#define SVM_FLAGS_MHEAP
Definition: svm_common.h:27
u64 size
Definition: vhost_user.h:140
static void * svm_mem_alloc_aligned_at_offset(svm_region_t *rp, uword size, uword align, uword offset)
Definition: svm.h:47
static void * svm_mem_alloc(svm_region_t *rp, uword size)
Definition: svm.h:32
static void * svm_push_pvt_heap(svm_region_t *rp)
Definition: svm.h:78
static void * clib_mem_set_heap(void *heap)
Definition: mem.h:283
#define ASSERT(truth)
static void clib_mem_free(void *p)
Definition: mem.h:226
static void * clib_mem_alloc(uword size)
Definition: mem.h:153
template key/value backing page structure
Definition: bihash_doc.h:44
u64 uword
Definition: types.h:112
void * region_heap
Definition: svm_common.h:44
void * data_heap
Definition: svm_common.h:46
uword flags
Definition: svm_common.h:41
pthread_mutex_t mutex
Definition: svm_common.h:37