Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9222a358 authored by Jordan Crouse's avatar Jordan Crouse
Browse files

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: default avatarJordan Crouse <jcrouse@codeaurora.org>
parent 2460bec9
Loading
Loading
Loading
Loading
+22 −59
Original line number Diff line number Diff line
@@ -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,10 +691,19 @@ static int kgsl_iommu_fault_handler(struct iommu_domain *domain,
		if (!(flags & IOMMU_FAULT_PERMISSION)) {
			_check_if_freed(ctx, addr, ptname);

			/*
			 * 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);
				_find_mem_entries(mmu, addr, &prev, &next,
					private);
				if (prev.gpuaddr)
					_print_entry(ctx->kgsldev, &prev);
				else
@@ -756,7 +719,7 @@ static int kgsl_iommu_fault_handler(struct iommu_domain *domain,
					dev_err(ctx->kgsldev->dev, "*EMPTY*\n");
			}
		}

	}

	/*
	 * We do not want the h/w to resume fetching data from an iommu