summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-11-20 09:40:02 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2018-11-20 09:40:02 -0800
commitd1d0a3d96fc3ffc7b9065a85e7a5e86321593009 (patch)
tree994649e70da326da9881db536ee694198817ab5d
parent397f5ff6d22ab1c8faa9eff310c44887425a6e3a (diff)
parentde5400e150cf90489ce98e2c48c8439e3165f8a8 (diff)
Merge "msm: kgsl: Log context type in case of GPU faults"
-rw-r--r--drivers/gpu/msm/adreno_dispatch.c5
-rw-r--r--drivers/gpu/msm/adreno_drawctxt.h14
-rw-r--r--drivers/gpu/msm/adreno_profile.c14
-rw-r--r--drivers/gpu/msm/kgsl_device.h3
-rw-r--r--drivers/gpu/msm/kgsl_iommu.c14
-rw-r--r--include/uapi/linux/msm_kgsl.h1
6 files changed, 32 insertions, 19 deletions
diff --git a/drivers/gpu/msm/adreno_dispatch.c b/drivers/gpu/msm/adreno_dispatch.c
index 6dd9f6040fae..002722f75c6c 100644
--- a/drivers/gpu/msm/adreno_dispatch.c
+++ b/drivers/gpu/msm/adreno_dispatch.c
@@ -1710,8 +1710,9 @@ static void adreno_fault_header(struct kgsl_device *device,
ib2base, ib2sz, drawctxt->rb->id);
pr_fault(device, drawobj,
- "gpu fault ctx %d ts %d status %8.8X rb %4.4x/%4.4x ib1 %16.16llX/%4.4x ib2 %16.16llX/%4.4x\n",
- drawobj->context->id, drawobj->timestamp, status,
+ "gpu fault ctx %d ctx_type %s ts %d status %8.8X rb %4.4x/%4.4x ib1 %16.16llX/%4.4x ib2 %16.16llX/%4.4x\n",
+ drawobj->context->id, get_api_type_str(drawctxt->type),
+ drawobj->timestamp, status,
rptr, wptr, ib1base, ib1sz, ib2base, ib2sz);
if (rb != NULL)
diff --git a/drivers/gpu/msm/adreno_drawctxt.h b/drivers/gpu/msm/adreno_drawctxt.h
index 07108eaf502f..941a765e47ce 100644
--- a/drivers/gpu/msm/adreno_drawctxt.h
+++ b/drivers/gpu/msm/adreno_drawctxt.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2002,2007-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2002,2007-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -138,4 +138,16 @@ void adreno_drawctxt_invalidate(struct kgsl_device *device,
void adreno_drawctxt_dump(struct kgsl_device *device,
struct kgsl_context *context);
+static struct adreno_context_type ctxt_type_table[] = {KGSL_CONTEXT_TYPES};
+
+static inline const char *get_api_type_str(unsigned int type)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(ctxt_type_table); i++) {
+ if (ctxt_type_table[i].type == type)
+ return ctxt_type_table[i].str;
+ }
+ return "UNKNOWN";
+}
#endif /* __ADRENO_DRAWCTXT_H */
diff --git a/drivers/gpu/msm/adreno_profile.c b/drivers/gpu/msm/adreno_profile.c
index d8af520b2fe6..e756c82287fd 100644
--- a/drivers/gpu/msm/adreno_profile.c
+++ b/drivers/gpu/msm/adreno_profile.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2016, 2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -78,18 +78,6 @@
#define SIZE_PIPE_ENTRY(cnt) (50 + (cnt) * 62)
#define SIZE_LOG_ENTRY(cnt) (6 + (cnt) * 5)
-static struct adreno_context_type ctxt_type_table[] = {KGSL_CONTEXT_TYPES};
-
-static const char *get_api_type_str(unsigned int type)
-{
- int i;
- for (i = 0; i < ARRAY_SIZE(ctxt_type_table) - 1; i++) {
- if (ctxt_type_table[i].type == type)
- return ctxt_type_table[i].str;
- }
- return "UNKNOWN";
-}
-
static inline uint _ib_start(struct adreno_device *adreno_dev,
unsigned int *cmds)
{
diff --git a/drivers/gpu/msm/kgsl_device.h b/drivers/gpu/msm/kgsl_device.h
index 078109af99fe..abff4e4ecc70 100644
--- a/drivers/gpu/msm/kgsl_device.h
+++ b/drivers/gpu/msm/kgsl_device.h
@@ -87,7 +87,8 @@ enum kgsl_event_results {
{ KGSL_CONTEXT_TYPE_GL, "GL" }, \
{ KGSL_CONTEXT_TYPE_CL, "CL" }, \
{ KGSL_CONTEXT_TYPE_C2D, "C2D" }, \
- { KGSL_CONTEXT_TYPE_RS, "RS" }
+ { KGSL_CONTEXT_TYPE_RS, "RS" }, \
+ { KGSL_CONTEXT_TYPE_VK, "VK" }
#define KGSL_CONTEXT_ID(_context) \
((_context != NULL) ? (_context)->id : KGSL_MEMSTORE_GLOBAL)
diff --git a/drivers/gpu/msm/kgsl_iommu.c b/drivers/gpu/msm/kgsl_iommu.c
index eee1fd856c3e..320b815e2beb 100644
--- a/drivers/gpu/msm/kgsl_iommu.c
+++ b/drivers/gpu/msm/kgsl_iommu.c
@@ -870,11 +870,21 @@ static int kgsl_iommu_fault_handler(struct iommu_domain *domain,
no_page_fault_log = kgsl_mmu_log_fault_addr(mmu, ptbase, addr);
if (!no_page_fault_log && __ratelimit(&_rs)) {
+ const char *api_str;
+
+ if (context != NULL) {
+ struct adreno_context *drawctxt =
+ ADRENO_CONTEXT(context);
+
+ api_str = get_api_type_str(drawctxt->type);
+ } else
+ api_str = "UNKNOWN";
+
KGSL_MEM_CRIT(ctx->kgsldev,
"GPU PAGE FAULT: addr = %lX pid= %d\n", addr, ptname);
KGSL_MEM_CRIT(ctx->kgsldev,
- "context=%s TTBR0=0x%llx CIDR=0x%x (%s %s fault)\n",
- ctx->name, ptbase, contextidr,
+ "context=%s ctx_type=%s TTBR0=0x%llx CIDR=0x%x (%s %s fault)\n",
+ ctx->name, api_str, ptbase, contextidr,
write ? "write" : "read", fault_type);
/* Don't print the debug if this is a permissions fault */
diff --git a/include/uapi/linux/msm_kgsl.h b/include/uapi/linux/msm_kgsl.h
index 005fb8284524..951dbf634667 100644
--- a/include/uapi/linux/msm_kgsl.h
+++ b/include/uapi/linux/msm_kgsl.h
@@ -65,6 +65,7 @@
#define KGSL_CONTEXT_TYPE_CL 2
#define KGSL_CONTEXT_TYPE_C2D 3
#define KGSL_CONTEXT_TYPE_RS 4
+#define KGSL_CONTEXT_TYPE_VK 5
#define KGSL_CONTEXT_TYPE_UNKNOWN 0x1E
#define KGSL_CONTEXT_INVALIDATE_ON_FAULT 0x10000000