mm: kill vma flag VM_RESERVED and mm->reserved_vm counter
[pandora-kernel.git] / drivers / gpu / drm / udl / udl_fb.c
index ce9a611..69a2b16 100644 (file)
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/fb.h>
+#include <linux/dma-buf.h>
 
-#include "drmP.h"
-#include "drm.h"
-#include "drm_crtc.h"
-#include "drm_crtc_helper.h"
+#include <drm/drmP.h>
+#include <drm/drm_crtc.h>
+#include <drm/drm_crtc_helper.h>
 #include "udl_drv.h"
 
-#include "drm_fb_helper.h"
+#include <drm/drm_fb_helper.h>
 
 #define DL_DEFIO_WRITE_DELAY    5 /* fb_deferred_io.delay in jiffies */
 
@@ -243,7 +243,7 @@ static int udl_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
                        size = 0;
        }
 
-       vma->vm_flags |= VM_RESERVED;   /* avoid to swap out this VMA */
+       /* VM_IO | VM_DONTEXPAND | VM_DONTDUMP are set by remap_pfn_range() */
        return 0;
 }
 
@@ -356,12 +356,12 @@ static struct fb_ops udlfb_ops = {
        .fb_release = udl_fb_release,
 };
 
-void udl_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
+static void udl_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
                           u16 blue, int regno)
 {
 }
 
-void udl_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
+static void udl_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
                             u16 *blue, int regno)
 {
        *red = 0;
@@ -377,16 +377,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)