--- a/sys/dev/drm/drm_gem.c +++ b/sys/dev/drm/drm_gem.c @@ -138,18 +138,21 @@ mm = kzalloc(sizeof(struct drm_gem_mm), GFP_KERNEL); vma_offset_manager = kzalloc(sizeof(*vma_offset_manager), GFP_KERNEL); - if (!vma_offset_manager) { + if (!mm || !vma_offset_manager) { + kfree(vma_offset_manager); + kfree(mm); DRM_ERROR("out of memory\n"); return -ENOMEM; } - dev->mm_private = mm; - if (drm_ht_create(&mm->offset_hash, 12)) { + kfree(vma_offset_manager); kfree(mm); return -ENOMEM; } + dev->mm_private = mm; + mm->idxunr = new_unrhdr(0, DRM_GEM_MAX_IDX, NULL); drm_mm_init(&mm->offset_manager, DRM_FILE_PAGE_OFFSET_START, DRM_FILE_PAGE_OFFSET_SIZE);