From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH 1/6] drm/dp_mst: Introduce drm_dp_mst_connector_atomic_check() Date: Tue, 18 Sep 2018 19:06:17 -0400 Message-ID: <20180918230637.20700-2-lyude@redhat.com> References: <20180918230637.20700-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180918230637.20700-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: David Airlie , Gustavo Padovan , Maarten Lankhorst , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sean Paul List-Id: amd-gfx.lists.freedesktop.org Q3VycmVudGx5IHRoZSB3YXkgdGhhdCB3ZSBwcmV2ZW50IHVzZXJzcGFjZSBmcm9tIHBlcmZvcm1p bmcgbmV3IG1vZGVzZXRzCm9uIE1TVCBjb25uZWN0b3JzIHRoYXQgaGF2ZSBqdXN0IGJlZW4gZGVz dHJveWVkIGlzIHJhdGhlciBicm9rZW4uClRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgYWN0dWFsIERS TSBEUCBNU1QgdG9wb2xvZ3kgaGVscGVycyB0aGF0IGNoZWNrcwp3aGV0aGVyIG9yIG5vdCBhIGNv bm5lY3RvciBzdGlsbCBleGlzdHMsIGluc3RlYWQgZWFjaCBEUk0gZHJpdmVyIGRvZXMKdGhpcyBv biBpdCdzIG93biwgdXN1YWxseSBieSByZXR1cm5pbmcgTlVMTCBmcm9tIHRoZSBiZXN0X2VuY29k ZXIKY2FsbGJhY2sgd2hpY2ggaW4gdHVybiwgY2F1c2VzIHRoZSBhdG9taWMgY29tbWl0IHRvIGZh aWwuCgpIb3dldmVyLCB0aGlzIGlzIHdyb25nIGluIGEgcmF0aGVyIHN1YnRsZSB3YXkuIElmIC0+ YmVzdF9lbmNvZGVyKCkKcmV0dXJucyBOVUxMLCB0aGlzIG1ha2VzIEFMTCBtb2Rlc2V0cyBpbnZv bHZpbmcgdGhlIGNvbm5lY3RvciBmYWlsLiBUaGlzCmluY2x1ZGVzIG1vZGVzZXRzIGZyb20gdXNl cnNwYWNlIHRoYXQgd291bGQgc2h1dCBvZmYgdGhlIENSVENzIGJlaW5nCnVzZWQgYnkgdGhlIGNv bm5lY3Rvci4gU2luY2UgdGhpcyByZXN1bHRzIGluIGJsb2NraW5nIGFueSBjaGFuZ2VzIHRvIGEK Y29ubmVjdG9yJ3MgRFBNUyBwcm9wLCBpdCBoYXMgdGhlIHNpZGVhZmZlY3Qgb2YgcHJldmVudGlu ZyBsZWdhY3kKbW9kZXNldHRpbmcgdXNlcnMgZnJvbSBldmVyIGRpc2FibGluZyBhIENSVEMgdGhh dCB3YXMgcHJldmlvdXNseSBlbmFibGVkCmZvciB1c2UgaW4gYW4gTVNUIHRvcG9sb2d5LiBBbiBl eGFtcGxlIG9mIHRoaXMsIHdoZXJlIFggdHJpZXMgdG8KY2hhbmdlIHRoZSBEUE1TIHByb3BlcnR5 IG9mIGFuIE1TVCBjb25uZWN0b3IgdGhhdCB3YXMganVzdCBkZXRhY2hlZCBmcm9tCnRoZSBzeXN0 ZW06CgpbIDI5MDguMzIwMTMxXSBbZHJtOmRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcyBbZHJtX2ttc19oZWxwZXJdXSBbQ09OTkVDVE9SOjgyOkRQLTZdClsgMjkwOC4zMjAx NDhdIFtkcm06ZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzIFtkcm1fa21z X2hlbHBlcl1dIFtDT05ORUNUT1I6ODI6RFAtNl0gc3RhdHVzIHVwZGF0ZWQgZnJvbSBjb25uZWN0 ZWQgdG8gZGlzY29ubmVjdGVkClsgMjkwOC4zMjAxNjZdIFtkcm06ZHJtX2hlbHBlcl9wcm9iZV9z aW5nbGVfY29ubmVjdG9yX21vZGVzIFtkcm1fa21zX2hlbHBlcl1dIFtDT05ORUNUT1I6ODI6RFAt Nl0gZGlzY29ubmVjdGVkClsgMjkwOC4zMjAxOTNdIFtkcm06ZHJtX21vZGVfb2JqZWN0X3B1dC5w YXJ0LjIgW2RybV1dIE9CSiBJRDogMTExICgxKQpbIDI5MDguMzIwMjMwXSBbZHJtOmRybV9zeXNm c19ob3RwbHVnX2V2ZW50IFtkcm1dXSBnZW5lcmF0aW5nIGhvdHBsdWcgZXZlbnQKLi4uClsgMjkw OC42Mzg1MzldIFtkcm06ZHJtX2lvY3RsIFtkcm1dXSBwaWQ9MTI5MjgsIGRldj0weGUyMDEsIGF1 dGg9MSwgRFJNX0lPQ1RMX01PREVfU0VUUFJPUEVSVFkKWyAyOTA4LjYzODU0Nl0gW2RybTpkcm1f YXRvbWljX3N0YXRlX2luaXQgW2RybV1dIEFsbG9jYXRlZCBhdG9taWMgc3RhdGUgMDAwMDAwMDA3 MTU1YmE0OQpbIDI5MDguNjM4NTUzXSBbZHJtOmRybV9tb2RlX29iamVjdF9nZXQgW2RybV1dIE9C SiBJRDogMTE0ICgxKQpbIDI5MDguNjM4NTYwXSBbZHJtOmRybV9tb2RlX29iamVjdF9nZXQgW2Ry bV1dIE9CSiBJRDogMTA4ICgxKQpbIDI5MDguNjM4NTY4XSBbZHJtOmRybV9hdG9taWNfZ2V0X2Ny dGNfc3RhdGUgW2RybV1dIEFkZGVkIFtDUlRDOjQxOmhlYWQtMF0gMDAwMDAwMDA5N2E2Mzk2ZSBz dGF0ZSB0byAwMDAwMDAwMDcxNTViYTQ5ClsgMjkwOC42Mzg1NzVdIFtkcm06ZHJtX2F0b21pY19h ZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyBbZHJtXV0gQWRkaW5nIGFsbCBjdXJyZW50IGNvbm5lY3Rv cnMgZm9yIFtDUlRDOjQxOmhlYWQtMF0gdG8gMDAwMDAwMDA3MTU1YmE0OQpbIDI5MDguNjM4NTgy XSBbZHJtOmRybV9tb2RlX29iamVjdF9nZXQgW2RybV1dIE9CSiBJRDogODIgKDMpClsgMjkwOC42 Mzg1ODldIFtkcm06ZHJtX21vZGVfb2JqZWN0X2dldCBbZHJtXV0gT0JKIElEOiA4MiAoNCkKWyAy OTA4LjYzODU5Nl0gW2RybTpkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUgW2RybV1dIEFk ZGVkIFtDT05ORUNUT1I6ODI6RFAtNl0gMDAwMDAwMDA4NzQyNzE0NCBzdGF0ZSB0byAwMDAwMDAw MDcxNTViYTQ5ClsgMjkwOC42Mzg2MDNdIFtkcm06ZHJtX2F0b21pY19jaGVja19vbmx5IFtkcm1d XSBjaGVja2luZyAwMDAwMDAwMDcxNTViYTQ5ClsgMjkwOC42Mzg2MDldIFtkcm06ZHJtX2F0b21p Y19oZWxwZXJfY2hlY2tfbW9kZXNldCBbZHJtX2ttc19oZWxwZXJdXSBbQ1JUQzo0MTpoZWFkLTBd IGFjdGl2ZSBjaGFuZ2VkClsgMjkwOC42Mzg2MTNdIFtkcm06ZHJtX2F0b21pY19oZWxwZXJfY2hl Y2tfbW9kZXNldCBbZHJtX2ttc19oZWxwZXJdXSBVcGRhdGluZyByb3V0aW5nIGZvciBbQ09OTkVD VE9SOjgyOkRQLTZdClsgMjkwOC42Mzg2MTZdIFtkcm06ZHJtX2F0b21pY19oZWxwZXJfY2hlY2tf bW9kZXNldCBbZHJtX2ttc19oZWxwZXJdXSBObyBzdWl0YWJsZSBlbmNvZGVyIGZvdW5kIGZvciBb Q09OTkVDVE9SOjgyOkRQLTZdClsgMjkwOC42Mzg2MjNdIFtkcm06ZHJtX2F0b21pY19jaGVja19v bmx5IFtkcm1dXSBhdG9taWMgZHJpdmVyIGNoZWNrIGZvciAwMDAwMDAwMDcxNTViYTQ5IGZhaWxl ZDogLTIyClsgMjkwOC42Mzg2MzBdIFtkcm06ZHJtX2F0b21pY19zdGF0ZV9kZWZhdWx0X2NsZWFy IFtkcm1dXSBDbGVhcmluZyBhdG9taWMgc3RhdGUgMDAwMDAwMDA3MTU1YmE0OQpbIDI5MDguNjM4 NjM3XSBbZHJtOmRybV9tb2RlX29iamVjdF9wdXQucGFydC4yIFtkcm1dXSBPQkogSUQ6IDgyICg0 KQpbIDI5MDguNjM4NjQzXSBbZHJtOmRybV9tb2RlX29iamVjdF9wdXQucGFydC4yIFtkcm1dXSBP QkogSUQ6IDgyICgzKQpbIDI5MDguNjM4NjUwXSBbZHJtOmRybV9tb2RlX29iamVjdF9wdXQucGFy dC4yIFtkcm1dXSBPQkogSUQ6IDExNCAoMikKWyAyOTA4LjYzODY1Nl0gW2RybTpkcm1fbW9kZV9v YmplY3RfcHV0LnBhcnQuMiBbZHJtXV0gT0JKIElEOiAxMDggKDIpClsgMjkwOC42Mzg2NjNdIFtk cm06X19kcm1fYXRvbWljX3N0YXRlX2ZyZWUgW2RybV1dIEZyZWVpbmcgYXRvbWljIHN0YXRlIDAw MDAwMDAwNzE1NWJhNDkKWyAyOTA4LjYzODY2OV0gW2RybTpkcm1fbW9kZV9vYmplY3RfcHV0LnBh cnQuMiBbZHJtXV0gT0JKIElEOiA4MiAoMikKWyAyOTA4LjYzODY3Nl0gW2RybTpkcm1faW9jdGwg W2RybV1dIHBpZD0xMjkyOCwgcmV0ID0gLTIyCgpXaGlsZSB0aGlzIGRvZXNuJ3QgdXN1YWxseSBy ZXN1bHQgaW4gYW55IGVycm9ycyB0aGF0IHdvdWxkIGJlIG9idmlvdXMgdG8KdGhlIHVzZXIsIGl0 IGRvZXMgcmVzdWx0IGluIHVzIGxlYXZpbmcgZGlzcGxheSByZXNvdXJjZXMgb24uIFRoaXMgaW4K dHVybiBsZWFkcyB0byB1bndhbnRlZCBzaWRlYWZmZWN0cyBsaWtlIGluYWN0aXZlIEdQVXMgYmVp bmcgbGVmdCBvbgoodXN1YWxseSBmcm9tIHRoZSByZXN1bHRpbmcgbGVha2VkIHJ1bnRpbWUgUE0g cmVmKS4KClNvLCBwcm92aWRlIGFuIGVhc2llciB3YXkgb2YgZG9pbmcgdGhpcyB0aGF0IGRvZXNu J3QgcmVxdWlyZSBicmVha2luZwotPmJlc3RfZW5jb2RlcigpOiBhZGQgYSBjb21tb24gZHJtX2Rw X21zdF9jb25uZWN0b3JfYXRvbWljX2NoZWNrKCkKZnVuY3Rpb24gdGhhdCBEUk0gZHJpdmVycyBj YW4gY2FsbCBpbiBvcmRlciB0byBoYXZlIENSVEMgZW5hYmxpbmcKY29tbWl0cyBmYWlsIGF1dG9t YXRpY2FsbHkgaWYgdGhlIE1TVCBwb3J0IGRyaXZpbmcgdGhlIGNvbm5lY3RvciBubwpsb25nZXIg ZXhpc3RzLiBXZSdsbCBhbHNvIGJlIGFibGUgdG8gZXhwYW5kIHVwb24gdGhpcyBsYXRlciBhcyB3 ZWxsIG9uY2UKd2UgYWRkIE1TVCBmYWxsYmFjayByZXRyYWluaW5nIHN1cHBvcnQuCgpTaWduZWQt b2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgpDYzogc3RhYmxlQHZnZXIua2Vy bmVsLm9yZwotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgfCA3NiAr KysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVy LmggICAgICAgfCAgMyArKwogMiBmaWxlcyBjaGFuZ2VkLCA3OSBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKaW5kZXggNzc4MDU2N2FhNjY5Li4wMTYyZDRi ZjI1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwpAQCAtMzEyOSw2ICsz MTI5LDgyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgbXN0 X3N0YXRlX2Z1bmNzID0gewogCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9kcF9tc3RfZGVz dHJveV9zdGF0ZSwKIH07CiAKK3N0YXRpYyBib29sCitkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9zdGls bF9leGlzdHMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAorCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoICptc3RiKQoreworCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7CisJYm9vbCBleGlz dHMgPSBmYWxzZTsKKworCW1zdGIgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9tc3RiX3JlZihtZ3Is IG1zdGIpOworCWlmICghbXN0YikKKwkJcmV0dXJuIGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9l bnRyeShwb3J0LCAmbXN0Yi0+cG9ydHMsIG5leHQpIHsKKwkJcG9ydCA9IGRybV9kcF9nZXRfdmFs aWRhdGVkX3BvcnRfcmVmKG1nciwgcG9ydCk7CisJCWlmICghcG9ydCkKKwkJCWNvbnRpbnVlOwor CisJCWV4aXN0cyA9IChwb3J0LT5jb25uZWN0b3IgPT0gY29ubmVjdG9yIHx8CisJCQkgIChwb3J0 LT5tc3RiICYmCisJCQkgICBkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9zdGlsbF9leGlzdHMoY29ubmVj dG9yLCBtZ3IsCisJCQkJCQkJICAgICBwb3J0LT5tc3RiKSkpOworCisJCWRybV9kcF9wdXRfcG9y dChwb3J0KTsKKwkJaWYgKGV4aXN0cykKKwkJCWJyZWFrOworCX0KKworCWRybV9kcF9wdXRfbXN0 X2JyYW5jaF9kZXZpY2UobXN0Yik7CisJcmV0dXJuIGV4aXN0czsKK30KKworLyoqCisgKiBkcm1f ZHBfbXN0X2Nvbm5lY3Rvcl9hdG9taWNfY2hlY2sgLSBIZWxwZXIgZm9yIHZhbGlkYXRpbmcgYSBu ZXcgYXRvbWljCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSBv biBhbiBNU1QgY29ubmVjdG9yCisgKiBAY29ubmVjdG9yOiBkcm0gY29ubmVjdG9yCisgKiBAY29u bmVjdG9yX3N0YXRlOiB0aGUgbmV3IGF0b21pYyBzdGF0ZSBvZiBAY29ubmVjdG9yCisgKiBAbWdy OiB0aGUgTVNUIHRvcG9sb2d5IG1nciBmb3IgQGNvbm5lY3RvcgorICoKKyAqIFRoaXMgZnVuY3Rp b24gcGVyZm9ybXMgdmFyaW91cyBhdG9taWMgY2hlY2tzIHRoYXQgYXBwbHkgdG8gYWxsIGRyaXZl cnMKKyAqIHVzaW5nIHRoZSBEUk0gRFAgTVNUIGhlbHBlcnMuIFRoaXMgc2hvdWxkIGJlIGNhbGxl ZCBieSBhbGwgZHJpdmVycyBhdCB0aGUKKyAqIHN0YXJ0IG9mIHRoZSBhdG9taWNfY2hlY2sgZnVu Y3Rpb24gZm9yIHRoZWlyIE1TVCBjb25uZWN0b3JzLgorICoKKyAqIFJldHVybiAwIGZvciBzdWNj ZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludAorZHJtX2Rw X21zdF9jb25uZWN0b3JfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCisJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlLAor CQkJCSAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpCit7CisJc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY29ubmVjdG9yX3N0YXRlLT5zdGF0ZTsKKwlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBjb25uZWN0b3Jfc3RhdGUtPmNydGM7CisJc3RydWN0IGRybV9jcnRj X3N0YXRlICpuZXdfY3J0Y19zdGF0ZTsKKworCWlmICghY3J0YykKKwkJcmV0dXJuIDA7CisKKwlu ZXdfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBjcnRj KTsKKwlpZiAoIW5ld19jcnRjX3N0YXRlKQorCQlyZXR1cm4gMDsKKworCWlmICghZHJtX2F0b21p Y19jcnRjX25lZWRzX21vZGVzZXQobmV3X2NydGNfc3RhdGUpIHx8CisJICAgICFuZXdfY3J0Y19z dGF0ZS0+YWN0aXZlKQorCQlyZXR1cm4gMDsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBwb3J0 IGZvciB0aGlzIE1TVCBjb25uZWN0b3Igc3RpbGwgZXhpc3RzICovCisJaWYgKCFkcm1fZHBfbXN0 X2Nvbm5lY3Rvcl9zdGlsbF9leGlzdHMoY29ubmVjdG9yLCBtZ3IsCisJCQkJCSAgICAgICBtZ3It Pm1zdF9wcmltYXJ5KSkgeworCQlEUk1fREVCVUdfQVRPTUlDKCJbQ09OTkVDVE9SOiVkOiVzXSBo YXMgZGlzYXBwZWFyZWQgZnJvbSB0aGUgTVNUIHRvcG9sb2d5XG4iLAorCQkJCSBjb25uZWN0b3It PmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl dHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9hdG9taWNfY2hl Y2spOworCiAvKioKICAqIGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZTogZ2V0IE1T VCB0b3BvbG9neSBzdGF0ZQogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9tc3Rf aGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCmluZGV4IDdmNzhkMjZh MDc2Ni4uOGUzM2MyYzg1ZDFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hl bHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKQEAgLTYyNSw2ICs2 MjUsOSBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3N1c3BlbmQoc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwogaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3Jl c3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7CiBzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSAqZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCQkJCQkJICAgIHN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyKTsKK2ludCBkcm1fZHBfbXN0X2Nvbm5lY3Rvcl9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgICBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlLAorCQkJCSAgICAgIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNw aV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkJICBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQsIGludCBwYm4pOwotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL25vdXZlYXUK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C6283ECE564 for ; Tue, 18 Sep 2018 23:07:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 816052133F for ; Tue, 18 Sep 2018 23:07:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 816052133F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728249AbeISEl4 (ORCPT ); Wed, 19 Sep 2018 00:41:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44856 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725873AbeISElz (ORCPT ); Wed, 19 Sep 2018 00:41:55 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CA6223082DD0; Tue, 18 Sep 2018 23:07:04 +0000 (UTC) Received: from whitewolf.lyude.net.com (ovpn-125-172.rdu2.redhat.com [10.10.125.172]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7D9597A4D1; Tue, 18 Sep 2018 23:07:03 +0000 (UTC) From: Lyude Paul To: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org, Gustavo Padovan , Maarten Lankhorst , Sean Paul , David Airlie , linux-kernel@vger.kernel.org Subject: [PATCH 1/6] drm/dp_mst: Introduce drm_dp_mst_connector_atomic_check() Date: Tue, 18 Sep 2018 19:06:17 -0400 Message-Id: <20180918230637.20700-2-lyude@redhat.com> In-Reply-To: <20180918230637.20700-1-lyude@redhat.com> References: <20180918230637.20700-1-lyude@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Tue, 18 Sep 2018 23:07:05 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently the way that we prevent userspace from performing new modesets on MST connectors that have just been destroyed is rather broken. There's nothing in the actual DRM DP MST topology helpers that checks whether or not a connector still exists, instead each DRM driver does this on it's own, usually by returning NULL from the best_encoder callback which in turn, causes the atomic commit to fail. However, this is wrong in a rather subtle way. If ->best_encoder() returns NULL, this makes ALL modesets involving the connector fail. This includes modesets from userspace that would shut off the CRTCs being used by the connector. Since this results in blocking any changes to a connector's DPMS prop, it has the sideaffect of preventing legacy modesetting users from ever disabling a CRTC that was previously enabled for use in an MST topology. An example of this, where X tries to change the DPMS property of an MST connector that was just detached from the system: [ 2908.320131] [drm:drm_helper_probe_single_connector_modes [drm_kms_helper]] [CONNECTOR:82:DP-6] [ 2908.320148] [drm:drm_helper_probe_single_connector_modes [drm_kms_helper]] [CONNECTOR:82:DP-6] status updated from connected to disconnected [ 2908.320166] [drm:drm_helper_probe_single_connector_modes [drm_kms_helper]] [CONNECTOR:82:DP-6] disconnected [ 2908.320193] [drm:drm_mode_object_put.part.2 [drm]] OBJ ID: 111 (1) [ 2908.320230] [drm:drm_sysfs_hotplug_event [drm]] generating hotplug event ... [ 2908.638539] [drm:drm_ioctl [drm]] pid=12928, dev=0xe201, auth=1, DRM_IOCTL_MODE_SETPROPERTY [ 2908.638546] [drm:drm_atomic_state_init [drm]] Allocated atomic state 000000007155ba49 [ 2908.638553] [drm:drm_mode_object_get [drm]] OBJ ID: 114 (1) [ 2908.638560] [drm:drm_mode_object_get [drm]] OBJ ID: 108 (1) [ 2908.638568] [drm:drm_atomic_get_crtc_state [drm]] Added [CRTC:41:head-0] 0000000097a6396e state to 000000007155ba49 [ 2908.638575] [drm:drm_atomic_add_affected_connectors [drm]] Adding all current connectors for [CRTC:41:head-0] to 000000007155ba49 [ 2908.638582] [drm:drm_mode_object_get [drm]] OBJ ID: 82 (3) [ 2908.638589] [drm:drm_mode_object_get [drm]] OBJ ID: 82 (4) [ 2908.638596] [drm:drm_atomic_get_connector_state [drm]] Added [CONNECTOR:82:DP-6] 0000000087427144 state to 000000007155ba49 [ 2908.638603] [drm:drm_atomic_check_only [drm]] checking 000000007155ba49 [ 2908.638609] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] [CRTC:41:head-0] active changed [ 2908.638613] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] Updating routing for [CONNECTOR:82:DP-6] [ 2908.638616] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] No suitable encoder found for [CONNECTOR:82:DP-6] [ 2908.638623] [drm:drm_atomic_check_only [drm]] atomic driver check for 000000007155ba49 failed: -22 [ 2908.638630] [drm:drm_atomic_state_default_clear [drm]] Clearing atomic state 000000007155ba49 [ 2908.638637] [drm:drm_mode_object_put.part.2 [drm]] OBJ ID: 82 (4) [ 2908.638643] [drm:drm_mode_object_put.part.2 [drm]] OBJ ID: 82 (3) [ 2908.638650] [drm:drm_mode_object_put.part.2 [drm]] OBJ ID: 114 (2) [ 2908.638656] [drm:drm_mode_object_put.part.2 [drm]] OBJ ID: 108 (2) [ 2908.638663] [drm:__drm_atomic_state_free [drm]] Freeing atomic state 000000007155ba49 [ 2908.638669] [drm:drm_mode_object_put.part.2 [drm]] OBJ ID: 82 (2) [ 2908.638676] [drm:drm_ioctl [drm]] pid=12928, ret = -22 While this doesn't usually result in any errors that would be obvious to the user, it does result in us leaving display resources on. This in turn leads to unwanted sideaffects like inactive GPUs being left on (usually from the resulting leaked runtime PM ref). So, provide an easier way of doing this that doesn't require breaking ->best_encoder(): add a common drm_dp_mst_connector_atomic_check() function that DRM drivers can call in order to have CRTC enabling commits fail automatically if the MST port driving the connector no longer exists. We'll also be able to expand upon this later as well once we add MST fallback retraining support. Signed-off-by: Lyude Paul Cc: stable@vger.kernel.org --- drivers/gpu/drm/drm_dp_mst_topology.c | 76 +++++++++++++++++++++++++++ include/drm/drm_dp_mst_helper.h | 3 ++ 2 files changed, 79 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 7780567aa669..0162d4bf2549 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -3129,6 +3129,82 @@ static const struct drm_private_state_funcs mst_state_funcs = { .atomic_destroy_state = drm_dp_mst_destroy_state, }; +static bool +drm_dp_mst_connector_still_exists(struct drm_connector *connector, + struct drm_dp_mst_topology_mgr *mgr, + struct drm_dp_mst_branch *mstb) +{ + struct drm_dp_mst_port *port; + bool exists = false; + + mstb = drm_dp_get_validated_mstb_ref(mgr, mstb); + if (!mstb) + return false; + + list_for_each_entry(port, &mstb->ports, next) { + port = drm_dp_get_validated_port_ref(mgr, port); + if (!port) + continue; + + exists = (port->connector == connector || + (port->mstb && + drm_dp_mst_connector_still_exists(connector, mgr, + port->mstb))); + + drm_dp_put_port(port); + if (exists) + break; + } + + drm_dp_put_mst_branch_device(mstb); + return exists; +} + +/** + * drm_dp_mst_connector_atomic_check - Helper for validating a new atomic + * state on an MST connector + * @connector: drm connector + * @connector_state: the new atomic state of @connector + * @mgr: the MST topology mgr for @connector + * + * This function performs various atomic checks that apply to all drivers + * using the DRM DP MST helpers. This should be called by all drivers at the + * start of the atomic_check function for their MST connectors. + * + * Return 0 for success, or negative error code on failure. + */ +int +drm_dp_mst_connector_atomic_check(struct drm_connector *connector, + struct drm_connector_state *connector_state, + struct drm_dp_mst_topology_mgr *mgr) +{ + struct drm_atomic_state *state = connector_state->state; + struct drm_crtc *crtc = connector_state->crtc; + struct drm_crtc_state *new_crtc_state; + + if (!crtc) + return 0; + + new_crtc_state = drm_atomic_get_new_crtc_state(state, crtc); + if (!new_crtc_state) + return 0; + + if (!drm_atomic_crtc_needs_modeset(new_crtc_state) || + !new_crtc_state->active) + return 0; + + /* Make sure that the port for this MST connector still exists */ + if (!drm_dp_mst_connector_still_exists(connector, mgr, + mgr->mst_primary)) { + DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] has disappeared from the MST topology\n", + connector->base.id, connector->name); + return -EINVAL; + } + + return 0; +} +EXPORT_SYMBOL(drm_dp_mst_connector_atomic_check); + /** * drm_atomic_get_mst_topology_state: get MST topology state * diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h index 7f78d26a0766..8e33c2c85d1e 100644 --- a/include/drm/drm_dp_mst_helper.h +++ b/include/drm/drm_dp_mst_helper.h @@ -625,6 +625,9 @@ void drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr); int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr); struct drm_dp_mst_topology_state *drm_atomic_get_mst_topology_state(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr); +int drm_dp_mst_connector_atomic_check(struct drm_connector *connector, + struct drm_connector_state *connector_state, + struct drm_dp_mst_topology_mgr *mgr); int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, int pbn); -- 2.17.1