list = &mm->free_list[order];if (list_empty(list)) return -ENOSPC;list_for_each_entry_reverse(block, list, link) { /* Allocate blocks traversing RHS */ rhs_offset = drm_buddy_block_offset(block); err = __drm_buddy_alloc_range(mm, rhs_offset, size, &filled, blocks); if (!err || err != -ENOSPC) return err; lhs_size = max((size - filled), min_block_size); if (!IS_ALIGNED(lhs_size, min_block_size)) lhs_size = round_up(lhs_size, min_block_size); /* Allocate blocks traversing LHS */ lhs_offset = drm_buddy_block_offset(block) - lhs_size; err = __drm_buddy_alloc_range(mm, lhs_offset, lhs_size, NULL, &blocks_lhs); if (!err) { list_splice(&blocks_lhs, blocks); return 0; }}