Commit beed1ce2 authored by Hans de Goede's avatar Hans de Goede Committed by Greg Kroah-Hartman
Browse files

staging: vboxvideo: Add vbox_bo_k[un]map helper functions



Add vbox_bo_k[un]map helper functions instead of having code directly
poking struct vbox_bo internals.

While touch neighboring code anyways also fix a return -PTR_ERR(info),
which should be return PTR_ERR(info).

Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cfc1fc63
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -269,6 +269,8 @@ static inline void vbox_bo_unreserve(struct vbox_bo *bo)
void vbox_ttm_placement(struct vbox_bo *bo, int domain);
int vbox_bo_push_sysram(struct vbox_bo *bo);
int vbox_mmap(struct file *filp, struct vm_area_struct *vma);
void *vbox_bo_kmap(struct vbox_bo *bo);
void vbox_bo_kunmap(struct vbox_bo *bo);

/* vbox_prime.c */
int vbox_gem_prime_pin(struct drm_gem_object *obj);
+7 −12
Original line number Diff line number Diff line
@@ -108,15 +108,14 @@ static int vboxfb_create(struct drm_fb_helper *helper,
	if (ret)
		return ret;

	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
	if (ret) {
		DRM_ERROR("failed to kmap fbcon\n");
		return ret;
	}

	info = drm_fb_helper_alloc_fbi(helper);
	if (IS_ERR(info))
		return -PTR_ERR(info);
		return PTR_ERR(info);

	info->screen_size = size;
	info->screen_base = (char __iomem *)vbox_bo_kmap(bo);
	if (IS_ERR(info->screen_base))
		return PTR_ERR(info->screen_base);

	info->par = fbdev;

@@ -150,9 +149,6 @@ static int vboxfb_create(struct drm_fb_helper *helper,
	info->fix.smem_start = info->apertures->ranges[0].base + gpu_addr;
	info->fix.smem_len = vbox->available_vram_size - gpu_addr;

	info->screen_base = (char __iomem *)bo->kmap.virtual;
	info->screen_size = size;

#ifdef CONFIG_DRM_KMS_FB_HELPER
	info->fbdefio = &vbox_defio;
	fb_deferred_io_init(info);
@@ -184,8 +180,7 @@ void vbox_fbdev_fini(struct vbox_private *vbox)
	if (afb->obj) {
		struct vbox_bo *bo = gem_to_vbox_bo(afb->obj);

		if (bo->kmap.virtual)
			ttm_bo_kunmap(&bo->kmap);
		vbox_bo_kunmap(bo);

		if (bo->pin_count)
			vbox_bo_unpin(bo);
+27 −1
Original line number Diff line number Diff line
@@ -418,8 +418,10 @@ int vbox_bo_push_sysram(struct vbox_bo *bo)
	if (bo->pin_count)
		return 0;

	if (bo->kmap.virtual)
	if (bo->kmap.virtual) {
		ttm_bo_kunmap(&bo->kmap);
		bo->kmap.virtual = NULL;
	}

	vbox_ttm_placement(bo, TTM_PL_FLAG_SYSTEM);

@@ -448,3 +450,27 @@ int vbox_mmap(struct file *filp, struct vm_area_struct *vma)

	return ttm_bo_mmap(filp, vma, &vbox->ttm.bdev);
}

void *vbox_bo_kmap(struct vbox_bo *bo)
{
	int ret;

	if (bo->kmap.virtual)
		return bo->kmap.virtual;

	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
	if (ret) {
		DRM_ERROR("Error kmapping bo: %d\n", ret);
		return NULL;
	}

	return bo->kmap.virtual;
}

void vbox_bo_kunmap(struct vbox_bo *bo)
{
	if (bo->kmap.virtual) {
		ttm_bo_kunmap(&bo->kmap);
		bo->kmap.virtual = NULL;
	}
}