summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/nouveau_object.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_object.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_object.c24
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]) {