Entity*
EntityRepository::internal_allocate_entity(EntityKey entity_key)
{
  Entity* new_entity = allocate_entity(m_use_pool);
  new_entity->set_key(entity_key);
#ifdef SIERRA_MIGRATION
  fmwk_attributes* fmwk_attrs = allocate_fmwk_attr(m_use_pool);
  new_entity->m_fmwk_attrs = fmwk_attrs;
#endif
  return new_entity;
}
/* Open an IO entity */
int io_open(uintptr_t dev_handle, const uintptr_t spec, uintptr_t *handle)
{
	int result;
	assert((spec != (uintptr_t)NULL) && (handle != NULL));
	assert(is_valid_dev(dev_handle));

	io_dev_info_t *dev = (io_dev_info_t *)dev_handle;
	io_entity_t *entity;

	result = allocate_entity(&entity);

	if (result == 0) {
		assert(dev->funcs->open != NULL);
		result = dev->funcs->open(dev, spec, entity);

		if (result == 0) {
			entity->dev_handle = dev;
			set_handle(handle, entity);
		} else
			free_entity(entity);
	}
	return result;
}