struct device *dev = &pdev->dev;
if (!desc)
return;
- if (desc->sgt)
+ if (desc->sgt) {
gk20a_free_sgtable(&desc->sgt);
- dma_free_attrs(dev, desc->size, desc->pages,
+ desc->sgt = NULL;
+ }
+ if (desc->pages) {
+ dma_free_attrs(dev, desc->size, desc->pages,
desc->iova, &desc->attrs);
+ desc->pages = NULL;
+ }
}
static int gk20a_gr_alloc_ctx_buffer(struct platform_device *pdev,
else
gk20a_dbg_fn("done");
- return 0;
+ return err;
}
static int gk20a_init_gr_reset_enable_hw(struct gk20a *g)
static void gk20a_tegra_secure_destroy(struct platform_device *pdev,
struct gr_ctx_buffer_desc *desc)
{
- gk20a_free_sgtable(&desc->sgt);
- dma_free_attrs(&tegra_vpr_dev, desc->size,
+ if (desc->sgt) {
+ gk20a_free_sgtable(&desc->sgt);
+ desc->sgt = NULL;
+ }
+
+ if (desc->iova) {
+ dma_free_attrs(&tegra_vpr_dev, desc->size,
(void *)(uintptr_t)desc->iova,
desc->iova, &desc->attrs);
+ desc->iova = 0;
+ }
}
static int gk20a_tegra_secure_alloc(struct platform_device *pdev,