42#include <linux/limits.h>
54#ifdef CONFIG_DRM_DEBUG_MM
61#ifdef CONFIG_DRM_DEBUG_MM
62#define DRM_MM_BUG_ON(expr) BUG_ON(expr)
64#define DRM_MM_BUG_ON(expr) BUILD_BUG_ON_INVALID(expr)
183#define DRM_MM_NODE_ALLOCATED_BIT 0
184#define DRM_MM_NODE_SCANNED_BIT 1
185#ifdef CONFIG_DRM_DEBUG_MM
266static inline bool drm_mm_node_allocated(
const struct drm_mm_node *
node)
284static inline bool drm_mm_initialized(
const struct drm_mm *mm)
303 return node->hole_size;
306static inline u64 __drm_mm_hole_node_start(
const struct drm_mm_node *hole_node)
308 return hole_node->
start + hole_node->
size;
322static inline u64 drm_mm_hole_node_start(
const struct drm_mm_node *hole_node)
325 return __drm_mm_hole_node_start(hole_node);
328static inline u64 __drm_mm_hole_node_end(
const struct drm_mm_node *hole_node)
344static inline u64 drm_mm_hole_node_end(
const struct drm_mm_node *hole_node)
346 return __drm_mm_hole_node_end(hole_node);
361#define drm_mm_nodes(mm) (&(mm)->head_node.node_list)
371#define drm_mm_for_each_node(entry, mm) \
372 list_for_each_entry(entry, drm_mm_nodes(mm), node_list)
383#define drm_mm_for_each_node_safe(entry, next, mm) \
384 list_for_each_entry_safe(entry, next, drm_mm_nodes(mm), node_list)
402#define drm_mm_for_each_hole(pos, mm, hole_start, hole_end) \
403 for (pos = list_first_entry(&(mm)->hole_stack, \
404 typeof(*pos), hole_stack); \
405 &pos->hole_stack != &(mm)->hole_stack ? \
406 hole_start = drm_mm_hole_node_start(pos), \
407 hole_end = hole_start + pos->hole_size, \
409 pos = list_next_entry(pos, hole_stack))
466static inline int drm_mm_insert_node(
struct drm_mm *mm,
470 return drm_mm_insert_node_generic(mm,
node,
size, 0, 0, 0);
485static inline bool drm_mm_clean(
const struct drm_mm *mm)
510#define drm_mm_for_each_node_in_range(node__, mm__, start__, end__) \
511 for (node__ = __drm_mm_interval_first((mm__), (start__), (end__)-1); \
512 node__->start < (end__); \
513 node__ = list_next_entry(node__, node_list))
540static inline void drm_mm_scan_init(
struct drm_mm_scan *scan,
#define U64_MAX
Definition limits.h:25
#define list_next_entry(pos, member)
Definition list.h:27
#define BIT(nr)
Definition bitops.h:112
#define test_bit(nr, addr)
Definition bitops.h:124
size_t size
Definition drm_bridge.h:1299
void drm_mm_scan_init_with_range(struct drm_mm_scan *scan, struct drm_mm *mm, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, enum drm_mm_insert_mode mode)
void drm_mm_takedown(struct drm_mm *mm)
#define drm_mm_nodes(mm)
Definition drm_mm.h:361
struct drm_mm_node * drm_mm_scan_color_evict(struct drm_mm_scan *scan)
#define DRM_MM_NODE_ALLOCATED_BIT
Definition drm_mm.h:183
bool drm_mm_scan_remove_block(struct drm_mm_scan *scan, struct drm_mm_node *node)
bool drm_mm_scan_add_block(struct drm_mm_scan *scan, struct drm_mm_node *node)
void drm_mm_remove_node(struct drm_mm_node *node)
drm_mm_insert_mode
Definition drm_mm.h:78
@ DRM_MM_INSERT_EVICT
Definition drm_mm.h:121
@ DRM_MM_INSERT_HIGH
Definition drm_mm.h:109
@ DRM_MM_INSERT_LOWEST
Definition drm_mm.h:153
@ DRM_MM_INSERT_BEST
Definition drm_mm.h:87
@ DRM_MM_INSERT_HIGHEST
Definition drm_mm.h:142
@ DRM_MM_INSERT_ONCE
Definition drm_mm.h:131
@ DRM_MM_INSERT_LOW
Definition drm_mm.h:97
struct drm_mm_node * __drm_mm_interval_first(const struct drm_mm *mm, u64 start, u64 last)
void drm_mm_print(const struct drm_mm *mm, struct drm_printer *p)
int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node)
int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, enum drm_mm_insert_mode mode)
void drm_mm_init(struct drm_mm *mm, u64 start, u64 size)
#define DRM_MM_BUG_ON(expr)
Definition drm_mm.h:64
void int node
Definition kthread.h:31
uint64_t u64
Definition kernel.h:17
#define READ_ONCE(x)
Definition kernel.h:605
u32 depot_stack_handle_t
Definition stackdepot.h:15
struct list_head hole_stack
Definition drm_mm.h:175
u64 start
Definition drm_mm.h:169
struct rb_node rb_hole_size
Definition drm_mm.h:177
unsigned long color
Definition drm_mm.h:167
unsigned long flags
Definition drm_mm.h:182
struct rb_node rb
Definition drm_mm.h:176
u64 subtree_max_hole
Definition drm_mm.h:181
struct drm_mm * mm
Definition drm_mm.h:173
u64 hole_size
Definition drm_mm.h:180
u64 size
Definition drm_mm.h:171
struct rb_node rb_hole_addr
Definition drm_mm.h:178
struct list_head node_list
Definition drm_mm.h:174
u64 __subtree_last
Definition drm_mm.h:179
u64 hit_start
Definition drm_mm.h:246
enum drm_mm_insert_mode mode
Definition drm_mm.h:250
u64 hit_end
Definition drm_mm.h:247
u64 range_start
Definition drm_mm.h:243
u64 alignment
Definition drm_mm.h:240
struct drm_mm * mm
Definition drm_mm.h:237
unsigned long color
Definition drm_mm.h:249
u64 size
Definition drm_mm.h:239
u64 remainder_mask
Definition drm_mm.h:241
u64 range_end
Definition drm_mm.h:244
struct list_head hole_stack
Definition drm_mm.h:214
struct rb_root holes_addr
Definition drm_mm.h:221
struct drm_mm_node head_node
Definition drm_mm.h:217
void(* color_adjust)(const struct drm_mm_node *node, unsigned long color, u64 *start, u64 *end)
Definition drm_mm.h:208
struct rb_root_cached interval_tree
Definition drm_mm.h:219
unsigned long scan_active
Definition drm_mm.h:223
struct rb_root_cached holes_size
Definition drm_mm.h:220
Definition drm_print.h:181
struct list_head * next
Definition list.h:12
Definition rbtree_types.h:21
Definition rbtree_types.h:48
Definition rbtree_types.h:34
TTY * last
Definition tty.cpp:48