change back to drm_free_large/drm_malloc_ab
authorjsg <jsg@openbsd.org>
Sat, 11 Apr 2015 04:36:10 +0000 (04:36 +0000)
committerjsg <jsg@openbsd.org>
Sat, 11 Apr 2015 04:36:10 +0000 (04:36 +0000)
sys/dev/pci/drm/drmP.h
sys/dev/pci/drm/drm_mem_util.h
sys/dev/pci/drm/i915/i915_gem_execbuffer.c

index 129b3c0..c36d8a9 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: drmP.h,v 1.190 2015/04/10 12:06:52 jsg Exp $ */
+/* $OpenBSD: drmP.h,v 1.191 2015/04/11 04:36:10 jsg Exp $ */
 /* drmP.h -- Private header for Direct Rendering Manager -*- linux-c -*-
  * Created: Mon Jan  4 10:05:05 1999 by faith@precisioninsight.com
  */
@@ -678,6 +678,8 @@ void        *drm_calloc(size_t, size_t);
 void   *drm_realloc(void *, size_t, size_t);
 void    drm_free(void *);
 
+#include "drm_mem_util.h"
+
 /* XXX until we get PAT support */
 #define drm_core_ioremap_wc drm_core_ioremap
 void   drm_core_ioremap(struct drm_local_map *, struct drm_device *);
index ead94b1..f9582b5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: drm_mem_util.h,v 1.2 2014/07/12 18:48:52 tedu Exp $   */
+/*     $OpenBSD: drm_mem_util.h,v 1.3 2015/04/11 04:36:10 jsg Exp $    */
 /*
  * Copyright © 2008 Intel Corporation
  *
@@ -49,14 +49,13 @@ static __inline__ void *drm_calloc_large(size_t nmemb, size_t size)
 /* Modeled after cairo's malloc_ab, it's like calloc but without the zeroing. */
 static __inline__ void *drm_malloc_ab(size_t nmemb, size_t size)
 {
-       printf("%s stub\n", __func__);
-       return NULL;
+       return (mallocarray(nmemb, size, M_DRM, M_WAITOK | M_CANFAIL));
 #ifdef notyet
        if (size != 0 && nmemb > SIZE_MAX / size)
                return NULL;
 
        if (size * nmemb <= PAGE_SIZE)
-           return malloc(nmemb * size, M_DRM, M_WAITOK);
+           return kmalloc(nmemb * size, GFP_KERNEL);
 
        return __vmalloc(size * nmemb,
                         GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL);
index 0b4f567..0123ae7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: i915_gem_execbuffer.c,v 1.36 2015/04/05 11:53:53 kettenis Exp $       */
+/*     $OpenBSD: i915_gem_execbuffer.c,v 1.37 2015/04/11 04:36:10 jsg Exp $    */
 /*
  * Copyright (c) 2008-2009 Owain G. Ainsworth <oga@openbsd.org>
  *
@@ -542,12 +542,11 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
        for (i = 0; i < count; i++)
                total += exec[i].relocation_count;
 
-       reloc_offset = mallocarray(count, sizeof(*reloc_offset), M_DRM,
-           M_WAITOK);
-       reloc = mallocarray(total, sizeof(*reloc), M_DRM, M_WAITOK);
+       reloc_offset = drm_malloc_ab(count, sizeof(*reloc_offset));
+       reloc = drm_malloc_ab(total, sizeof(*reloc));
        if (reloc == NULL || reloc_offset == NULL) {
-               drm_free(reloc);
-               drm_free(reloc_offset);
+               drm_free_large(reloc);
+               drm_free_large(reloc_offset);
                mutex_lock(&dev->struct_mutex);
                return -ENOMEM;
        }
@@ -633,8 +632,8 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
         */
 
 err:
-       drm_free(reloc);
-       drm_free(reloc_offset);
+       drm_free_large(reloc);
+       drm_free_large(reloc_offset);
        return ret;
 }
 
@@ -1225,6 +1224,9 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
 
        exec2_list = kmalloc(sizeof(*exec2_list)*args->buffer_count,
                             GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
+       if (exec2_list == NULL)
+               exec2_list = drm_malloc_ab(sizeof(*exec2_list),
+                                          args->buffer_count);
        if (exec2_list == NULL) {
                DRM_DEBUG("Failed to allocate exec list for %d buffers\n",
                          args->buffer_count);
@@ -1237,7 +1239,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
        if (ret != 0) {
                DRM_DEBUG("copy %d exec entries failed %d\n",
                          args->buffer_count, ret);
-               drm_free(exec2_list);
+               drm_free_large(exec2_list);
                return -EFAULT;
        }
 
@@ -1255,7 +1257,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
                }
        }
 
-       drm_free(exec2_list);
+       drm_free_large(exec2_list);
        return ret;
 }