Lines Matching refs:p
42 static struct mem_block *split_block(struct mem_block *p, int start, int size, in split_block() argument
46 if (start > p->start) { in split_block()
52 newblock->size = p->size - (start - p->start); in split_block()
54 newblock->next = p->next; in split_block()
55 newblock->prev = p; in split_block()
56 p->next->prev = newblock; in split_block()
57 p->next = newblock; in split_block()
58 p->size -= newblock->size; in split_block()
59 p = newblock; in split_block()
63 if (size < p->size) { in split_block()
69 newblock->size = p->size - size; in split_block()
71 newblock->next = p->next; in split_block()
72 newblock->prev = p; in split_block()
73 p->next->prev = newblock; in split_block()
74 p->next = newblock; in split_block()
75 p->size = size; in split_block()
80 p->file_priv = file_priv; in split_block()
81 return p; in split_block()
87 struct mem_block *p; in alloc_block() local
90 list_for_each(p, heap) { in alloc_block()
91 int start = (p->start + mask) & ~mask; in alloc_block()
92 if (p->file_priv == NULL && start + size <= p->start + p->size) in alloc_block()
93 return split_block(p, start, size, file_priv); in alloc_block()
101 struct mem_block *p; in find_block() local
103 list_for_each(p, heap) in find_block()
104 if (p->start == start) in find_block()
105 return p; in find_block()
110 static void free_block(struct mem_block *p) in free_block() argument
112 p->file_priv = NULL; in free_block()
117 if (p->next->file_priv == NULL) { in free_block()
118 struct mem_block *q = p->next; in free_block()
119 p->size += q->size; in free_block()
120 p->next = q->next; in free_block()
121 p->next->prev = p; in free_block()
125 if (p->prev->file_priv == NULL) { in free_block()
126 struct mem_block *q = p->prev; in free_block()
127 q->size += p->size; in free_block()
128 q->next = p->next; in free_block()
130 kfree(p); in free_block()
163 struct mem_block *p; in radeon_mem_release() local
168 list_for_each(p, heap) { in radeon_mem_release()
169 if (p->file_priv == file_priv) in radeon_mem_release()
170 p->file_priv = NULL; in radeon_mem_release()
176 list_for_each(p, heap) { in radeon_mem_release()
177 while (p->file_priv == NULL && p->next->file_priv == NULL) { in radeon_mem_release()
178 struct mem_block *q = p->next; in radeon_mem_release()
179 p->size += q->size; in radeon_mem_release()
180 p->next = q->next; in radeon_mem_release()
181 p->next->prev = p; in radeon_mem_release()
191 struct mem_block *p; in radeon_mem_takedown() local
196 for (p = (*heap)->next; p != *heap;) { in radeon_mem_takedown()
197 struct mem_block *q = p; in radeon_mem_takedown()
198 p = p->next; in radeon_mem_takedown()