From: Dave Airlie Subject: [PATCH] [rfc] radv: start moving semaphore support out of libdrm Date: Tue, 18 Jul 2017 14:39:50 +1000 Message-ID: <20170718043950.26224-1-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgaXMgYSBwb3J0IG9m IHJhZHYgdG8gdGhlIG5ldyBsb3dsZXZlbCBjcyBzdWJtaXNzaW9uIEFQSXMKZm9yIGxpYmRybSB0 aGF0IEkgc3VibWl0dGVkIGVhcmxpZXIuCgpUaGlzIG1vdmVzIGEgbG90IG9mIHRoZSBjdXJyZW50 IG5vbi1zaGFyZWQgc2VtYXBob3JlIGhhbmRsaW5nCmFuZCBjaHVuayBjcmVhdGlvbiBvdXQgb2Yg bGliZHJtX2FtZGdwdS4gSXQgcHJvdmlkZXMgYSBtdWNoCnNpbXBsZXIgaW1wbGVtZW50YXRpb24g d2l0aG91dCBhbGwgdGhlIGxpc3QgaGFuZGxpbmcsIEknbQpzdXJlIEkgY2FuIGV2ZW4gY2xlYW4g aXQgdXAgYSBsb3QgZnVydGhlci4KCkZvciBub3cgSSd2ZSBsZWZ0IHRoZSBvbGQgY29kZSBwYXRo cyB1bmRlciB0aGUgUkFEVl9PTERfTElCRFJNCmRlZmluZSBpbiB0aGlzIHBhdGNoLCBJJ2QgcmVw bGFjZSB0aGF0IHdpdGggdmVyc2lvbiBvciBqdXN0IHJpcApvdXQgdGhlIHdob2xlIGxvdCBvbmNl IHdlIGdldCBhIGxpYmRybSByZWxlYXNlIHdpdGggdGhlIG5ldyBBUElzCmluLgotLS0KIHNyYy9h bWQvdnVsa2FuL3dpbnN5cy9hbWRncHUvcmFkdl9hbWRncHVfY3MuYyB8IDIwMiArKysrKysrKysr KysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDE4NCBpbnNlcnRpb25zKCspLCAxOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYW1kL3Z1bGthbi93aW5zeXMvYW1kZ3B1L3Jh ZHZfYW1kZ3B1X2NzLmMgYi9zcmMvYW1kL3Z1bGthbi93aW5zeXMvYW1kZ3B1L3JhZHZfYW1kZ3B1 X2NzLmMKaW5kZXggZmZjNzU2Ni4uY2U3M2I4OCAxMDA2NDQKLS0tIGEvc3JjL2FtZC92dWxrYW4v d2luc3lzL2FtZGdwdS9yYWR2X2FtZGdwdV9jcy5jCisrKyBiL3NyYy9hbWQvdnVsa2FuL3dpbnN5 cy9hbWRncHUvcmFkdl9hbWRncHVfY3MuYwpAQCAtNzUsNiArNzUsMTAgQEAgcmFkdl9hbWRncHVf Y3Moc3RydWN0IHJhZGVvbl93aW5zeXNfY3MgKmJhc2UpCiAJcmV0dXJuIChzdHJ1Y3QgcmFkdl9h bWRncHVfY3MqKWJhc2U7CiB9CiAKK3N0cnVjdCByYWR2X2FtZGdwdV9zZW1faW5mbyB7CisJaW50 IHdhaXRfc2VtX2NvdW50OworCXN0cnVjdCByYWRlb25fd2luc3lzX3NlbSAqKndhaXRfc2VtczsK K307CiBzdGF0aWMgaW50IHJpbmdfdG9faHdfaXAoZW51bSByaW5nX3R5cGUgcmluZykKIHsKIAlz d2l0Y2ggKHJpbmcpIHsKQEAgLTg5LDYgKzkzLDIxIEBAIHN0YXRpYyBpbnQgcmluZ190b19od19p cChlbnVtIHJpbmdfdHlwZSByaW5nKQogCX0KIH0KIAorc3RhdGljIHZvaWQgcmFkdl9hbWRncHVf d2FpdF9zZW1zKHN0cnVjdCByYWR2X2FtZGdwdV9jdHggKmN0eCwKKwkJCQkgIHVpbnQzMl90IGlw X3R5cGUsCisJCQkJICB1aW50MzJfdCByaW5nLAorCQkJCSAgdWludDMyX3Qgc2VtX2NvdW50LAor CQkJCSAgc3RydWN0IHJhZGVvbl93aW5zeXNfc2VtICoqX3NlbSwKKwkJCQkgIHN0cnVjdCByYWR2 X2FtZGdwdV9zZW1faW5mbyAqc2VtX2luZm8pOworc3RhdGljIGludCByYWR2X2FtZGdwdV9zaWdu YWxfc2VtcyhzdHJ1Y3QgcmFkdl9hbWRncHVfY3R4ICpjdHgsCisJCQkJICAgdWludDMyX3QgaXBf dHlwZSwKKwkJCQkgICB1aW50MzJfdCByaW5nLAorCQkJCSAgIHVpbnQzMl90IHNlbV9jb3VudCwK KwkJCQkgICBzdHJ1Y3QgcmFkZW9uX3dpbnN5c19zZW0gKipfc2VtKTsKK3N0YXRpYyBpbnQgcmFk dl9hbWRncHVfY3Nfc3VibWl0KHN0cnVjdCByYWR2X2FtZGdwdV9jdHggKmN0eCwKKwkJCQkgc3Ry dWN0IGFtZGdwdV9jc19yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJCSBzdHJ1Y3QgcmFkdl9hbWRncHVf c2VtX2luZm8gKnNlbV9pbmZvKTsKKwogc3RhdGljIHZvaWQgcmFkdl9hbWRncHVfcmVxdWVzdF90 b19mZW5jZShzdHJ1Y3QgcmFkdl9hbWRncHVfY3R4ICpjdHgsCiAJCQkJCSBzdHJ1Y3QgcmFkdl9h bWRncHVfZmVuY2UgKmZlbmNlLAogCQkJCQkgc3RydWN0IGFtZGdwdV9jc19yZXF1ZXN0ICpyZXEp CkBAIC02NDcsNiArNjY2LDcgQEAgc3RhdGljIHZvaWQgcmFkdl9hc3NpZ25fbGFzdF9zdWJtaXQo c3RydWN0IHJhZHZfYW1kZ3B1X2N0eCAqY3R4LAogCiBzdGF0aWMgaW50IHJhZHZfYW1kZ3B1X3dp bnN5c19jc19zdWJtaXRfY2hhaW5lZChzdHJ1Y3QgcmFkZW9uX3dpbnN5c19jdHggKl9jdHgsCiAJ CQkJCQlpbnQgcXVldWVfaWR4LAorCQkJCQkJc3RydWN0IHJhZHZfYW1kZ3B1X3NlbV9pbmZvICpz ZW1faW5mbywKIAkJCQkJCXN0cnVjdCByYWRlb25fd2luc3lzX2NzICoqY3NfYXJyYXksCiAJCQkJ CQl1bnNpZ25lZCBjc19jb3VudCwKIAkJCQkJCXN0cnVjdCByYWRlb25fd2luc3lzX2NzICppbml0 aWFsX3ByZWFtYmxlX2NzLApAQCAtNzAzLDcgKzcyMyw3IEBAIHN0YXRpYyBpbnQgcmFkdl9hbWRn cHVfd2luc3lzX2NzX3N1Ym1pdF9jaGFpbmVkKHN0cnVjdCByYWRlb25fd2luc3lzX2N0eCAqX2N0 eCwKIAkJaWJzWzBdID0gKChzdHJ1Y3QgcmFkdl9hbWRncHVfY3MqKWluaXRpYWxfcHJlYW1ibGVf Y3MpLT5pYjsKIAl9CiAKLQlyID0gYW1kZ3B1X2NzX3N1Ym1pdChjdHgtPmN0eCwgMCwgJnJlcXVl c3QsIDEpOworCXIgPSByYWR2X2FtZGdwdV9jc19zdWJtaXQoY3R4LCAmcmVxdWVzdCwgc2VtX2lu Zm8pOwogCWlmIChyKSB7CiAJCWlmIChyID09IC1FTk9NRU0pCiAJCQlmcHJpbnRmKHN0ZGVyciwg ImFtZGdwdTogTm90IGVub3VnaCBtZW1vcnkgZm9yIGNvbW1hbmQgc3VibWlzc2lvbi5cbiIpOwpA QCAtNzI0LDYgKzc0NCw3IEBAIHN0YXRpYyBpbnQgcmFkdl9hbWRncHVfd2luc3lzX2NzX3N1Ym1p dF9jaGFpbmVkKHN0cnVjdCByYWRlb25fd2luc3lzX2N0eCAqX2N0eCwKIAogc3RhdGljIGludCBy YWR2X2FtZGdwdV93aW5zeXNfY3Nfc3VibWl0X2ZhbGxiYWNrKHN0cnVjdCByYWRlb25fd2luc3lz X2N0eCAqX2N0eCwKIAkJCQkJCSBpbnQgcXVldWVfaWR4LAorCQkJCQkJIHN0cnVjdCByYWR2X2Ft ZGdwdV9zZW1faW5mbyAqc2VtX2luZm8sCiAJCQkJCQkgc3RydWN0IHJhZGVvbl93aW5zeXNfY3Mg Kipjc19hcnJheSwKIAkJCQkJCSB1bnNpZ25lZCBjc19jb3VudCwKIAkJCQkJCSBzdHJ1Y3QgcmFk ZW9uX3dpbnN5c19jcyAqaW5pdGlhbF9wcmVhbWJsZV9jcywKQEAgLTc3NSw3ICs3OTYsNyBAQCBz dGF0aWMgaW50IHJhZHZfYW1kZ3B1X3dpbnN5c19jc19zdWJtaXRfZmFsbGJhY2soc3RydWN0IHJh ZGVvbl93aW5zeXNfY3R4ICpfY3R4LAogCQkJfQogCQl9CiAKLQkJciA9IGFtZGdwdV9jc19zdWJt aXQoY3R4LT5jdHgsIDAsICZyZXF1ZXN0LCAxKTsKKwkJciA9IHJhZHZfYW1kZ3B1X2NzX3N1Ym1p dChjdHgsICZyZXF1ZXN0LCBzZW1faW5mbyk7CiAJCWlmIChyKSB7CiAJCQlpZiAociA9PSAtRU5P TUVNKQogCQkJCWZwcmludGYoc3RkZXJyLCAiYW1kZ3B1OiBOb3QgZW5vdWdoIG1lbW9yeSBmb3Ig Y29tbWFuZCBzdWJtaXNzaW9uLlxuIik7CkBAIC04MDEsNiArODIyLDcgQEAgc3RhdGljIGludCBy YWR2X2FtZGdwdV93aW5zeXNfY3Nfc3VibWl0X2ZhbGxiYWNrKHN0cnVjdCByYWRlb25fd2luc3lz X2N0eCAqX2N0eCwKIAogc3RhdGljIGludCByYWR2X2FtZGdwdV93aW5zeXNfY3Nfc3VibWl0X3N5 c21lbShzdHJ1Y3QgcmFkZW9uX3dpbnN5c19jdHggKl9jdHgsCiAJCQkJCSAgICAgICBpbnQgcXVl dWVfaWR4LAorCQkJCQkgICAgICAgc3RydWN0IHJhZHZfYW1kZ3B1X3NlbV9pbmZvICpzZW1faW5m bywKIAkJCQkJICAgICAgIHN0cnVjdCByYWRlb25fd2luc3lzX2NzICoqY3NfYXJyYXksCiAJCQkJ CSAgICAgICB1bnNpZ25lZCBjc19jb3VudCwKIAkJCQkJICAgICAgIHN0cnVjdCByYWRlb25fd2lu c3lzX2NzICppbml0aWFsX3ByZWFtYmxlX2NzLApAQCAtODgwLDcgKzkwMiw3IEBAIHN0YXRpYyBp bnQgcmFkdl9hbWRncHVfd2luc3lzX2NzX3N1Ym1pdF9zeXNtZW0oc3RydWN0IHJhZGVvbl93aW5z eXNfY3R4ICpfY3R4LAogCQlyZXF1ZXN0LmlicyA9ICZpYjsKIAkJcmVxdWVzdC5mZW5jZV9pbmZv ID0gcmFkdl9zZXRfY3NfZmVuY2UoY3R4LCBjczAtPmh3X2lwLCBxdWV1ZV9pZHgpOwogCi0JCXIg PSBhbWRncHVfY3Nfc3VibWl0KGN0eC0+Y3R4LCAwLCAmcmVxdWVzdCwgMSk7CisJCXIgPSByYWR2 X2FtZGdwdV9jc19zdWJtaXQoY3R4LCAmcmVxdWVzdCwgc2VtX2luZm8pOwogCQlpZiAocikgewog CQkJaWYgKHIgPT0gLUVOT01FTSkKIAkJCQlmcHJpbnRmKHN0ZGVyciwgImFtZGdwdTogTm90IGVu b3VnaCBtZW1vcnkgZm9yIGNvbW1hbmQgc3VibWlzc2lvbi5cbiIpOwpAQCAtOTIxLDI5ICs5NDMs MjIgQEAgc3RhdGljIGludCByYWR2X2FtZGdwdV93aW5zeXNfY3Nfc3VibWl0KHN0cnVjdCByYWRl b25fd2luc3lzX2N0eCAqX2N0eCwKIAlzdHJ1Y3QgcmFkdl9hbWRncHVfY3MgKmNzID0gcmFkdl9h bWRncHVfY3MoY3NfYXJyYXlbMF0pOwogCXN0cnVjdCByYWR2X2FtZGdwdV9jdHggKmN0eCA9IHJh ZHZfYW1kZ3B1X2N0eChfY3R4KTsKIAlpbnQgcmV0OwotCWludCBpOwotCQotCWZvciAoaSA9IDA7 IGkgPCB3YWl0X3NlbV9jb3VudDsgaSsrKSB7Ci0JCWFtZGdwdV9zZW1hcGhvcmVfaGFuZGxlIHNl bSA9IChhbWRncHVfc2VtYXBob3JlX2hhbmRsZSl3YWl0X3NlbVtpXTsKLQkJYW1kZ3B1X2NzX3dh aXRfc2VtYXBob3JlKGN0eC0+Y3R4LCBjcy0+aHdfaXAsIDAsIHF1ZXVlX2lkeCwKLQkJCQkJIHNl bSk7Ci0JfQorCXN0cnVjdCByYWR2X2FtZGdwdV9zZW1faW5mbyBzZW1faW5mbyA9IHswfTsKKwor CXJhZHZfYW1kZ3B1X3dhaXRfc2VtcyhjdHgsIGNzLT5od19pcCwgcXVldWVfaWR4LCB3YWl0X3Nl bV9jb3VudCwgd2FpdF9zZW0sICZzZW1faW5mbyk7CisKIAlpZiAoIWNzLT53cy0+dXNlX2liX2Jv cykgewotCQlyZXQgPSByYWR2X2FtZGdwdV93aW5zeXNfY3Nfc3VibWl0X3N5c21lbShfY3R4LCBx dWV1ZV9pZHgsIGNzX2FycmF5LAorCQlyZXQgPSByYWR2X2FtZGdwdV93aW5zeXNfY3Nfc3VibWl0 X3N5c21lbShfY3R4LCBxdWV1ZV9pZHgsICZzZW1faW5mbywgY3NfYXJyYXksCiAJCQkJCQkJICAg Y3NfY291bnQsIGluaXRpYWxfcHJlYW1ibGVfY3MsIGNvbnRpbnVlX3ByZWFtYmxlX2NzLCBfZmVu Y2UpOwogCX0gZWxzZSBpZiAoY2FuX3BhdGNoICYmIGNzX2NvdW50ID4gQU1ER1BVX0NTX01BWF9J QlNfUEVSX1NVQk1JVCAmJiBjcy0+d3MtPmJhdGNoY2hhaW4pIHsKLQkJcmV0ID0gcmFkdl9hbWRn cHVfd2luc3lzX2NzX3N1Ym1pdF9jaGFpbmVkKF9jdHgsIHF1ZXVlX2lkeCwgY3NfYXJyYXksCisJ CXJldCA9IHJhZHZfYW1kZ3B1X3dpbnN5c19jc19zdWJtaXRfY2hhaW5lZChfY3R4LCBxdWV1ZV9p ZHgsICZzZW1faW5mbywgY3NfYXJyYXksCiAJCQkJCQkJICAgIGNzX2NvdW50LCBpbml0aWFsX3By ZWFtYmxlX2NzLCBjb250aW51ZV9wcmVhbWJsZV9jcywgX2ZlbmNlKTsKIAl9IGVsc2UgewotCQly ZXQgPSByYWR2X2FtZGdwdV93aW5zeXNfY3Nfc3VibWl0X2ZhbGxiYWNrKF9jdHgsIHF1ZXVlX2lk eCwgY3NfYXJyYXksCisJCXJldCA9IHJhZHZfYW1kZ3B1X3dpbnN5c19jc19zdWJtaXRfZmFsbGJh Y2soX2N0eCwgcXVldWVfaWR4LCAmc2VtX2luZm8sIGNzX2FycmF5LAogCQkJCQkJCSAgICAgY3Nf Y291bnQsIGluaXRpYWxfcHJlYW1ibGVfY3MsIGNvbnRpbnVlX3ByZWFtYmxlX2NzLCBfZmVuY2Up OwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBzaWduYWxfc2VtX2NvdW50OyBpKyspIHsKLQkJYW1k Z3B1X3NlbWFwaG9yZV9oYW5kbGUgc2VtID0gKGFtZGdwdV9zZW1hcGhvcmVfaGFuZGxlKXNpZ25h bF9zZW1baV07Ci0JCWFtZGdwdV9jc19zaWduYWxfc2VtYXBob3JlKGN0eC0+Y3R4LCBjcy0+aHdf aXAsIDAsIHF1ZXVlX2lkeCwKLQkJCQkJICAgc2VtKTsKLQl9CisJcmFkdl9hbWRncHVfc2lnbmFs X3NlbXMoY3R4LCBjcy0+aHdfaXAsIHF1ZXVlX2lkeCwgc2lnbmFsX3NlbV9jb3VudCwgc2lnbmFs X3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA0MCw2ICsxMDU1LDcgQEAgc3RhdGljIGJv b2wgcmFkdl9hbWRncHVfY3R4X3dhaXRfaWRsZShzdHJ1Y3QgcmFkZW9uX3dpbnN5c19jdHggKnJ3 Y3R4LAogCXJldHVybiB0cnVlOwogfQogCisjaWZkZWYgUkFEVl9PTERfTElCRFJNCiBzdGF0aWMg c3RydWN0IHJhZGVvbl93aW5zeXNfc2VtICpyYWR2X2FtZGdwdV9jcmVhdGVfc2VtKHN0cnVjdCBy YWRlb25fd2luc3lzICpfd3MpCiB7CiAJaW50IHJldDsKQEAgLTEwNTYsNiArMTA3MiwxNTYgQEAg c3RhdGljIHZvaWQgcmFkdl9hbWRncHVfZGVzdHJveV9zZW0oc3RydWN0IHJhZGVvbl93aW5zeXNf c2VtICpfc2VtKQogCWFtZGdwdV9zZW1hcGhvcmVfaGFuZGxlIHNlbSA9IChhbWRncHVfc2VtYXBo b3JlX2hhbmRsZSlfc2VtOwogCWFtZGdwdV9jc19kZXN0cm95X3NlbWFwaG9yZShzZW0pOwogfQor I2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX3dpbnN5c19zZW0gKnJhZHZfYW1kZ3B1X2NyZWF0 ZV9zZW0oc3RydWN0IHJhZGVvbl93aW5zeXMgKl93cykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2NzX2Zl bmNlICpzZW0gPSBDQUxMT0NfU1RSVUNUKGFtZGdwdV9jc19mZW5jZSk7CisJaWYgKCFzZW0pCisJ CXJldHVybiBOVUxMOworCisJcmV0dXJuIChzdHJ1Y3QgcmFkZW9uX3dpbnN5c19zZW0gKilzZW07 Cit9CisKK3N0YXRpYyB2b2lkIHJhZHZfYW1kZ3B1X2Rlc3Ryb3lfc2VtKHN0cnVjdCByYWRlb25f d2luc3lzX3NlbSAqX3NlbSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2NzX2ZlbmNlICpzZW0gPSAoc3Ry dWN0IGFtZGdwdV9jc19mZW5jZSAqKV9zZW07CisJRlJFRShzZW0pOworfQorI2VuZGlmCisKK3N0 YXRpYyB2b2lkIHJhZHZfYW1kZ3B1X3dhaXRfc2VtcyhzdHJ1Y3QgcmFkdl9hbWRncHVfY3R4ICpj dHgsCisJCQkJICB1aW50MzJfdCBpcF90eXBlLAorCQkJCSAgdWludDMyX3QgcmluZywKKwkJCQkg IHVpbnQzMl90IHNlbV9jb3VudCwKKwkJCQkgIHN0cnVjdCByYWRlb25fd2luc3lzX3NlbSAqKl9z ZW0sCisJCQkJICBzdHJ1Y3QgcmFkdl9hbWRncHVfc2VtX2luZm8gKnNlbV9pbmZvKQoreworI2lm ZGVmIFJBRFZfT0xEX0xJQkRSTQorCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZW1fY291bnQ7 IGkrKykgeworCQlhbWRncHVfc2VtYXBob3JlX2hhbmRsZSBzZW0gPSAoYW1kZ3B1X3NlbWFwaG9y ZV9oYW5kbGUpX3NlbVtpXTsKKwkJYW1kZ3B1X2NzX3dhaXRfc2VtYXBob3JlKGN0eC0+Y3R4LCBp cF90eXBlLCAwLCByaW5nLAorCQkJCQkgc2VtKTsKKwl9CisjZWxzZQorCXNlbV9pbmZvLT53YWl0 X3NlbV9jb3VudCA9IHNlbV9jb3VudDsKKwlzZW1faW5mby0+d2FpdF9zZW1zID0gX3NlbTsKKyNl bmRpZgorfQorCitzdGF0aWMgaW50IHJhZHZfYW1kZ3B1X3NpZ25hbF9zZW1zKHN0cnVjdCByYWR2 X2FtZGdwdV9jdHggKmN0eCwKKwkJCQkgICB1aW50MzJfdCBpcF90eXBlLAorCQkJCSAgIHVpbnQz Ml90IHJpbmcsCisJCQkJICAgdWludDMyX3Qgc2VtX2NvdW50LAorCQkJCSAgIHN0cnVjdCByYWRl b25fd2luc3lzX3NlbSAqKl9zZW0pCit7CisjaWZkZWYgUkFEVl9PTERfTElCRFJNCisJZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IHNlbV9jb3VudDsgaSsrKSB7CisJCWFtZGdwdV9zZW1hcGhvcmVf aGFuZGxlIHNlbSA9IChhbWRncHVfc2VtYXBob3JlX2hhbmRsZSlfc2VtW2ldOworCQlhbWRncHVf Y3Nfc2lnbmFsX3NlbWFwaG9yZShjdHgtPmN0eCwgaXBfdHlwZSwgMCwgcmluZywKKwkJCQkJICAg c2VtKTsKKwl9CisJcmV0dXJuIDA7CisjZWxzZQorCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz ZW1fY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgYW1kZ3B1X2NzX2ZlbmNlICpzZW0gPSAoc3RydWN0 IGFtZGdwdV9jc19mZW5jZSAqKV9zZW1baV07CisKKwkJaWYgKHNlbS0+Y29udGV4dCkKKwkJCXJl dHVybiAtRUlOVkFMOworCisJCSpzZW0gPSBjdHgtPmxhc3Rfc3VibWlzc2lvbltpcF90eXBlXVty aW5nXS5mZW5jZTsKKwl9CisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGludCByYWR2 X2FtZGdwdV9jc19zdWJtaXQoc3RydWN0IHJhZHZfYW1kZ3B1X2N0eCAqY3R4LAorCQkJCSBzdHJ1 Y3QgYW1kZ3B1X2NzX3JlcXVlc3QgKnJlcXVlc3QsCisJCQkJIHN0cnVjdCByYWR2X2FtZGdwdV9z ZW1faW5mbyAqc2VtX2luZm8pCit7CisjaWZkZWYgUkFEVl9PTERfTElCRFJNCisJcmV0dXJuIGFt ZGdwdV9jc19zdWJtaXQoY3R4LT5jdHgsIDAsIHJlcXVlc3QsIDEpOworI2Vsc2UKKwlpbnQgcjsK KwlpbnQgbnVtX2NodW5rczsKKwlpbnQgc2l6ZTsKKwlib29sIHVzZXJfZmVuY2U7CisJc3RydWN0 IGRybV9hbWRncHVfY3NfY2h1bmsgKmNodW5rczsKKwlzdHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVu a19kYXRhICpjaHVua19kYXRhOworCXN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5rX2RlcCAqc2Vt X2RlcGVuZGVuY2llcyA9IE5VTEw7CisJaW50IGk7CisJc3RydWN0IGFtZGdwdV9jc19mZW5jZSAq c2VtOworCXVzZXJfZmVuY2UgPSAocmVxdWVzdC0+ZmVuY2VfaW5mby5oYW5kbGUgIT0gTlVMTCk7 CisJc2l6ZSA9IHJlcXVlc3QtPm51bWJlcl9vZl9pYnMgKyAodXNlcl9mZW5jZSA/IDIgOiAxKSAr IDE7CisKKwljaHVua3MgPSBhbGxvY2Eoc2l6ZW9mKHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5r KSAqIHNpemUpOworCisJc2l6ZSA9IHJlcXVlc3QtPm51bWJlcl9vZl9pYnMgKyAodXNlcl9mZW5j ZSA/IDEgOiAwKTsKKworCWNodW5rX2RhdGEgPSBhbGxvY2Eoc2l6ZW9mKHN0cnVjdCBkcm1fYW1k Z3B1X2NzX2NodW5rX2RhdGEpICogc2l6ZSk7CisKKwludW1fY2h1bmtzID0gcmVxdWVzdC0+bnVt YmVyX29mX2liczsKKwlmb3IgKGkgPSAwOyBpIDwgcmVxdWVzdC0+bnVtYmVyX29mX2liczsgaSsr KSB7CisJCXN0cnVjdCBhbWRncHVfY3NfaWJfaW5mbyAqaWI7CisJCWNodW5rc1tpXS5jaHVua19p ZCA9IEFNREdQVV9DSFVOS19JRF9JQjsKKwkJY2h1bmtzW2ldLmxlbmd0aF9kdyA9IHNpemVvZihz dHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVua19pYikgLyA0OworCQljaHVua3NbaV0uY2h1bmtfZGF0 YSA9ICh1aW50NjRfdCkodWludHB0cl90KSZjaHVua19kYXRhW2ldOworCisJCWliID0gJnJlcXVl c3QtPmlic1tpXTsKKworCQljaHVua19kYXRhW2ldLmliX2RhdGEuX3BhZCA9IDA7CisJCWNodW5r X2RhdGFbaV0uaWJfZGF0YS52YV9zdGFydCA9IGliLT5pYl9tY19hZGRyZXNzOworCQljaHVua19k YXRhW2ldLmliX2RhdGEuaWJfYnl0ZXMgPSBpYi0+c2l6ZSAqIDQ7CisJCWNodW5rX2RhdGFbaV0u aWJfZGF0YS5pcF90eXBlID0gcmVxdWVzdC0+aXBfdHlwZTsKKwkJY2h1bmtfZGF0YVtpXS5pYl9k YXRhLmlwX2luc3RhbmNlID0gcmVxdWVzdC0+aXBfaW5zdGFuY2U7CisJCWNodW5rX2RhdGFbaV0u aWJfZGF0YS5yaW5nID0gcmVxdWVzdC0+cmluZzsKKwkJY2h1bmtfZGF0YVtpXS5pYl9kYXRhLmZs YWdzID0gaWItPmZsYWdzOworCX0KKworCWlmICh1c2VyX2ZlbmNlKSB7CisJCWkgPSBudW1fY2h1 bmtzKys7CisKKwkJY2h1bmtzW2ldLmNodW5rX2lkID0gQU1ER1BVX0NIVU5LX0lEX0ZFTkNFOwor CQljaHVua3NbaV0ubGVuZ3RoX2R3ID0gc2l6ZW9mKHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5r X2ZlbmNlKSAvIDQ7CisJCWNodW5rc1tpXS5jaHVua19kYXRhID0gKHVpbnQ2NF90KSh1aW50cHRy X3QpJmNodW5rX2RhdGFbaV07CisKKwkJYW1kZ3B1X2NzX2NodW5rX2ZlbmNlX2luZm9fdG9fZGF0 YSgmcmVxdWVzdC0+ZmVuY2VfaW5mbywKKwkJCQkJCSAgICZjaHVua19kYXRhW2ldKTsKKwl9CisK KwlpZiAoc2VtX2luZm8tPndhaXRfc2VtX2NvdW50KSB7CisJCXNlbV9kZXBlbmRlbmNpZXMgPSBt YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5rX2RlcCkgKiBzZW1faW5mby0+ d2FpdF9zZW1fY291bnQpOworCQlpZiAoIXNlbV9kZXBlbmRlbmNpZXMpIHsKKwkJCXIgPSAtRU5P TUVNOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwkJaW50IHNlbV9jb3VudCA9IDA7CisJCWZv ciAodW5zaWduZWQgaiA9IDA7IGogPCBzZW1faW5mby0+d2FpdF9zZW1fY291bnQ7IGorKykgewor CQkJc2VtID0gKHN0cnVjdCBhbWRncHVfY3NfZmVuY2UgKilzZW1faW5mby0+d2FpdF9zZW1zW2pd OworCQkJaWYgKCFzZW0tPmNvbnRleHQpCisJCQkJY29udGludWU7CisJCQlzdHJ1Y3QgZHJtX2Ft ZGdwdV9jc19jaHVua19kZXAgKmRlcCA9ICZzZW1fZGVwZW5kZW5jaWVzW3NlbV9jb3VudCsrXTsK KworCQkJYW1kZ3B1X2NzX2NodW5rX2ZlbmNlX3RvX2RlcChzZW0sIGRlcCk7CisJCX0KKwkJaSA9 IG51bV9jaHVua3MrKzsKKworCQkvKiBkZXBlbmRlbmNpZXMgY2h1bmsgKi8KKwkJY2h1bmtzW2ld LmNodW5rX2lkID0gQU1ER1BVX0NIVU5LX0lEX0RFUEVOREVOQ0lFUzsKKwkJY2h1bmtzW2ldLmxl bmd0aF9kdyA9IHNpemVvZihzdHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVua19kZXApIC8gNCAqIHNl bV9jb3VudDsKKwkJY2h1bmtzW2ldLmNodW5rX2RhdGEgPSAodWludDY0X3QpKHVpbnRwdHJfdClz ZW1fZGVwZW5kZW5jaWVzOworCX0KKworCXIgPSBhbWRncHVfY3Nfc3VibWl0X3JhdyhjdHgtPndz LT5kZXYsCisJCQkJIGN0eC0+Y3R4LAorCQkJCSByZXF1ZXN0LT5yZXNvdXJjZXMsCisJCQkJIG51 bV9jaHVua3MsCisJCQkJIGNodW5rcywKKwkJCQkgJnJlcXVlc3QtPnNlcV9ubyk7CitlcnJvcl9v dXQ6CisJZnJlZShzZW1fZGVwZW5kZW5jaWVzKTsKKwlyZXR1cm4gcjsKKyNlbmRpZgorfQogCiB2 b2lkIHJhZHZfYW1kZ3B1X2NzX2luaXRfZnVuY3Rpb25zKHN0cnVjdCByYWR2X2FtZGdwdV93aW5z eXMgKndzKQogewotLSAKMi45LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1k LWdmeAo=