From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 38/92] KVM: VMX: Add init/set/get functions for SPP Date: Fri, 9 Aug 2019 18:59:53 +0300 Message-ID: <20190809160047.8319-39-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Zhang Yi , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , He Chen , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org RnJvbTogWWFuZyBXZWlqaWFuZyA8d2VpamlhbmcueWFuZ0BpbnRlbC5jb20+Cgppbml0X3NwcCgp IG11c3QgYmUgY2FsbGVkIGJlZm9yZSB7Z2V0LCBzZXR9X3N1YnBhZ2UKZnVuY3Rpb25zLCBpdCBj cmVhdGVzIHN1YnBhZ2UgYWNjZXNzIGJpdG1hcHMgZm9yIG1lbW9yeSBwYWdlcwphbmQgaXNzdWVz IGEgS1ZNIHJlcXVlc3QgdG8gc2V0dXAgU1BQVCByb290IHBhZ2VzLgoKa3ZtX21tdV9zZXRfc3Vi cGFnZXMoKSBpcyB0byBlbmFibGUgU1BQIGJpdCBpbiBFUFQgbGVhZiBwYWdlCmFuZCBzZXR1cCBj b3JyZXNwb25kaW5nIFNQUFQgZW50cmllcy4gVGhlIG1tdV9sb2NrCmlzIGhlbGQgYmVmb3JlIGFi b3ZlIG9wZXJhdGlvbi4gSWYgaXQncyBjYWxsZWQgaW4gRVBUIGZhdWx0IGFuZApTUFBUIG1pcy1j b25maWcgaW5kdWNlZCBoYW5kbGVyLCBtbXVfbG9jayBpcyBhY3F1aXJlZCBvdXRzaWRlCnRoZSBm dW5jdGlvbiwgb3RoZXJ3aXNlLCBpdCdzIGFjcXVpcmVkIGluc2lkZSBpdC4KCmt2bV9tbXVfZ2V0 X3N1YnBhZ2VzKCkgaXMgdXNlZCB0byBxdWVyeSBhY2Nlc3MgYml0bWFwIGZvcgpwcm90ZWN0ZWQg cGFnZSwgaXQncyBhbHNvIHVzZWQgaW4gRVBUIGZhdWx0IGhhbmRsZXIgdG8gY2hlY2sKd2hldGhl ciB0aGUgZmF1bHQgRVBUIHBhZ2UgaXMgU1BQIHByb3RlY3RlZCBhcyB3ZWxsLgoKQ28tZGV2ZWxv cGVkLWJ5OiBIZSBDaGVuIDxoZS5jaGVuQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTog SGUgQ2hlbiA8aGUuY2hlbkBsaW51eC5pbnRlbC5jb20+CkNvLWRldmVsb3BlZC1ieTogWmhhbmcg WWkgPHlpLnouemhhbmdAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBaaGFuZyBZaSA8 eWkuei56aGFuZ0BsaW51eC5pbnRlbC5jb20+CkNvLWRldmVsb3BlZC1ieTogWWFuZyBXZWlqaWFu ZyA8d2VpamlhbmcueWFuZ0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFlhbmcgV2Vpamlhbmcg PHdlaWppYW5nLnlhbmdAaW50ZWwuY29tPgpNZXNzYWdlLUlkOiA8MjAxOTA3MTcxMzM3NTEuMTI5 MTAtNi13ZWlqaWFuZy55YW5nQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogQWRhbGJlcnQgTGF6 xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29tPgotLS0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmggfCAgMTggKysrKwogYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmggICAgICB8ICAg MiArCiBhcmNoL3g4Ni9rdm0vbW11LmMgICAgICAgICAgICAgIHwgMTYwICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jICAgICAgICAgIHwgIDQ4 ICsrKysrKysrKysKIGFyY2gveDg2L2t2bS94ODYuYyAgICAgICAgICAgICAgfCAgNTcgKysrKysr KysrKysrCiBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggICAgICAgIHwgICAzICsKIGluY2x1ZGUv dWFwaS9saW51eC9rdm0uaCAgICAgICAgfCAgIDkgKysKIDcgZmlsZXMgY2hhbmdlZCwgMjk3IGlu c2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5o IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBmMDg3ODYzMWIxMmEuLjdl ZTZlMWZmNWVlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAor KysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0zOTksOCArMzk5LDEzIEBA IHN0cnVjdCBrdm1fbW11IHsKIAl2b2lkICgqaW52bHBnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUs IGd2YV90IGd2YSwgaHBhX3Qgcm9vdF9ocGEpOwogCXZvaWQgKCp1cGRhdGVfcHRlKShzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAogCQkJICAgdTY0ICpzcHRl LCBjb25zdCB2b2lkICpwdGUpOworCWludCAoKmdldF9zdWJwYWdlcykoc3RydWN0IGt2bSAqa3Zt LCBzdHJ1Y3Qga3ZtX3N1YnBhZ2UgKnNwcF9pbmZvKTsKKwlpbnQgKCpzZXRfc3VicGFnZXMpKHN0 cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zdWJwYWdlICpzcHBfaW5mbyk7CisJaW50ICgqaW5p dF9zcHApKHN0cnVjdCBrdm0gKmt2bSk7CisKIAlocGFfdCByb290X2hwYTsKIAlncGFfdCByb290 X2NyMzsKKwlocGFfdCBzcHB0X3Jvb3Q7CiAJdW5pb24ga3ZtX21tdV9yb2xlIG1tdV9yb2xlOwog CXU4IHJvb3RfbGV2ZWw7CiAJdTggc2hhZG93X3Jvb3RfbGV2ZWw7CkBAIC05MjksNiArOTM0LDgg QEAgc3RydWN0IGt2bV9hcmNoIHsKIAogCWJvb2wgZ3Vlc3RfY2FuX3JlYWRfbXNyX3BsYXRmb3Jt X2luZm87CiAJYm9vbCBleGNlcHRpb25fcGF5bG9hZF9lbmFibGVkOworCisJYm9vbCBzcHBfYWN0 aXZlOwogfTsKIAogc3RydWN0IGt2bV92bV9zdGF0IHsKQEAgLTEyMDIsNiArMTIwOSwxMSBAQCBz dHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCWludCAoKm5lc3RlZF9lbmFibGVfZXZtY3MpKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwKIAkJCQkgICB1aW50MTZfdCAqdm1jc192ZXJzaW9uKTsKIAl1aW50MTZf dCAoKm5lc3RlZF9nZXRfZXZtY3NfdmVyc2lvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwor CWJvb2wgKCpnZXRfc3BwX3N0YXR1cykodm9pZCk7CisJaW50ICgqZ2V0X3N1YnBhZ2VzKShzdHJ1 Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc3VicGFnZSAqc3BwX2luZm8pOworCWludCAoKnNldF9z dWJwYWdlcykoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3N1YnBhZ2UgKnNwcF9pbmZvKTsK KwlpbnQgKCppbml0X3NwcCkoc3RydWN0IGt2bSAqa3ZtKTsKIH07CiAKIHN0cnVjdCBrdm1fYXJj aF9hc3luY19wZiB7CkBAIC0xNDIwLDYgKzE0MzIsMTIgQEAgdm9pZCBrdm1fbW11X2ludmxwZyhz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CiB2b2lkIGt2bV9tbXVfaW52cGNpZF9n dmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGxvbmcgcGNpZCk7 CiB2b2lkIGt2bV9tbXVfbmV3X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IG5ld19j cjMsIGJvb2wgc2tpcF90bGJfZmx1c2gpOwogCitpbnQga3ZtX21tdV9nZXRfc3VicGFnZXMoc3Ry dWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3N1YnBhZ2UgKnNwcF9pbmZvLAorCQkJIGJvb2wgbW11 X2xvY2tlZCk7CitpbnQga3ZtX21tdV9zZXRfc3VicGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1 Y3Qga3ZtX3N1YnBhZ2UgKnNwcF9pbmZvLAorCQkJIGJvb2wgbW11X2xvY2tlZCk7CitpbnQga3Zt X21tdV9pbml0X3NwcChzdHJ1Y3Qga3ZtICprdm0pOworCiB2b2lkIGt2bV9lbmFibGVfdGRwKHZv aWQpOwogdm9pZCBrdm1fZGlzYWJsZV90ZHAodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2luY2x1ZGUvYXNtL3ZteC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKaW5kZXggYTJj OWUxOGUwYWQ3Li42Y2IwNWFjMDc0NTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNt L3ZteC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCkBAIC0yMjQsNiArMjI0LDgg QEAgZW51bSB2bWNzX2ZpZWxkIHsKIAlYU1NfRVhJVF9CSVRNQVBfSElHSCAgICAgICAgICAgID0g MHgwMDAwMjAyRCwKIAlFTkNMU19FWElUSU5HX0JJVE1BUAkJPSAweDAwMDAyMDJFLAogCUVOQ0xT X0VYSVRJTkdfQklUTUFQX0hJR0gJPSAweDAwMDAyMDJGLAorCVNQUFRfUE9JTlRFUgkJCT0gMHgw MDAwMjAzMCwKKwlTUFBUX1BPSU5URVJfSElHSAkJPSAweDAwMDAyMDMxLAogCVRTQ19NVUxUSVBM SUVSICAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDMyLAogCVRTQ19NVUxUSVBMSUVSX0hJR0gg ICAgICAgICAgICAgPSAweDAwMDAyMDMzLAogCUdVRVNUX1BIWVNJQ0FMX0FERFJFU1MgICAgICAg ICAgPSAweDAwMDAyNDAwLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94 ODYva3ZtL21tdS5jCmluZGV4IGYyNzc0YmJjZmVlZC4uMzhlNzkyMTBkMDEwIDEwMDY0NAotLS0g YS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0zODQ2LDYg KzM4NDYsOSBAQCB2b2lkIGt2bV9tbXVfZnJlZV9yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUs IHN0cnVjdCBrdm1fbW11ICptbXUsCiAJCSAgICAobW11LT5yb290X2xldmVsID49IFBUNjRfUk9P VF80TEVWRUwgfHwgbW11LT5kaXJlY3RfbWFwKSkgewogCQkJbW11X2ZyZWVfcm9vdF9wYWdlKHZj cHUtPmt2bSwgJm1tdS0+cm9vdF9ocGEsCiAJCQkJCSAgICZpbnZhbGlkX2xpc3QpOworCQkJaWYg KHZjcHUtPmt2bS0+YXJjaC5zcHBfYWN0aXZlKQorCQkJCW1tdV9mcmVlX3Jvb3RfcGFnZSh2Y3B1 LT5rdm0sICZtbXUtPnNwcHRfcm9vdCwKKwkJCQkJCSAgICZpbnZhbGlkX2xpc3QpOwogCQl9IGVs c2UgewogCQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKIAkJCQlpZiAobW11LT5wYWVfcm9vdFtp XSAhPSAwKQpAQCAtNDUxMCw2ICs0NTEzLDE1OCBAQCBpbnQga3ZtX21tdV9zZXR1cF9zcHBfc3Ry dWN0dXJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZ TUJPTF9HUEwoa3ZtX21tdV9zZXR1cF9zcHBfc3RydWN0dXJlKTsKKworaW50IGt2bV9tbXVfaW5p dF9zcHAoc3RydWN0IGt2bSAqa3ZtKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IGt2bV92Y3B1 ICp2Y3B1OworCWludCByb290X2xldmVsOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNzcF9zcDsK KworCisJaWYgKCFrdm1feDg2X29wcy0+Z2V0X3NwcF9zdGF0dXMoKSkKKwkgICAgICByZXR1cm4g LUVOT0RFVjsKKworCWlmIChrdm0tPmFyY2guc3BwX2FjdGl2ZSkKKwkgICAgICByZXR1cm4gMDsK KworCXJldCA9IGt2bV9zdWJwYWdlX2NyZWF0ZV9iaXRtYXBzKGt2bSk7CisKKwlpZiAocmV0KQor CSAgICAgIHJldHVybiByZXQ7CisKKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsK KwkJLyogcHJlcGFyZSBjYWNoZXMgZm9yIFNQUCBzZXR1cC4qLworCQltbXVfdG9wdXBfbWVtb3J5 X2NhY2hlcyh2Y3B1KTsKKwkJcm9vdF9sZXZlbCA9IHZjcHUtPmFyY2gubW11LT5zaGFkb3dfcm9v dF9sZXZlbDsKKwkJc3NwX3NwID0ga3ZtX21tdV9nZXRfc3BwX3BhZ2UodmNwdSwgMCwgcm9vdF9s ZXZlbCk7CisJCSsrc3NwX3NwLT5yb290X2NvdW50OworCQl2Y3B1LT5hcmNoLm1tdS0+c3BwdF9y b290ID0gX19wYShzc3Bfc3AtPnNwdCk7CisJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9MT0FE X0NSMywgdmNwdSk7CisJfQorCisJa3ZtLT5hcmNoLnNwcF9hY3RpdmUgPSB0cnVlOworCXJldHVy biAwOworfQorCitpbnQga3ZtX21tdV9nZXRfc3VicGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1 Y3Qga3ZtX3N1YnBhZ2UgKnNwcF9pbmZvLAorCQkJIGJvb2wgbW11X2xvY2tlZCkKK3sKKwl1MzIg KmFjY2VzcyA9IHNwcF9pbmZvLT5hY2Nlc3NfbWFwOworCWdmbl90IGdmbiA9IHNwcF9pbmZvLT5i YXNlX2dmbjsKKwlpbnQgbnBhZ2VzID0gc3BwX2luZm8tPm5wYWdlczsKKwlzdHJ1Y3Qga3ZtX21l bW9yeV9zbG90ICpzbG90OworCWludCBpOworCWludCByZXQ7CisKKwlpZiAoIWt2bS0+YXJjaC5z cHBfYWN0aXZlKQorCSAgICAgIHJldHVybiAtRU5PREVWOworCisJaWYgKCFtbXVfbG9ja2VkKQor CSAgICAgIHNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBh Z2VzOyBpKyssIGdmbisrKSB7CisJCXNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbik7CisJ CWlmICghc2xvdCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJ fQorCQlhY2Nlc3NbaV0gPSAqZ2ZuX3RvX3N1YnBhZ2Vfd3BfaW5mbyhzbG90LCBnZm4pOworCX0K KworCXJldCA9IGk7CisKK291dF91bmxvY2s6CisJaWYgKCFtbXVfbG9ja2VkKQorCSAgICAgIHNw aW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lN Qk9MX0dQTChrdm1fbW11X2dldF9zdWJwYWdlcyk7CisKK2ludCBrdm1fbW11X3NldF9zdWJwYWdl cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc3VicGFnZSAqc3BwX2luZm8sCisJCQkgYm9v bCBtbXVfbG9ja2VkKQoreworCXUzMiAqYWNjZXNzID0gc3BwX2luZm8tPmFjY2Vzc19tYXA7CisJ Z2ZuX3QgZ2ZuID0gc3BwX2luZm8tPmJhc2VfZ2ZuOworCWludCBucGFnZXMgPSBzcHBfaW5mby0+ bnBhZ2VzOworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGt2bV92Y3B1 ICp2Y3B1OworCXN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQ7CisJaW50IGksIGs7CisJ dTMyICp3cF9tYXA7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlpZiAoIWt2bS0+YXJjaC5zcHBf YWN0aXZlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghbW11X2xvY2tlZCkKKwkgICAgICBz cGluX2xvY2soJmt2bS0+bW11X2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsr LCBnZm4rKykgeworCQlzbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pOworCQlpZiAoIXNs b3QpCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJLyoKKwkJICogY2hlY2sgd2hldGhlciB0aGUg dGFyZ2V0IDRLQiBwYWdlIGV4aXN0cyBpbiBFUFQgbGVhZgorCQkgKiBlbnRyaWVzLklmIGl0J3Mg dGhlcmUsIHdlIGNhbiBzZXR1cCBTUFAgcHJvdGVjdGlvbiBub3csCisJCSAqIG90aGVyd2lzZSwg bmVlZCB0byBkZWZlciBpdCB0byBFUFQgcGFnZSBmYXVsdCBoYW5kbGVyLgorCQkgKi8KKwkJcm1h cF9oZWFkID0gX19nZm5fdG9fcm1hcChnZm4sIFBUX1BBR0VfVEFCTEVfTEVWRUwsIHNsb3QpOwor CisJCWlmIChybWFwX2hlYWQtPnZhbCkgeworCQkJLyoKKwkJCSAqIGlmIGFsbCBzdWJwYWdlcyBh cmUgbm90IHdyaXRhYmxlLCBvcGVuIFNQUCBiaXQgaW4KKwkJCSAqIEVQVCBsZWFmIGVudHJ5IHRv IGVuYWJsZSBTUFAgcHJvdGVjdGlvbiBmb3IKKwkJCSAqIGNvcnJlc3BvbmRpbmcgcGFnZS4KKwkJ CSAqLworCQkJaWYgKGFjY2Vzc1tpXSAhPSBGVUxMX1NQUF9BQ0NFU1MpIHsKKwkJCQlyZXQgPSBr dm1fbW11X29wZW5fc3VicGFnZV93cml0ZV9wcm90ZWN0KGt2bSwKKwkJCQkJCXNsb3QsIGdmbik7 CisKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIG91dF9lcnI7CisKKwkJCQlrdm1fZm9yX2VhY2hf dmNwdShrLCB2Y3B1LCBrdm0pCisJCQkJCWt2bV9tbXVfc2V0dXBfc3BwX3N0cnVjdHVyZSh2Y3B1 LAorCQkJCQkJYWNjZXNzW2ldLCBnZm4pOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSBrdm1fbW11 X2NsZWFyX3N1YnBhZ2Vfd3JpdGVfcHJvdGVjdChrdm0sCisJCQkJCQlzbG90LCBnZm4pOworCQkJ CWlmIChyZXQpCisJCQkJCWdvdG8gb3V0X2VycjsKKwkJCX0KKworCQl9IGVsc2UKKwkJCXByX2lu Zm8oIiVzIC0gTm8gRVRQIGVudHJ5LCBnZm4gPSAweCVsbHgsIGFjY2VzcyA9IDB4JXguXG4iLCBf X2Z1bmNfXywgZ2ZuLCBhY2Nlc3NbaV0pOworCisJCS8qIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGluIHRkcF9wYWdlX2ZhdWx0KCkgb3IKKwkJICogc3BwX2hhbmRsZXIoKSwgbW11X2xvY2tl ZCA9IHRydWUsIFNQUCBhY2Nlc3MgYml0bWFwCisJCSAqIGlzIGJlaW5nIHVzZWQsIG90aGVyd2lz ZSwgaXQncyBiZWluZyBzdG9yZWQuCisJCSAqLworCQlpZiAoIW1tdV9sb2NrZWQpIHsKKwkJCXdw X21hcCA9IGdmbl90b19zdWJwYWdlX3dwX2luZm8oc2xvdCwgZ2ZuKTsKKwkJCSp3cF9tYXAgPSBh Y2Nlc3NbaV07CisJCX0KKwl9CisKKwlyZXQgPSBpOworb3V0X2VycjoKKwlpZiAocmV0IDwgMCkK KwkgICAgICBwcl9pbmZvKCJTUFAtRXJyb3IsIGRpZG4ndCBnZXQgdGhlIGdmbjoiIFwKKwkJICAg ICAgIiVsbHggZnJvbSBFUFQgbGVhZi5cbiIKKwkJICAgICAgIkN1cnJlbnQgd2UgZG9uJ3Qgc3Vw cG9ydCBTUFAgb24iIFwKKwkJICAgICAgImh1Z2UgcGFnZS5cbiIKKwkJICAgICAgIlBsZWFzZSBk aXNhYmxlIGh1Z2UgcGFnZSBhbmQgaGF2ZSIgXAorCQkgICAgICAiYW5vdGhlciB0cnkuXG4iLCBn Zm4pOworb3V0X3VubG9jazoKKwlpZiAoIW1tdV9sb2NrZWQpCisJICAgICAgc3Bpbl91bmxvY2so Jmt2bS0+bW11X2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgbm9ucGFn aW5nX2luaXRfY29udGV4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgc3RydWN0IGt2 bV9tbXUgKmNvbnRleHQpCiB7CkBAIC01MjA3LDYgKzUzNjIsOSBAQCBzdGF0aWMgdm9pZCBpbml0 X2t2bV90ZHBfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAljb250ZXh0LT5nZXRfY3IzID0g Z2V0X2NyMzsKIAljb250ZXh0LT5nZXRfcGRwdHIgPSBrdm1fcGRwdHJfcmVhZDsKIAljb250ZXh0 LT5pbmplY3RfcGFnZV9mYXVsdCA9IGt2bV9pbmplY3RfcGFnZV9mYXVsdDsKKwljb250ZXh0LT5n ZXRfc3VicGFnZXMgPSBrdm1feDg2X29wcy0+Z2V0X3N1YnBhZ2VzOworCWNvbnRleHQtPnNldF9z dWJwYWdlcyA9IGt2bV94ODZfb3BzLT5zZXRfc3VicGFnZXM7CisJY29udGV4dC0+aW5pdF9zcHAg PSBrdm1feDg2X29wcy0+aW5pdF9zcHA7CiAKIAlpZiAoIWlzX3BhZ2luZyh2Y3B1KSkgewogCQlj b250ZXh0LT5ueCA9IGZhbHNlOwpAQCAtNTQwMyw2ICs1NTYxLDggQEAgdm9pZCBrdm1faW5pdF9t bXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHJlc2V0X3Jvb3RzKQogCQl1aW50IGk7CiAK IAkJdmNwdS0+YXJjaC5tbXUtPnJvb3RfaHBhID0gSU5WQUxJRF9QQUdFOworCQlpZiAoIXZjcHUt Pmt2bS0+YXJjaC5zcHBfYWN0aXZlKQorCQkJdmNwdS0+YXJjaC5tbXUtPnNwcHRfcm9vdCA9IElO VkFMSURfUEFHRTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01NVV9OVU1fUFJFVl9ST09UUzsg aSsrKQogCQkJdmNwdS0+YXJjaC5tbXUtPnByZXZfcm9vdHNbaV0gPSBLVk1fTU1VX1JPT1RfSU5G T19JTlZBTElEOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2 L2t2bS92bXgvdm14LmMKaW5kZXggZjk0ZTNkZWZkOWNmLi5hNTBkZDJiOWQ0MzggMTAwNjQ0Ci0t LSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpA QCAtMjg1MywxMSArMjg1MywxNyBAQCB1NjQgY29uc3RydWN0X2VwdHAoc3RydWN0IGt2bV92Y3B1 ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJvb3RfaHBhKQogCXJldHVybiBlcHRwOwogfQogCitzdGF0 aWMgaW5saW5lIHU2NCBjb25zdHJ1Y3Rfc3BwdHAodW5zaWduZWQgbG9uZyByb290X2hwYSkKK3sK KwlyZXR1cm4gcm9vdF9ocGEgJiBQQUdFX01BU0s7Cit9CisKIHZvaWQgdm14X3NldF9jcjMoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMykKIHsKIAlzdHJ1Y3Qga3ZtICpr dm0gPSB2Y3B1LT5rdm07CiAJdW5zaWduZWQgbG9uZyBndWVzdF9jcjM7CiAJdTY0IGVwdHA7CisJ dTY0IHNwcHRwOwogCiAJZ3Vlc3RfY3IzID0gY3IzOwogCWlmIChlbmFibGVfZXB0KSB7CkBAIC0y ODgwLDYgKzI4ODYsMTIgQEAgdm9pZCB2bXhfc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUs IHVuc2lnbmVkIGxvbmcgY3IzKQogCQllcHRfbG9hZF9wZHB0cnModmNwdSk7CiAJfQogCisJaWYg KGt2bS0+YXJjaC5zcHBfYWN0aXZlICYmIFZBTElEX1BBR0UodmNwdS0+YXJjaC5tbXUtPnNwcHRf cm9vdCkpIHsKKwkJc3BwdHAgPSBjb25zdHJ1Y3Rfc3BwdHAodmNwdS0+YXJjaC5tbXUtPnNwcHRf cm9vdCk7CisJCXZtY3Nfd3JpdGU2NChTUFBUX1BPSU5URVIsIHNwcHRwKTsKKwkJdm14X2ZsdXNo X3RsYih2Y3B1LCB0cnVlKTsKKwl9CisKIAl2bWNzX3dyaXRlbChHVUVTVF9DUjMsIGd1ZXN0X2Ny Myk7CiB9CiAKQEAgLTU3NDMsNiArNTc1NSw5IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jcyh2b2lk KQogCQlwcl9lcnIoIlBvc3RlZEludHJWZWMgPSAweCUwMnhcbiIsIHZtY3NfcmVhZDE2KFBPU1RF RF9JTlRSX05WKSk7CiAJaWYgKChzZWNvbmRhcnlfZXhlY19jb250cm9sICYgU0VDT05EQVJZX0VY RUNfRU5BQkxFX0VQVCkpCiAJCXByX2VycigiRVBUIHBvaW50ZXIgPSAweCUwMTZsbHhcbiIsIHZt Y3NfcmVhZDY0KEVQVF9QT0lOVEVSKSk7CisJaWYgKChzZWNvbmRhcnlfZXhlY19jb250cm9sICYg U0VDT05EQVJZX0VYRUNfRU5BQkxFX1NQUCkpCisJCXByX2VycigiU1BQVCBwb2ludGVyID0gMHgl MDE2bGx4XG4iLCB2bWNzX3JlYWQ2NChTUFBUX1BPSU5URVIpKTsKKwogCW4gPSB2bWNzX3JlYWQz MihDUjNfVEFSR0VUX0NPVU5UKTsKIAlmb3IgKGkgPSAwOyBpICsgMSA8IG47IGkgKz0gNCkKIAkJ cHJfZXJyKCJDUjMgdGFyZ2V0JXU9JTAxNmx4IHRhcmdldCV1PSUwMTZseFxuIiwKQEAgLTc2NDYs NiArNzY2MSwxMiBAQCBzdGF0aWMgX19pbml0IGludCBoYXJkd2FyZV9zZXR1cCh2b2lkKQogCQlr dm1feDg2X29wcy0+ZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQgPSBOVUxMOwogCX0KIAorCWlm ICghc3BwX3N1cHBvcnRlZCkgeworCQlrdm1feDg2X29wcy0+Z2V0X3N1YnBhZ2VzID0gTlVMTDsK KwkJa3ZtX3g4Nl9vcHMtPnNldF9zdWJwYWdlcyA9IE5VTEw7CisJCWt2bV94ODZfb3BzLT5pbml0 X3NwcCA9IE5VTEw7CisJfQorCiAJaWYgKCFjcHVfaGFzX3ZteF9wcmVlbXB0aW9uX3RpbWVyKCkp CiAJCWt2bV94ODZfb3BzLT5yZXF1ZXN0X2ltbWVkaWF0ZV9leGl0ID0gX19rdm1fcmVxdWVzdF9p bW1lZGlhdGVfZXhpdDsKIApAQCAtNzcwNiw2ICs3NzI3LDI4IEBAIHN0YXRpYyBib29sIHZteF9z cHRfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiAodm14LT5leGl0X3JlYXNv biA9PSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OKTsKIH0KIAorc3RhdGljIGJvb2wgdm14X2dl dF9zcHBfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIHNwcF9zdXBwb3J0ZWQ7Cit9CisKK3N0YXRp YyBpbnQgdm14X2dldF9zdWJwYWdlcyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkgICAgc3RydWN0IGt2 bV9zdWJwYWdlICpzcHBfaW5mbykKK3sKKwlyZXR1cm4ga3ZtX2dldF9zdWJwYWdlcyhrdm0sIHNw cF9pbmZvKTsKK30KKworc3RhdGljIGludCB2bXhfc2V0X3N1YnBhZ2VzKHN0cnVjdCBrdm0gKmt2 bSwKKwkJCSAgICBzdHJ1Y3Qga3ZtX3N1YnBhZ2UgKnNwcF9pbmZvKQoreworCXJldHVybiBrdm1f c2V0X3N1YnBhZ2VzKGt2bSwgc3BwX2luZm8pOworfQorCitzdGF0aWMgaW50IHZteF9pbml0X3Nw cChzdHJ1Y3Qga3ZtICprdm0pCit7CisJcmV0dXJuIGt2bV9pbml0X3NwcChrdm0pOworfQorCiBz dGF0aWMgc3RydWN0IGt2bV94ODZfb3BzIHZteF94ODZfb3BzIF9fcm9fYWZ0ZXJfaW5pdCA9IHsK IAkuY3B1X2hhc19rdm1fc3VwcG9ydCA9IGNwdV9oYXNfa3ZtX3N1cHBvcnQsCiAJLmRpc2FibGVk X2J5X2Jpb3MgPSB2bXhfZGlzYWJsZWRfYnlfYmlvcywKQEAgLTc4NTYsNiArNzg5OSwxMSBAQCBz dGF0aWMgc3RydWN0IGt2bV94ODZfb3BzIHZteF94ODZfb3BzIF9fcm9fYWZ0ZXJfaW5pdCA9IHsK IAkuc2V0X25lc3RlZF9zdGF0ZSA9IE5VTEwsCiAJLmdldF92bWNzMTJfcGFnZXMgPSBOVUxMLAog CS5uZXN0ZWRfZW5hYmxlX2V2bWNzID0gTlVMTCwKKworCS5nZXRfc3BwX3N0YXR1cyA9IHZteF9n ZXRfc3BwX3N0YXR1cywKKwkuZ2V0X3N1YnBhZ2VzID0gdm14X2dldF9zdWJwYWdlcywKKwkuc2V0 X3N1YnBhZ2VzID0gdm14X3NldF9zdWJwYWdlcywKKwkuaW5pdF9zcHAgPSB2bXhfaW5pdF9zcHAs CiB9OwogCiBzdGF0aWMgdm9pZCB2bXhfY2xlYW51cF9sMWRfZmx1c2godm9pZCkKZGlmZiAtLWdp dCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCAyYWMxZTBh YmExZmMuLmI4YWUyNWNiMjI3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBi L2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNDU3Niw2ICs0NTc2LDYxIEBAIGludCBrdm1fdm1faW9j dGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyBp bnQga3ZtX3ZtX2lvY3RsX2dldF9zdWJwYWdlcyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICBz dHJ1Y3Qga3ZtX3N1YnBhZ2UgKnNwcF9pbmZvKQoreworCXJldHVybiBrdm1fYXJjaF9nZXRfc3Vi cGFnZXMoa3ZtLCBzcHBfaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9z dWJwYWdlcyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICBzdHJ1Y3Qga3ZtX3N1YnBhZ2UgKnNw cF9pbmZvKQoreworCXJldHVybiBrdm1fYXJjaF9zZXRfc3VicGFnZXMoa3ZtLCBzcHBfaW5mbyk7 Cit9CisKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2luaXRfc3BwKHN0cnVjdCBrdm0gKmt2bSkK K3sKKwlyZXR1cm4ga3ZtX2FyY2hfaW5pdF9zcHAoa3ZtKTsKK30KKworaW50IGt2bV9nZXRfc3Vi cGFnZXMoc3RydWN0IGt2bSAqa3ZtLAorCQkgICAgIHN0cnVjdCBrdm1fc3VicGFnZSAqc3BwX2lu Zm8pCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0 ID0ga3ZtX21tdV9nZXRfc3VicGFnZXMoa3ZtLCBzcHBfaW5mbywgZmFsc2UpOworCW11dGV4X3Vu bG9jaygma3ZtLT5zbG90c19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChrdm1fZ2V0X3N1YnBhZ2VzKTsKKworaW50IGt2bV9zZXRfc3VicGFnZXMoc3RydWN0IGt2 bSAqa3ZtLAorCQkgICAgIHN0cnVjdCBrdm1fc3VicGFnZSAqc3BwX2luZm8pCit7CisJaW50IHJl dDsKKworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0ID0ga3ZtX21tdV9zZXRf c3VicGFnZXMoa3ZtLCBzcHBfaW5mbywgZmFsc2UpOworCW11dGV4X3VubG9jaygma3ZtLT5zbG90 c19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fc2V0X3N1 YnBhZ2VzKTsKKworaW50IGt2bV9pbml0X3NwcChzdHJ1Y3Qga3ZtICprdm0pCit7CisJaW50IHJl dDsKKworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0ID0ga3ZtX21tdV9pbml0 X3NwcChrdm0pOworCW11dGV4X3VubG9jaygma3ZtLT5zbG90c19sb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdF9zcHApOworCiBsb25nIGt2bV9hcmNo X3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGlvY3Rs LCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTkzNTIsNiArOTQwNyw4IEBAIHZvaWQga3ZtX2Fy Y2hfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAq ZnJlZSwKIAl9CiAKIAlrdm1fcGFnZV90cmFja19mcmVlX21lbXNsb3QoZnJlZSwgZG9udCk7CisJ aWYgKGt2bS0+YXJjaC5zcHBfYWN0aXZlKQorCSAgICAgIGt2bV9zdWJwYWdlX2ZyZWVfbWVtc2xv dChmcmVlLCBkb250KTsKIH0KIAogaW50IGt2bV9hcmNoX2NyZWF0ZV9tZW1zbG90KHN0cnVjdCBr dm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBjYTc1 OTdlNDI5ZGYuLjBiOWEwZjU0NjM5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9z dC5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODM0LDYgKzgzNCw5IEBAIGlu dCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHN0 cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfZ2V0X3NwcF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAq dmNwdSwKIAkJCWdmbl90IGdmbiwgdW5zaWduZWQgaW50IGxldmVsKTsKK2ludCBrdm1fZ2V0X3N1 YnBhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zdWJwYWdlICpzcHBfaW5mbyk7Citp bnQga3ZtX3NldF9zdWJwYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc3VicGFnZSAq c3BwX2luZm8pOworaW50IGt2bV9pbml0X3NwcChzdHJ1Y3Qga3ZtICprdm0pOwogCiAjaWZuZGVm IF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9s aW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAppbmRleCAyZmYwNWZkMTIzZTMu LmFkOGYyYTNjYTcyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCisrKyBi L2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaApAQCAtMTAyLDYgKzEwMiwxNSBAQCBzdHJ1Y3Qga3Zt X3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uIHsKIAlfX3U2NCB1c2Vyc3BhY2VfYWRkcjsgLyogc3Rh cnQgb2YgdGhlIHVzZXJzcGFjZSBhbGxvY2F0ZWQgbWVtb3J5ICovCiB9OwogCisvKiBmb3IgS1ZN X1NVQlBBR0VTX0dFVF9BQ0NFU1MgYW5kIEtWTV9TVUJQQUdFU19TRVRfQUNDRVNTICovCisjZGVm aW5lIFNVQlBBR0VfTUFYX0JJVE1BUCAgIDY0CitzdHJ1Y3Qga3ZtX3N1YnBhZ2UgeworCV9fdTY0 IGJhc2VfZ2ZuOworCV9fdTY0IG5wYWdlczsKKwkgLyogc3ViLXBhZ2Ugd3JpdGUtYWNjZXNzIGJp dG1hcCBhcnJheSAqLworCV9fdTMyIGFjY2Vzc19tYXBbU1VCUEFHRV9NQVhfQklUTUFQXTsKK307 CisKIC8qCiAgKiBUaGUgYml0IDAgfiBiaXQgMTUgb2Yga3ZtX21lbW9yeV9yZWdpb246OmZsYWdz IGFyZSB2aXNpYmxlIGZvciB1c2Vyc3BhY2UsCiAgKiBvdGhlciBiaXRzIGFyZSByZXNlcnZlZCBm b3Iga3ZtIGludGVybmFsIHVzZSB3aGljaCBhcmUgZGVmaW5lZCBpbgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxp c3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0 cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=