From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michel Thierry Subject: [PATCH v4 1/3] drm/i915/selftests: Add a GuC doorbells selftest Date: Wed, 15 Nov 2017 10:30:27 -0800 Message-ID: <20171115183029.2990-1-michel.thierry@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 069D76E672 for ; Wed, 15 Nov 2017 18:30:30 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhlIGZpcnN0IHRlc3QgYWltcyB0byBjaGVjayBndWNfaW5pdF9kb29yYmVsbF9odywgY2hhbmdp bmcgdGhlIGV4aXN0aW5nCmd1YyBjbGllbnRzIGFuZCBkb29yYmVsbHMgc3RhdGUgYmVmb3JlIGNh bGxpbmcgaXQuCgpUaGUgc2Vjb25kIHRlc3QgdHJpZXMgdG8gY3JlYXRlIGFzIG1hbnkgY2xpZW50 cyBhcyBpdCBpcyBjdXJyZW50bHkgcG9zc2libGUKKGN1cnJlbnRseSBsaW1pdGVkIHRvIG1heCBu dW1iZXIgb2YgZG9vcmJlbGxzKSBhbmQgZXhlcmNpc2UgdGhlIGRvb3JiZWxsCmFsbG9jL2RlYWxs b2MgY29kZS4KClNpbmNlIG91ciB1c2FnZSBtb2RlIHJlcXVpcmUgdmVyeSBmZXcgY2xpZW50cy9k b29yYmVsbHMsIHRoaXMgY29kZSBoYXMKYmVlbiBleGVyY2lzZWQgdmVyeSBsaWdodGx5IGFuZCBp dCdzIGdvb2QgdG8gaGF2ZSBhIHNpbXBsZSB0ZXN0IGZvciBpdC4KCkFzIHJlZmVyZW5jZSwgdGhp cyB0ZXN0IGFscmVhZHkgaGVscGVkIGlkZW50aWZ5IHRoZSBidWcgZml4ZWQgYnkKY29tbWl0IDdm MWVhMmFjMzAxNyAoImRybS9pOTE1L2d1YzogRml4IGRvb3JiZWxsIGlkIHNlbGVjdGlvbiIpLgoK djI6IEV4dGVuZCBudW1iZXIgb2YgY2xpZW50czsgY2hlY2sgZm9yIGNsaWVudCBhbGxvY2F0aW9u IGZhaWx1cmUgd2hlbgpudW1iZXIgb2YgZG9vcmJlbGxzIGlzIGV4Y2VlZGVkOyB2YWxpZGF0ZSBj bGllbnQgcHJvcGVydGllczsgcmV1c2UKZ3VjX2luaXRfZG9vcmJlbGxfaHcgKENocmlzKS4KCnYz OiBndWNfaW5pdF9kb29yYmVsbF9odyB0ZXN0IGFkZGVkIHBlciBDaHJpcyBzdWdnZXN0aW9uLgoK djQ6IFRyeSB0byBleHBsYWluIHdoeSBndWNfaW5pdF9kb29yYmVsbF9odyBleGlzdCBhbmQgY29t bWVudCBzb21lCmRldGFpbHMgaW4gdGhlIHN1YnRlc3QuCgpTaWduZWQtb2ZmLWJ5OiBNaWNoZWwg VGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgpDYzogTWljaGFsIFdhamRlY3prbyA8 bWljaGFsLndhamRlY3prb0BpbnRlbC5jb20+CkNjOiBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIDxk YW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3Vi bWlzc2lvbi5jICAgICAgICAgfCAgIDQgKwogLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9saXZlX3NlbGZ0ZXN0cy5oICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2ludGVsX2d1Yy5jICAgICAgICAgfCAzNjIgKysrKysrKysrKysrKysrKysrKysrCiAzIGZp bGVzIGNoYW5nZWQsIDM2NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2d1Yy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCmluZGV4IDBiYTJmYzA0ZmU5Yy4uNWQ2NTc2ZTAxYTkx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCkBAIC0xNDY0 LDMgKzE0NjQsNyBAQCB2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZGlzYWJsZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIAlndWNfY2xpZW50c19kZXN0cm95KGd1Yyk7CiB9 CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKKyNpbmNsdWRlICJz ZWxmdGVzdHMvaW50ZWxfZ3VjLmMiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCmluZGV4IGQ3ZGQ5OGE2YWNhZC4u MDg4ZjQ1YmM2MTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9saXZlX3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKQEAgLTIwLDMgKzIwLDQgQEAgc2VsZnRlc3QoZXZpY3Qs IGk5MTVfZ2VtX2V2aWN0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoaHVnZXBhZ2VzLCBpOTE1 X2dlbV9odWdlX3BhZ2VfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChjb250ZXh0cywgaTkxNV9n ZW1fY29udGV4dF9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGhhbmdjaGVjaywgaW50ZWxfaGFu Z2NoZWNrX2xpdmVfc2VsZnRlc3RzKQorc2VsZnRlc3QoZ3VjLCBpbnRlbF9ndWNfbGl2ZV9zZWxm dGVzdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9n dWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9ndWMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY3NzIzYTRjODJhMwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9ndWMuYwpAQCAt MCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLwor CisjaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgorCisvKiBtYXggZG9vcmJlbGwgbnVtYmVy ICsgbmVnYXRpdmUgdGVzdCBmb3IgZWFjaCBjbGllbnQgdHlwZSAqLworI2RlZmluZSBBVFRFTVBU UyAoR1VDX05VTV9ET09SQkVMTFMgKyBHVUNfQ0xJRU5UX1BSSU9SSVRZX05VTSkKKworc3RydWN0 IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50c1tBVFRFTVBUU107CisKK3N0YXRpYyBib29sIGF2YWls YWJsZV9kYnMoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgcHJpb3JpdHkpCit7CisJdW5zaWdu ZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdTE2IGlkOworCisJLyogZmly c3QgaGFsZiBpcyB1c2VkIGZvciBub3JtYWwgcHJpb3JpdHksIHNlY29uZCBoYWxmIGZvciBoaWdo ICovCisJb2Zmc2V0ID0gMDsKKwllbmQgPSBHVUNfTlVNX0RPT1JCRUxMUy8yOworCWlmIChwcmlv cml0eSA8PSBHVUNfQ0xJRU5UX1BSSU9SSVRZX0hJR0gpIHsKKwkJb2Zmc2V0ID0gZW5kOworCQll bmQgKz0gb2Zmc2V0OworCX0KKworCWlkID0gZmluZF9uZXh0X3plcm9fYml0KGd1Yy0+ZG9vcmJl bGxfYml0bWFwLCBlbmQsIG9mZnNldCk7CisJaWYgKGlkIDwgZW5kKQorCQlyZXR1cm4gdHJ1ZTsK KworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBjaGVja19hbGxfZG9vcmJlbGxzKHN0 cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sKKwl1MTYgZGJfaWQ7CisKKwlwcl9pbmZvX29uY2UoIk1h eCBudW1iZXIgb2YgZG9vcmJlbGxzOiAlZCIsIEdVQ19OVU1fRE9PUkJFTExTKTsKKwlmb3IgKGRi X2lkID0gMDsgZGJfaWQgPCBHVUNfTlVNX0RPT1JCRUxMUzsgKytkYl9pZCkgeworCQlpZiAoIWRv b3JiZWxsX29rKGd1YywgZGJfaWQpKSB7CisJCQlwcl9lcnIoImRvb3JiZWxsICVkLCBub3Qgb2tc biIsIGRiX2lkKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisK Ky8qCisgKiBCYXNpYyBjbGllbnQgc2FuaXR5IGNoZWNrLCBoYW5keSB0byB2YWxpZGF0ZSBjcmVh dGVfY2xpZW50cy4KKyAqLworc3RhdGljIGludCB2YWxpZGF0ZV9jbGllbnQoc3RydWN0IGk5MTVf Z3VjX2NsaWVudCAqY2xpZW50LAorCQkJICAgaW50IGNsaWVudF9wcmlvcml0eSwKKwkJCSAgIGJv b2wgaXNfcHJlZW1wdF9jbGllbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZ3VjX3RvX2k5MTUoY2xpZW50LT5ndWMpOworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHhfb3duZXIgPSBpc19wcmVlbXB0X2NsaWVudCA/CisJCQlkZXZfcHJpdi0+cHJlZW1wdF9j b250ZXh0IDogZGV2X3ByaXYtPmtlcm5lbF9jb250ZXh0OworCisJaWYgKGNsaWVudC0+b3duZXIg IT0gY3R4X293bmVyIHx8CisJICAgIGNsaWVudC0+ZW5naW5lcyAhPSBJTlRFTF9JTkZPKGRldl9w cml2KS0+cmluZ19tYXNrIHx8CisJICAgIGNsaWVudC0+cHJpb3JpdHkgIT0gY2xpZW50X3ByaW9y aXR5IHx8CisJICAgIGNsaWVudC0+ZG9vcmJlbGxfaWQgPT0gR1VDX0RPT1JCRUxMX0lOVkFMSUQp CisJCXJldHVybiAtRUlOVkFMOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVj ayB0aGF0IGd1Y19pbml0X2Rvb3JiZWxsX2h3IGlzIGRvaW5nIHdoYXQgaXQgc2hvdWxkLgorICoK KyAqIER1cmluZyBHdUMgc3VibWlzc2lvbiBlbmFibGUsIHdlIGNyZWF0ZSBHdUMgY2xpZW50cyBh bmQgdGhlaXIgZG9vcmJlbGxzLAorICogYnV0IGFmdGVyIHJlc2V0dGluZyB0aGUgbWljcm9jb250 cm9sbGVyIChyZXN1bWUgJiBncHUgcmVzZXQpLCB0aGVzZQorICogR3VDIGNsaWVudHMgYXJlIHN0 aWxsIGFyb3VuZCwgYnV0IHRoZSBzdGF0dXMgb2YgdGhlaXIgZG9vcmJlbGxzIG1heSBiZQorICog aW5jb3JyZWN0LiBUaGlzIGlzIHRoZSByZWFzb24gYmVoaW5kIHZhbGlkYXRpbmcgdGhhdCB0aGUg ZG9vcmJlbGxzIHN0YXR1cworICogZXhwZWN0ZWQgYnkgdGhlIGRyaXZlciBtYXRjaGVzIHdoYXQg dGhlIEd1Qy9IVyBoYXZlLgorICovCitzdGF0aWMgaW50IGlndF9ndWNfaW5pdF9kb29yYmVsbF9o dyh2b2lkICphcmdzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGFy Z3M7CisJc3RydWN0IGludGVsX2d1YyAqZ3VjOworCURFQ0xBUkVfQklUTUFQKGRiX2JpdG1hcF9i aywgR1VDX05VTV9ET09SQkVMTFMpOworCWludCBpLCBlcnIgPSAwOworCisJcHJfaW5mbygiR3VD IGluaXRfZG9vcmJlbGxfaHcgc2VsZnRlc3RcbiIpOworCUdFTV9CVUdfT04oIUhBU19HVUMoZGV2 X3ByaXYpKTsKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwln dWMgPSAmZGV2X3ByaXYtPmd1YzsKKwlpZiAoIWd1YykgeworCQlwcl9lcnIoIk5vIGd1YyBvYmpl Y3QhXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJZXJyID0g Y2hlY2tfYWxsX2Rvb3JiZWxscyhndWMpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrOworCisJ LyogR2V0IHJpZCBvZiBjbGllbnRzIGNyZWF0ZWQgZHVyaW5nIGRyaXZlciBsb2FkIGJlY2F1c2Ug dGhlIHRlc3Qgd2lsbAorCSAqIHJlY3JlYXRlIHRoZW0uCisJICovCisJZ3VjX2NsaWVudHNfZGVz dHJveShndWMpOworCWlmIChndWMtPmV4ZWNidWZfY2xpZW50IHx8IGd1Yy0+cHJlZW1wdF9jbGll bnQpIHsKKwkJcHJfZXJyKCJndWNfY2xpZW50c19kZXN0cm95IGxpZWQhXG4iKTsKKwkJZXJyID0g LUVJTlZBTDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJZXJyID0gZ3VjX2NsaWVudHNfY3JlYXRl KGd1Yyk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50c1xu Iik7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWVyciA9IHZhbGlkYXRlX2NsaWVudChndWMtPmV4 ZWNidWZfY2xpZW50LAorCQkJICAgICAgR1VDX0NMSUVOVF9QUklPUklUWV9LTURfTk9STUFMLCBm YWxzZSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoImV4ZWNidWcgY2xpZW50IHZhbGlkYXRpb24g ZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gdmFsaWRhdGVfY2xpZW50KGd1 Yy0+cHJlZW1wdF9jbGllbnQsCisJCQkgICAgICBHVUNfQ0xJRU5UX1BSSU9SSVRZX0tNRF9ISUdI LCB0cnVlKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigicHJlZW1wdCBjbGllbnQgdmFsaWRhdGlv biBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBlYWNoIGNsaWVudCBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGRvb3JiZWxsIGR1cmluZyBhbGxvYyAqLworCWlmICghaGFzX2Rvb3Ji ZWxsKGd1Yy0+ZXhlY2J1Zl9jbGllbnQpIHx8CisJICAgICFoYXNfZG9vcmJlbGwoZ3VjLT5wcmVl bXB0X2NsaWVudCkpIHsKKwkJcHJfZXJyKCJndWNfY2xpZW50c19jcmVhdGUgZGlkbid0IGNyZWF0 ZSBkb29yYmVsbHNcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkv KiBCYXNpYyB0ZXN0IC0gYW4gYXR0ZW1wdCB0byByZWFsbG9jYXRlIGEgdmFsaWQgZG9vcmJlbGwg dG8gdGhlCisJICogY2xpZW50IGl0IGlzIGN1cnJlbnRseSBhc3NpZ25lZCBzaG91bGQgbm90IGNh dXNlIGEgZmFpbHVyZS4KKwkgKi8KKwllcnIgPSBndWNfaW5pdF9kb29yYmVsbF9odyhndWMpOwor CWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogTmVnYXRpdmUgdGVzdCAtIGEgY2xpZW50IHdp dGggbm8gZG9vcmJlbGwgKGludmFsaWQgZGIgaWQpLgorCSAqIEVhY2ggY2xpZW50IGdldHMgYSBk b29yYmVsbCB3aGVuIGl0IGlzIGNyZWF0ZWQsIGFmdGVyIGRlc3Ryb3lpbmcKKwkgKiB0aGUgZG9v cmJlbGwsIHRoZSBkYiBpZCBpcyBjaGFuZ2VkIHRvIEdVQ19ET09SQkVMTF9JTlZBTElEIGFuZCB0 aGUKKwkgKiBmaXJtd2FyZSB3aWxsIHJlamVjdCBhbnkgYXR0ZW1wdCB0byBhbGxvY2F0ZSBhIGRv b3JiZWxsIHdpdGggYW4KKwkgKiBpbnZhbGlkIGlkIChkYiBoYXMgdG8gYmUgcmVzZXJ2ZWQgYmVm b3JlIGFsbG9jYXRpb24pLgorCSAqLworCWRlc3Ryb3lfZG9vcmJlbGwoZ3VjLT5leGVjYnVmX2Ns aWVudCk7CisJaWYgKGhhc19kb29yYmVsbChndWMtPmV4ZWNidWZfY2xpZW50KSkgeworCQlwcl9l cnIoImRlc3Ryb3kgZGIgZGlkIG5vdCB3b3JrXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290 byBvdXQ7CisJfQorCisJZXJyID0gZ3VjX2luaXRfZG9vcmJlbGxfaHcoZ3VjKTsKKwlpZiAoZXJy ICE9IC1FSU8pIHsKKwkJcHJfZXJyKCJ1bmV4cGVjdGVkIChlcnIgPSAlZCkiLCBlcnIpOworCQln b3RvIG91dDsKKwl9CisKKwlpZiAoIWF2YWlsYWJsZV9kYnMoZ3VjLCBndWMtPmV4ZWNidWZfY2xp ZW50LT5wcmlvcml0eSkpIHsKKwkJcHJfZXJyKCJkb29yYmVsbCBub3QgYXZhaWxhYmxlIHdoZW4g aXQgc2hvdWxkXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2xl YW4gYWZ0ZXIgdGVzdCAqLworCWVyciA9IGNyZWF0ZV9kb29yYmVsbChndWMtPmV4ZWNidWZfY2xp ZW50KTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigicmVjcmVhdGUgZG9vcmJlbGwgZmFpbGVkXG4i KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogTmVnYXRpdmUgdGVzdCAtIGRvb3JiZWxsX2JpdG1h cCBvdXQgb2Ygc3luYywgd2lsbCB0cmlnZ2VyIGEgZmV3IG9mCisJICogV0FSTl9PTighZG9vcmJl bGxfb2soZ3VjLCBkYl9pZCkpIGJ1dCB0aGF0J3Mgb2sgYXMgbG9uZyBhcyB0aGUKKwkgKiBkb29y YmVsbHMgZnJvbSBvdXIgY2xpZW50cyBkb24ndCBmYWlsLgorCSAqLworCWJpdG1hcF9jb3B5KGRi X2JpdG1hcF9iaywgZ3VjLT5kb29yYmVsbF9iaXRtYXAsIEdVQ19OVU1fRE9PUkJFTExTKTsKKwlm b3IgKGkgPSAwOyBpIDwgR1VDX05VTV9ET09SQkVMTFM7IGkrKykKKwkJaWYgKGkgJSAyKQorCQkJ dGVzdF9hbmRfY2hhbmdlX2JpdChpLCBndWMtPmRvb3JiZWxsX2JpdG1hcCk7CisKKwllcnIgPSBn dWNfaW5pdF9kb29yYmVsbF9odyhndWMpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJvdXQgb2Yg c3luYyBkb29yYmVsbCBjYXVzZWQgYW4gZXJyb3JcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkv KiByZXN0b3JlICdjb3JyZWN0JyBkYiBiaXRtYXAgKi8KKwliaXRtYXBfY29weShndWMtPmRvb3Ji ZWxsX2JpdG1hcCwgZGJfYml0bWFwX2JrLCBHVUNfTlVNX0RPT1JCRUxMUyk7CisJZXJyID0gZ3Vj X2luaXRfZG9vcmJlbGxfaHcoZ3VjKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigicmVzdG9yZWQg ZG9vcmJlbGwgY2F1c2VkIGFuIGVycm9yXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJ LyogbGVhdmUgY2xlYW4gc3RhdGUgZm9yIG90aGVyIHRlc3QsIHBsdXMgdGhlIGRyaXZlciBhbHdh eXMgZGVzdHJveSB0aGUKKwkgKiBjbGllbnRzIGR1cmluZyB1bmxvYWQuCisJICovCisJZ3VjX2Ns aWVudHNfZGVzdHJveShndWMpOworCWd1Y19jbGllbnRzX2NyZWF0ZShndWMpOwordW5sb2NrOgor CW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiBlcnI7 Cit9CisKKy8qCisgKiBDcmVhdGUgYXMgbWFueSBjbGllbnRzIGFzIG51bWJlciBvZiBkb29yYmVs bHMuIE5vdGUgdGhhdCB0aGVyZSdzIGFscmVhZHkKKyAqIGNsaWVudChzKS9kb29yYmVsbChzKSBj cmVhdGVkIGR1cmluZyBkcml2ZXIgbG9hZCwgYnV0IHRoaXMgdGVzdCBjcmVhdGVzCisgKiBpdHMg b3duIGFuZCBkbyBub3QgaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3Rpbmcgb25lcy4KKyAqLworc3Rh dGljIGludCBpZ3RfZ3VjX2Rvb3JiZWxscyh2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gYXJnOworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YzsKKwlpbnQg aSwgZXJyID0gMDsKKwl1MTYgZGJfaWQ7CisKKwlwcl9pbmZvKCJHdUMgRG9vcmJlbGxzIHNlbGZ0 ZXN0XG4iKTsKKwlHRU1fQlVHX09OKCFIQVNfR1VDKGRldl9wcml2KSk7CisJbXV0ZXhfbG9jaygm ZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJZ3VjID0gJmRldl9wcml2LT5ndWM7CisJ aWYgKCFndWMpIHsKKwkJcHJfZXJyKCJObyBndWMgb2JqZWN0IVxuIik7CisJCWVyciA9IC1FSU5W QUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWVyciA9IGNoZWNrX2FsbF9kb29yYmVsbHMoZ3Vj KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9jazsKKworCWZvciAoaSA9IDA7IGkgPCBBVFRFTVBU UzsgaSsrKSB7CisJCWNsaWVudHNbaV0gPSBndWNfY2xpZW50X2FsbG9jKGRldl9wcml2LAorCQkJ CQkgICAgICBJTlRFTF9JTkZPKGRldl9wcml2KS0+cmluZ19tYXNrLAorCQkJCQkgICAgICBpICUg R1VDX0NMSUVOVF9QUklPUklUWV9OVU0sCisJCQkJCSAgICAgIGRldl9wcml2LT5rZXJuZWxfY29u dGV4dCk7CisKKwkJaWYgKCFjbGllbnRzW2ldKSB7CisJCQlwcl9lcnIoIlslZF0gTm8gZ3VjIGNs aWVudFxuIiwgaSk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlp ZiAoSVNfRVJSKGNsaWVudHNbaV0pKSB7CisJCQlpZiAoUFRSX0VSUihjbGllbnRzW2ldKSAhPSAt RU5PU1BDKSB7CisJCQkJcHJfZXJyKCJbJWRdIHVuZXhwZWN0ZWQgZXJyb3JcbiIsIGkpOworCQkJ CWVyciA9IFBUUl9FUlIoY2xpZW50c1tpXSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWlm IChhdmFpbGFibGVfZGJzKGd1YywgaSAlIEdVQ19DTElFTlRfUFJJT1JJVFlfTlVNKSkgeworCQkJ CXByX2VycigiWyVkXSBub24tZGIgcmVsYXRlZCBhbGxvYyBmYWlsXG4iLCBpKTsKKwkJCQllcnIg PSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQkvKiBleHBlY3RlZCwgcmFuIG91 dCBvZiBkYnMgZm9yIHRoaXMgY2xpZW50IHR5cGUgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ LyogVGhlIGNoZWNrIGJlbG93IGlzIG9ubHkgdmFsaWQgYmVjYXVzZSB3ZSBrZWVwIGEgZG9vcmJl bGwKKwkJICogYXNzaWduZWQgZHVyaW5nIHRoZSB3aG9sZSBsaWZlIG9mIHRoZSBjbGllbnQuCisJ CSAqLworCQlpZiAoY2xpZW50c1tpXS0+c3RhZ2VfaWQgPj0gR1VDX05VTV9ET09SQkVMTFMpIHsK KwkJCXByX2VycigiWyVkXSBtb3JlIGNsaWVudHMgdGhhbiBkb29yYmVsbHMgKCVkID49ICVkKVxu IiwKKwkJCSAgICAgICBpLCBjbGllbnRzW2ldLT5zdGFnZV9pZCwgR1VDX05VTV9ET09SQkVMTFMp OworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZXJyID0gdmFsaWRh dGVfY2xpZW50KGNsaWVudHNbaV0sCisJCQkJICAgICAgaSAlIEdVQ19DTElFTlRfUFJJT1JJVFlf TlVNLCBmYWxzZSk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiWyVkXSBjbGllbnRfYWxsb2Mg c2FuaXR5IGNoZWNrIGZhaWxlZCFcbiIsIGkpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8g b3V0OworCQl9CisKKwkJZGJfaWQgPSBjbGllbnRzW2ldLT5kb29yYmVsbF9pZDsKKworCQkvKiBD bGllbnQgYWxsb2MgZ2l2ZXMgdXMgYSBkb29yYmVsbCwgYnV0IHdlIHdhbnQgdG8gZXhlcmNpc2UK KwkJICogdGhpcyBvdXJzZWx2ZXMgKHRoaXMgcmVzZW1ibGVzIGd1Y19pbml0X2Rvb3JiZWxsX2h3 KQorCQkgKi8KKwkJZGVzdHJveV9kb29yYmVsbChjbGllbnRzW2ldKTsKKwkJaWYgKGNsaWVudHNb aV0tPmRvb3JiZWxsX2lkICE9IEdVQ19ET09SQkVMTF9JTlZBTElEKSB7CisJCQlwcl9lcnIoIlsl ZF0gZGVzdHJveSBkYiBkaWQgbm90IHdvcmshXG4iLCBpKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJ CQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IF9fcmVzZXJ2ZV9kb29yYmVsbChjbGllbnRzW2ld KTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJbJWRdIEZhaWxlZCB0byByZXNlcnZlIGEgZG9v cmJlbGxcbiIsIGkpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlfX3VwZGF0ZV9kb29yYmVsbF9k ZXNjKGNsaWVudHNbaV0sIGNsaWVudHNbaV0tPmRvb3JiZWxsX2lkKTsKKwkJZXJyID0gX19jcmVh dGVfZG9vcmJlbGwoY2xpZW50c1tpXSk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiWyVkXSBG YWlsZWQgdG8gY3JlYXRlIGEgZG9vcmJlbGxcbiIsIGkpOworCQkJZ290byBvdXQ7CisJCX0KKwor CQkvKiBkb29yYmVsbCBpZCBzaG91bGRuJ3QgY2hhbmdlLCB3ZSBhcmUgaG9sZGluZyB0aGUgbXV0 ZXggKi8KKwkJaWYgKGRiX2lkICE9IGNsaWVudHNbaV0tPmRvb3JiZWxsX2lkKSB7CisJCQlwcl9l cnIoIlslZF0gZG9vcmJlbGwgaWQgY2hhbmdlZCAoJWQgIT0gJWQpXG4iLAorCQkJICAgICAgIGks IGRiX2lkLCBjbGllbnRzW2ldLT5kb29yYmVsbF9pZCk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJ Z290byBvdXQ7CisJCX0KKworCQllcnIgPSBjaGVja19hbGxfZG9vcmJlbGxzKGd1Yyk7CisJCWlm IChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlmb3IgKGkgPSAwOyBpIDwgQVRURU1Q VFM7IGkrKykKKwkJaWYgKCFJU19FUlJfT1JfTlVMTChjbGllbnRzW2ldKSkKKwkJCWd1Y19jbGll bnRfZnJlZShjbGllbnRzW2ldKTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5k cm0uc3RydWN0X211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaW50ZWxfZ3VjX2xpdmVf c2VsZnRlc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0YXRpYyBj b25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CisJCVNVQlRFU1QoaWd0X2d1Y19p bml0X2Rvb3JiZWxsX2h3KSwKKwkJU1VCVEVTVChpZ3RfZ3VjX2Rvb3JiZWxscyksCisJfTsKKwor CWlmICghaTkxNV9tb2RwYXJhbXMuZW5hYmxlX2d1Y19zdWJtaXNzaW9uKQorCQlyZXR1cm4gMDsK KworCXJldHVybiBpOTE1X3N1YnRlc3RzKHRlc3RzLCBkZXZfcHJpdik7Cit9Ci0tIAoyLjE1LjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=