<def f='src/src/sys/external/bsd/drm2/dist/drm/radeon/radeon.h' l='523' ll='539'/>
<size>224</size>
<doc f='src/src/sys/external/bsd/drm2/dist/drm/radeon/radeon.h' l='500'>/* sub-allocation manager, it has to be protected by another lock.
 * By conception this is an helper for other part of the driver
 * like the indirect buffer or semaphore, which both have their
 * locking.
 *
 * Principe is simple, we keep a list of sub allocation in offset
 * order (first entry has offset == 0, last entry has the highest
 * offset).
 *
 * When allocating new object we first check if there is room at
 * the end total_size - (last_object_offset + last_object_size) &gt;=
 * alloc_size. If so we allocate new object there.
 *
 * When there is not enough room at the end, we start waiting for
 * each sub object until we reach object_offset+object_size &gt;=
 * alloc_size, this object then become the sub object we return.
 *
 * Alignment can&apos;t be bigger than page size.
 *
 * Hole are not considered for allocation to keep things simple.
 * Assumption is that there won&apos;t be hole (all object on same
 * alignment).
 */</doc>
<mbr r='radeon_sa_manager::wq_lock' o='0' t='spinlock_t'/>
<mbr r='radeon_sa_manager::wq' o='64' t='drm_waitqueue_t'/>
<mbr r='radeon_sa_manager::bo' o='256' t='struct radeon_bo *'/>
<mbr r='radeon_sa_manager::hole' o='320' t='struct list_head *'/>
<mbr r='radeon_sa_manager::flist' o='384' t='struct list_head [8]'/>
<mbr r='radeon_sa_manager::olist' o='1408' t='struct list_head'/>
<mbr r='radeon_sa_manager::size' o='1536' t='unsigned int'/>
<mbr r='radeon_sa_manager::gpu_addr' o='1600' t='__uint64_t'/>
<mbr r='radeon_sa_manager::cpu_ptr' o='1664' t='void *'/>
<mbr r='radeon_sa_manager::domain' o='1728' t='__uint32_t'/>
<mbr r='radeon_sa_manager::align' o='1760' t='__uint32_t'/>
