diff options
author | qctecmdr <qctecmdr@localhost> | 2023-03-28 22:03:14 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2023-03-28 22:03:14 -0700 |
commit | c16bb733c08baec242fee7e9420fe09a12de522f (patch) | |
tree | b0feb6d49af7c36bf9e6fb8b384ef8ac9d6f1ae3 | |
parent | dd416db2514fb435d7a38c701444fcf7f8715a0a (diff) | |
parent | f4f317105f4c3405ce44360ab3cfefb1610d55a6 (diff) | |
download | graphics-c16bb733c08baec242fee7e9420fe09a12de522f.tar.gz |
Merge "msm: kgsl: Print the cmdline string during snapshot"
-rw-r--r-- | adreno_dispatch.c | 9 | ||||
-rw-r--r-- | adreno_hwsched.c | 6 | ||||
-rw-r--r-- | kgsl.c | 3 | ||||
-rw-r--r-- | kgsl_device.h | 4 |
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)); @@ -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 { |