diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2018-11-20 09:40:02 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-11-20 09:40:02 -0800 |
commit | d1d0a3d96fc3ffc7b9065a85e7a5e86321593009 (patch) | |
tree | 994649e70da326da9881db536ee694198817ab5d | |
parent | 397f5ff6d22ab1c8faa9eff310c44887425a6e3a (diff) | |
parent | de5400e150cf90489ce98e2c48c8439e3165f8a8 (diff) |
Merge "msm: kgsl: Log context type in case of GPU faults"
-rw-r--r-- | drivers/gpu/msm/adreno_dispatch.c | 5 | ||||
-rw-r--r-- | drivers/gpu/msm/adreno_drawctxt.h | 14 | ||||
-rw-r--r-- | drivers/gpu/msm/adreno_profile.c | 14 | ||||
-rw-r--r-- | drivers/gpu/msm/kgsl_device.h | 3 | ||||
-rw-r--r-- | drivers/gpu/msm/kgsl_iommu.c | 14 | ||||
-rw-r--r-- | include/uapi/linux/msm_kgsl.h | 1 |
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 |