From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Clark Subject: [PATCH 3/6] drm/msm: split rd debugfs file Date: Tue, 24 Oct 2017 09:22:50 -0400 Message-ID: <20171024132256.20286-4-robdclark@gmail.com> References: <20171024132256.20286-1-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171024132256.20286-1-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: David Airlie , linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Rob Clark , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Jordan Crouse , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org U3BsaXQgaW50byB0d28gaW5zdGFuY2VzLCB0aGUgZXhpc3RpbmcgJGRlYnVnZnMvcmQgd2hpY2gg Y29udGludWVzIHRvCmR1bXAgYWxsIHN1Ym1pdHMsIGFuZCAkZGVidWdmcy9oYW5ncmQgd2hpY2gg d2lsbCBiZSB1c2VkIHRvIGR1bXAganVzdApzdWJtaXRzIHRoYXQgY2F1c2UgZ3B1IGhhbmdzIChh bmQgZXZlbnR1YWxseSBmYXVsdHMsIGJ1dCB0aGF0IHdpbGwKcmVxdWlyZSBzb21lIGlvbW11IGZy YW1ld29yayBlbmhhbmNlbWVudHMpLgoKU2lnbmVkLW9mZi1ieTogUm9iIENsYXJrIDxyb2JkY2xh cmtAZ21haWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIHwgICA1ICsr LQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX3JkLmMgIHwgMTAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA3OSBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2Rydi5oCmluZGV4IDY2NmZjZTY2ZjlkZC4uYjAxYmQ3ZmE5YzJiIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9kcnYuaApAQCAtMTA4LDcgKzEwOCw4IEBAIHN0cnVjdCBtc21fZHJtX3By aXZhdGUgewogCiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiZGV2OwogCi0Jc3RydWN0IG1zbV9y ZF9zdGF0ZSAqcmQ7CisJc3RydWN0IG1zbV9yZF9zdGF0ZSAqcmQ7ICAgICAgIC8qIGRlYnVnZnMg dG8gZHVtcCBhbGwgc3VibWl0cyAqLworCXN0cnVjdCBtc21fcmRfc3RhdGUgKmhhbmdyZDsgICAv KiBkZWJ1Z2ZzIHRvIGR1bXAgaGFuZ2luZyBzdWJtaXRzICovCiAJc3RydWN0IG1zbV9wZXJmX3N0 YXRlICpwZXJmOwogCiAJLyogbGlzdCBvZiBHRU0gb2JqZWN0czogKi8KQEAgLTI5OCw3ICsyOTks NyBAQCB2b2lkIG1zbV9mcmFtZWJ1ZmZlcl9kZXNjcmliZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgc3RydWN0IHNlcV9maWxlICptKTsKIGludCBtc21fZGVidWdmc19sYXRlX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQgbXNtX3JkX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJt X21pbm9yICptaW5vcik7CiB2b2lkIG1zbV9yZF9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IG1zbV9k cm1fcHJpdmF0ZSAqcHJpdik7Ci12b2lkIG1zbV9yZF9kdW1wX3N1Ym1pdChzdHJ1Y3QgbXNtX2dl bV9zdWJtaXQgKnN1Ym1pdCk7Cit2b2lkIG1zbV9yZF9kdW1wX3N1Ym1pdChzdHJ1Y3QgbXNtX3Jk X3N0YXRlICpyZCwgc3RydWN0IG1zbV9nZW1fc3VibWl0ICpzdWJtaXQpOwogaW50IG1zbV9wZXJm X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiB2b2lkIG1zbV9wZXJmX2Rl YnVnZnNfY2xlYW51cChzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2KTsKICNlbHNlCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2dwdS5jCmluZGV4IGQyNmE3MjgyNDY2ZS4uNWJhZWIzNGYwOThlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9ncHUuYwpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgbXNtX2dwdV9zdWJtaXQoc3RydWN0 IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9nZW1fc3VibWl0ICpzdWJtaXQsCiAKIAlsaXN0X2Fk ZF90YWlsKCZzdWJtaXQtPm5vZGUsICZyaW5nLT5zdWJtaXRzKTsKIAotCW1zbV9yZF9kdW1wX3N1 Ym1pdChzdWJtaXQpOworCW1zbV9yZF9kdW1wX3N1Ym1pdChwcml2LT5yZCwgc3VibWl0KTsKIAog CXVwZGF0ZV9zd19jbnRycyhncHUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9yZC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcmQuYwppbmRleCA5ODFiYjE3YzEx YTcuLmQ2ODk0MDdjODA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcmQu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9yZC5jCkBAIC0xOSwxMSArMTksMTcgQEAK ICAqCiAgKiAgIHRhaWwgLWYgL3N5cy9rZXJuZWwvZGVidWcvZHJpLzxtaW5vcj4vcmQgPiBsb2dm aWxlLnJkCiAgKgotICogVG8gbG9nIHRoZSBjbWRzdHJlYW0gaW4gYSBmb3JtYXQgdGhhdCBpcyB1 bmRlcnN0b29kIGJ5IGZyZWVkcmVuby9jZmZkdW1wCisgKiB0byBsb2cgdGhlIGNtZHN0cmVhbSBp biBhIGZvcm1hdCB0aGF0IGlzIHVuZGVyc3Rvb2QgYnkgZnJlZWRyZW5vL2NmZmR1bXAKICAqIHV0 aWxpdHkuICBCeSBjb21wYXJpbmcgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBmZW5j ZSAjLCB0byB0aGUKICAqIGNtZHN0cmVhbSBmb3IgdGhlIG5leHQgZmVuY2UsIHlvdSBjYW4gbmFy cm93IGRvd24gd2hpY2ggcHJvY2VzcyBhbmQgc3VibWl0CiAgKiBjYXVzZWQgdGhlIGdwdSBjcmFz aC9sb2NrdXAuCiAgKgorICogQWRkaXRpb25hbGx5OgorICoKKyAqICAgdGFpbCAtZiAvc3lzL2tl cm5lbC9kZWJ1Zy9kcmkvPG1pbm9yPi9oYW5ncmQgPiBsb2dmaWxlLnJkCisgKgorICogd2lsbCBj YXB0dXJlIGp1c3QgdGhlIGNtZHN0cmVhbSBmcm9tIHN1Ym1pdHMgd2hpY2ggdHJpZ2dlcmVkIGEg R1BVIGhhbmcuCisgKgogICogVGhpcyBieXBhc3NlcyBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMo KSBtYWlubHkgYmVjYXVzZSB3ZSBuZWVkIHRvIHVzZQogICogb3VyIG93biBmb3BzIGZvciBhIGJp dCBtb3JlIGNvbnRyb2wuICBJbiBwYXJ0aWN1bGFyLCB3ZSBkb24ndCB3YW50IHRvCiAgKiBkbyBh bnl0aGluZyBpZiB1c2Vyc3BhY2UgZG9lc24ndCBoYXZlIHRoZSBkZWJ1Z2ZzIGZpbGUgb3Blbi4K QEAgLTIyMCw1MyArMjI2LDg5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHJkX2RlYnVnZnNfZm9wcyA9IHsKIAkucmVsZWFzZSA9IHJkX3JlbGVhc2UsCiB9OwogCi1pbnQg bXNtX3JkX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKKworc3RhdGljIHZv aWQgcmRfY2xlYW51cChzdHJ1Y3QgbXNtX3JkX3N0YXRlICpyZCkKK3sKKwlpZiAoIXJkKQorCQly ZXR1cm47CisKKwltdXRleF9kZXN0cm95KCZyZC0+cmVhZF9sb2NrKTsKKwlrZnJlZShyZCk7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgbXNtX3JkX3N0YXRlICpyZF9pbml0KHN0cnVjdCBkcm1fbWlub3Ig Km1pbm9yLCBjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnBy aXYgPSBtaW5vci0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgbXNtX3JkX3N0YXRlICpyZDsK IAlzdHJ1Y3QgZGVudHJ5ICplbnQ7Ci0KLQkvKiBvbmx5IGNyZWF0ZSBvbiBmaXJzdCBtaW5vcjog Ki8KLQlpZiAocHJpdi0+cmQpCi0JCXJldHVybiAwOworCWludCByZXQgPSAwOwogCiAJcmQgPSBr emFsbG9jKHNpemVvZigqcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJkKQotCQlyZXR1cm4gLUVO T01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlyZC0+ZGV2ID0gbWlub3ItPmRl djsKIAlyZC0+Zmlmby5idWYgPSByZC0+YnVmOwogCiAJbXV0ZXhfaW5pdCgmcmQtPnJlYWRfbG9j ayk7Ci0JcHJpdi0+cmQgPSByZDsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJkLT5maWZvX2V2 ZW50KTsKIAotCWVudCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJkIiwgU19JRlJFRyB8IFNfSVJV R08sCisJZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTywK IAkJCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIHJkLCAmcmRfZGVidWdmc19mb3BzKTsKIAlpZiAoIWVu dCkgewotCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3N5cy9rZXJuZWwvZGVidWcvZHJpLyVw ZC9yZFxuIiwKLQkJCQltaW5vci0+ZGVidWdmc19yb290KTsKKwkJRFJNX0VSUk9SKCJDYW5ub3Qg Y3JlYXRlIC9zeXMva2VybmVsL2RlYnVnL2RyaS8lcGQvJXNcbiIsCisJCQkJbWlub3ItPmRlYnVn ZnNfcm9vdCwgbmFtZSk7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CiAKKwly ZXR1cm4gcmQ7CisKK2ZhaWw6CisJcmRfY2xlYW51cChyZCk7CisJcmV0dXJuIEVSUl9QVFIocmV0 KTsKK30KKworaW50IG1zbV9yZF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3Ip Cit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IG1pbm9yLT5kZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCBtc21fcmRfc3RhdGUgKnJkOworCWludCByZXQ7CisKKwkvKiBvbmx5IGNy ZWF0ZSBvbiBmaXJzdCBtaW5vcjogKi8KKwlpZiAocHJpdi0+cmQpCisJCXJldHVybiAwOworCisJ cmQgPSByZF9pbml0KG1pbm9yLCAicmQiKTsKKwlpZiAoSVNfRVJSKHJkKSkgeworCQlyZXQgPSBQ VFJfRVJSKHJkKTsKKwkJZ290byBmYWlsOworCX0KKworCXByaXYtPnJkID0gcmQ7CisKKwlyZCA9 IHJkX2luaXQobWlub3IsICJoYW5ncmQiKTsKKwlpZiAoSVNfRVJSKHJkKSkgeworCQlyZXQgPSBQ VFJfRVJSKHJkKTsKKwkJZ290byBmYWlsOworCX0KKworCXByaXYtPmhhbmdyZCA9IHJkOworCiAJ cmV0dXJuIDA7CiAKIGZhaWw6CiAJbXNtX3JkX2RlYnVnZnNfY2xlYW51cChwcml2KTsKLQlyZXR1 cm4gLTE7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBtc21fcmRfZGVidWdmc19jbGVhbnVwKHN0 cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IG1zbV9yZF9zdGF0ZSAqcmQg PSBwcml2LT5yZDsKLQotCWlmICghcmQpCi0JCXJldHVybjsKLQorCXJkX2NsZWFudXAocHJpdi0+ cmQpOwogCXByaXYtPnJkID0gTlVMTDsKLQltdXRleF9kZXN0cm95KCZyZC0+cmVhZF9sb2NrKTsK LQlrZnJlZShyZCk7CisKKwlyZF9jbGVhbnVwKHByaXYtPmhhbmdyZCk7CisJcHJpdi0+aGFuZ3Jk ID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgc25hcHNob3RfYnVmKHN0cnVjdCBtc21fcmRfc3Rh dGUgKnJkLApAQCAtMzA0LDExICszNDYsMTAgQEAgc3RhdGljIHZvaWQgc25hcHNob3RfYnVmKHN0 cnVjdCBtc21fcmRfc3RhdGUgKnJkLAogfQogCiAvKiBjYWxsZWQgdW5kZXIgc3RydWN0X211dGV4 ICovCi12b2lkIG1zbV9yZF9kdW1wX3N1Ym1pdChzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQgKnN1Ym1p dCkKK3ZvaWQgbXNtX3JkX2R1bXBfc3VibWl0KHN0cnVjdCBtc21fcmRfc3RhdGUgKnJkLCBzdHJ1 Y3QgbXNtX2dlbV9zdWJtaXQgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g c3VibWl0LT5kZXY7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Ci0Jc3RydWN0IG1zbV9yZF9zdGF0ZSAqcmQgPSBwcml2LT5yZDsKKwlzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnRhc2s7CiAJY2hhciBtc2dbMTI4XTsKIAlpbnQgaSwgbjsKIApAQCAtMzIwLDkg KzM2MSwxNyBAQCB2b2lkIG1zbV9yZF9kdW1wX3N1Ym1pdChzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQg KnN1Ym1pdCkKIAkgKi8KIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211 dGV4KSk7CiAKLQluID0gc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiUuKnMvJWQ6IGZlbmNl PSV1IiwKLQkJCVRBU0tfQ09NTV9MRU4sIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJl bnQpLAotCQkJc3VibWl0LT5mZW5jZS0+c2Vxbm8pOworCXJjdV9yZWFkX2xvY2soKTsKKwl0YXNr ID0gcGlkX3Rhc2soc3VibWl0LT5waWQsIFBJRFRZUEVfUElEKTsKKwlpZiAodGFzaykgeworCQlu ID0gc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiUuKnMvJWQ6IGZlbmNlPSV1IiwKKwkJCQlU QVNLX0NPTU1fTEVOLCB0YXNrLT5jb21tLAorCQkJCXBpZF9ucihzdWJtaXQtPnBpZCksIHN1Ym1p dC0+c2Vxbm8pOworCX0gZWxzZSB7CisJCW4gPSBzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAi Pz8/LyVkOiBmZW5jZT0ldSIsCisJCQkJcGlkX25yKHN1Ym1pdC0+cGlkKSwgc3VibWl0LT5zZXFu byk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmRfd3JpdGVfc2VjdGlvbihyZCwgUkRf Q01ELCBtc2csIEFMSUdOKG4sIDQpKTsKIAotLSAKMi4xMy42CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVk cmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934108AbdJXNX0 (ORCPT ); Tue, 24 Oct 2017 09:23:26 -0400 Received: from mail-qt0-f196.google.com ([209.85.216.196]:54232 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933777AbdJXNXV (ORCPT ); Tue, 24 Oct 2017 09:23:21 -0400 X-Google-Smtp-Source: ABhQp+SC/gwKaMIF5wnkffuTv5wYLt024L+5p+ohf37tqbUgKRoew50Lx4ISv40SYyu5D37dtttBaA== From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Jordan Crouse , Rob Clark , David Airlie , linux-kernel@vger.kernel.org Subject: [PATCH 3/6] drm/msm: split rd debugfs file Date: Tue, 24 Oct 2017 09:22:50 -0400 Message-Id: <20171024132256.20286-4-robdclark@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20171024132256.20286-1-robdclark@gmail.com> References: <20171024132256.20286-1-robdclark@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Split into two instances, the existing $debugfs/rd which continues to dump all submits, and $debugfs/hangrd which will be used to dump just submits that cause gpu hangs (and eventually faults, but that will require some iommu framework enhancements). Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.h | 5 ++- drivers/gpu/drm/msm/msm_gpu.c | 2 +- drivers/gpu/drm/msm/msm_rd.c | 101 +++++++++++++++++++++++++++++++----------- 3 files changed, 79 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 666fce66f9dd..b01bd7fa9c2b 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -108,7 +108,8 @@ struct msm_drm_private { struct drm_fb_helper *fbdev; - struct msm_rd_state *rd; + struct msm_rd_state *rd; /* debugfs to dump all submits */ + struct msm_rd_state *hangrd; /* debugfs to dump hanging submits */ struct msm_perf_state *perf; /* list of GEM objects: */ @@ -298,7 +299,7 @@ void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m); int msm_debugfs_late_init(struct drm_device *dev); int msm_rd_debugfs_init(struct drm_minor *minor); void msm_rd_debugfs_cleanup(struct msm_drm_private *priv); -void msm_rd_dump_submit(struct msm_gem_submit *submit); +void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit); int msm_perf_debugfs_init(struct drm_minor *minor); void msm_perf_debugfs_cleanup(struct msm_drm_private *priv); #else diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index d26a7282466e..5baeb34f098e 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -556,7 +556,7 @@ void msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit, list_add_tail(&submit->node, &ring->submits); - msm_rd_dump_submit(submit); + msm_rd_dump_submit(priv->rd, submit); update_sw_cntrs(gpu); diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c index 981bb17c11a7..d689407c809a 100644 --- a/drivers/gpu/drm/msm/msm_rd.c +++ b/drivers/gpu/drm/msm/msm_rd.c @@ -19,11 +19,17 @@ * * tail -f /sys/kernel/debug/dri//rd > logfile.rd * - * To log the cmdstream in a format that is understood by freedreno/cffdump + * to log the cmdstream in a format that is understood by freedreno/cffdump * utility. By comparing the last successfully completed fence #, to the * cmdstream for the next fence, you can narrow down which process and submit * caused the gpu crash/lockup. * + * Additionally: + * + * tail -f /sys/kernel/debug/dri//hangrd > logfile.rd + * + * will capture just the cmdstream from submits which triggered a GPU hang. + * * This bypasses drm_debugfs_create_files() mainly because we need to use * our own fops for a bit more control. In particular, we don't want to * do anything if userspace doesn't have the debugfs file open. @@ -220,53 +226,89 @@ static const struct file_operations rd_debugfs_fops = { .release = rd_release, }; -int msm_rd_debugfs_init(struct drm_minor *minor) + +static void rd_cleanup(struct msm_rd_state *rd) +{ + if (!rd) + return; + + mutex_destroy(&rd->read_lock); + kfree(rd); +} + +static struct msm_rd_state *rd_init(struct drm_minor *minor, const char *name) { - struct msm_drm_private *priv = minor->dev->dev_private; struct msm_rd_state *rd; struct dentry *ent; - - /* only create on first minor: */ - if (priv->rd) - return 0; + int ret = 0; rd = kzalloc(sizeof(*rd), GFP_KERNEL); if (!rd) - return -ENOMEM; + return ERR_PTR(-ENOMEM); rd->dev = minor->dev; rd->fifo.buf = rd->buf; mutex_init(&rd->read_lock); - priv->rd = rd; init_waitqueue_head(&rd->fifo_event); - ent = debugfs_create_file("rd", S_IFREG | S_IRUGO, + ent = debugfs_create_file(name, S_IFREG | S_IRUGO, minor->debugfs_root, rd, &rd_debugfs_fops); if (!ent) { - DRM_ERROR("Cannot create /sys/kernel/debug/dri/%pd/rd\n", - minor->debugfs_root); + DRM_ERROR("Cannot create /sys/kernel/debug/dri/%pd/%s\n", + minor->debugfs_root, name); + ret = -ENOMEM; goto fail; } + return rd; + +fail: + rd_cleanup(rd); + return ERR_PTR(ret); +} + +int msm_rd_debugfs_init(struct drm_minor *minor) +{ + struct msm_drm_private *priv = minor->dev->dev_private; + struct msm_rd_state *rd; + int ret; + + /* only create on first minor: */ + if (priv->rd) + return 0; + + rd = rd_init(minor, "rd"); + if (IS_ERR(rd)) { + ret = PTR_ERR(rd); + goto fail; + } + + priv->rd = rd; + + rd = rd_init(minor, "hangrd"); + if (IS_ERR(rd)) { + ret = PTR_ERR(rd); + goto fail; + } + + priv->hangrd = rd; + return 0; fail: msm_rd_debugfs_cleanup(priv); - return -1; + return ret; } void msm_rd_debugfs_cleanup(struct msm_drm_private *priv) { - struct msm_rd_state *rd = priv->rd; - - if (!rd) - return; - + rd_cleanup(priv->rd); priv->rd = NULL; - mutex_destroy(&rd->read_lock); - kfree(rd); + + rd_cleanup(priv->hangrd); + priv->hangrd = NULL; } static void snapshot_buf(struct msm_rd_state *rd, @@ -304,11 +346,10 @@ static void snapshot_buf(struct msm_rd_state *rd, } /* called under struct_mutex */ -void msm_rd_dump_submit(struct msm_gem_submit *submit) +void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit) { struct drm_device *dev = submit->dev; - struct msm_drm_private *priv = dev->dev_private; - struct msm_rd_state *rd = priv->rd; + struct task_struct *task; char msg[128]; int i, n; @@ -320,9 +361,17 @@ void msm_rd_dump_submit(struct msm_gem_submit *submit) */ WARN_ON(!mutex_is_locked(&dev->struct_mutex)); - n = snprintf(msg, sizeof(msg), "%.*s/%d: fence=%u", - TASK_COMM_LEN, current->comm, task_pid_nr(current), - submit->fence->seqno); + rcu_read_lock(); + task = pid_task(submit->pid, PIDTYPE_PID); + if (task) { + n = snprintf(msg, sizeof(msg), "%.*s/%d: fence=%u", + TASK_COMM_LEN, task->comm, + pid_nr(submit->pid), submit->seqno); + } else { + n = snprintf(msg, sizeof(msg), "???/%d: fence=%u", + pid_nr(submit->pid), submit->seqno); + } + rcu_read_unlock(); rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); -- 2.13.6