cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

malloc.h (2314B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * malloc.h - NTFS kernel memory handling. Part of the Linux-NTFS project.
      4 *
      5 * Copyright (c) 2001-2005 Anton Altaparmakov
      6 */
      7
      8#ifndef _LINUX_NTFS_MALLOC_H
      9#define _LINUX_NTFS_MALLOC_H
     10
     11#include <linux/vmalloc.h>
     12#include <linux/slab.h>
     13#include <linux/highmem.h>
     14
     15/**
     16 * __ntfs_malloc - allocate memory in multiples of pages
     17 * @size:	number of bytes to allocate
     18 * @gfp_mask:	extra flags for the allocator
     19 *
     20 * Internal function.  You probably want ntfs_malloc_nofs()...
     21 *
     22 * Allocates @size bytes of memory, rounded up to multiples of PAGE_SIZE and
     23 * returns a pointer to the allocated memory.
     24 *
     25 * If there was insufficient memory to complete the request, return NULL.
     26 * Depending on @gfp_mask the allocation may be guaranteed to succeed.
     27 */
     28static inline void *__ntfs_malloc(unsigned long size, gfp_t gfp_mask)
     29{
     30	if (likely(size <= PAGE_SIZE)) {
     31		BUG_ON(!size);
     32		/* kmalloc() has per-CPU caches so is faster for now. */
     33		return kmalloc(PAGE_SIZE, gfp_mask & ~__GFP_HIGHMEM);
     34		/* return (void *)__get_free_page(gfp_mask); */
     35	}
     36	if (likely((size >> PAGE_SHIFT) < totalram_pages()))
     37		return __vmalloc(size, gfp_mask);
     38	return NULL;
     39}
     40
     41/**
     42 * ntfs_malloc_nofs - allocate memory in multiples of pages
     43 * @size:	number of bytes to allocate
     44 *
     45 * Allocates @size bytes of memory, rounded up to multiples of PAGE_SIZE and
     46 * returns a pointer to the allocated memory.
     47 *
     48 * If there was insufficient memory to complete the request, return NULL.
     49 */
     50static inline void *ntfs_malloc_nofs(unsigned long size)
     51{
     52	return __ntfs_malloc(size, GFP_NOFS | __GFP_HIGHMEM);
     53}
     54
     55/**
     56 * ntfs_malloc_nofs_nofail - allocate memory in multiples of pages
     57 * @size:	number of bytes to allocate
     58 *
     59 * Allocates @size bytes of memory, rounded up to multiples of PAGE_SIZE and
     60 * returns a pointer to the allocated memory.
     61 *
     62 * This function guarantees that the allocation will succeed.  It will sleep
     63 * for as long as it takes to complete the allocation.
     64 *
     65 * If there was insufficient memory to complete the request, return NULL.
     66 */
     67static inline void *ntfs_malloc_nofs_nofail(unsigned long size)
     68{
     69	return __ntfs_malloc(size, GFP_NOFS | __GFP_HIGHMEM | __GFP_NOFAIL);
     70}
     71
     72static inline void ntfs_free(void *addr)
     73{
     74	kvfree(addr);
     75}
     76
     77#endif /* _LINUX_NTFS_MALLOC_H */