From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Michal=20Koutn=C3=BD?= Subject: [PATCH v2 3/3] selftests: cgroup: Add cpuset migrations testcase Date: Fri, 30 Jun 2023 20:39:08 +0200 Message-ID: <20230630183908.32148-4-mkoutny@suse.com> References: <20230630183908.32148-1-mkoutny@suse.com> Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1688150351; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/mkrwOQhXNXUI/w8q8/tfaaJ0AMF+TiZmf5ENkhiSpo=; b=UUqO4hoavU73XqgnT725k9l7mOYKqlhlUQYad9oWn1acVy+xl8ak21YdiLT3d8i2iJ3Ykh ku4OG8Pa3SzJXhKaXexajCS/5JtbOaNWyRIyrPBFMf91ezWfPsbGpEaVYSdPK3Uvw687AE Fyg1wkX0l/UFsHDa6so/bM7YDR4KOtw= In-Reply-To: <20230630183908.32148-1-mkoutny-IBi9RG/b67k@public.gmane.org> List-ID: Content-Type: text/plain; charset="macroman" To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Waiman Long , Zefan Li , Tejun Heo , Johannes Weiner , Shuah Khan QWRkIGEgc2VwYXJhdGUgdGVzdGZpbGUgdG8gdmVyaWZ5IHRyZWF0aW5nIHBlcm1pc3Npb25zIHdo ZW4gdGFza3MgYXJlCm1pZ3JhdGVkIG9uIGNncm91cCB2MiBoaWVyYXJjaHkgYmV0d2VlbiBjcHVz ZXQgY2dyb3Vwcy4KCkluIGFjY29yZGFuY2Ugd2l0aCB2MiBkZXNpZ24sIG1pZ3JhdGlvbiBzaG91 bGQgYmUgYWxsb3dlZCBiYXNlZCBvbgpkZWxlZ2F0aW9uIGJvdW5kYXJpZXMgKGkuZS4gY2dyb3Vw LnByb2NzIHBlcm1pc3Npb25zKSBhbmQgZG9lcyBub3QKZGVwZW5kIG9uIHRoZSBtaWdyYXRlZCBv YmplY3QgKGkuZS4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgY2FuIG1pZ3JhdGUKYW5vdGhlciBwcm9j ZXNzIChldmVuIHByaXZpbGVnZWQpIGFzIGxvbmcgYXMgaXQgcmVtYWlucyBpbiB0aGUgb3JpZ2lu YWwKZGVkaWNhdGVkIHNjb3BlKS4KClNpZ25lZC1vZmYtYnk6IE1pY2hhbCBLb3V0bsO9IDxta291 dG55LUlCaTlSRy9iNjdrQHB1YmxpYy5nbWFuZS5vcmc+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogdG9vbHMvdGVzdGluZy9zZWxmdGVz dHMvY2dyb3VwLy5naXRpZ25vcmUgICAgfCAgIDEgKwogdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMv Y2dyb3VwL01ha2VmaWxlICAgICAgfCAgIDIgKwogdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dy b3VwL3Rlc3RfY3B1c2V0LmMgfCAyNzIgKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFu Z2VkLCAyNzYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcv c2VsZnRlc3RzL2Nncm91cC90ZXN0X2NwdXNldC5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMg Yi9NQUlOVEFJTkVSUwppbmRleCAwM2JlYzgzOTQ0YzQuLjVjNTVkZTAwMGVlMyAxMDA2NDQKLS0t IGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTUyNjAsNiArNTI2MCw3IEBAIFQ6 CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGovY2dy b3VwLmdpdAogRjoJRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5y c3QKIEY6CWluY2x1ZGUvbGludXgvY3B1c2V0LmgKIEY6CWtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMK K0Y6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NwdXNldC5jCiBGOgl0b29s cy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jcHVzZXRfcHJzLnNoCiAKIENPTlRST0wg R1JPVVAgLSBNRU1PUlkgUkVTT1VSQ0UgQ09OVFJPTExFUiAoTUVNQ0cpCmRpZmYgLS1naXQgYS90 b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcv c2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlCmluZGV4IGM0YTU3ZTY5Zjc0OS4uODQ0M2E4ZDQ2 YTFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9y ZQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZQpAQCAtNSw0 ICs1LDUgQEAgdGVzdF9mcmVlemVyCiB0ZXN0X2ttZW0KIHRlc3Rfa2lsbAogdGVzdF9jcHUKK3Rl c3RfY3B1c2V0CiB3YWl0X2lub3RpZnkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRl c3RzL2Nncm91cC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtl ZmlsZQppbmRleCAzZDI2Mzc0N2QyYWQuLmRlZTBmMDEzYzdmNCAxMDA2NDQKLS0tIGEvdG9vbHMv dGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2Vs ZnRlc3RzL2Nncm91cC9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQCBURVNUX0dFTl9QUk9HUyAr PSB0ZXN0X2NvcmUKIFRFU1RfR0VOX1BST0dTICs9IHRlc3RfZnJlZXplcgogVEVTVF9HRU5fUFJP R1MgKz0gdGVzdF9raWxsCiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NwdQorVEVTVF9HRU5fUFJP R1MgKz0gdGVzdF9jcHVzZXQKIAogTE9DQUxfSERSUyArPSAkKHNlbGZkaXIpL2Nsb25lMy9jbG9u ZTNfc2VsZnRlc3RzLmggJChzZWxmZGlyKS9waWRmZC9waWRmZC5oCiAKQEAgLTIzLDMgKzI0LDQg QEAgJChPVVRQVVQpL3Rlc3RfY29yZTogY2dyb3VwX3V0aWwuYwogJChPVVRQVVQpL3Rlc3RfZnJl ZXplcjogY2dyb3VwX3V0aWwuYwogJChPVVRQVVQpL3Rlc3Rfa2lsbDogY2dyb3VwX3V0aWwuYwog JChPVVRQVVQpL3Rlc3RfY3B1OiBjZ3JvdXBfdXRpbC5jCiskKE9VVFBVVCkvdGVzdF9jcHVzZXQ6 IGNncm91cF91dGlsLmMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91 cC90ZXN0X2NwdXNldC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY3B1 c2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NzZlYzZmMDE0 ZDgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVz dF9jcHVzZXQuYwpAQCAtMCwwICsxLDI3MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKKworI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPHNpZ25hbC5o PgorCisjaW5jbHVkZSAiLi4va3NlbGZ0ZXN0LmgiCisjaW5jbHVkZSAiY2dyb3VwX3V0aWwuaCIK Kworc3RhdGljIGludCBpZGxlX3Byb2Nlc3NfZm4oY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICph cmcpCit7CisJKHZvaWQpcGF1c2UoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19t aWdyYXRpb25fZm4oY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCit7CisJaW50IG9iamVj dF9waWQgPSAoaW50KShzaXplX3QpYXJnOworCisJaWYgKHNldHVpZChURVNUX1VJRCkpCisJCXJl dHVybiBFWElUX0ZBSUxVUkU7CisKKwkvLyBYWFggY2hlY2tpbmcgL3Byb2MvJHBpZC9jZ3JvdXAg d291bGQgYmUgcXVpY2tlciB0aGFuIHdhaXQKKwlpZiAoY2dfZW50ZXIoY2dyb3VwLCBvYmplY3Rf cGlkKSB8fAorCSAgICBjZ193YWl0X2Zvcl9wcm9jX2NvdW50KGNncm91cCwgMSkpCisJCXJldHVy biBFWElUX0ZBSUxVUkU7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50 IGRvX2NvbnRyb2xsZXJfZm4oY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCit7CisJY29u c3QgY2hhciAqY2hpbGQgPSBjZ3JvdXA7CisJY29uc3QgY2hhciAqcGFyZW50ID0gYXJnOworCisJ aWYgKHNldHVpZChURVNUX1VJRCkpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlpZiAoIWNn X3JlYWRfc3Ryc3RyKGNoaWxkLCAiY2dyb3VwLmNvbnRyb2xsZXJzIiwgImNwdXNldCIpKQorCQly ZXR1cm4gRVhJVF9GQUlMVVJFOworCisJaWYgKGNnX3dyaXRlKHBhcmVudCwgImNncm91cC5zdWJ0 cmVlX2NvbnRyb2wiLCAiK2NwdXNldCIpKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJaWYg KGNnX3JlYWRfc3Ryc3RyKGNoaWxkLCAiY2dyb3VwLmNvbnRyb2xsZXJzIiwgImNwdXNldCIpKQor CQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJaWYgKGNnX3dyaXRlKHBhcmVudCwgImNncm91cC5z dWJ0cmVlX2NvbnRyb2wiLCAiLWNwdXNldCIpKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJ aWYgKCFjZ19yZWFkX3N0cnN0cihjaGlsZCwgImNncm91cC5jb250cm9sbGVycyIsICJjcHVzZXQi KSkKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisK Ky8qCisgKiBNaWdyYXRlIGEgcHJvY2VzcyBiZXR3ZWVuIHR3byBzaWJsaW5nIGNncm91cHMuCisg KiBUaGUgc3VjY2VzcyBzaG91bGQgb25seSBkZXBlbmQgb24gdGhlIHBhcmVudCBjZ3JvdXAgcGVy bWlzc2lvbnMgYW5kIG5vdCB0aGUKKyAqIG1pZ3JhdGVkIHByb2Nlc3MgaXRzZWxmIChjcHVzZXQg Y29udHJvbGxlciBpcyBpbiBwbGFjZSBiZWNhdXNlIGl0IHVzZXMKKyAqIHNlY3VyaXR5X3Rhc2tf c2V0c2NoZWR1bGVyKCkgaW4gY2dyb3VwIHYxKS4KKyAqLworc3RhdGljIGludCB0ZXN0X2NwdXNl dF9wZXJtc19vYmplY3QoY29uc3QgY2hhciAqcm9vdCwgYm9vbCBhbGxvdykKK3sKKwljaGFyICpw YXJlbnQgPSBOVUxMLCAqY2hpbGRfc3JjID0gTlVMTCwgKmNoaWxkX2RzdCA9IE5VTEw7CisJY2hh ciAqcGFyZW50X3Byb2NzID0gTlVMTCwgKmNoaWxkX3NyY19wcm9jcyA9IE5VTEwsICpjaGlsZF9k c3RfcHJvY3MgPSBOVUxMOworCWNvbnN0IHVpZF90IHRlc3RfZXVpZCA9IFRFU1RfVUlEOworCWlu dCBvYmplY3RfcGlkID0gMDsKKwlpbnQgcmV0ID0gS1NGVF9GQUlMOworCisJcGFyZW50ID0gY2df bmFtZShyb290LCAiY3B1c2V0X3Rlc3RfMCIpOworCWlmICghcGFyZW50KQorCQlnb3RvIGNsZWFu dXA7CisJcGFyZW50X3Byb2NzID0gY2dfbmFtZShwYXJlbnQsICJjZ3JvdXAucHJvY3MiKTsKKwlp ZiAoIXBhcmVudF9wcm9jcykKKwkJZ290byBjbGVhbnVwOworCWlmIChjZ19jcmVhdGUocGFyZW50 KSkKKwkJZ290byBjbGVhbnVwOworCisJY2hpbGRfc3JjID0gY2dfbmFtZShwYXJlbnQsICJjcHVz ZXRfdGVzdF8xIik7CisJaWYgKCFjaGlsZF9zcmMpCisJCWdvdG8gY2xlYW51cDsKKwljaGlsZF9z cmNfcHJvY3MgPSBjZ19uYW1lKGNoaWxkX3NyYywgImNncm91cC5wcm9jcyIpOworCWlmICghY2hp bGRfc3JjX3Byb2NzKQorCQlnb3RvIGNsZWFudXA7CisJaWYgKGNnX2NyZWF0ZShjaGlsZF9zcmMp KQorCQlnb3RvIGNsZWFudXA7CisKKwljaGlsZF9kc3QgPSBjZ19uYW1lKHBhcmVudCwgImNwdXNl dF90ZXN0XzIiKTsKKwlpZiAoIWNoaWxkX2RzdCkKKwkJZ290byBjbGVhbnVwOworCWNoaWxkX2Rz dF9wcm9jcyA9IGNnX25hbWUoY2hpbGRfZHN0LCAiY2dyb3VwLnByb2NzIik7CisJaWYgKCFjaGls ZF9kc3RfcHJvY3MpCisJCWdvdG8gY2xlYW51cDsKKwlpZiAoY2dfY3JlYXRlKGNoaWxkX2RzdCkp CisJCWdvdG8gY2xlYW51cDsKKworCWlmIChjZ193cml0ZShwYXJlbnQsICJjZ3JvdXAuc3VidHJl ZV9jb250cm9sIiwgIitjcHVzZXQiKSkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKGNnX3JlYWRf c3Ryc3RyKGNoaWxkX3NyYywgImNncm91cC5jb250cm9sbGVycyIsICJjcHVzZXQiKSB8fAorCSAg ICBjZ19yZWFkX3N0cnN0cihjaGlsZF9kc3QsICJjZ3JvdXAuY29udHJvbGxlcnMiLCAiY3B1c2V0 IikpCisJCWdvdG8gY2xlYW51cDsKKworCS8qIEVuYWJsZSBwZXJtaXNzaW9ucyBhbG9uZyBzcmMt PmRzdCB0cmVlIHBhdGggKi8KKwlpZiAoY2hvd24oY2hpbGRfc3JjX3Byb2NzLCB0ZXN0X2V1aWQs IC0xKSB8fAorCSAgICBjaG93bihjaGlsZF9kc3RfcHJvY3MsIHRlc3RfZXVpZCwgLTEpKQorCQln b3RvIGNsZWFudXA7CisKKwlpZiAoYWxsb3cgJiYgY2hvd24ocGFyZW50X3Byb2NzLCB0ZXN0X2V1 aWQsIC0xKSkKKwkJZ290byBjbGVhbnVwOworCisJLyogRm9yayBhIHByaXZpbGVnZWQgY2hpbGQg YXMgYSB0ZXN0IG9iamVjdCAqLworCW9iamVjdF9waWQgPSBjZ19ydW5fbm93YWl0KGNoaWxkX3Ny YywgaWRsZV9wcm9jZXNzX2ZuLCBOVUxMKTsKKwlpZiAob2JqZWN0X3BpZCA8IDApCisJCWdvdG8g Y2xlYW51cDsKKworCS8qIENhcnJ5IG91dCBtaWdyYXRpb24gaW4gYSBjaGlsZCBwcm9jZXNzIHRo YXQgY2FuIGRyb3AgYWxsIHByaXZpbGVnZXMKKwkgKiAoaW5jbHVkaW5nIGNhcGFiaWxpdGllcyks IHRoZSBtYWluIHByb2Nlc3MgbXVzdCByZW1haW4gcHJpdmlsZWdlZCBmb3IKKwkgKiBjbGVhbnVw LgorCSAqIENoaWxkIHByb2Nlc3MncyBjZ3JvdXAgaXMgaXJyZWxldmFudCBidXQgd2UgcGxhY2Ug aXQgaW50byBjaGlsZF9kc3QKKwkgKiBhcyBoYWNreSB3YXkgdG8gcGFzcyBpbmZvcm1hdGlvbiBh Ym91dCBtaWdyYXRpb24gdGFyZ2V0IHRvIHRoZSBjaGlsZC4KKwkgKi8KKwlpZiAoYWxsb3cgXiAo Y2dfcnVuKGNoaWxkX2RzdCwgZG9fbWlncmF0aW9uX2ZuLCAodm9pZCAqKShzaXplX3Qpb2JqZWN0 X3BpZCkgPT0gRVhJVF9TVUNDRVNTKSkKKwkJZ290byBjbGVhbnVwOworCisJcmV0ID0gS1NGVF9Q QVNTOworCitjbGVhbnVwOgorCWlmIChvYmplY3RfcGlkID4gMCkgeworCQkodm9pZClraWxsKG9i amVjdF9waWQsIFNJR1RFUk0pOworCQkodm9pZCljbG9uZV9yZWFwKG9iamVjdF9waWQsIFdFWElU RUQpOworCX0KKworCWNnX2Rlc3Ryb3koY2hpbGRfZHN0KTsKKwlmcmVlKGNoaWxkX2RzdF9wcm9j cyk7CisJZnJlZShjaGlsZF9kc3QpOworCisJY2dfZGVzdHJveShjaGlsZF9zcmMpOworCWZyZWUo Y2hpbGRfc3JjX3Byb2NzKTsKKwlmcmVlKGNoaWxkX3NyYyk7CisKKwljZ19kZXN0cm95KHBhcmVu dCk7CisJZnJlZShwYXJlbnRfcHJvY3MpOworCWZyZWUocGFyZW50KTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9jcHVzZXRfcGVybXNfb2JqZWN0X2FsbG93KGNvbnN0IGNo YXIgKnJvb3QpCit7CisJcmV0dXJuIHRlc3RfY3B1c2V0X3Blcm1zX29iamVjdChyb290LCB0cnVl KTsKK30KKworc3RhdGljIGludCB0ZXN0X2NwdXNldF9wZXJtc19vYmplY3RfZGVueShjb25zdCBj aGFyICpyb290KQoreworCXJldHVybiB0ZXN0X2NwdXNldF9wZXJtc19vYmplY3Qocm9vdCwgZmFs c2UpOworfQorCisvKgorICogTWlncmF0ZSBhIHByb2Nlc3MgYmV0d2VlbiBwYXJlbnQgYW5kIGNo aWxkIGltcGxpY2l0ZWx5CisgKiBJbXBsaWNpdCBtaWdyYXRpb24gaGFwcGVucyB3aGVuIGEgY29u dHJvbGxlciBpcyBlbmFibGVkL2Rpc2FibGVkLgorICoKKyAqLworc3RhdGljIGludCB0ZXN0X2Nw dXNldF9wZXJtc19zdWJ0cmVlKGNvbnN0IGNoYXIgKnJvb3QpCit7CisJY2hhciAqcGFyZW50ID0g TlVMTCwgKmNoaWxkID0gTlVMTDsKKwljaGFyICpwYXJlbnRfcHJvY3MgPSBOVUxMLCAqcGFyZW50 X3N1YmN0bCA9IE5VTEwsICpjaGlsZF9wcm9jcyA9IE5VTEw7CisJY29uc3QgdWlkX3QgdGVzdF9l dWlkID0gVEVTVF9VSUQ7CisJaW50IG9iamVjdF9waWQgPSAwOworCWludCByZXQgPSBLU0ZUX0ZB SUw7CisKKwlwYXJlbnQgPSBjZ19uYW1lKHJvb3QsICJjcHVzZXRfdGVzdF8wIik7CisJaWYgKCFw YXJlbnQpCisJCWdvdG8gY2xlYW51cDsKKwlwYXJlbnRfcHJvY3MgPSBjZ19uYW1lKHBhcmVudCwg ImNncm91cC5wcm9jcyIpOworCWlmICghcGFyZW50X3Byb2NzKQorCQlnb3RvIGNsZWFudXA7CisJ cGFyZW50X3N1YmN0bCA9IGNnX25hbWUocGFyZW50LCAiY2dyb3VwLnN1YnRyZWVfY29udHJvbCIp OworCWlmICghcGFyZW50X3N1YmN0bCkKKwkJZ290byBjbGVhbnVwOworCWlmIChjZ19jcmVhdGUo cGFyZW50KSkKKwkJZ290byBjbGVhbnVwOworCisJY2hpbGQgPSBjZ19uYW1lKHBhcmVudCwgImNw dXNldF90ZXN0XzEiKTsKKwlpZiAoIWNoaWxkKQorCQlnb3RvIGNsZWFudXA7CisJY2hpbGRfcHJv Y3MgPSBjZ19uYW1lKGNoaWxkLCAiY2dyb3VwLnByb2NzIik7CisJaWYgKCFjaGlsZF9wcm9jcykK KwkJZ290byBjbGVhbnVwOworCWlmIChjZ19jcmVhdGUoY2hpbGQpKQorCQlnb3RvIGNsZWFudXA7 CisKKwkvKiBFbmFibGUgcGVybWlzc2lvbnMgYXMgaW4gYSBkZWxlZ2F0ZWQgc3VidHJlZSAqLwor CWlmIChjaG93bihwYXJlbnRfcHJvY3MsIHRlc3RfZXVpZCwgLTEpIHx8CisJICAgIGNob3duKHBh cmVudF9zdWJjdGwsIHRlc3RfZXVpZCwgLTEpIHx8CisJICAgIGNob3duKGNoaWxkX3Byb2NzLCB0 ZXN0X2V1aWQsIC0xKSkKKwkJZ290byBjbGVhbnVwOworCisJLyogUHV0IGEgcHJpdmlsZWdlZCBj aGlsZCBpbiB0aGUgc3VidHJlZSBhbmQgbW9kaWZ5IGNvbnRyb2xsZXIgc3RhdGUKKwkgKiBmcm9t IGFuIHVucHJpdmlsZWdlZCBwcm9jZXNzLCB0aGUgbWFpbiBwcm9jZXNzIHJlbWFpbnMgcHJpdmls ZWdlZAorCSAqIGZvciBjbGVhbnVwLgorCSAqIFRoZSB1bnByaXZpbGVnZWQgY2hpbGQgcnVucyBp biBzdWJ0cmVlIHRvbyB0byBhdm9pZCBwYXJlbnQgYW5kCisJICogaW50ZXJuYWwtbm9kZSBjb25z dHJhaW5nIHZpb2xhdGlvbi4KKwkgKi8KKwlvYmplY3RfcGlkID0gY2dfcnVuX25vd2FpdChjaGls ZCwgaWRsZV9wcm9jZXNzX2ZuLCBOVUxMKTsKKwlpZiAob2JqZWN0X3BpZCA8IDApCisJCWdvdG8g Y2xlYW51cDsKKworCWlmIChjZ19ydW4oY2hpbGQsIGRvX2NvbnRyb2xsZXJfZm4sIHBhcmVudCkg IT0gRVhJVF9TVUNDRVNTKQorCQlnb3RvIGNsZWFudXA7CisKKwlyZXQgPSBLU0ZUX1BBU1M7CisK K2NsZWFudXA6CisJaWYgKG9iamVjdF9waWQgPiAwKSB7CisJCSh2b2lkKWtpbGwob2JqZWN0X3Bp ZCwgU0lHVEVSTSk7CisJCSh2b2lkKWNsb25lX3JlYXAob2JqZWN0X3BpZCwgV0VYSVRFRCk7CisJ fQorCisJY2dfZGVzdHJveShjaGlsZCk7CisJZnJlZShjaGlsZF9wcm9jcyk7CisJZnJlZShjaGls ZCk7CisKKwljZ19kZXN0cm95KHBhcmVudCk7CisJZnJlZShwYXJlbnRfc3ViY3RsKTsKKwlmcmVl KHBhcmVudF9wcm9jcyk7CisJZnJlZShwYXJlbnQpOworCisJcmV0dXJuIHJldDsKK30KKworCisj ZGVmaW5lIFQoeCkgeyB4LCAjeCB9CitzdHJ1Y3QgY3B1c2V0X3Rlc3QgeworCWludCAoKmZuKShj b25zdCBjaGFyICpyb290KTsKKwljb25zdCBjaGFyICpuYW1lOworfSB0ZXN0c1tdID0geworCVQo dGVzdF9jcHVzZXRfcGVybXNfb2JqZWN0X2FsbG93KSwKKwlUKHRlc3RfY3B1c2V0X3Blcm1zX29i amVjdF9kZW55KSwKKwlUKHRlc3RfY3B1c2V0X3Blcm1zX3N1YnRyZWUpLAorfTsKKyN1bmRlZiBU CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY2hhciByb290W1BBVEhf TUFYXTsKKwlpbnQgaSwgcmV0ID0gRVhJVF9TVUNDRVNTOworCisJaWYgKGNnX2ZpbmRfdW5pZmll ZF9yb290KHJvb3QsIHNpemVvZihyb290KSkpCisJCWtzZnRfZXhpdF9za2lwKCJjZ3JvdXAgdjIg aXNuJ3QgbW91bnRlZFxuIik7CisKKwlpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgImNncm91cC5z dWJ0cmVlX2NvbnRyb2wiLCAiY3B1c2V0IikpCisJCWlmIChjZ193cml0ZShyb290LCAiY2dyb3Vw LnN1YnRyZWVfY29udHJvbCIsICIrY3B1c2V0IikpCisJCQlrc2Z0X2V4aXRfc2tpcCgiRmFpbGVk IHRvIHNldCBjcHVzZXQgY29udHJvbGxlclxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh0ZXN0cyk7IGkrKykgeworCQlzd2l0Y2ggKHRlc3RzW2ldLmZuKHJvb3QpKSB7CisJCWNh c2UgS1NGVF9QQVNTOgorCQkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCIlc1xuIiwgdGVzdHNbaV0u bmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBLU0ZUX1NLSVA6CisJCQlrc2Z0X3Rlc3RfcmVzdWx0 X3NraXAoIiVzXG4iLCB0ZXN0c1tpXS5uYW1lKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ cmV0ID0gRVhJVF9GQUlMVVJFOworCQkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCIlc1xuIiwgdGVz dHNbaV0ubmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9Ci0tIAoy LjQxLjAKCg==