msm: kgsl: Don't print pagefault debugging in global space

Don't print pagefault debugging in global space to avoid giving
away buffer addresses.

Change-Id: Ic0dedbad7a66aca1bd5b678aac0ddae6a8612f1c
Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
This commit is contained in:
Jordan Crouse 2020-06-24 18:01:51 -06:00
commit 9222a3588a

View file

@ -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