/* Create a remote heap dynamically. Note that no memory for the blocks are allocated. It will upon the first allocation  */
rh_info_t* rh_create(unsigned int alignment)
/* Create a remote heap dynamically. Note that no memory for the blocks are allocated. It will upon the first allocation  */
rh_info_t* rh_create(unsigned int alignment)
{
	rh_info_t *info;
	if ((alignment & (alignment - 1)) != 0)
		return ERR_PTR(-EINVAL);
	info = kmalloc(sizeof(*info), GFP_ATOMIC);
	if (info == NULL)
		return ERR_PTR(-ENOMEM);
	info->alignment = alignment;
	info->block = NULL;
	info->max_blocks = 0;
	info->empty_slots = 0;
	info->flags = 0;
	INIT_LIST_HEAD(&info->empty_list);
	INIT_LIST_HEAD(&info->free_list);
	INIT_LIST_HEAD(&info->taken_list);
	return info;
}