Skip to content

Commit

Permalink
drm/udl: call begin/end cpu access at more appropriate time
Browse files Browse the repository at this point in the history
We need to call these before we transfer the damaged areas to the device
not before/after we setup the long lived vmaps.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
  • Loading branch information
Dave Airlie authored and Daniel Vetter committed Aug 17, 2012
1 parent ec6f1bb commit 32ecd24
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 9 deletions.
22 changes: 20 additions & 2 deletions drivers/gpu/drm/udl/udl_fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/fb.h>
#include <linux/dma-buf.h>

#include "drmP.h"
#include "drm.h"
Expand Down Expand Up @@ -377,16 +378,33 @@ static int udl_user_framebuffer_dirty(struct drm_framebuffer *fb,
{
struct udl_framebuffer *ufb = to_udl_fb(fb);
int i;
int ret = 0;

if (!ufb->active_16)
return 0;

if (ufb->obj->base.import_attach) {
ret = dma_buf_begin_cpu_access(ufb->obj->base.import_attach->dmabuf,
0, ufb->obj->base.size,
DMA_FROM_DEVICE);
if (ret)
return ret;
}

for (i = 0; i < num_clips; i++) {
udl_handle_damage(ufb, clips[i].x1, clips[i].y1,
ret = udl_handle_damage(ufb, clips[i].x1, clips[i].y1,
clips[i].x2 - clips[i].x1,
clips[i].y2 - clips[i].y1);
if (ret)
break;
}
return 0;

if (ufb->obj->base.import_attach) {
dma_buf_end_cpu_access(ufb->obj->base.import_attach->dmabuf,
0, ufb->obj->base.size,
DMA_FROM_DEVICE);
}
return ret;
}

static void udl_user_framebuffer_destroy(struct drm_framebuffer *fb)
Expand Down
7 changes: 0 additions & 7 deletions drivers/gpu/drm/udl/udl_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,11 +181,6 @@ int udl_gem_vmap(struct udl_gem_object *obj)
int ret;

if (obj->base.import_attach) {
ret = dma_buf_begin_cpu_access(obj->base.import_attach->dmabuf,
0, obj->base.size, DMA_BIDIRECTIONAL);
if (ret)
return -EINVAL;

obj->vmapping = dma_buf_vmap(obj->base.import_attach->dmabuf);
if (!obj->vmapping)
return -ENOMEM;
Expand All @@ -206,8 +201,6 @@ void udl_gem_vunmap(struct udl_gem_object *obj)
{
if (obj->base.import_attach) {
dma_buf_vunmap(obj->base.import_attach->dmabuf, obj->vmapping);
dma_buf_end_cpu_access(obj->base.import_attach->dmabuf, 0,
obj->base.size, DMA_BIDIRECTIONAL);
return;
}

Expand Down

0 comments on commit 32ecd24

Please sign in to comment.