Add kmalloc failover to vmalloc
[lttng-modules.git] / lib / prio_heap / lttng_prio_heap.c
index 5bbd0793b8a6d5ca2a7a57772a88de9bc5eac934..01ed69f2cac1a52b62a794e22ca5a43f20a798b9 100644 (file)
  *
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
  */
 
 #include <linux/slab.h>
-#include "lttng_prio_heap.h"
+#include <lib/prio_heap/lttng_prio_heap.h>
+#include <wrapper/vmalloc.h>
 
 #ifdef DEBUG_HEAP
 void lttng_check_heap(const struct lttng_ptr_heap *heap)
@@ -62,12 +71,12 @@ int heap_grow(struct lttng_ptr_heap *heap, size_t new_len)
                return 0;
 
        heap->alloc_len = max_t(size_t, new_len, heap->alloc_len << 1);
-       new_ptrs = kmalloc(heap->alloc_len * sizeof(void *), heap->gfpmask);
+       new_ptrs = lttng_kvmalloc(heap->alloc_len * sizeof(void *), heap->gfpmask);
        if (!new_ptrs)
                return -ENOMEM;
        if (heap->ptrs)
                memcpy(new_ptrs, heap->ptrs, heap->len * sizeof(void *));
-       kfree(heap->ptrs);
+       lttng_kvfree(heap->ptrs);
        heap->ptrs = new_ptrs;
        return 0;
 }
@@ -91,6 +100,7 @@ int lttng_heap_init(struct lttng_ptr_heap *heap, size_t alloc_len,
        heap->len = 0;
        heap->alloc_len = 0;
        heap->gt = gt;
+       heap->gfpmask = gfpmask;
        /*
         * Minimum size allocated is 1 entry to ensure memory allocation
         * never fails within heap_replace_max.
@@ -100,7 +110,7 @@ int lttng_heap_init(struct lttng_ptr_heap *heap, size_t alloc_len,
 
 void lttng_heap_free(struct lttng_ptr_heap *heap)
 {
-       kfree(heap->ptrs);
+       lttng_kvfree(heap->ptrs);
 }
 
 static void heapify(struct lttng_ptr_heap *heap, size_t i)
This page took 0.024808 seconds and 4 git commands to generate.