diff options
-rw-r--r-- | drivers/gpu/drm/drm_prime.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index e82a976f0fba..c38dacda6119 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c | |||
@@ -230,26 +230,26 @@ void drm_gem_map_detach(struct dma_buf *dma_buf, | |||
230 | struct drm_prime_attachment *prime_attach = attach->priv; | 230 | struct drm_prime_attachment *prime_attach = attach->priv; |
231 | struct drm_gem_object *obj = dma_buf->priv; | 231 | struct drm_gem_object *obj = dma_buf->priv; |
232 | struct drm_device *dev = obj->dev; | 232 | struct drm_device *dev = obj->dev; |
233 | struct sg_table *sgt; | ||
234 | 233 | ||
235 | if (dev->driver->gem_prime_unpin) | 234 | if (prime_attach) { |
236 | dev->driver->gem_prime_unpin(obj); | 235 | struct sg_table *sgt = prime_attach->sgt; |
237 | 236 | ||
238 | if (!prime_attach) | 237 | if (sgt) { |
239 | return; | 238 | if (prime_attach->dir != DMA_NONE) |
240 | 239 | dma_unmap_sg_attrs(attach->dev, sgt->sgl, | |
241 | sgt = prime_attach->sgt; | 240 | sgt->nents, |
242 | if (sgt) { | 241 | prime_attach->dir, |
243 | if (prime_attach->dir != DMA_NONE) | 242 | DMA_ATTR_SKIP_CPU_SYNC); |
244 | dma_unmap_sg_attrs(attach->dev, sgt->sgl, sgt->nents, | 243 | sg_free_table(sgt); |
245 | prime_attach->dir, | 244 | } |
246 | DMA_ATTR_SKIP_CPU_SYNC); | 245 | |
247 | sg_free_table(sgt); | 246 | kfree(sgt); |
247 | kfree(prime_attach); | ||
248 | attach->priv = NULL; | ||
248 | } | 249 | } |
249 | 250 | ||
250 | kfree(sgt); | 251 | if (dev->driver->gem_prime_unpin) |
251 | kfree(prime_attach); | 252 | dev->driver->gem_prime_unpin(obj); |
252 | attach->priv = NULL; | ||
253 | } | 253 | } |
254 | EXPORT_SYMBOL(drm_gem_map_detach); | 254 | EXPORT_SYMBOL(drm_gem_map_detach); |
255 | 255 | ||