From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Clark Subject: [PATCH 1/2] drm/dp: move hw_mutex up the call stack Date: Thu, 25 Feb 2016 16:15:05 -0500 Message-ID: <1456434906-29600-1-git-send-email-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qg0-x235.google.com (mail-qg0-x235.google.com [IPv6:2607:f8b0:400d:c04::235]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0F5E56E1DF for ; Thu, 25 Feb 2016 21:15:11 +0000 (UTC) Received: by mail-qg0-x235.google.com with SMTP id b35so50593928qge.0 for ; Thu, 25 Feb 2016 13:15:11 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: stable@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org MSkgZG9uJ3QgbGV0IG90aGVyIHRocmVhZHMgdHJ5aW5nIHRvIGJhbmcgb24gYXV4IGNoYW5uZWwg aW50ZXJydXB0IHRoZQpkZWZlciB0aW1lb3V0L2xvZ2ljCjIpIGRvbid0IGxldCBvdGhlciB0aHJl YWRzIGludGVycnVwdCB0aGUgaTJjIG92ZXIgYXV4IGxvZ2ljCgpUZWNobmljYWxseSwgYWNjb3Jk aW5nIHRvIHBlb3BsZSB3aG8gYWN0dWFsbHkgaGF2ZSB0aGUgRFAgc3BlYywgdGhpcwpzaG91bGQg bm90IGJlIHJlcXVpcmVkLiAgSW4gcHJhY3RpY2UsIGl0IG1ha2VzIHNvbWUgdHJvdWJsZXNvbWUg RGVsbAptb25pdG9yIChhbmQgcGVyaGFwcyBvdGhlcnMpIHdvcmssIHNvIHByb2JhYmx5IGEgY2Fz ZSBvZiAiSXQncyBjb21wbGlhbnQKaWYgaXQgd29ya3Mgd2l0aCB3aW5kb3dzIiBvbiB0aGUgaHcg dmVuZG9yJ3MgcGFydC4uCgp2MjogcmViYXNlZCB0byBjb21lIGJlZm9yZSBEUENEL0FVWCBsb2dn aW5nIHBhdGNoIGZvciBlYXNpZXIgYmFja3BvcnQKdG8gc3RhYmxlIGJyYW5jaGVzLgoKUmVwb3J0 ZWQtYnk6IERhdmUgV3lzb2NoYW5za2kgPGR3eXNvY2hhQHJlZGhhdC5jb20+CkJ1Z3ppbGxhOiBo dHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTEyNzQxNTcKQ2M6IHN0 YWJsZUB2Z2VyLmtlcm5lbC5vcmcKU2lnbmVkLW9mZi1ieTogUm9iIENsYXJrIDxyb2JkY2xhcmtA Z21haWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMgfCAyNyArKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCsp LCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hl bHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwppbmRleCA3ZDU4ZjU5Li5k ZjY0ZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0 aWMgaW50IGRybV9kcF9kcGNkX2FjY2VzcyhzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCB1OCByZXF1 ZXN0LAogewogCXN0cnVjdCBkcm1fZHBfYXV4X21zZyBtc2c7CiAJdW5zaWduZWQgaW50IHJldHJ5 OwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1z ZykpOwogCW1zZy5hZGRyZXNzID0gb2Zmc2V0OwpAQCAtMTg3LDYgKzE4Nyw4IEBAIHN0YXRpYyBp bnQgZHJtX2RwX2RwY2RfYWNjZXNzKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHU4IHJlcXVlc3Qs CiAJbXNnLmJ1ZmZlciA9IGJ1ZmZlcjsKIAltc2cuc2l6ZSA9IHNpemU7CiAKKwltdXRleF9sb2Nr KCZhdXgtPmh3X211dGV4KTsKKwogCS8qCiAJICogVGhlIHNwZWNpZmljYXRpb24gZG9lc24ndCBn aXZlIGFueSByZWNvbW1lbmRhdGlvbiBvbiBob3cgb2Z0ZW4gdG8KIAkgKiByZXRyeSBuYXRpdmUg dHJhbnNhY3Rpb25zLiBXZSB1c2VkIHRvIHJldHJ5IDcgdGltZXMgbGlrZSBmb3IKQEAgLTE5NSwy NSArMTk3LDI0IEBAIHN0YXRpYyBpbnQgZHJtX2RwX2RwY2RfYWNjZXNzKHN0cnVjdCBkcm1fZHBf YXV4ICphdXgsIHU4IHJlcXVlc3QsCiAJICovCiAJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMzI7 IHJldHJ5KyspIHsKIAotCQltdXRleF9sb2NrKCZhdXgtPmh3X211dGV4KTsKIAkJZXJyID0gYXV4 LT50cmFuc2ZlcihhdXgsICZtc2cpOwotCQltdXRleF91bmxvY2soJmF1eC0+aHdfbXV0ZXgpOwog CQlpZiAoZXJyIDwgMCkgewogCQkJaWYgKGVyciA9PSAtRUJVU1kpCiAJCQkJY29udGludWU7CiAK LQkJCXJldHVybiBlcnI7CisJCQlnb3RvIHVubG9jazsKIAkJfQogCiAKIAkJc3dpdGNoIChtc2cu cmVwbHkgJiBEUF9BVVhfTkFUSVZFX1JFUExZX01BU0spIHsKIAkJY2FzZSBEUF9BVVhfTkFUSVZF X1JFUExZX0FDSzoKIAkJCWlmIChlcnIgPCBzaXplKQotCQkJCXJldHVybiAtRVBST1RPOwotCQkJ cmV0dXJuIGVycjsKKwkJCQllcnIgPSAtRVBST1RPOworCQkJZ290byB1bmxvY2s7CiAKIAkJY2Fz ZSBEUF9BVVhfTkFUSVZFX1JFUExZX05BQ0s6Ci0JCQlyZXR1cm4gLUVJTzsKKwkJCWVyciA9IC1F SU87CisJCQlnb3RvIHVubG9jazsKIAogCQljYXNlIERQX0FVWF9OQVRJVkVfUkVQTFlfREVGRVI6 CiAJCQl1c2xlZXBfcmFuZ2UoQVVYX1JFVFJZX0lOVEVSVkFMLCBBVVhfUkVUUllfSU5URVJWQUwg KyAxMDApOwpAQCAtMjIyLDcgKzIyMywxMSBAQCBzdGF0aWMgaW50IGRybV9kcF9kcGNkX2FjY2Vz cyhzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCB1OCByZXF1ZXN0LAogCX0KIAogCURSTV9ERUJVR19L TVMoInRvbyBtYW55IHJldHJpZXMsIGdpdmluZyB1cFxuIik7Ci0JcmV0dXJuIC1FSU87CisJZXJy ID0gLUVJTzsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmYXV4LT5od19tdXRleCk7CisJcmV0 dXJuIGVycjsKIH0KIAogLyoqCkBAIC01NDQsOSArNTQ5LDcgQEAgc3RhdGljIGludCBkcm1fZHBf aTJjX2RvX21zZyhzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cg Km1zZykKIAlpbnQgbWF4X3JldHJpZXMgPSBtYXgoNywgZHJtX2RwX2kyY19yZXRyeV9jb3VudCht c2csIGRwX2F1eF9pMmNfc3BlZWRfa2h6KSk7CiAKIAlmb3IgKHJldHJ5ID0gMCwgZGVmZXJfaTJj ID0gMDsgcmV0cnkgPCAobWF4X3JldHJpZXMgKyBkZWZlcl9pMmMpOyByZXRyeSsrKSB7Ci0JCW11 dGV4X2xvY2soJmF1eC0+aHdfbXV0ZXgpOwogCQlyZXQgPSBhdXgtPnRyYW5zZmVyKGF1eCwgbXNn KTsKLQkJbXV0ZXhfdW5sb2NrKCZhdXgtPmh3X211dGV4KTsKIAkJaWYgKHJldCA8IDApIHsKIAkJ CWlmIChyZXQgPT0gLUVCVVNZKQogCQkJCWNvbnRpbnVlOwpAQCAtNjg1LDYgKzY4OCw4IEBAIHN0 YXRpYyBpbnQgZHJtX2RwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3Ry dWN0IGkyY19tc2cgKm1zZ3MsCiAKIAltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwogCisJ bXV0ZXhfbG9jaygmYXV4LT5od19tdXRleCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKysp IHsKIAkJbXNnLmFkZHJlc3MgPSBtc2dzW2ldLmFkZHI7CiAJCWRybV9kcF9pMmNfbXNnX3NldF9y ZXF1ZXN0KCZtc2csICZtc2dzW2ldKTsKQEAgLTczOSw2ICs3NDQsOCBAQCBzdGF0aWMgaW50IGRy bV9kcF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNn ICptc2dzLAogCW1zZy5zaXplID0gMDsKIAkodm9pZClkcm1fZHBfaTJjX2RvX21zZyhhdXgsICZt c2cpOwogCisJbXV0ZXhfdW5sb2NrKCZhdXgtPmh3X211dGV4KTsKKwogCXJldHVybiBlcnI7CiB9 CiAKLS0gCjIuNS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f43.google.com ([209.85.192.43]:35050 "EHLO mail-qg0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751950AbcBYVPL (ORCPT ); Thu, 25 Feb 2016 16:15:11 -0500 Received: by mail-qg0-f43.google.com with SMTP id y89so50613948qge.2 for ; Thu, 25 Feb 2016 13:15:10 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: Jani Nikula , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Daniel Vetter , Rob Clark , stable@vger.kernel.org Subject: [PATCH 1/2] drm/dp: move hw_mutex up the call stack Date: Thu, 25 Feb 2016 16:15:05 -0500 Message-Id: <1456434906-29600-1-git-send-email-robdclark@gmail.com> Sender: stable-owner@vger.kernel.org List-ID: 1) don't let other threads trying to bang on aux channel interrupt the defer timeout/logic 2) don't let other threads interrupt the i2c over aux logic Technically, according to people who actually have the DP spec, this should not be required. In practice, it makes some troublesome Dell monitor (and perhaps others) work, so probably a case of "It's compliant if it works with windows" on the hw vendor's part.. v2: rebased to come before DPCD/AUX logging patch for easier backport to stable branches. Reported-by: Dave Wysochanski Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1274157 Cc: stable@vger.kernel.org Signed-off-by: Rob Clark --- drivers/gpu/drm/drm_dp_helper.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 7d58f59..df64ed1 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -179,7 +179,7 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, { struct drm_dp_aux_msg msg; unsigned int retry; - int err; + int err = 0; memset(&msg, 0, sizeof(msg)); msg.address = offset; @@ -187,6 +187,8 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, msg.buffer = buffer; msg.size = size; + mutex_lock(&aux->hw_mutex); + /* * The specification doesn't give any recommendation on how often to * retry native transactions. We used to retry 7 times like for @@ -195,25 +197,24 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, */ for (retry = 0; retry < 32; retry++) { - mutex_lock(&aux->hw_mutex); err = aux->transfer(aux, &msg); - mutex_unlock(&aux->hw_mutex); if (err < 0) { if (err == -EBUSY) continue; - return err; + goto unlock; } switch (msg.reply & DP_AUX_NATIVE_REPLY_MASK) { case DP_AUX_NATIVE_REPLY_ACK: if (err < size) - return -EPROTO; - return err; + err = -EPROTO; + goto unlock; case DP_AUX_NATIVE_REPLY_NACK: - return -EIO; + err = -EIO; + goto unlock; case DP_AUX_NATIVE_REPLY_DEFER: usleep_range(AUX_RETRY_INTERVAL, AUX_RETRY_INTERVAL + 100); @@ -222,7 +223,11 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, } DRM_DEBUG_KMS("too many retries, giving up\n"); - return -EIO; + err = -EIO; + +unlock: + mutex_unlock(&aux->hw_mutex); + return err; } /** @@ -544,9 +549,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) int max_retries = max(7, drm_dp_i2c_retry_count(msg, dp_aux_i2c_speed_khz)); for (retry = 0, defer_i2c = 0; retry < (max_retries + defer_i2c); retry++) { - mutex_lock(&aux->hw_mutex); ret = aux->transfer(aux, msg); - mutex_unlock(&aux->hw_mutex); if (ret < 0) { if (ret == -EBUSY) continue; @@ -685,6 +688,8 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, memset(&msg, 0, sizeof(msg)); + mutex_lock(&aux->hw_mutex); + for (i = 0; i < num; i++) { msg.address = msgs[i].addr; drm_dp_i2c_msg_set_request(&msg, &msgs[i]); @@ -739,6 +744,8 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, msg.size = 0; (void)drm_dp_i2c_do_msg(aux, &msg); + mutex_unlock(&aux->hw_mutex); + return err; } -- 2.5.0