#include <linux/kmemleak.h>
#include <linux/module.h>
#include <linux/sizes.h>
#include <drm/drm_buddy.h>
static struct kmem_cache *slab_blocks;
static struct drm_buddy_block *drm_block_alloc(struct drm_buddy *mm,
struct drm_buddy_block *parent,
unsigned int order,
u64 offset)
{ … }
static void drm_block_free(struct drm_buddy *mm,
struct drm_buddy_block *block)
{ … }
static void list_insert_sorted(struct drm_buddy *mm,
struct drm_buddy_block *block)
{ … }
static void clear_reset(struct drm_buddy_block *block)
{ … }
static void mark_cleared(struct drm_buddy_block *block)
{ … }
static void mark_allocated(struct drm_buddy_block *block)
{ … }
static void mark_free(struct drm_buddy *mm,
struct drm_buddy_block *block)
{ … }
static void mark_split(struct drm_buddy_block *block)
{ … }
static inline bool overlaps(u64 s1, u64 e1, u64 s2, u64 e2)
{ … }
static inline bool contains(u64 s1, u64 e1, u64 s2, u64 e2)
{ … }
static struct drm_buddy_block *
__get_buddy(struct drm_buddy_block *block)
{ … }
static unsigned int __drm_buddy_free(struct drm_buddy *mm,
struct drm_buddy_block *block,
bool force_merge)
{ … }
static int __force_merge(struct drm_buddy *mm,
u64 start,
u64 end,
unsigned int min_order)
{ … }
int drm_buddy_init(struct drm_buddy *mm, u64 size, u64 chunk_size)
{ … }
EXPORT_SYMBOL(…);
void drm_buddy_fini(struct drm_buddy *mm)
{ … }
EXPORT_SYMBOL(…);
static int split_block(struct drm_buddy *mm,
struct drm_buddy_block *block)
{ … }
struct drm_buddy_block *
drm_get_buddy(struct drm_buddy_block *block)
{ … }
EXPORT_SYMBOL(…);
void drm_buddy_free_block(struct drm_buddy *mm,
struct drm_buddy_block *block)
{ … }
EXPORT_SYMBOL(…);
static void __drm_buddy_free_list(struct drm_buddy *mm,
struct list_head *objects,
bool mark_clear,
bool mark_dirty)
{ … }
static void drm_buddy_free_list_internal(struct drm_buddy *mm,
struct list_head *objects)
{ … }
void drm_buddy_free_list(struct drm_buddy *mm,
struct list_head *objects,
unsigned int flags)
{ … }
EXPORT_SYMBOL(…);
static bool block_incompatible(struct drm_buddy_block *block, unsigned int flags)
{ … }
static struct drm_buddy_block *
__alloc_range_bias(struct drm_buddy *mm,
u64 start, u64 end,
unsigned int order,
unsigned long flags,
bool fallback)
{ … }
static struct drm_buddy_block *
__drm_buddy_alloc_range_bias(struct drm_buddy *mm,
u64 start, u64 end,
unsigned int order,
unsigned long flags)
{ … }
static struct drm_buddy_block *
get_maxblock(struct drm_buddy *mm, unsigned int order,
unsigned long flags)
{ … }
static struct drm_buddy_block *
alloc_from_freelist(struct drm_buddy *mm,
unsigned int order,
unsigned long flags)
{ … }
static int __alloc_range(struct drm_buddy *mm,
struct list_head *dfs,
u64 start, u64 size,
struct list_head *blocks,
u64 *total_allocated_on_err)
{ … }
static int __drm_buddy_alloc_range(struct drm_buddy *mm,
u64 start,
u64 size,
u64 *total_allocated_on_err,
struct list_head *blocks)
{ … }
static int __alloc_contig_try_harder(struct drm_buddy *mm,
u64 size,
u64 min_block_size,
struct list_head *blocks)
{ … }
int drm_buddy_block_trim(struct drm_buddy *mm,
u64 new_size,
struct list_head *blocks)
{ … }
EXPORT_SYMBOL(…);
static struct drm_buddy_block *
__drm_buddy_alloc_blocks(struct drm_buddy *mm,
u64 start, u64 end,
unsigned int order,
unsigned long flags)
{ … }
int drm_buddy_alloc_blocks(struct drm_buddy *mm,
u64 start, u64 end, u64 size,
u64 min_block_size,
struct list_head *blocks,
unsigned long flags)
{ … }
EXPORT_SYMBOL(…);
void drm_buddy_block_print(struct drm_buddy *mm,
struct drm_buddy_block *block,
struct drm_printer *p)
{ … }
EXPORT_SYMBOL(…);
void drm_buddy_print(struct drm_buddy *mm, struct drm_printer *p)
{ … }
EXPORT_SYMBOL(…);
static void drm_buddy_module_exit(void)
{ … }
static int __init drm_buddy_module_init(void)
{ … }
module_init(…) …;
module_exit(drm_buddy_module_exit);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;