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

kmem.h (1936B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
      4 * All Rights Reserved.
      5 */
      6#ifndef __XFS_SUPPORT_KMEM_H__
      7#define __XFS_SUPPORT_KMEM_H__
      8
      9#include <linux/slab.h>
     10#include <linux/sched.h>
     11#include <linux/mm.h>
     12#include <linux/vmalloc.h>
     13
     14/*
     15 * General memory allocation interfaces
     16 */
     17
     18typedef unsigned __bitwise xfs_km_flags_t;
     19#define KM_NOFS		((__force xfs_km_flags_t)0x0004u)
     20#define KM_MAYFAIL	((__force xfs_km_flags_t)0x0008u)
     21#define KM_ZERO		((__force xfs_km_flags_t)0x0010u)
     22#define KM_NOLOCKDEP	((__force xfs_km_flags_t)0x0020u)
     23
     24/*
     25 * We use a special process flag to avoid recursive callbacks into
     26 * the filesystem during transactions.  We will also issue our own
     27 * warnings, so we explicitly skip any generic ones (silly of us).
     28 */
     29static inline gfp_t
     30kmem_flags_convert(xfs_km_flags_t flags)
     31{
     32	gfp_t	lflags;
     33
     34	BUG_ON(flags & ~(KM_NOFS | KM_MAYFAIL | KM_ZERO | KM_NOLOCKDEP));
     35
     36	lflags = GFP_KERNEL | __GFP_NOWARN;
     37	if (flags & KM_NOFS)
     38		lflags &= ~__GFP_FS;
     39
     40	/*
     41	 * Default page/slab allocator behavior is to retry for ever
     42	 * for small allocations. We can override this behavior by using
     43	 * __GFP_RETRY_MAYFAIL which will tell the allocator to retry as long
     44	 * as it is feasible but rather fail than retry forever for all
     45	 * request sizes.
     46	 */
     47	if (flags & KM_MAYFAIL)
     48		lflags |= __GFP_RETRY_MAYFAIL;
     49
     50	if (flags & KM_ZERO)
     51		lflags |= __GFP_ZERO;
     52
     53	if (flags & KM_NOLOCKDEP)
     54		lflags |= __GFP_NOLOCKDEP;
     55
     56	return lflags;
     57}
     58
     59extern void *kmem_alloc(size_t, xfs_km_flags_t);
     60static inline void  kmem_free(const void *ptr)
     61{
     62	kvfree(ptr);
     63}
     64
     65
     66static inline void *
     67kmem_zalloc(size_t size, xfs_km_flags_t flags)
     68{
     69	return kmem_alloc(size, flags | KM_ZERO);
     70}
     71
     72/*
     73 * Zone interfaces
     74 */
     75static inline struct page *
     76kmem_to_page(void *addr)
     77{
     78	if (is_vmalloc_addr(addr))
     79		return vmalloc_to_page(addr);
     80	return virt_to_page(addr);
     81}
     82
     83#endif /* __XFS_SUPPORT_KMEM_H__ */