diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_object.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_object.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c index 4fb05b6c6985..9ea3ab98c169 100644 --- a/drivers/gpu/drm/nouveau/nouveau_object.c +++ b/drivers/gpu/drm/nouveau/nouveau_object.c @@ -636,18 +636,20 @@ nouveau_gpuobj_gr_new(struct nouveau_channel *chan, u32 handle, int class) return -EINVAL; found: - switch (oc->engine) { - case NVOBJ_ENGINE_SW: - return nouveau_gpuobj_sw_new(chan, handle, class); - case NVOBJ_ENGINE_GR: - if ((dev_priv->card_type >= NV_20 && !chan->ramin_grctx) || - (dev_priv->card_type < NV_20 && !chan->pgraph_ctx)) { - ret = pgraph->create_context(chan); - if (ret) - return ret; - } + if (!dev_priv->eng[oc->engine]) { + switch (oc->engine) { + case NVOBJ_ENGINE_SW: + return nouveau_gpuobj_sw_new(chan, handle, class); + case NVOBJ_ENGINE_GR: + if ((dev_priv->card_type >= NV_20 && !chan->ramin_grctx) || + (dev_priv->card_type < NV_20 && !chan->pgraph_ctx)) { + ret = pgraph->create_context(chan); + if (ret) + return ret; + } - return pgraph->object_new(chan, handle, class); + return pgraph->object_new(chan, handle, class); + } } if (!chan->engctx[oc->engine]) { |