Backmerge tag 'v4.11-rc6' into drm-next
authorDave Airlie <airlied@redhat.com>
Mon, 10 Apr 2017 21:40:42 +0000 (07:40 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 10 Apr 2017 21:40:42 +0000 (07:40 +1000)
Linux 4.11-rc6

drm-misc needs 4.11-rc5, may as well fix conflicts with rc6.

1  2 
MAINTAINERS
drivers/gpu/drm/etnaviv/etnaviv_gpu.c
drivers/gpu/drm/i915/gvt/gtt.c
drivers/gpu/drm/i915/gvt/handlers.c
drivers/gpu/drm/i915/gvt/kvmgt.c
drivers/gpu/drm/i915/gvt/render.c
drivers/gpu/drm/i915/gvt/scheduler.c
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/vc4/vc4_crtc.c
drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
drivers/gpu/drm/vmwgfx/vmwgfx_surface.c

diff --cc MAINTAINERS
Simple merge
index bafbcb46355574244d590e295eb5c198ad20f06e,da48819ff2e6550c0a7d6206569d85e8a880c0c5..4f587058a3aa566943a6278b8681a0692d56b6c4
@@@ -1334,11 -1320,9 +1336,9 @@@ int etnaviv_gpu_submit(struct etnaviv_g
                goto out_pm_put;
        }
  
-       mutex_lock(&gpu->lock);
        gpu->event[event].fence = fence;
 -      submit->fence = fence->seqno;
 -      gpu->active_fence = submit->fence;
 +      submit->fence = dma_fence_get(fence);
 +      gpu->active_fence = submit->fence->seqno;
  
        if (gpu->lastctx != cmdbuf->ctx) {
                gpu->mmu->need_flush = true;
Simple merge
Simple merge
index 5f55d89a0959c0a059a6c4f4d739598672dd157a,d641214578a7dc6631e866bbc91c2d38f3e95a76..42ff7ffb6066526451e6b615ddeac0608bdc23b1
@@@ -1373,7 -1340,15 +1374,8 @@@ static int kvmgt_guest_init(struct mdev
  
  static bool kvmgt_guest_exit(struct kvmgt_guest_info *info)
  {
 -      struct intel_vgpu *vgpu = info->vgpu;
 -
 -      if (!info) {
 -              gvt_vgpu_err("kvmgt_guest_info invalid\n");
 -              return false;
 -      }
 -
        kvm_page_track_unregister_notifier(info->kvm, &info->track_node);
+       kvm_put_kvm(info->kvm);
        kvmgt_protect_table_destroy(info);
        gvt_cache_destroy(info->vgpu);
        vfree(info);
Simple merge
Simple merge
Simple merge
Simple merge
index fa1037ec8e5fe0c791f9d47052ac685c525ea539,bf23153d4f55515b54c66f5a250b8f04aa7f5051..7d591f653dfa323e5f51f0bfeca58dac44bf5fa4
@@@ -730,9 -773,220 +730,9 @@@ int vmw_user_dmabuf_reference(struct tt
  
        *handle = user_bo->prime.base.hash.key;
        return ttm_ref_object_add(tfile, &user_bo->prime.base,
-                                 TTM_REF_USAGE, NULL);
+                                 TTM_REF_USAGE, NULL, false);
  }
  
 -/*
 - * Stream management
 - */
 -
 -static void vmw_stream_destroy(struct vmw_resource *res)
 -{
 -      struct vmw_private *dev_priv = res->dev_priv;
 -      struct vmw_stream *stream;
 -      int ret;
 -
 -      DRM_INFO("%s: unref\n", __func__);
 -      stream = container_of(res, struct vmw_stream, res);
 -
 -      ret = vmw_overlay_unref(dev_priv, stream->stream_id);
 -      WARN_ON(ret != 0);
 -}
 -
 -static int vmw_stream_init(struct vmw_private *dev_priv,
 -                         struct vmw_stream *stream,
 -                         void (*res_free) (struct vmw_resource *res))
 -{
 -      struct vmw_resource *res = &stream->res;
 -      int ret;
 -
 -      ret = vmw_resource_init(dev_priv, res, false, res_free,
 -                              &vmw_stream_func);
 -
 -      if (unlikely(ret != 0)) {
 -              if (res_free == NULL)
 -                      kfree(stream);
 -              else
 -                      res_free(&stream->res);
 -              return ret;
 -      }
 -
 -      ret = vmw_overlay_claim(dev_priv, &stream->stream_id);
 -      if (ret) {
 -              vmw_resource_unreference(&res);
 -              return ret;
 -      }
 -
 -      DRM_INFO("%s: claimed\n", __func__);
 -
 -      vmw_resource_activate(&stream->res, vmw_stream_destroy);
 -      return 0;
 -}
 -
 -static void vmw_user_stream_free(struct vmw_resource *res)
 -{
 -      struct vmw_user_stream *stream =
 -          container_of(res, struct vmw_user_stream, stream.res);
 -      struct vmw_private *dev_priv = res->dev_priv;
 -
 -      ttm_base_object_kfree(stream, base);
 -      ttm_mem_global_free(vmw_mem_glob(dev_priv),
 -                          vmw_user_stream_size);
 -}
 -
 -/**
 - * This function is called when user space has no more references on the
 - * base object. It releases the base-object's reference on the resource object.
 - */
 -
 -static void vmw_user_stream_base_release(struct ttm_base_object **p_base)
 -{
 -      struct ttm_base_object *base = *p_base;
 -      struct vmw_user_stream *stream =
 -          container_of(base, struct vmw_user_stream, base);
 -      struct vmw_resource *res = &stream->stream.res;
 -
 -      *p_base = NULL;
 -      vmw_resource_unreference(&res);
 -}
 -
 -int vmw_stream_unref_ioctl(struct drm_device *dev, void *data,
 -                         struct drm_file *file_priv)
 -{
 -      struct vmw_private *dev_priv = vmw_priv(dev);
 -      struct vmw_resource *res;
 -      struct vmw_user_stream *stream;
 -      struct drm_vmw_stream_arg *arg = (struct drm_vmw_stream_arg *)data;
 -      struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
 -      struct idr *idr = &dev_priv->res_idr[vmw_res_stream];
 -      int ret = 0;
 -
 -
 -      res = vmw_resource_lookup(dev_priv, idr, arg->stream_id);
 -      if (unlikely(res == NULL))
 -              return -EINVAL;
 -
 -      if (res->res_free != &vmw_user_stream_free) {
 -              ret = -EINVAL;
 -              goto out;
 -      }
 -
 -      stream = container_of(res, struct vmw_user_stream, stream.res);
 -      if (stream->base.tfile != tfile) {
 -              ret = -EINVAL;
 -              goto out;
 -      }
 -
 -      ttm_ref_object_base_unref(tfile, stream->base.hash.key, TTM_REF_USAGE);
 -out:
 -      vmw_resource_unreference(&res);
 -      return ret;
 -}
 -
 -int vmw_stream_claim_ioctl(struct drm_device *dev, void *data,
 -                         struct drm_file *file_priv)
 -{
 -      struct vmw_private *dev_priv = vmw_priv(dev);
 -      struct vmw_user_stream *stream;
 -      struct vmw_resource *res;
 -      struct vmw_resource *tmp;
 -      struct drm_vmw_stream_arg *arg = (struct drm_vmw_stream_arg *)data;
 -      struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
 -      int ret;
 -
 -      /*
 -       * Approximate idr memory usage with 128 bytes. It will be limited
 -       * by maximum number_of streams anyway?
 -       */
 -
 -      if (unlikely(vmw_user_stream_size == 0))
 -              vmw_user_stream_size = ttm_round_pot(sizeof(*stream)) + 128;
 -
 -      ret = ttm_read_lock(&dev_priv->reservation_sem, true);
 -      if (unlikely(ret != 0))
 -              return ret;
 -
 -      ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
 -                                 vmw_user_stream_size,
 -                                 false, true);
 -      ttm_read_unlock(&dev_priv->reservation_sem);
 -      if (unlikely(ret != 0)) {
 -              if (ret != -ERESTARTSYS)
 -                      DRM_ERROR("Out of graphics memory for stream"
 -                                " creation.\n");
 -
 -              goto out_ret;
 -      }
 -
 -      stream = kmalloc(sizeof(*stream), GFP_KERNEL);
 -      if (unlikely(stream == NULL)) {
 -              ttm_mem_global_free(vmw_mem_glob(dev_priv),
 -                                  vmw_user_stream_size);
 -              ret = -ENOMEM;
 -              goto out_ret;
 -      }
 -
 -      res = &stream->stream.res;
 -      stream->base.shareable = false;
 -      stream->base.tfile = NULL;
 -
 -      /*
 -       * From here on, the destructor takes over resource freeing.
 -       */
 -
 -      ret = vmw_stream_init(dev_priv, &stream->stream, vmw_user_stream_free);
 -      if (unlikely(ret != 0))
 -              goto out_ret;
 -
 -      tmp = vmw_resource_reference(res);
 -      ret = ttm_base_object_init(tfile, &stream->base, false, VMW_RES_STREAM,
 -                                 &vmw_user_stream_base_release, NULL);
 -
 -      if (unlikely(ret != 0)) {
 -              vmw_resource_unreference(&tmp);
 -              goto out_err;
 -      }
 -
 -      arg->stream_id = res->id;
 -out_err:
 -      vmw_resource_unreference(&res);
 -out_ret:
 -      return ret;
 -}
 -
 -int vmw_user_stream_lookup(struct vmw_private *dev_priv,
 -                         struct ttm_object_file *tfile,
 -                         uint32_t *inout_id, struct vmw_resource **out)
 -{
 -      struct vmw_user_stream *stream;
 -      struct vmw_resource *res;
 -      int ret;
 -
 -      res = vmw_resource_lookup(dev_priv, &dev_priv->res_idr[vmw_res_stream],
 -                                *inout_id);
 -      if (unlikely(res == NULL))
 -              return -EINVAL;
 -
 -      if (res->res_free != &vmw_user_stream_free) {
 -              ret = -EINVAL;
 -              goto err_ref;
 -      }
 -
 -      stream = container_of(res, struct vmw_user_stream, stream.res);
 -      if (stream->base.tfile != tfile) {
 -              ret = -EPERM;
 -              goto err_ref;
 -      }
 -
 -      *inout_id = stream->stream.stream_id;
 -      *out = res;
 -      return 0;
 -err_ref:
 -      vmw_resource_unreference(&res);
 -      return ret;
 -}
 -
 -
  /**
   * vmw_dumb_create - Create a dumb kms buffer
   *