summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2023-03-28 22:03:14 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2023-03-28 22:03:14 -0700
commitc16bb733c08baec242fee7e9420fe09a12de522f (patch)
treeb0feb6d49af7c36bf9e6fb8b384ef8ac9d6f1ae3
parentdd416db2514fb435d7a38c701444fcf7f8715a0a (diff)
parentf4f317105f4c3405ce44360ab3cfefb1610d55a6 (diff)
downloadgraphics-c16bb733c08baec242fee7e9420fe09a12de522f.tar.gz
Merge "msm: kgsl: Print the cmdline string during snapshot"
-rw-r--r--adreno_dispatch.c9
-rw-r--r--adreno_hwsched.c6
-rw-r--r--kgsl.c3
-rw-r--r--kgsl_device.h4
4 files changed, 20 insertions, 2 deletions
diff --git a/adreno_dispatch.c b/adreno_dispatch.c
index b52d4a9..bdf5598 100644
--- a/adreno_dispatch.c
+++ b/adreno_dispatch.c
@@ -1577,13 +1577,15 @@ static void adreno_fault_header(struct kgsl_device *device,
const char *type = fault & ADRENO_GMU_FAULT ? "gmu" : "gpu";
if (!gx_on) {
- if (drawobj != NULL)
+ if (drawobj != NULL) {
pr_fault(device, drawobj,
"%s fault ctx %u ctx_type %s ts %u and GX is OFF\n",
type, drawobj->context->id,
kgsl_context_type(drawctxt->type),
drawobj->timestamp);
- else
+ pr_fault(device, drawobj, "cmdline: %s\n",
+ drawctxt->base.proc_priv->cmdline);
+ } else
dev_err(device->dev, "RB[%d] : %s fault and GX is OFF\n",
id, type);
@@ -1616,6 +1618,9 @@ static void adreno_fault_header(struct kgsl_device *device,
drawobj->timestamp, status,
rptr, wptr, ib1base, ib1sz, ib2base, ib2sz);
+ pr_fault(device, drawobj, "cmdline: %s\n",
+ drawctxt->base.proc_priv->cmdline);
+
if (rb != NULL)
pr_fault(device, drawobj,
"%s fault rb %d rb sw r/w %4.4x/%4.4x\n",
diff --git a/adreno_hwsched.c b/adreno_hwsched.c
index a03f2db..cae6a3c 100644
--- a/adreno_hwsched.c
+++ b/adreno_hwsched.c
@@ -1506,6 +1506,9 @@ static void do_fault_header_lpac(struct adreno_device *adreno_dev,
drawobj_lpac->context->gmu_dispatch_queue, lpac_rptr, lpac_wptr,
lpac_ib1base, lpac_ib1sz, lpac_ib2base, lpac_ib2sz);
+ pr_context(device, drawobj_lpac->context, "lpac cmdline: %s\n",
+ drawctxt_lpac->base.proc_priv->cmdline);
+
trace_adreno_gpu_fault(drawobj_lpac->context->id, drawobj_lpac->timestamp, status,
lpac_rptr, lpac_wptr, lpac_ib1base, lpac_ib1sz, lpac_ib2base, lpac_ib2sz,
adreno_get_level(drawobj_lpac->context));
@@ -1541,6 +1544,9 @@ static void do_fault_header(struct adreno_device *adreno_dev,
drawobj->context->gmu_dispatch_queue, rptr, wptr,
ib1base, ib1sz, ib2base, ib2sz);
+ pr_context(device, drawobj->context, "cmdline: %s\n",
+ drawctxt->base.proc_priv->cmdline);
+
trace_adreno_gpu_fault(drawobj->context->id, drawobj->timestamp, status,
rptr, wptr, ib1base, ib1sz, ib2base, ib2sz,
adreno_get_level(drawobj->context));
diff --git a/kgsl.c b/kgsl.c
index 1d3e1aa..3ce0e54 100644
--- a/kgsl.c
+++ b/kgsl.c
@@ -24,6 +24,7 @@
#include <linux/qcom_dma_heap.h>
#include <linux/security.h>
#include <linux/sort.h>
+#include <linux/string_helpers.h>
#include <soc/qcom/of_common.h>
#include <soc/qcom/secure_buffer.h>
#include <soc/qcom/boot_stats.h>
@@ -949,6 +950,7 @@ static void kgsl_destroy_process_private(struct kref *kref)
write_unlock(&kgsl_driver.proclist_lock);
mutex_unlock(&kgsl_driver.process_mutex);
+ kfree(private->cmdline);
put_pid(private->pid);
idr_destroy(&private->mem_idr);
idr_destroy(&private->syncsource_idr);
@@ -1167,6 +1169,7 @@ static struct kgsl_process_private *kgsl_process_private_new(
private->fd_count = 1;
private->pid = cur_pid;
get_task_comm(private->comm, current->group_leader);
+ private->cmdline = kstrdup_quotable_cmdline(current, GFP_KERNEL);
spin_lock_init(&private->mem_lock);
spin_lock_init(&private->syncsource_lock);
diff --git a/kgsl_device.h b/kgsl_device.h
index 9980f73..6b7464f 100644
--- a/kgsl_device.h
+++ b/kgsl_device.h
@@ -528,6 +528,10 @@ struct kgsl_process_private {
* @private_mutex: Mutex lock to protect kgsl_process_private
*/
struct mutex private_mutex;
+ /**
+ * @cmdline: Cmdline string of the process
+ */
+ char *cmdline;
};
struct kgsl_device_private {