As we just need a temporary array whilst performing the relocations for
the execbuffer, first attempt to allocate using kmalloc even if it is
not of order page-0. This avoids the overhead of remapping the
discontiguous array and so gives a moderate boost to execution
throughput.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
                return -EINVAL;
        }
 
-       exec2_list = drm_malloc_ab(sizeof(*exec2_list), args->buffer_count);
+       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_ERROR("Failed to allocate exec list for %d buffers\n",
                          args->buffer_count);