diff --git a/drivers/gpu/msm/kgsl_iommu.c b/drivers/gpu/msm/kgsl_iommu.c index f3e81b6413e1..aa12bafebc0a 100644 --- a/drivers/gpu/msm/kgsl_iommu.c +++ b/drivers/gpu/msm/kgsl_iommu.c @@ -438,50 +438,6 @@ struct _mem_entry { char name[32]; }; -static void _get_global_entries(struct kgsl_mmu *mmu, uint64_t faultaddr, - struct _mem_entry *prev, - struct _mem_entry *next) -{ - struct kgsl_device *device = KGSL_MMU_DEVICE(mmu); - struct kgsl_global_memdesc *p = NULL, *n = NULL, *md; - uint64_t prevaddr = 0; - uint64_t nextaddr = (uint64_t) -1; - - list_for_each_entry(md, &device->globals, node) { - struct kgsl_memdesc *memdesc = &md->memdesc; - u64 addr; - - addr = memdesc->gpuaddr; - if ((addr < faultaddr) && (addr > prevaddr)) { - prevaddr = addr; - p = md; - } - - if ((addr > faultaddr) && (addr < nextaddr)) { - nextaddr = addr; - n = md; - } - } - - if (p != NULL) { - prev->gpuaddr = p->memdesc.gpuaddr; - prev->size = p->memdesc.size; - prev->flags = p->memdesc.flags; - prev->priv = p->memdesc.priv; - prev->pid = 0; - strlcpy(prev->name, p->name, sizeof(prev->name)); - } - - if (n != NULL) { - next->gpuaddr = n->memdesc.gpuaddr; - next->size = n->memdesc.size; - next->flags = n->memdesc.flags; - next->priv = n->memdesc.priv; - next->pid = 0; - strlcpy(next->name, n->name, sizeof(next->name)); - } -} - static void _get_entries(struct kgsl_process_private *private, uint64_t faultaddr, struct _mem_entry *prev, struct _mem_entry *next) @@ -542,9 +498,7 @@ static void _find_mem_entries(struct kgsl_mmu *mmu, uint64_t faultaddr, /* Set the maximum possible size as an initial value */ nextentry->gpuaddr = (uint64_t) -1; - if (ADDR_IN_GLOBAL(mmu, faultaddr)) { - _get_global_entries(mmu, faultaddr, preventry, nextentry); - } else if (private) { + if (private) { spin_lock(&private->mem_lock); _get_entries(private, faultaddr, preventry, nextentry); spin_unlock(&private->mem_lock); @@ -737,27 +691,36 @@ static int kgsl_iommu_fault_handler(struct iommu_domain *domain, if (!(flags & IOMMU_FAULT_PERMISSION)) { _check_if_freed(ctx, addr, ptname); - dev_err(ctx->kgsldev->dev, + /* + * Don't print any debug information if the address is + * in the global region. These are rare and nobody needs + * to know the addresses that are in here + */ + if (ADDR_IN_GLOBAL(mmu, addr)) { + dev_err(ctx->kgsldev->dev, "Fault in global memory\n"); + } else { + dev_err(ctx->kgsldev->dev, "---- nearby memory ----\n"); - _find_mem_entries(mmu, addr, &prev, &next, private); - if (prev.gpuaddr) - _print_entry(ctx->kgsldev, &prev); - else - dev_err(ctx->kgsldev->dev, "*EMPTY*\n"); + _find_mem_entries(mmu, addr, &prev, &next, + private); + if (prev.gpuaddr) + _print_entry(ctx->kgsldev, &prev); + else + dev_err(ctx->kgsldev->dev, "*EMPTY*\n"); - dev_err(ctx->kgsldev->dev, + dev_err(ctx->kgsldev->dev, " <- fault @ %8.8lX\n", addr); - if (next.gpuaddr != (uint64_t) -1) - _print_entry(ctx->kgsldev, &next); - else - dev_err(ctx->kgsldev->dev, "*EMPTY*\n"); + if (next.gpuaddr != (uint64_t) -1) + _print_entry(ctx->kgsldev, &next); + else + dev_err(ctx->kgsldev->dev, "*EMPTY*\n"); + } } } - /* * We do not want the h/w to resume fetching data from an iommu * that has faulted, this is better for debugging as it will stall