Date: Tue, 2 Aug 2016 00:42:49 +0530 From: Akshay Jaggi <akshay1994.leo@gmail.com> To: freebsd-virtualization@freebsd.org, freebsd-xen@freebsd.org, xen-devel@lists.xen.org Cc: Pedro Giffuni <pfg@freebsd.org>, =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <royger@freebsd.org> Subject: Call for Testing : Grant Table User-space Device Message-ID: <CAAeUNVmz521zKZErZqsMuJKHcS_fSvVCw=LByQXoxh_RAiLwiQ@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
--001a1140b16018b2e40539076444 Content-Type: text/plain; charset=UTF-8 Hello Everyone, I am one of the students selected under FreeBSD for Google Summer of Code this year. My project was to implement a user-space grant table device for FreeBSD and add the appropriate bindings for the device in Xen, to enable the qdisk backends. (More details: http://akshayjaggi.me/blog/gsoc-freebsd-xen-progress-report/) The code is right out the oven and cooked enough for testing now, and I would be glad if some of the community member would want to give it a try. Instructions for applying the patches: 1) Apply *freebsd_final_flash.patch* to /usr/src on FreeBSD. Buildkernel and Installkernel. 2) Add *xen_freebsd.patch* to /usr/ports/sysutils/xen-tools/files/, and bind it to be applied in /usr/ports/sysutils/xen-tools/Makefile. Make and Make install. Reboot and play! Change the backendtype to qdisk in the domain configuration files, and test. :) Meanwhile, I am working on getting my work pushed into FreeBSD, and once the gntdev device is ready on FreeBSD, I'll push the necessary bindings in Xen. Happy Testing! Cheers and Regards, Akshay Jaggi --001a1140b16018b2e40539076444 Content-Type: application/octet-stream; name="freebsd_final_flash.patch" Content-Disposition: attachment; filename="freebsd_final_flash.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ircetg1k0 ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzIGIvc3lzL2NvbmYvZmlsZXMKaW5kZXggN2I3ZGJl Yi4uMmEwZWVmNCAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMKKysrIGIvc3lzL2NvbmYvZmls ZXMKQEAgLTI5NzMsNiArMjk3Myw3IEBAIGRldi94ZW4veGVuc3RvcmUveGVuc3RvcmVfZGV2LmMJ b3B0aW9uYWwgeGVuaHZtCiBkZXYveGVuL3hlbnN0b3JlL3hlbnN0b3JlZF9kZXYuYwlvcHRpb25h bCB4ZW5odm0KIGRldi94ZW4vZXZ0Y2huL2V2dGNobl9kZXYuYwlvcHRpb25hbCB4ZW5odm0KIGRl di94ZW4vcHJpdmNtZC9wcml2Y21kLmMJb3B0aW9uYWwgeGVuaHZtCitkZXYveGVuL2dudGRldi9n bnRkZXYuYwkJb3B0aW9uYWwgeGVuaHZtCiBkZXYveGVuL2RlYnVnL2RlYnVnLmMJCW9wdGlvbmFs IHhlbmh2bQogZGV2L3hsL2lmX3hsLmMJCQlvcHRpb25hbCB4bCBwY2kKIGRldi94bC94bHBoeS5j CQkJb3B0aW9uYWwgeGwgcGNpCmRpZmYgLS1naXQgYS9zeXMvZGV2L3hlbi9nbnRkZXYvZ250ZGV2 LmMgYi9zeXMvZGV2L3hlbi9nbnRkZXYvZ250ZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZGMzMTQyZQotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYveGVuL2dudGRl di9nbnRkZXYuYwpAQCAtMCwwICsxLDEwNTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE2 IEFrc2hheSBKYWdnaSA8amFnZ2lARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor ICoKKyAqIGdudGRldi5jCisgKiAKKyAqIEludGVyZmFjZSB0byAvZGV2L3hlbi9nbnRkZXYuCisg KiAKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7 CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs dWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9tYWxs b2MuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNp bmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CisjaW5jbHVkZSA8 c3lzL3NlbGluZm8uaD4KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPHN5cy9jb25m Lmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgorI2lu Y2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3RyZWUuaD4KKyNpbmNsdWRlIDxzeXMv bW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvYml0c2V0Lmg+ CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRl IDxzeXMvc3lzbG9nLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX3Bh cmFtLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CisjaW5jbHVkZSA8dm0vdm1fa2Vybi5o PgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS92bV9tYXAuaD4KKyNpbmNs dWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorI2luY2x1ZGUg PHZtL3ZtX3BoeXMuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+CisKKyNpbmNsdWRl IDx4ZW4veGVuLW9zLmg+CisjaW5jbHVkZSA8eGVuL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDx4 ZW4vZXJyb3IuaD4KKyNpbmNsdWRlIDx4ZW4vZ250dGFiLmg+CisjaW5jbHVkZSA8eGVuL2dudGRl di5oPgorCitNQUxMT0NfREVGSU5FKE1fR05UREVWLCAiZ250ZGV2IiwgIlhlbiBncmFudC10YWJs ZSB1c2VyLXNwYWNlIGRldmljZSIpOworCitzdGF0aWMgZF9vcGVuX3QgZ250ZGV2X29wZW47Citz dGF0aWMgZF9pb2N0bF90IGdudGRldl9pb2N0bDsKK3N0YXRpYyBkX21tYXBfc2luZ2xlX3QgZ250 ZGV2X21tYXBfc2luZ2xlOworCitzdGF0aWMgc3RydWN0IGNkZXZzdyBnbnRkZXZfZGV2c3cgPSB7 CisJLmRfdmVyc2lvbiA9IERfVkVSU0lPTiwKKwkuZF9vcGVuID0gZ250ZGV2X29wZW4sCisJLmRf aW9jdGwgPSBnbnRkZXZfaW9jdGwsCisJLmRfbW1hcF9zaW5nbGUgPSBnbnRkZXZfbW1hcF9zaW5n bGUsCisJLmRfbmFtZSA9ICJnbnRkZXYiLAorfTsKKworc3RhdGljIGRldmljZV90IGdudGRldl9k ZXYgPSBOVUxMOworCitzdHJ1Y3QgZ250ZGV2X2dyZWY7CitzdHJ1Y3QgZ250ZGV2X2dtYXA7CitU QUlMUV9IRUFEKGdyZWZfbGlzdF9oZWFkLCBnbnRkZXZfZ3JlZik7CitUQUlMUV9IRUFEKGdtYXBf bGlzdF9oZWFkLCBnbnRkZXZfZ21hcCk7CisKK3N0cnVjdCBwZXJfdXNlcl9kYXRhIHsKKwlzdHJ1 Y3QJCW10eCB1c2VyX2RhdGFfbG9jazsKKwlzdHJ1Y3QJCWdyZWZfbGlzdF9oZWFkIGdyZWZfbGlz dDsKKwlzdHJ1Y3QJCWdtYXBfbGlzdF9oZWFkIGdtYXBfbGlzdDsKKwl1aW50NjRfdAlmaWxlX29m ZnNldDsKK307CisKKy8qCisgKiBHZXQgb2Zmc2V0IGludG8gdGhlIGZpbGUgd2hpY2ggd2lsbCBi ZSB1c2VkIHdoaWxlIG1tYXBwaW5nIHRoZQorICogYXBwcm9wcmlhdGUgcGFnZXMgYnkgdGhlIHVz ZXJzcGFjZSBwcm9ncmFtLgorICovCitzdGF0aWMgdWludDY0X3QKK2dldF9maWxlX29mZnNldChz dHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91c2VyLCB1aW50MzJfdCBjb3VudCkKK3sKKwl1aW50 NjRfdCBmaWxlX29mZnNldDsKKworCW10eF9sb2NrKCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2Nr KTsKKwlmaWxlX29mZnNldCA9IHByaXZfdXNlci0+ZmlsZV9vZmZzZXQ7CisJcHJpdl91c2VyLT5m aWxlX29mZnNldCArPSBjb3VudCAqIFBBR0VfU0laRTsKKwltdHhfdW5sb2NrKCZwcml2X3VzZXIt PnVzZXJfZGF0YV9sb2NrKTsKKworCXJldHVybiAoZmlsZV9vZmZzZXQpOworfQorCitzdGF0aWMg aW50CWdudGRldl9nbWFwX3BnX2N0b3Iodm9pZCAqaGFuZGxlLCB2bV9vb2Zmc2V0X3Qgc2l6ZSwK KyAgICB2bV9wcm90X3QgcHJvdCwgdm1fb29mZnNldF90IGZvZmYsIHN0cnVjdCB1Y3JlZCAqY3Jl ZCwgdV9zaG9ydCAqY29sb3IpOworc3RhdGljIHZvaWQJZ250ZGV2X2dtYXBfcGdfZHRvcih2b2lk ICpoYW5kbGUpOworc3RhdGljIGludAlnbnRkZXZfZ21hcF9wZ19mYXVsdCh2bV9vYmplY3RfdCBv YmplY3QsIHZtX29vZmZzZXRfdCBvZmZzZXQsCisgICAgaW50IHByb3QsIHZtX3BhZ2VfdCAqbXJl cyk7CisKK3N0YXRpYyBzdHJ1Y3QgY2Rldl9wYWdlcl9vcHMgZ250ZGV2X2dtYXBfcGdfb3BzID0g eworCS5jZGV2X3BnX2ZhdWx0ID0gZ250ZGV2X2dtYXBfcGdfZmF1bHQsCisJLmNkZXZfcGdfY3Rv ciA9CWdudGRldl9nbWFwX3BnX2N0b3IsCisJLmNkZXZfcGdfZHRvciA9CWdudGRldl9nbWFwX3Bn X2R0b3IsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIEdyYW50IEFsbG9jYXRpb24gTWV0 aG9kcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgZ250ZGV2X2dy ZWYgeworCVRBSUxRX0VOVFJZKGdudGRldl9ncmVmKSAJCWdyZWZfbGlzdF9uZXh0OworCXVpbnQ2 NF90CQkJCWZpbGVfaW5kZXg7CisJZ3JhbnRfcmVmX3QJCQkJZ3JlZl9pZDsKKwl2bV9wYWdlX3QJ CQkJcGFnZTsKKwlzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeQkqbm90aWZ5OworfTsK Kworc3RhdGljIHN0cnVjdCBncmVmX2xpc3RfaGVhZCB0b19raWxsX2dyZWZzID0KKyAgICBUQUlM UV9IRUFEX0lOSVRJQUxJWkVSKHRvX2tpbGxfZ3JlZnMpOworCitzdGF0aWMgc3RydWN0IG10eCB0 b19raWxsX2dyZWZzX210eDsKK01UWF9TWVNJTklUKHRvX2tpbGxfZ3JlZnNfbXR4LCAmdG9fa2ls bF9ncmVmc19tdHgsCisgICAgImdudGRldiB0b19raWxsX2dyZWZzIG11dGV4IiwgTVRYX0RFRik7 CisKKy8qCisgKiBUcmF2ZXJzZSBvdmVyIHRoZSBkZXZpY2UtbGlzdCBvZiB0by1iZS1kZWxldGVk IGdyYW50cyBhbGxvY2F0ZWQsIGFuZAorICogaWYgYWxsIGFjY2Vzc2VzLCBib3RoIGxvY2FsIG1t YXBzIGFuZCBmb3JlaWduIG1hcHMsIHRvIHRoZW0gaGF2ZSBlbmRlZCwKKyAqIGRlc3Ryb3kgdGhl bS4KKyAqLworc3RhdGljIHZvaWQKK2dyZWZfbGlzdF9kdG9yKCkKK3sKKwlzdHJ1Y3QgZ250ZGV2 X2dyZWYgKmdyZWYsICpncmVmX3RtcDsKKwkKKwltdHhfbG9jaygmdG9fa2lsbF9ncmVmc19tdHgp OworCVRBSUxRX0ZPUkVBQ0hfU0FGRShncmVmLCAmdG9fa2lsbF9ncmVmcywgZ3JlZl9saXN0X25l eHQsIGdyZWZfdG1wKSB7CisJCWlmIChncmVmLT5wYWdlICYmIGdyZWYtPnBhZ2UtPm9iamVjdCA9 PSBOVUxMKSB7CisJCQlpZiAoZ3JlZi0+bm90aWZ5KSB7CisJCQkJLy8gVE9ETzogSGFuZGxlIE5v dGlmeSAuLi4uCisJCQl9CisJCQlpZiAoZ3JlZi0+Z3JlZl9pZCAhPSBHUkFOVF9SRUZfSU5WQUxJ RCkgeworCQkJCWlmIChnbnR0YWJfcXVlcnlfZm9yZWlnbl9hY2Nlc3MoZ3JlZi0+Z3JlZl9pZCkp CisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihn cmVmLT5ncmVmX2lkKQorCQkJCSAgICA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCQlnbnR0YWJf ZnJlZV9ncmFudF9yZWZlcmVuY2UoZ3JlZi0+Z3JlZl9pZCk7CisJCQl9CisJCQl2bV9wYWdlX3Vu d2lyZShncmVmLT5wYWdlLCBQUV9OT05FKTsKKwkJCXZtX3BhZ2VfZnJlZShncmVmLT5wYWdlKTsK KwkJCWdyZWYtPnBhZ2UgPSBOVUxMOworCQl9CisJCWlmIChncmVmLT5wYWdlID09IE5VTEwpIHsK KwkJCWlmIChncmVmLT5ub3RpZnkpCisJCQkJZnJlZShncmVmLT5ub3RpZnksIE1fR05UREVWKTsK KwkJCVRBSUxRX1JFTU9WRSgmdG9fa2lsbF9ncmVmcywgZ3JlZiwgZ3JlZl9saXN0X25leHQpOwor CQkJZnJlZShncmVmLCBNX0dOVERFVik7CisJCX0KKwl9CisJbXR4X3VubG9jaygmdG9fa2lsbF9n cmVmc19tdHgpOworfQorCisvKgorICogRmluZCBjb3VudCBudW1iZXIgb2YgY29udGlndW91cyBh bGxvY2F0ZWQgZ3JhbnRzIGZvciBhIGdpdmVuIHVzZXJzcGFjZQorICogcHJvZ3JhbSBieSBmaWxl LW9mZnNldCAoaW5kZXgpLgorICovCitzdGF0aWMgc3RydWN0IGdudGRldl9ncmVmKgorZ250ZGV2 X2ZpbmRfZ3JlZnMoc3RydWN0IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlciwKKwl1aW50NjRfdCBp bmRleCwgdWludDMyX3QgY291bnQpCit7CisJc3RydWN0IGdudGRldl9ncmVmICpncmVmLCAqZ3Jl Zl9zdGFydCA9IE5VTEw7CisJCisJbXR4X2xvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2sp OworCVRBSUxRX0ZPUkVBQ0goZ3JlZiwgJnByaXZfdXNlci0+Z3JlZl9saXN0LCBncmVmX2xpc3Rf bmV4dCkgeworCQlpZiAoaW5kZXggPT0gZ3JlZi0+ZmlsZV9pbmRleCkgeworCQkJaWYgKGdyZWZf c3RhcnQgPT0gTlVMTCkKKwkJCQlncmVmX3N0YXJ0ID0gZ3JlZjsKKwkJCWluZGV4ICs9IFBBR0Vf U0laRTsKKwkJCWNvdW50LS07CisJCQlpZiAoY291bnQgPT0gMCkKKwkJCQlicmVhazsKKwkJfQor CQllbHNlIGlmIChncmVmX3N0YXJ0KQorCQkJYnJlYWs7CisJfQorCW10eF91bmxvY2soJnByaXZf dXNlci0+dXNlcl9kYXRhX2xvY2spOworCQorCWlmIChjb3VudCkKKwkJcmV0dXJuIChOVUxMKTsK KwlyZXR1cm4gKGdyZWZfc3RhcnQpOworfQorCisvKgorICogSU9DVExfR05UREVWX0FMTE9DX0dS RUYKKyAqIEFsbG9jYXRlIHJlcXVpcmVkIG51bWJlciBvZiB3aXJlZCBwYWdlcyBmb3IgdGhlIHJl cXVlc3QsIGdyYW50IGZvcmVpZ24KKyAqIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgZnJhbWVzIGZv ciB0aGVzZSBwYWdlcywgYW5kIGFkZCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIGFsbG9jYXRpb24g dG8gdGhlIHBlciB1c2VyIHByaXZhdGUgZGF0YSwgc28gdGhhdCB0aGVzZSBwYWdlcyBjYW4KKyAq IGJlIG1tYXBwZWQgYnkgdGhlIHVzZXJzcGFjZSBwcm9ncmFtLgorICovCitzdGF0aWMgaW50Citn bnRkZXZfYWxsb2NfZ3JlZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2FsbG9jX2dyZWYgKmFyZykKK3sK KwlpbnQgaSwgZXJyb3IsIHJlYWRvbmx5OworCXVpbnQ2NF90IGZpbGVfb2Zmc2V0OworCXN0cnVj dCBnbnRkZXZfZ3JlZiAqZ3JlZjsKKwlzdHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91c2VyOwor CXN0cnVjdCBncmVmX2xpc3RfaGVhZCB0bXBfZ3JlZl9saXN0ID0KKwkJVEFJTFFfSEVBRF9JTklU SUFMSVpFUih0bXBfZ3JlZl9saXN0KTsKKworCXJlYWRvbmx5ID0gIShhcmctPmZsYWdzICYgR05U REVWX0FMTE9DX0ZMQUdfV1JJVEFCTEUpOworCisJZXJyb3IgPSBkZXZmc19nZXRfY2RldnByaXYo KHZvaWQqKikgJnByaXZfdXNlcik7CisJaWYgKGVycm9yICE9IDApCisJCXJldHVybiAoRUlOVkFM KTsKKworCS8qIENsZWFudXAgZ3JlZnMgYW5kIGZyZWUgcGFnZXMuICovCisJZ3JlZl9saXN0X2R0 b3IoKTsKKwkKKwkvKiBHZXQgZmlsZSBvZmZzZXQgZm9yIHRoaXMgcmVxdWVzdC4gKi8KKwlmaWxl X29mZnNldCA9IGdldF9maWxlX29mZnNldChwcml2X3VzZXIsIGFyZy0+Y291bnQpOworCisJZm9y IChpID0gMDsgaSA8IGFyZy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZ250ZGV2X2dyZWYgKmdy ZWY7CisJCWdyZWYgPSBtYWxsb2Moc2l6ZW9mKCpncmVmKSwgTV9HTlRERVYsIE1fV0FJVE9LIHwg TV9aRVJPKTsKKwkJCisJCVRBSUxRX0lOU0VSVF9UQUlMKCZ0bXBfZ3JlZl9saXN0LCBncmVmLCBn cmVmX2xpc3RfbmV4dCk7CisJCWdyZWYtPmZpbGVfaW5kZXggPSBmaWxlX29mZnNldCArIGkgKiBQ QUdFX1NJWkU7CisJCWdyZWYtPmdyZWZfaWQgPSBHUkFOVF9SRUZfSU5WQUxJRDsKKwkJZ3JlZi0+ cGFnZSA9IHZtX3BhZ2VfYWxsb2MoTlVMTCwgMCwgVk1fQUxMT0NfTk9STUFMCisJCQl8IFZNX0FM TE9DX05PT0JKIHwgVk1fQUxMT0NfV0lSRUQgfCBWTV9BTExPQ19aRVJPKTsKKwkJaWYgKGdyZWYt PnBhZ2UgPT0gTlVMTCkgeworCQkJbG9nKExPR19FUlIsICJQYWdlIGFsbG9jYXRpb24gZmFpbGVk LiIpOworCQkJZXJyb3IgPSBFTk9NRU07CisJCQlicmVhazsKKwkJfQkJCisJCWlmICgoZ3JlZi0+ cGFnZS0+ZmxhZ3MgJiBQR19aRVJPKSA9PSAwKSB7CisJCQkvKgorCQkJICogWmVybyB0aGUgYWxs b2NhdGVkIHBhZ2UsIGFzIHdlIGRvbid0IHdhbnQgdG8gCisJCQkgKiBsZWFrIG91ciBtZW1vcnkg dG8gb3RoZXIgZG9tYWlucy4KKwkJCSAqLworCQkJcG1hcF96ZXJvX3BhZ2UoZ3JlZi0+cGFnZSk7 CisJCX0KKwkJZ3JlZi0+cGFnZS0+dmFsaWQgPSBWTV9QQUdFX0JJVFNfQUxMOworCisJCWVycm9y ID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGFyZy0+ZG9taWQsCisJCQkoVk1fUEFHRV9U T19QSFlTKGdyZWYtPnBhZ2UpID4+IFBBR0VfU0hJRlQpLAorCQkJcmVhZG9ubHksICZncmVmLT5n cmVmX2lkKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCWxvZyhMT0dfRVJSLCAiR3JhbnQgVGFi bGUgSHlwZXJjYWxsIGZhaWxlZC4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGVycm9y ICE9IDApIHsKKwkJLyoKKwkJICogSWYgdGFyZ2V0IGRvbWFpbiBtYXBzIHRoZSBncmVmIChieSBn dWVzc2luZyB0aGUgZ3JlZi1pZCksCisJCSAqIHRoZW4gd2UgY2FuJ3QgY2xlYW4gaXQgdXAgeWV0 IGFuZCB3ZSBoYXZlIHRvIGxlYXZlIHRoZSAKKwkJICogcGFnZSBpbiBwbGFjZSBzbyBhcyB0byBu b3QgbGVhayBvdXIgbWVtb3J5IHRvIHRoYXQgZG9tYWluLgorCQkgKiBBZGQgaXQgdG8gYSBnbG9i YWwgbGlzdCB0byBiZSBjbGVhbmVkIHVwIGxhdGVyLgorCQkgKi8KKwkJbXR4X2xvY2soJnRvX2tp bGxfZ3JlZnNfbXR4KTsKKwkJVEFJTFFfQ09OQ0FUKCZ0b19raWxsX2dyZWZzLCAmdG1wX2dyZWZf bGlzdCwgZ3JlZl9saXN0X25leHQpOworCQltdHhfdW5sb2NrKCZ0b19raWxsX2dyZWZzX210eCk7 CisJCQorCQlncmVmX2xpc3RfZHRvcigpOworCisJCXJldHVybiAoZXJyb3IpOworCX0KKworCS8q IENvcHkgdGhlIG91dHB1dCB2YWx1ZXMuICovCisJaSA9IDA7CisJVEFJTFFfRk9SRUFDSChncmVm LCAmdG1wX2dyZWZfbGlzdCwgZ3JlZl9saXN0X25leHQpCisJCWFyZy0+Z3JlZl9pZHNbaSsrXSA9 IGdyZWYtPmdyZWZfaWQ7CisKKwlhcmctPmluZGV4ID0gZmlsZV9vZmZzZXQ7CisKKwkvKiBNb2Rp ZnkgdGhlIHBlciB1c2VyIHByaXZhdGUgZGF0YS4gKi8KKwltdHhfbG9jaygmcHJpdl91c2VyLT51 c2VyX2RhdGFfbG9jayk7CisJVEFJTFFfQ09OQ0FUKCZwcml2X3VzZXItPmdyZWZfbGlzdCwgJnRt cF9ncmVmX2xpc3QsIGdyZWZfbGlzdF9uZXh0KTsKKwltdHhfdW5sb2NrKCZwcml2X3VzZXItPnVz ZXJfZGF0YV9sb2NrKTsKKworCXJldHVybiAoZXJyb3IpOworfQorCisvKgorICogSU9DVExfR05U REVWX0RFQUxMT0NfR1JFRgorICogUmVtb3ZlIGdyYW50IGFsbG9jYXRpb24gaW5mb3JtYXRpb24g ZnJvbSB0aGUgcGVyIHVzZXIgcHJpdmF0ZSBkYXRhLCBzbworICogdGhhdCBpdCBjYW4ndCBiZSBt bWFwcGVkIGFueW1vcmUgYnkgdGhlIHVzZXJzcGFjZSBwcm9ncmFtLCBhbmQgYWRkIGl0CisgKiB0 byB0aGUgdG8tYmUtZGVsZXRlZCBncmFudHMgZ2xvYmFsIGRldmljZS1saXN0LgorICovCitzdGF0 aWMgaW50CitnbnRkZXZfZGVhbGxvY19ncmVmKHN0cnVjdCBpb2N0bF9nbnRkZXZfZGVhbGxvY19n cmVmICphcmcpCit7CisJaW50IGVycm9yOworCXVpbnQzMl90IGNvdW50OworCXN0cnVjdCBnbnRk ZXZfZ3JlZiAqZ3JlZiwgKmdyZWZfdG1wOworCXN0cnVjdCBwZXJfdXNlcl9kYXRhICpwcml2X3Vz ZXI7CisKKwllcnJvciA9IGRldmZzX2dldF9jZGV2cHJpdigodm9pZCoqKSAmcHJpdl91c2VyKTsK KwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJZ3JlZiA9IGdudGRldl9m aW5kX2dyZWZzKHByaXZfdXNlciwgYXJnLT5pbmRleCwgYXJnLT5jb3VudCk7CisJaWYgKGdyZWYg PT0gTlVMTCkgeworCQlsb2coTE9HX0VSUiwgIkNhbid0IGZpbmQgcmVxdWVzdGVkIGdyYW50LXJl ZnMuIik7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwkvKiBSZW1vdmUgdGhlIGdyZWZzIGZy b20gdXNlciBwcml2YXRlIGRhdGEuICovCisJY291bnQgPSBhcmctPmNvdW50OworCW10eF9sb2Nr KCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsKKwltdHhfbG9jaygmdG9fa2lsbF9ncmVmc19t dHgpOworCVRBSUxRX0ZPUkVBQ0hfRlJPTV9TQUZFKGdyZWYsCisJICAgICZwcml2X3VzZXItPmdy ZWZfbGlzdCwgZ3JlZl9saXN0X25leHQsIGdyZWZfdG1wKSB7CisJCVRBSUxRX1JFTU9WRSgmcHJp dl91c2VyLT5ncmVmX2xpc3QsIGdyZWYsIGdyZWZfbGlzdF9uZXh0KTsKKwkJVEFJTFFfSU5TRVJU X1RBSUwoJnRvX2tpbGxfZ3JlZnMsIGdyZWYsIGdyZWZfbGlzdF9uZXh0KTsKKwkJY291bnQtLTsK KwkJaWYgKGNvdW50ID09IDApCisJCQlicmVhazsKKwl9CisJbXR4X3VubG9jaygmdG9fa2lsbF9n cmVmc19tdHgpOworCW10eF91bmxvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2spOworCQor CWdyZWZfbGlzdF9kdG9yKCk7CisKKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tIEdyYW50IEFjY2Vzc2luZyBNZXRob2RzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworCitzdHJ1Y3QgZ250ZGV2X2dtYXBfbWFwIHsKKwl2bV9vYmplY3RfdAltZW07CisJ c3RydWN0IHJlc291cmNlCSpwc2V1ZG9fcGh5c19yZXM7CisJaW50IAkJcHNldWRvX3BoeXNfcmVz X2lkOworCXZtX3BhZGRyX3QJcGh5c19iYXNlX2FkZHI7Cit9OworCitzdHJ1Y3QgZ250ZGV2X2dt YXAgeworCVRBSUxRX0VOVFJZKGdudGRldl9nbWFwKQkJZ21hcF9saXN0X25leHQ7CisJdWludDY0 X3QJCQkJZmlsZV9pbmRleDsKKwl1aW50MzJfdAkJCQljb3VudDsKKwlzdHJ1Y3QgZ250dGFiX21h cF9ncmFudF9yZWYJCSpncmFudF9tYXBfb3BzOworCXN0cnVjdCBnbnRkZXZfZ21hcF9tYXAJCQkq bWFwOworCXN0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfbm90aWZ5IAkqbm90aWZ5OworfTsKKwor c3RhdGljIHN0cnVjdCBnbWFwX2xpc3RfaGVhZCB0b19raWxsX2dtYXBzID0KKyAgICBUQUlMUV9I RUFEX0lOSVRJQUxJWkVSKHRvX2tpbGxfZ21hcHMpOworCitzdGF0aWMgc3RydWN0IG10eCB0b19r aWxsX2dtYXBzX210eDsKK01UWF9TWVNJTklUKHRvX2tpbGxfZ21hcHNfbXR4LCAmdG9fa2lsbF9n bWFwc19tdHgsCisgICAgImdudGRldiB0b19raWxsX2dtYXBzIG11dGV4IiwgTVRYX0RFRik7CisK Ky8qCisgKiBUcmF2ZXJzZSBvdmVyIHRoZSBkZXZpY2UtbGlzdCBvZiB0by1iZS1kZWxldGVkIGdy YW50IG1hcHBpbmdzLCBhbmQgaWYKKyAqIHRoZSByZWdpb24gaXMgbm8gbG9uZ2VyIG1tYXBwZWQg YnkgYW55b25lLCBmcmVlIHRoZSBtZW1vcnkgdXNlZCB0bworICogc3RvcmUgaW5mb3JtYXRpb24g YWJvdXQgdGhlIG1hcHBpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitnbWFwX2xpc3RfZHRvcigpCit7 CisJc3RydWN0IGdudGRldl9nbWFwICpnbWFwLCAqZ21hcF90bXA7CisJCisJbXR4X2xvY2soJnRv X2tpbGxfZ21hcHNfbXR4KTsKKwlUQUlMUV9GT1JFQUNIX1NBRkUoZ21hcCwgJnRvX2tpbGxfZ21h cHMsIGdtYXBfbGlzdF9uZXh0LCBnbWFwX3RtcCkgeworCQlpZiAoZ21hcC0+bWFwID09IE5VTEwp IHsKKwkJCWlmIChnbWFwLT5ub3RpZnkpCisJCQkJZnJlZShnbWFwLT5ub3RpZnksIE1fR05UREVW KTsKKwkJCWZyZWUoZ21hcC0+Z3JhbnRfbWFwX29wcywgTV9HTlRERVYpOworCQkJVEFJTFFfUkVN T1ZFKCZ0b19raWxsX2dtYXBzLCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJCQlmcmVlKGdtYXAs IE1fR05UREVWKTsKKwkJfQorCX0KKwltdHhfdW5sb2NrKCZ0b19raWxsX2dtYXBzX210eCk7Cit9 CisKKy8qCisgKiBGaW5kIG1hcHBlZCBncmFudHMgZm9yIGEgZ2l2ZW4gdXNlcnNwYWNlIHByb2dy YW0sIGJ5IGZpbGUtb2Zmc2V0IChpbmRleCkKKyAqIGFuZCBjb3VudCwgYXMgc3VwcGxpZWQgZHVy aW5nIHRoZSBtYXAtaW9jdGwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ250ZGV2X2dtYXAqCitnbnRk ZXZfZmluZF9nbWFwKHN0cnVjdCBwZXJfdXNlcl9kYXRhICpwcml2X3VzZXIsCisJdWludDY0X3Qg aW5kZXgsIHVpbnQzMl90IGNvdW50KQoreworCXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcCwgKmdt YXBfc3RhcnQgPSBOVUxMOworCisJbXR4X2xvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2sp OworCVRBSUxRX0ZPUkVBQ0goZ21hcCwgJnByaXZfdXNlci0+Z21hcF9saXN0LCBnbWFwX2xpc3Rf bmV4dCkgeworCQlpZiAoZ21hcC0+ZmlsZV9pbmRleCA9PSBpbmRleCAmJiBnbWFwLT5jb3VudCA9 PSBjb3VudCkgeworCQkJZ21hcF9zdGFydCA9IGdtYXA7CisJCQlicmVhazsKKwkJfQorCX0KKwlt dHhfdW5sb2NrKCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsKKworCXJldHVybiAoZ21hcF9z dGFydCk7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIHBhZ2VzIGZyb20gdGhlIG1ndGRldmljZSBw YWdlciwgY2FsbCB0aGUgdW5tYXAgaHlwZXJjYWxsLAorICogZnJlZSB0aGUgeGVubWVtIHJlc291 cmNlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlCisgKiBkZXN0cnVjdGlvbiBv ZiB0aGUgbWd0ZGV2aWNlIHBhZ2VyLCB3aGljaCBoYXBwZW5zIHdoZW4gYWxsIG1tYXBzIHRvCisg KiBpdCBoYXZlIGJlZW4gcmVtb3ZlZCwgYW5kIHRoZSB1bm1hcC1pb2N0bCBoYXMgYmVlbiBwZXJm b3JtZWQuCisgKi8KK3N0YXRpYyBpbnQKK25vdGlmeV91bm1hcF9jbGVhbnVwKHN0cnVjdCBnbnRk ZXZfZ21hcCAqZ21hcCkKK3sKKwlpbnQgZXJyb3IsIGksIGNvdW50OworCXZtX3BhZ2VfdCBtOwor CXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHM7CisJCisJdW5tYXBfb3Bz ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZikgKiBnbWFwLT5j b3VudCwKKwkJCU1fR05UREVWLCBNX1dBSVRPSyk7CisJCisJLyogRW51bWVyYXRlIGZyZWVhYmxl IG1hcHMuICovCisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBnbWFwLT5jb3VudDsgaSsr KSB7CisJCWlmIChnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmhhbmRsZSAhPSAtMSkgeworCQkJdW5t YXBfb3BzW2NvdW50XS5oYW5kbGUgPSBnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmhhbmRsZTsKKwkJ CXVubWFwX29wc1tjb3VudF0uaG9zdF9hZGRyID0KKwkJCQlnbWFwLT5ncmFudF9tYXBfb3BzW2ld Lmhvc3RfYWRkcjsKKwkJCXVubWFwX29wc1tjb3VudF0uZGV2X2J1c19hZGRyID0gMDsKKwkJCWNv dW50Kys7CisJCX0KKwl9CisJCisJLyogUGVyZm9ybSBub3RpZmljYXRpb24uICovCisJaWYgKGNv dW50ID4gMCAmJiBnbWFwLT5ub3RpZnkpIHsKKwkJLy8gVE9ETzogSGFuZGxlIE5vdGlmeQorCX0K KwkKKwkvKiBGcmVlIHRoZSBwYWdlcy4gKi8KKwlWTV9PQkpFQ1RfV0xPQ0soZ21hcC0+bWFwLT5t ZW0pOworcmV0cnk6CisJZm9yIChpID0gMDsgaSA8IGdtYXAtPmNvdW50OyBpKyspIHsKKwkJbSA9 IHZtX3BhZ2VfbG9va3VwKGdtYXAtPm1hcC0+bWVtLCBpKTsKKwkJaWYgKG0gPT0gTlVMTCkKKwkJ CWNvbnRpbnVlOworCQlpZiAodm1fcGFnZV9zbGVlcF9pZl9idXN5KG0sICJwY21kdW0iKSkKKwkJ CWdvdG8gcmV0cnk7CisJCWNkZXZfcGFnZXJfZnJlZV9wYWdlKGdtYXAtPm1hcC0+bWVtLCBtKTsK Kwl9CisJVk1fT0JKRUNUX1dVTkxPQ0soZ21hcC0+bWFwLT5tZW0pOworCQorCS8qIFBlcmZvcm0g dW5tYXAgaHlwZXJjYWxsLiAqLworCWVycm9yID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChH TlRUQUJPUF91bm1hcF9ncmFudF9yZWYsCisJICAgIHVubWFwX29wcywgY291bnQpOworCQorCWZv ciAoaSA9IDA7IGkgPCBnbWFwLT5jb3VudDsgaSsrKSB7CisJCWdtYXAtPmdyYW50X21hcF9vcHNb aV0uaGFuZGxlID0gLTE7CisJCWdtYXAtPmdyYW50X21hcF9vcHNbaV0uaG9zdF9hZGRyID0gMDsK Kwl9CisJCisJaWYgKGdtYXAtPm1hcCkgeworCQllcnJvciA9IHhlbm1lbV9mcmVlKGdudGRldl9k ZXYsIGdtYXAtPm1hcC0+cHNldWRvX3BoeXNfcmVzX2lkLAorCQkgICAgZ21hcC0+bWFwLT5wc2V1 ZG9fcGh5c19yZXMpOworCQlLQVNTRVJUKGVycm9yID09IDAsCisJCSAgICAoIlVuYWJsZSB0byBy ZWxlYXNlIG1lbW9yeSByZXNvdXJjZTogJWQiLCBlcnJvcikpOworCisJCWZyZWUoZ21hcC0+bWFw LCBNX0dOVERFVik7CisJCWdtYXAtPm1hcCA9IE5VTEw7CisJfQorCQorCWZyZWUodW5tYXBfb3Bz LCBNX0dOVERFVik7CisJCisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBJT0NUTF9HTlRE RVZfTUFQX0dSQU5UX1JFRgorICogUG9wdWxhdGUgc3RydWN0dXJlcyBmb3IgbWFwcGluZyB0aGUg Z3JhbnQgcmVmZXJlbmNlIGluIHRoZSBwZXIgdXNlcgorICogcHJpdmF0ZSBkYXRhLiBBY3R1YWwg cmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgbWFwIGh5cGVyY2FsbCBpcyBwZXJmb3JtZWQKKyAqIGR1 cmluZyB0aGUgbW1hcC4KKyAqLworc3RhdGljIGludAorZ250ZGV2X21hcF9ncmFudF9yZWYoc3Ry dWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRfcmVmICphcmcpCit7CisJaW50IGksIGVycm9yOwor CXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcDsKKwlzdHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91 c2VyOworCisJZXJyb3IgPSBkZXZmc19nZXRfY2RldnByaXYoKHZvaWQqKikgJnByaXZfdXNlcik7 CisJaWYgKGVycm9yICE9IDApCisJCXJldHVybiAoRUlOVkFMKTsKKworCWdtYXAgPSBtYWxsb2Mo c2l6ZW9mKCpnbWFwKSwgTV9HTlRERVYsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKworCWdtYXAtPmNv dW50ID0gYXJnLT5jb3VudDsKKwlnbWFwLT5maWxlX2luZGV4ID0gZ2V0X2ZpbGVfb2Zmc2V0KHBy aXZfdXNlciwgYXJnLT5jb3VudCk7CisJZ21hcC0+Z3JhbnRfbWFwX29wcyA9CisJICAgIG1hbGxv YyhzaXplb2Yoc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmKSAqIGFyZy0+Y291bnQsCisJICAg ICAgICBNX0dOVERFViwgTV9XQUlUT0sgfCBNX1pFUk8pOworCisJZm9yIChpID0gMDsgaSA8IGFy Zy0+Y291bnQ7IGkrKykgeworCQlnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmRvbSA9IGFyZy0+cmVm c1tpXS5kb21pZDsKKwkJZ21hcC0+Z3JhbnRfbWFwX29wc1tpXS5yZWYgPSBhcmctPnJlZnNbaV0u cmVmOworCQlnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmhhbmRsZSA9IC0xOworCQlnbWFwLT5ncmFu dF9tYXBfb3BzW2ldLmZsYWdzID0gR05UTUFQX2hvc3RfbWFwOworCX0KKworCW10eF9sb2NrKCZw cml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmcHJpdl91c2Vy LT5nbWFwX2xpc3QsIGdtYXAsIGdtYXBfbGlzdF9uZXh0KTsKKwltdHhfdW5sb2NrKCZwcml2X3Vz ZXItPnVzZXJfZGF0YV9sb2NrKTsKKworCWFyZy0+aW5kZXggPSBnbWFwLT5maWxlX2luZGV4Owor CisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRf UkVGCisgKiBSZW1vdmUgdGhlIG1hcCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwZXIgdXNlciBwcml2 YXRlIGRhdGEgYW5kIGFkZCBpdAorICogdG8gdGhlIGdsb2JhbCBkZXZpY2UtbGlzdCBvZiBtYXBw aW5ncyB0byBiZSBkZWxldGVkLiBBIHJlZmVyZW5jZSB0bworICogdGhlIG1ndGRldmljZSBwYWdl ciBpcyBhbHNvIGRlY3JlYXNlZCwgdGhlIHJlYXNvbiBmb3Igd2hpY2ggaXMKKyAqIGV4cGxhaW5l ZCBpbiBtbWFwX2dtYXAoKS4KKyAqLworc3RhdGljIGludAorZ250ZGV2X3VubWFwX2dyYW50X3Jl ZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZiAqYXJnKQoreworCWludCBlcnJv cjsKKwlzdHJ1Y3QgZ250ZGV2X2dtYXAgKmdtYXA7CisJc3RydWN0IHBlcl91c2VyX2RhdGEgKnBy aXZfdXNlcjsKKworCWVycm9yID0gZGV2ZnNfZ2V0X2NkZXZwcml2KCh2b2lkKiopICZwcml2X3Vz ZXIpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlnbWFwID0gZ250 ZGV2X2ZpbmRfZ21hcChwcml2X3VzZXIsIGFyZy0+aW5kZXgsIGFyZy0+Y291bnQpOworCWlmIChn bWFwID09IE5VTEwpIHsKKwkJbG9nKExPR19FUlIsICJDYW4ndCBmaW5kIHJlcXVlc3RlZCBncmFu dC1tYXAuIik7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwltdHhfbG9jaygmcHJpdl91c2Vy LT51c2VyX2RhdGFfbG9jayk7CisJbXR4X2xvY2soJnRvX2tpbGxfZ21hcHNfbXR4KTsKKwlUQUlM UV9SRU1PVkUoJnByaXZfdXNlci0+Z21hcF9saXN0LCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJ VEFJTFFfSU5TRVJUX1RBSUwoJnRvX2tpbGxfZ21hcHMsIGdtYXAsIGdtYXBfbGlzdF9uZXh0KTsK KwltdHhfdW5sb2NrKCZ0b19raWxsX2dtYXBzX210eCk7CisJbXR4X3VubG9jaygmcHJpdl91c2Vy LT51c2VyX2RhdGFfbG9jayk7CisJCisJaWYgKGdtYXAtPm1hcCkKKwkJdm1fb2JqZWN0X2RlYWxs b2NhdGUoZ21hcC0+bWFwLT5tZW0pOworCisJZ21hcF9saXN0X2R0b3IoKTsKKwkKKwlyZXR1cm4g KDApOworfQorCisvKgorICogSU9DVExfR05UREVWX0dFVF9PRkZTRVRfRk9SX1ZBRERSCisgKiBH ZXQgZmlsZS1vZmZzZXQgYW5kIGNvdW50IGZvciBhIGdpdmVuIG1hcHBpbmcsIGZyb20gdGhlIHZp cnR1YWwgYWRkcmVzcworICogd2hlcmUgdGhlIG1hcHBpbmcgaXMgbW1hcHBlZC4KKyAqIFBsZWFz ZSBub3RlLCB0aGlzIG9ubHkgd29ya3MgZm9yIGdyYW50cyBtYXBwZWQgYnkgdGhpcyBkb21haW4s IGFuZCBub3QKKyAqIGdyYW50cyBhbGxvY2F0ZWQuIENvdW50IGRvZXNuJ3QgbWFrZSBtdWNoIHNl bnNlIGluIHJlZmVyZW5jZSB0byBncmFudHMKKyAqIGFsbG9jYXRlZC4gQWxzbywgYmVjYXVzZSB0 aGlzIGZ1bmN0aW9uIGlzIHByZXNlbnQgaW4gdGhlIGxpbnV4IGdudGRldgorICogZGV2aWNlLCBi dXQgbm90IGluIHRoZSBsaW51eCBnbnRhbGxvYyBvbmUsIG1vc3QgdXNlcnNwYWNlIGNvZGUgb25s eSB1c2UKKyAqIGl0IGZvciBtYXBwZWQgZ3JhbnRzLgorICovCitzdGF0aWMgaW50CitnbnRkZXZf Z2V0X29mZnNldF9mb3JfdmFkZHIoc3RydWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92 YWRkciAqYXJnLAorCXN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBlcnJvcjsKKwl2bV9tYXBf dCBtYXA7CisJdm1fbWFwX2VudHJ5X3QgZW50cnk7CisJdm1fb2JqZWN0X3QgbWVtOworCXZtX3Bp bmRleF90IHBpbmRleDsKKwl2bV9wcm90X3QgcHJvdDsKKwlib29sZWFuX3Qgd2lyZWQ7CisJc3Ry dWN0IGdudGRldl9nbWFwICpnbWFwOworCisJbWFwID0gJnRkLT50ZF9wcm9jLT5wX3Ztc3BhY2Ut PnZtX21hcDsKKwllcnJvciA9IHZtX21hcF9sb29rdXAoJm1hcCwgYXJnLT52YWRkciwgVk1fUFJP VF9OT05FLCAmZW50cnksCisJCSAgICAmbWVtLCAmcGluZGV4LCAmcHJvdCwgJndpcmVkKTsKKwlp ZiAoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJdm1fbWFwX2xv b2t1cF9kb25lKG1hcCwgZW50cnkpOworCisJaWYgKChtZW0tPnR5cGUgIT0gT0JKVF9NR1RERVZJ Q0UpIHx8CisJICAgIChtZW0tPnVuX3BhZ2VyLmRldnAub3BzICE9ICZnbnRkZXZfZ21hcF9wZ19v cHMpKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlnbWFwID0gbWVtLT5oYW5kbGU7CisJaWYgKGdt YXAgPT0gTlVMTCB8fAorCSAgICAoZW50cnktPmVuZCAtIGVudHJ5LT5zdGFydCkgIT0gKGdtYXAt PmNvdW50ICogUEFHRV9TSVpFKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJYXJnLT5jb3VudCA9 IGdtYXAtPmNvdW50OworCWFyZy0+b2Zmc2V0ID0gZ21hcC0+ZmlsZV9pbmRleDsKKwlyZXR1cm4g KDApOworfQorCitzdGF0aWMgaW50CitnbnRkZXZfc2V0X21heF9ncmFudHMoc3RydWN0IGlvY3Rs X2dudGRldl9zZXRfbWF4X2dyYW50cyAqYXJnKQoreworCisJcmV0dXJuICgwKTsKK30KKworLyot LS0tLS0tLS0tLS0tLS0tLS0tLSBHcmFudCBBY2Nlc3NpbmcgUGFnZXIgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorZ250ZGV2X2dtYXBfcGdfY3Rvcih2 b2lkICpoYW5kbGUsIHZtX29vZmZzZXRfdCBzaXplLCB2bV9wcm90X3QgcHJvdCwKKyAgICB2bV9v b2Zmc2V0X3QgZm9mZiwgc3RydWN0IHVjcmVkICpjcmVkLCB1X3Nob3J0ICpjb2xvcikKK3sKKwor CXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitnbnRkZXZfZ21hcF9wZ19kdG9yKHZvaWQg KmhhbmRsZSkKK3sKKworCW5vdGlmeV91bm1hcF9jbGVhbnVwKChzdHJ1Y3QgZ250ZGV2X2dtYXAg KiloYW5kbGUpOworfQorCitzdGF0aWMgaW50CitnbnRkZXZfZ21hcF9wZ19mYXVsdCh2bV9vYmpl Y3RfdCBvYmplY3QsIHZtX29vZmZzZXRfdCBvZmZzZXQsIGludCBwcm90LAorICAgIHZtX3BhZ2Vf dCAqbXJlcykKK3sKKwlzdHJ1Y3QgZ250ZGV2X2dtYXAgKmdtYXAgPSBvYmplY3QtPmhhbmRsZTsK Kwl2bV9waW5kZXhfdCBwaWR4LCByaWR4OworCXZtX3BhZ2VfdCBwYWdlLCBvbGRtOworCXZtX29v ZmZzZXRfdCByZWxhdGl2ZV9vZmZzZXQ7CisKKwlpZiAoZ21hcC0+bWFwID09IE5VTEwpCisJCXJl dHVybiAoVk1fUEFHRVJfRkFJTCk7CisKKwlyZWxhdGl2ZV9vZmZzZXQgPSBvZmZzZXQgLSBnbWFw LT5maWxlX2luZGV4OworCisJcGlkeCA9IE9GRl9UT19JRFgob2Zmc2V0KTsKKwlyaWR4ID0gT0ZG X1RPX0lEWChyZWxhdGl2ZV9vZmZzZXQpOworCWlmIChyaWR4ID49IGdtYXAtPmNvdW50IHx8CisJ ICAgIGdtYXAtPmdyYW50X21hcF9vcHNbcmlkeF0uc3RhdHVzICE9IEdOVFNUX29rYXkpCisJCXJl dHVybiAoVk1fUEFHRVJfRkFJTCk7CisKKwlwYWdlID0gUEhZU19UT19WTV9QQUdFKGdtYXAtPm1h cC0+cGh5c19iYXNlX2FkZHIgKyByZWxhdGl2ZV9vZmZzZXQpOworCWlmIChwYWdlID09IE5VTEwp CisJCXJldHVybiAoVk1fUEFHRVJfRkFJTCk7CisKKwlLQVNTRVJUKChwYWdlLT5mbGFncyAmIFBH X0ZJQ1RJVElPVVMpICE9IDAsCisJICAgICgibm90IGZpY3RpdGlvdXMgJXAiLCBwYWdlKSk7CisJ S0FTU0VSVChwYWdlLT53aXJlX2NvdW50ID09IDEsICgid2lyZV9jb3VudCBub3QgMSAlcCIsIHBh Z2UpKTsKKwlLQVNTRVJUKHZtX3BhZ2VfYnVzaWVkKHBhZ2UpID09IDAsICgicGFnZSAlcCBpcyBi dXN5IiwgcGFnZSkpOworCisJaWYgKCptcmVzICE9IE5VTEwpIHsKKwkJb2xkbSA9ICptcmVzOwor CQl2bV9wYWdlX2xvY2sob2xkbSk7CisJCXZtX3BhZ2VfZnJlZShvbGRtKTsKKwkJdm1fcGFnZV91 bmxvY2sob2xkbSk7CisJCSptcmVzID0gTlVMTDsKKwl9CisKKwl2bV9wYWdlX2luc2VydChwYWdl LCBvYmplY3QsIHBpZHgpOworCXBhZ2UtPnZhbGlkID0gVk1fUEFHRV9CSVRTX0FMTDsKKwl2bV9w YWdlX3hidXN5KHBhZ2UpOworCSptcmVzID0gcGFnZTsKKwlyZXR1cm4gKFZNX1BBR0VSX09LKTsK K30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gR3JhbnQgVGFibGUgTWV0aG9kcyAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIElPQ1RMX0dOVERFVl9TRVRf VU5NQVBfTk9USUZZCisgKiBTZXQgdW5tYXAgbm90aWZpY2F0aW9uIGluc2lkZSB0aGUgYXBwcm9w cmlhdGUgZ3JhbnQuIEl0IHNlbmRzIGEKKyAqIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBncmFudCBp cyBjb21wbGV0ZWx5IG11bm1hcHBlZCBieSB0aGlzIGRvbWFpbgorICogYW5kIHJlYWR5IGZvciBk ZXN0cnVjdGlvbi4KKyAqLworc3RhdGljIGludAorZ250ZGV2X3NldF91bm1hcF9ub3RpZnkoc3Ry dWN0IGlvY3RsX2dudGRldl91bm1hcF9ub3RpZnkgKmFyZykKK3sKKwlpbnQgZXJyb3I7CisJdWlu dDY0X3QgaW5kZXg7CisJc3RydWN0IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlcjsKKwlzdHJ1Y3Qg Z250ZGV2X2dyZWYgKmdyZWYgPSBOVUxMOworCXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcDsKKwkK KwllcnJvciA9IGRldmZzX2dldF9jZGV2cHJpdigodm9pZCoqKSAmcHJpdl91c2VyKTsKKwlpZiAo ZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwpOworCQorCWluZGV4ID0gYXJnLT5pbmRleCAm IH4oUEFHRV9TSVpFIC0gMSk7CisJZ3JlZiA9IGdudGRldl9maW5kX2dyZWZzKHByaXZfdXNlciwg aW5kZXgsIDEpOworCWlmIChncmVmKSB7CisJCWdyZWYtPm5vdGlmeSA9IG1hbGxvYyhzaXplb2Yo KmFyZyksIE1fR05UREVWLCBNX1dBSVRPSyk7CisJCW1lbWNweShncmVmLT5ub3RpZnksIGFyZywg c2l6ZW9mKCphcmcpKTsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCisJbXR4X2xvY2soJnByaXZf dXNlci0+dXNlcl9kYXRhX2xvY2spOworCVRBSUxRX0ZPUkVBQ0goZ21hcCwgJnByaXZfdXNlci0+ Z21hcF9saXN0LCBnbWFwX2xpc3RfbmV4dCkgeworCQlpZiAoYXJnLT5pbmRleCA+PSBnbWFwLT5m aWxlX2luZGV4ICYmCisJCSAgICBhcmctPmluZGV4IDwgZ21hcC0+ZmlsZV9pbmRleCArIGdtYXAt PmNvdW50ICogUEFHRV9TSVpFKSB7CisJCQlnbWFwLT5ub3RpZnkgPSBtYWxsb2Moc2l6ZW9mKCph cmcpLCBNX0dOVERFViwgTV9XQUlUT0spOworCQkJbWVtY3B5KGdtYXAtPm5vdGlmeSwgYXJnLCBz aXplb2YoKmFyZykpOworCQkJbXR4X3VubG9jaygmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jayk7 CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKwltdHhfdW5sb2NrKCZwcml2X3VzZXItPnVz ZXJfZGF0YV9sb2NrKTsKKwkKKwlyZXR1cm4gKEVJTlZBTCk7Cit9CisKKy8qLS0tLS0tLS0tLS0t LS0tLS0tIEdudGRldiBDaGFyIERldmljZSBNZXRob2RzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitwZXJfdXNlcl9kYXRhX2R0b3Iodm9pZCAqYXJnKQor eworCXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcCwgKmdtYXBfdG1wOworCXN0cnVjdCBwZXJfdXNl cl9kYXRhICpwcml2X3VzZXI7CisKKwlwcml2X3VzZXIgPSAoc3RydWN0IHBlcl91c2VyX2RhdGEg KikgYXJnOworCisJbXR4X2xvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2spOworCW10eF9s b2NrKCZ0b19raWxsX2dyZWZzX210eCk7CisJVEFJTFFfQ09OQ0FUKCZ0b19raWxsX2dyZWZzLCAm cHJpdl91c2VyLT5ncmVmX2xpc3QsIGdyZWZfbGlzdF9uZXh0KTsKKwltdHhfdW5sb2NrKCZ0b19r aWxsX2dyZWZzX210eCk7CisJbXR4X2xvY2soJnRvX2tpbGxfZ21hcHNfbXR4KTsKKworCVRBSUxR X0ZPUkVBQ0hfU0FGRShnbWFwLCAmcHJpdl91c2VyLT5nbWFwX2xpc3QsIGdtYXBfbGlzdF9uZXh0 LAorCSAgICBnbWFwX3RtcCkgeworCQlUQUlMUV9SRU1PVkUoJnByaXZfdXNlci0+Z21hcF9saXN0 LCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZ0b19raWxsX2dt YXBzLCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJCWlmIChnbWFwLT5tYXApCisJCQl2bV9vYmpl Y3RfZGVhbGxvY2F0ZShnbWFwLT5tYXAtPm1lbSk7CisJfQorCW10eF91bmxvY2soJnRvX2tpbGxf Z21hcHNfbXR4KTsKKwkKKwltdHhfdW5sb2NrKCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsK KwkKKwlncmVmX2xpc3RfZHRvcigpOworCWdtYXBfbGlzdF9kdG9yKCk7CisKKwltdHhfZGVzdHJv eSgmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jayk7CisJZnJlZShwcml2X3VzZXIsIE1fR05UREVW KTsKK30KKworc3RhdGljIGludAorZ250ZGV2X29wZW4oc3RydWN0IGNkZXYgKmRldiwgaW50IGZs YWcsIGludCBvdHlwLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0 IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlcjsKKworCXByaXZfdXNlciA9IG1hbGxvYyhzaXplb2Yo KnByaXZfdXNlciksIE1fR05UREVWLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJVEFJTFFfSU5JVCgm cHJpdl91c2VyLT5ncmVmX2xpc3QpOworCVRBSUxRX0lOSVQoJnByaXZfdXNlci0+Z21hcF9saXN0 KTsKKwltdHhfaW5pdCgmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jaywKKwkgICAgInBlciB1c2Vy IGRhdGEgbXV0ZXgiLCBOVUxMLCBNVFhfREVGKTsKKworCWVycm9yID0gZGV2ZnNfc2V0X2NkZXZw cml2KHByaXZfdXNlciwgcGVyX3VzZXJfZGF0YV9kdG9yKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJ cGVyX3VzZXJfZGF0YV9kdG9yKHByaXZfdXNlcik7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor c3RhdGljIGludAorZ250ZGV2X2lvY3RsKHN0cnVjdCBjZGV2ICpkZXYsIHVfbG9uZyBjbWQsIGNh ZGRyX3QgZGF0YSwKKwlpbnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBlcnJv cjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJT0NUTF9HTlRERVZfU0VUX1VOTUFQX05PVElG WToKKwkJZXJyb3IgPSBnbnRkZXZfc2V0X3VubWFwX25vdGlmeSgKKwkJICAgIChzdHJ1Y3QgaW9j dGxfZ250ZGV2X3VubWFwX25vdGlmeSopIGRhdGEpOworCQlicmVhazsKKwljYXNlIElPQ1RMX0dO VERFVl9BTExPQ19HUkVGOgorCQllcnJvciA9IGdudGRldl9hbGxvY19ncmVmKAorCQkgICAgKHN0 cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZiopIGRhdGEpOworCQlicmVhazsKKwljYXNlIElP Q1RMX0dOVERFVl9ERUFMTE9DX0dSRUY6CisJCWVycm9yID0gZ250ZGV2X2RlYWxsb2NfZ3JlZigK KwkJICAgIChzdHJ1Y3QgaW9jdGxfZ250ZGV2X2RlYWxsb2NfZ3JlZiopIGRhdGEpOworCQlicmVh azsKKwljYXNlIElPQ1RMX0dOVERFVl9NQVBfR1JBTlRfUkVGOgorCQllcnJvciA9IGdudGRldl9t YXBfZ3JhbnRfcmVmKAorCQkgICAgKHN0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZiop IGRhdGEpOworCQlicmVhazsKKwljYXNlIElPQ1RMX0dOVERFVl9VTk1BUF9HUkFOVF9SRUY6CisJ CWVycm9yID0gZ250ZGV2X3VubWFwX2dyYW50X3JlZigKKwkJICAgIChzdHJ1Y3QgaW9jdGxfZ250 ZGV2X3VubWFwX2dyYW50X3JlZiopIGRhdGEpOworCQlicmVhazsKKwljYXNlIElPQ1RMX0dOVERF Vl9HRVRfT0ZGU0VUX0ZPUl9WQUREUjoKKwkJZXJyb3IgPSBnbnRkZXZfZ2V0X29mZnNldF9mb3Jf dmFkZHIoCisJCSAgICAoc3RydWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92YWRkciop IGRhdGEsIHRkKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NUTF9HTlRERVZfU0VUX01BWF9HUkFOVFM6 CisJCWVycm9yID0gZ250ZGV2X3NldF9tYXhfZ3JhbnRzKAorCQkgICAgKHN0cnVjdCBpb2N0bF9n bnRkZXZfc2V0X21heF9ncmFudHMqKSBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJy b3IgPSBFTk9TWVM7CisJCWJyZWFrOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQorCisvKgor ICogTU1BUCBhbiBhbGxvY2F0ZWQgZ3JhbnQgaW50byB1c2VyIG1lbW9yeS4KKyAqIFBsZWFzZSBu b3RlLCB0aGF0IHRoZSBncmFudHMgbXVzdCBub3QgYWxyZWFkeSBiZSBtbWFwcGVkLCBvdGhlcndp c2UKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsLgorICovCitzdGF0aWMgaW50CittbWFwX2dy ZWYoc3RydWN0IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlciwgc3RydWN0IGdudGRldl9ncmVmICpn cmVmX3N0YXJ0LAorICAgIHVpbnQzMl90IGNvdW50LCB2bV9zaXplX3Qgc2l6ZSwgc3RydWN0IHZt X29iamVjdCAqKm9iamVjdCkKK3sKKwl2bV9vYmplY3RfdCBtZW1fb2JqOworCXN0cnVjdCBnbnRk ZXZfZ3JlZiAqZ3JlZjsKKworCW1lbV9vYmogPSB2bV9vYmplY3RfYWxsb2NhdGUoT0JKVF9QSFlT LCBzaXplKTsKKwlpZiAobWVtX29iaiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisKKwln cmVmID0gZ3JlZl9zdGFydDsKKwltdHhfbG9jaygmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jayk7 CisJVk1fT0JKRUNUX1dMT0NLKG1lbV9vYmopOworCVRBSUxRX0ZPUkVBQ0hfRlJPTShncmVmLCAm cHJpdl91c2VyLT5ncmVmX2xpc3QsIGdyZWZfbGlzdF9uZXh0KSB7CisJCWlmIChncmVmLT5wYWdl LT5vYmplY3QpCisJCQlicmVhazsKKworCQl2bV9wYWdlX2luc2VydChncmVmLT5wYWdlLCBtZW1f b2JqLAorCQkgICAgT0ZGX1RPX0lEWChncmVmLT5maWxlX2luZGV4KSk7CisKKwkJY291bnQtLTsK KwkJaWYgKGNvdW50PT0wKQorCQkJYnJlYWs7CisJfQorCVZNX09CSkVDVF9XVU5MT0NLKG1lbV9v YmopOworCW10eF91bmxvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2spOworCisJaWYgKGNv dW50KSB7CisJCXZtX29iamVjdF9kZWFsbG9jYXRlKG1lbV9vYmopOworCQlyZXR1cm4gKEVJTlZB TCk7CisJfQorCisJKm9iamVjdCA9IG1lbV9vYmo7CisKKwlyZXR1cm4gKDApOworCit9CisKKy8q CisgKiBNTUFQIGEgbWFwcGVkIGdyYW50IGludG8gdXNlciBtZW1vcnkuCisgKi8KK3N0YXRpYyBp bnQKK21tYXBfZ21hcChzdHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91c2VyLCBzdHJ1Y3QgZ250 ZGV2X2dtYXAgKmdtYXBfc3RhcnQsCisgICAgdm1fb29mZnNldF90ICpvZmZzZXQsIHZtX3NpemVf dCBzaXplLCBzdHJ1Y3Qgdm1fb2JqZWN0ICoqb2JqZWN0LCBpbnQgbnByb3QpCit7CisJaW50IGks IGVycm9yOworCisJLyoKKwkgKiBUaGUgZ3JhbnQgbWFwIGh5cGVyY2FsbCBtaWdodCBhbHJlYWR5 IGJlIGRvbmUuCisJICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgaW5jcmVhc2UgYSByZWZlcmVuY2Ug dG8gdGhlCisJICogdm0gb2JqZWN0IGFuZCByZXR1cm4gdGhlIGFscmVhZHkgYWxsb2NhdGVkIG9i amVjdC4KKwkgKi8KKwlpZiAoZ21hcF9zdGFydC0+bWFwKSB7CisJCXZtX29iamVjdF9yZWZlcmVu Y2UoZ21hcF9zdGFydC0+bWFwLT5tZW0pOworCQkqb2JqZWN0ID0gZ21hcF9zdGFydC0+bWFwLT5t ZW07CisJCXJldHVybiAoMCk7CisJfQorCisJZ21hcF9zdGFydC0+bWFwID0gbWFsbG9jKHNpemVv ZigqKGdtYXBfc3RhcnQtPm1hcCkpLCBNX0dOVERFViwKKwkgICAgTV9XQUlUT0sgfCBNX1pFUk8p OworCisJLyogQWxsb2NhdGUgdGhlIHhlbiBwc2V1ZG8gcGh5c2ljYWwgbWVtb3J5IHJlc291cmNl LiAqLworCWdtYXBfc3RhcnQtPm1hcC0+cHNldWRvX3BoeXNfcmVzX2lkID0gMDsKKwlnbWFwX3N0 YXJ0LT5tYXAtPnBzZXVkb19waHlzX3JlcyA9IHhlbm1lbV9hbGxvYyhnbnRkZXZfZGV2LAorCSAg ICAmZ21hcF9zdGFydC0+bWFwLT5wc2V1ZG9fcGh5c19yZXNfaWQsIHNpemUpOworCWlmIChnbWFw X3N0YXJ0LT5tYXAtPnBzZXVkb19waHlzX3JlcyA9PSBOVUxMKSB7CisJCWZyZWUoZ21hcF9zdGFy dC0+bWFwLCBNX0dOVERFVik7CisJCWdtYXBfc3RhcnQtPm1hcCA9IE5VTEw7CisJCXJldHVybiAo RU5PTUVNKTsKKwl9CisJZ21hcF9zdGFydC0+bWFwLT5waHlzX2Jhc2VfYWRkciA9CisJICAgIHJt YW5fZ2V0X3N0YXJ0KGdtYXBfc3RhcnQtPm1hcC0+cHNldWRvX3BoeXNfcmVzKTsKKworCS8qIEFs bG9jYXRlIHRoZSBtZ3RkZXZpY2UgcGFnZXIuICovCisJZ21hcF9zdGFydC0+bWFwLT5tZW0gPSBj ZGV2X3BhZ2VyX2FsbG9jYXRlKGdtYXBfc3RhcnQsIE9CSlRfTUdUREVWSUNFLAorCSAgICAmZ250 ZGV2X2dtYXBfcGdfb3BzLCBzaXplLCBucHJvdCwgKm9mZnNldCwgTlVMTCk7CisJaWYgKGdtYXBf c3RhcnQtPm1hcC0+bWVtID09IE5VTEwpIHsKKwkJeGVubWVtX2ZyZWUoZ250ZGV2X2RldiwgZ21h cF9zdGFydC0+bWFwLT5wc2V1ZG9fcGh5c19yZXNfaWQsCisJCSAgICBnbWFwX3N0YXJ0LT5tYXAt PnBzZXVkb19waHlzX3Jlcyk7CisJCWZyZWUoZ21hcF9zdGFydC0+bWFwLCBNX0dOVERFVik7CisJ CWdtYXBfc3RhcnQtPm1hcCA9IE5VTEw7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9CisKKwlmb3Io aSA9IDA7IGkgPCBnbWFwX3N0YXJ0LT5jb3VudDsgaSsrKSB7CisJCWdtYXBfc3RhcnQtPmdyYW50 X21hcF9vcHNbaV0uaG9zdF9hZGRyID0KKwkJICAgIGdtYXBfc3RhcnQtPm1hcC0+cGh5c19iYXNl X2FkZHIgKyBpICogUEFHRV9TSVpFOworCisJCWlmICgobnByb3QgJiBQUk9UX1dSSVRFKSA9PSAw KQorCQkJZ21hcF9zdGFydC0+Z3JhbnRfbWFwX29wc1tpXS5mbGFncyB8PSBHTlRNQVBfcmVhZG9u bHk7CisJfQorCS8qIE1ha2UgdGhlIE1BUCBoeXBlcmNhbGwuICovCisJZXJyb3IgPSBIWVBFUlZJ U09SX2dyYW50X3RhYmxlX29wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsCisJICAgIGdtYXBfc3Rh cnQtPmdyYW50X21hcF9vcHMsIGdtYXBfc3RhcnQtPmNvdW50KTsKKwlpZiAoZXJyb3IgIT0gMCkg eworCQkvKgorCQkgKiBEZWFsbG9jYXRlIHBhZ2VyLgorCQkgKiBQYWdlciBkZWFsbG9jYXRpb24g d2lsbCBhdXRvbWF0aWNhbGx5IHRha2UgY2FyZSBvZgorCQkgKiB4ZW5tZW0gZGVhbGxvY2F0aW9u LCBldGMuCisJCSAqLworCQl2bV9vYmplY3RfZGVhbGxvY2F0ZShnbWFwX3N0YXJ0LT5tYXAtPm1l bSk7CisKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCS8qIFJldHJ5IEVBR0FJTiBtYXBzLiAq LworCWZvciAoaSA9IDA7IGkgPCBnbWFwX3N0YXJ0LT5jb3VudDsgaSsrKSB7CisJCWludCBkZWxh eSA9IDE7CisJCXdoaWxlIChkZWxheSA8IDI1NiAmJgorCQkgICAgZ21hcF9zdGFydC0+Z3JhbnRf bWFwX29wc1tpXS5zdGF0dXMgPT0gR05UU1RfZWFnYWluKSB7CisJCQlIWVBFUlZJU09SX2dyYW50 X3RhYmxlX29wKCBHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLAorCQkJICAgICZnbWFwX3N0YXJ0LT5n cmFudF9tYXBfb3BzW2ldLCAxKTsKKwkJCXBhdXNlKCgiZ250bWFwIiksIGRlbGF5ICogU0JUXzFN Uyk7CisJCQlkZWxheSsrOworCQl9CisJCWlmIChnbWFwX3N0YXJ0LT5ncmFudF9tYXBfb3BzW2ld LnN0YXR1cyA9PSBHTlRTVF9lYWdhaW4pCisJCQlnbWFwX3N0YXJ0LT5ncmFudF9tYXBfb3BzW2ld LnN0YXR1cyA9IEdOVFNUX2JhZF9wYWdlOworCisJCWlmIChnbWFwX3N0YXJ0LT5ncmFudF9tYXBf b3BzW2ldLnN0YXR1cyAhPSBHTlRTVF9va2F5KSB7CisJCQkvKgorCQkJICogRGVhbGxvY2F0ZSBw YWdlci4KKwkJCSAqIFBhZ2VyIGRlYWxsb2NhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgdGFrZSBj YXJlIG9mCisJCQkgKiB4ZW5tZW0gZGVhbGxvY2F0aW9uLCBub3RpZmljYXRpb24sIHVubWFwIGh5 cGVyY2FsbCwKKwkJCSAqIGV0Yy4KKwkJCSAqLworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUoZ21h cF9zdGFydC0+bWFwLT5tZW0pOworCisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9CisKKwkv KgorCSAqIEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgdm0gb2JqZWN0LiBXZSBkbyBub3Qgd2FudAor CSAqIHRoZSB2bSBvYmplY3QgdG8gYmUgZGVsZXRlZCB3aGVuIGFsbCB0aGUgbW1hcHMgYXJlCisJ ICogdW5tYXBwZWQsIGJlY2F1c2UgaXQgbWF5IGJlIHJlLW1tYXBwZWQuIEluc3RlYWQsCisJICog d2Ugd2FudCB0aGUgb2JqZWN0IHRvIGJlIGRlbGV0ZWQsIHdoZW4gYWxvbmcgd2l0aAorCSAqIG11 bm1hcHMsIHdlIGhhdmUgYWxzbyBwcm9jZXNzZWQgdGhlIHVubWFwLWlvY3RsLgorCSAqLworCXZt X29iamVjdF9yZWZlcmVuY2UoZ21hcF9zdGFydC0+bWFwLT5tZW0pOworCisJKm9iamVjdCA9IGdt YXBfc3RhcnQtPm1hcC0+bWVtOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ250 ZGV2X21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2LCB2bV9vb2Zmc2V0X3QgKm9mZnNldCwg dm1fc2l6ZV90IHNpemUsCisgICAgc3RydWN0IHZtX29iamVjdCAqKm9iamVjdCwgaW50IG5wcm90 KQoreworCWludCBlcnJvcjsKKwl1aW50MzJfdCBjb3VudDsKKwlzdHJ1Y3QgZ250ZGV2X2dyZWYg KmdyZWZfc3RhcnQ7CisJc3RydWN0IGdudGRldl9nbWFwICpnbWFwX3N0YXJ0OworCXN0cnVjdCBw ZXJfdXNlcl9kYXRhICpwcml2X3VzZXI7CisKKwllcnJvciA9IGRldmZzX2dldF9jZGV2cHJpdigo dm9pZCoqKSAmcHJpdl91c2VyKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwp OworCisJY291bnQgPSBPRkZfVE9fSURYKHNpemUpOworCisJZ3JlZl9zdGFydCA9IGdudGRldl9m aW5kX2dyZWZzKHByaXZfdXNlciwgKm9mZnNldCwgY291bnQpOworCWlmIChncmVmX3N0YXJ0KSB7 CisJCWVycm9yID0gbW1hcF9ncmVmKHByaXZfdXNlciwgZ3JlZl9zdGFydCwgY291bnQsIHNpemUs IG9iamVjdCk7CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCWdtYXBfc3RhcnQgPSBnbnRkZXZf ZmluZF9nbWFwKHByaXZfdXNlciwgKm9mZnNldCwgY291bnQpOworCWlmIChnbWFwX3N0YXJ0KSB7 CisJCWVycm9yID0gbW1hcF9nbWFwKHByaXZfdXNlciwgZ21hcF9zdGFydCwgb2Zmc2V0LCBzaXpl LCBvYmplY3QsCisJCSAgICBucHJvdCk7CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCXJldHVy biAoRUlOVkFMKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gUHJpdmF0ZSBEZXZpY2UgQXR0 YWNobWVudCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitn bnRkZXZfaWRlbnRpZnkoZHJpdmVyX3QgKmRyaXZlciwgZGV2aWNlX3QgcGFyZW50KQoreworCisJ S0FTU0VSVCgoeGVuX2RvbWFpbigpKSwKKwkgICAgKCJUcnlpbmcgdG8gYXR0YWNoIGdudGRldiBk ZXZpY2Ugb24gbm9uIFhlbiBkb21haW4iKSk7CisKKwlpZiAoQlVTX0FERF9DSElMRChwYXJlbnQs IDAsICJnbnRkZXYiLCAwKSA9PSBOVUxMKQorCQlwYW5pYygidW5hYmxlIHRvIGF0dGFjaCBnbnRk ZXYgdXNlci1zcGFjZSBkZXZpY2UiKTsKK30KKworc3RhdGljIGludAorZ250ZGV2X3Byb2JlKGRl dmljZV90IGRldikKK3sKKworCWdudGRldl9kZXYgPSBkZXY7CisJZGV2aWNlX3NldF9kZXNjKGRl diwgIlhlbiBncmFudC10YWJsZSB1c2VyLXNwYWNlIGRldmljZSIpOworCXJldHVybiAoQlVTX1BS T0JFX05PV0lMRENBUkQpOworfQorCitzdGF0aWMgaW50CitnbnRkZXZfYXR0YWNoKGRldmljZV90 IGRldikKK3sKKworCW1ha2VfZGV2X2NyZWRmKE1BS0VERVZfRVRFUk5BTCwgJmdudGRldl9kZXZz dywgMCwgTlVMTCwgVUlEX1JPT1QsCisJICAgIEdJRF9XSEVFTCwgMDYwMCwgInhlbi9nbnRkZXYi KTsKKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIFByaXZhdGUgRGV2 aWNlIEF0dGFjaG1lbnQgRGF0YSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGRl dmljZV9tZXRob2RfdCBnbnRkZXZfbWV0aG9kc1tdID0geworCURFVk1FVEhPRChkZXZpY2VfaWRl bnRpZnksIGdudGRldl9pZGVudGlmeSksCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZ250ZGV2 X3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgZ250ZGV2X2F0dGFjaCksCisJREVW TUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90IGdudGRldl9kcml2ZXIgPSB7CisJImdu dGRldiIsCisJZ250ZGV2X21ldGhvZHMsCisJMCwKK307CisKK2RldmNsYXNzX3QgZ250ZGV2X2Rl dmNsYXNzOworCitEUklWRVJfTU9EVUxFKGdudGRldiwgeGVucHYsIGdudGRldl9kcml2ZXIsIGdu dGRldl9kZXZjbGFzcywgMCwgMCk7CitNT0RVTEVfREVQRU5EKGdudGRldiwgeGVucHYsIDEsIDEs IDEpOwpkaWZmIC0tZ2l0IGEvc3lzL3hlbi9nbnRkZXYuaCBiL3N5cy94ZW4vZ250ZGV2LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwOWM1ZAotLS0gL2Rldi9udWxsCisr KyBiL3N5cy94ZW4vZ250ZGV2LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qLQorICogQ29weXJpZ2h0 IChjKSAyMDE2IEFrc2hheSBKYWdnaSA8amFnZ2lARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg REFNQUdFLgorICoKKyAqIGdudGRldi5oCisgKiAKKyAqIEludGVyZmFjZSB0byAvZGV2L3hlbi9n bnRkZXYuCisgKiAKKyAqLworCisjaWZuZGVmIF9fWEVOX0dOVERFVl9IX18KKyNkZWZpbmUgX19Y RU5fR05UREVWX0hfXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgSU9DVExf R05UREVWX1NFVF9VTk1BUF9OT1RJRlkJCQkJCVwKKwlfSU9XKCdFJywgMCwgc3RydWN0IGlvY3Rs X2dudGRldl91bm1hcF9ub3RpZnkpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeSB7 CisgICAgLyogSU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IGluZGV4OworICAgIHVpbnQz Ml90IGFjdGlvbjsKKyAgICB1aW50MzJfdCBldmVudF9jaGFubmVsX3BvcnQ7Cit9OworCisjZGVm aW5lIFVOTUFQX05PVElGWV9DTEVBUl9CWVRFIDB4MQorI2RlZmluZSBVTk1BUF9OT1RJRllfU0VO RF9FVkVOVCAweDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLSBHcmFudCBDcmVhdGlvbiBJT0NU THMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBJT0NUTF9H TlRERVZfQUxMT0NfR1JFRgkJCQkJCVwKKwlfSU9XUignRScsIDEsIHN0cnVjdCBpb2N0bF9nbnRk ZXZfYWxsb2NfZ3JlZikKK3N0cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZiB7CisgICAgLyog SU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQxNl90IGRvbWlkOworICAgIHVpbnQxNl90IGZsYWdz OworICAgIHVpbnQzMl90IGNvdW50OworICAgIC8qIE9VVCBwYXJhbWV0ZXJzICovCisgICAgdWlu dDY0X3QgaW5kZXg7CisgICAgLyogVmFyaWFibGUgT1VUIHBhcmFtZXRlciAqLworICAgIHVpbnQz Ml90IGdyZWZfaWRzWzFdOworfTsKKworI2RlZmluZSBHTlRERVZfQUxMT0NfRkxBR19XUklUQUJM RSAxCisKKyNkZWZpbmUgSU9DVExfR05UREVWX0RFQUxMT0NfR1JFRgkJCQkJXAorCV9JT1coJ0Un LCAyLCBzdHJ1Y3QgaW9jdGxfZ250ZGV2X2RlYWxsb2NfZ3JlZikKK3N0cnVjdCBpb2N0bF9nbnRk ZXZfZGVhbGxvY19ncmVmIHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisgICAgdWludDY0X3Qg aW5kZXg7CisgICAgdWludDMyX3QgY291bnQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t IEdyYW50IEFjY2Vzc2luZyBJT0NUTHMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X3JlZiB7CisgICAgdWludDMyX3QgZG9taWQ7 CisgICAgdWludDMyX3QgcmVmOworfTsKKworI2RlZmluZSBJT0NUTF9HTlRERVZfTUFQX0dSQU5U X1JFRgkJCQkJXAorCV9JT1dSKCdFJywgMywgc3RydWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRf cmVmKQorc3RydWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRfcmVmIHsKKyAgICAvKiBJTiBwYXJh bWV0ZXJzICovCisgICAgdWludDMyX3QgY291bnQ7CisgICAgdWludDMyX3QgcGFkMDsKKyAgICAv KiBPVVQgcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IGluZGV4OworICAgIC8qIFZhcmlhYmxl IElOIHBhcmFtZXRlciAqLworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfcmVmIHJlZnNb MV07Cit9OworCisjZGVmaW5lIElPQ1RMX0dOVERFVl9VTk1BUF9HUkFOVF9SRUYJCQkJCVwKKwlf SU9XKCdFJywgNCwgc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9ncmFudF9yZWYpCitzdHJ1Y3Qg aW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZiB7CisgICAgLyogSU4gcGFyYW1ldGVycyAqLwor ICAgIHVpbnQ2NF90IGluZGV4OworICAgIHVpbnQzMl90IGNvdW50OworfTsKKworI2RlZmluZSBJ T0NUTF9HTlRERVZfR0VUX09GRlNFVF9GT1JfVkFERFIJCQkJXAorCV9JT1dSKCdFJywgNSwgc3Ry dWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92YWRkcikKK3N0cnVjdCBpb2N0bF9nbnRk ZXZfZ2V0X29mZnNldF9mb3JfdmFkZHIgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICB1 aW50NjRfdCB2YWRkcjsKKyAgICAvKiBPVVQgcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IG9m ZnNldDsKKyAgICB1aW50MzJfdCBjb3VudDsKK307CisKKyNkZWZpbmUgSU9DVExfR05UREVWX1NF VF9NQVhfR1JBTlRTCQkJCQlcCisJX0lPVygnRScsIDYsIHN0cnVjdCBpb2N0bF9nbnRkZXZfc2V0 X21heF9ncmFudHMpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3NldF9tYXhfZ3JhbnRzIHsKKyAgICAv KiBJTiBwYXJhbWV0ZXJzICovCisgICAgdWludDMyX3QgY291bnQ7Cit9OworCisjZW5kaWYgLyog X19YRU5fR05UREVWX0hfXyAqLwo= --001a1140b16018b2e40539076444 Content-Type: application/octet-stream; name="xen_freebsd.patch" Content-Disposition: attachment; filename="xen_freebsd.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ircetg271 ZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUveGVuLXN5cy9GcmVlQlNEL2dudGRldi5oIGIvdG9v bHMvaW5jbHVkZS94ZW4tc3lzL0ZyZWVCU0QvZ250ZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMWQwOWM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2luY2x1ZGUv eGVuLXN5cy9GcmVlQlNEL2dudGRldi5oCkBAIC0wLDAgKzEsMTE4IEBACisvKi0KKyAqIENvcHly aWdodCAoYykgMjAxNiBBa3NoYXkgSmFnZ2kgPGphZ2dpQEZyZWVCU0Qub3JnPgorICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqCisgKiBnbnRkZXYuaAorICogCisgKiBJbnRlcmZhY2UgdG8gL2Rldi94 ZW4vZ250ZGV2LgorICogCisgKi8KKworI2lmbmRlZiBfX1hFTl9HTlRERVZfSF9fCisjZGVmaW5l IF9fWEVOX0dOVERFVl9IX18KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjZGVmaW5lIElP Q1RMX0dOVERFVl9TRVRfVU5NQVBfTk9USUZZCQkJCQlcCisJX0lPVygnRScsIDAsIHN0cnVjdCBp b2N0bF9nbnRkZXZfdW5tYXBfbm90aWZ5KQorc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9ub3Rp ZnkgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50NjRfdCBpbmRleDsKKyAgICB1 aW50MzJfdCBhY3Rpb247CisgICAgdWludDMyX3QgZXZlbnRfY2hhbm5lbF9wb3J0OworfTsKKwor I2RlZmluZSBVTk1BUF9OT1RJRllfQ0xFQVJfQllURSAweDEKKyNkZWZpbmUgVU5NQVBfTk9USUZZ X1NFTkRfRVZFTlQgMHgyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JhbnQgQ3JlYXRpb24g SU9DVExzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgSU9D VExfR05UREVWX0FMTE9DX0dSRUYJCQkJCQlcCisJX0lPV1IoJ0UnLCAxLCBzdHJ1Y3QgaW9jdGxf Z250ZGV2X2FsbG9jX2dyZWYpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X2FsbG9jX2dyZWYgeworICAg IC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50MTZfdCBkb21pZDsKKyAgICB1aW50MTZfdCBm bGFnczsKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICAvKiBPVVQgcGFyYW1ldGVycyAqLworICAg IHVpbnQ2NF90IGluZGV4OworICAgIC8qIFZhcmlhYmxlIE9VVCBwYXJhbWV0ZXIgKi8KKyAgICB1 aW50MzJfdCBncmVmX2lkc1sxXTsKK307CisKKyNkZWZpbmUgR05UREVWX0FMTE9DX0ZMQUdfV1JJ VEFCTEUgMQorCisjZGVmaW5lIElPQ1RMX0dOVERFVl9ERUFMTE9DX0dSRUYJCQkJCVwKKwlfSU9X KCdFJywgMiwgc3RydWN0IGlvY3RsX2dudGRldl9kZWFsbG9jX2dyZWYpCitzdHJ1Y3QgaW9jdGxf Z250ZGV2X2RlYWxsb2NfZ3JlZiB7CisgICAgLyogSU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQ2 NF90IGluZGV4OworICAgIHVpbnQzMl90IGNvdW50OworfTsKKworLyotLS0tLS0tLS0tLS0tLS0t LS0tLSBHcmFudCBBY2Nlc3NpbmcgSU9DVExzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KKworc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9yZWYgeworICAgIHVpbnQzMl90IGRv bWlkOworICAgIHVpbnQzMl90IHJlZjsKK307CisKKyNkZWZpbmUgSU9DVExfR05UREVWX01BUF9H UkFOVF9SRUYJCQkJCVwKKwlfSU9XUignRScsIDMsIHN0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dy YW50X3JlZikKK3N0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZiB7CisgICAgLyogSU4g cGFyYW1ldGVycyAqLworICAgIHVpbnQzMl90IGNvdW50OworICAgIHVpbnQzMl90IHBhZDA7Cisg ICAgLyogT1VUIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50NjRfdCBpbmRleDsKKyAgICAvKiBWYXJp YWJsZSBJTiBwYXJhbWV0ZXIgKi8KKyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X3JlZiBy ZWZzWzFdOworfTsKKworI2RlZmluZSBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRfUkVGCQkJCQlc CisJX0lPVygnRScsIDQsIHN0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfZ3JhbnRfcmVmKQorc3Ry dWN0IGlvY3RsX2dudGRldl91bm1hcF9ncmFudF9yZWYgeworICAgIC8qIElOIHBhcmFtZXRlcnMg Ki8KKyAgICB1aW50NjRfdCBpbmRleDsKKyAgICB1aW50MzJfdCBjb3VudDsKK307CisKKyNkZWZp bmUgSU9DVExfR05UREVWX0dFVF9PRkZTRVRfRk9SX1ZBRERSCQkJCVwKKwlfSU9XUignRScsIDUs IHN0cnVjdCBpb2N0bF9nbnRkZXZfZ2V0X29mZnNldF9mb3JfdmFkZHIpCitzdHJ1Y3QgaW9jdGxf Z250ZGV2X2dldF9vZmZzZXRfZm9yX3ZhZGRyIHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisg ICAgdWludDY0X3QgdmFkZHI7CisgICAgLyogT1VUIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50NjRf dCBvZmZzZXQ7CisgICAgdWludDMyX3QgY291bnQ7Cit9OworCisjZGVmaW5lIElPQ1RMX0dOVERF Vl9TRVRfTUFYX0dSQU5UUwkJCQkJXAorCV9JT1coJ0UnLCA2LCBzdHJ1Y3QgaW9jdGxfZ250ZGV2 X3NldF9tYXhfZ3JhbnRzKQorc3RydWN0IGlvY3RsX2dudGRldl9zZXRfbWF4X2dyYW50cyB7Cisg ICAgLyogSU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQzMl90IGNvdW50OworfTsKKworI2VuZGlm IC8qIF9fWEVOX0dOVERFVl9IX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvZ250dGFiL01h a2VmaWxlIGIvdG9vbHMvbGlicy9nbnR0YWIvTWFrZWZpbGUKaW5kZXggYWY2NDU0Mi4uNjliYjIw NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlicy9nbnR0YWIvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGli cy9nbnR0YWIvTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAgU1JDUy1HTlRTSFIgICAgICAgICAg ICArPSBnbnRzaHJfY29yZS5jCiAKIFNSQ1MtJChDT05GSUdfTGludXgpICAgKz0gJChTUkNTLUdO VFRBQikgJChTUkNTLUdOVFNIUikgbGludXguYwogU1JDUy0kKENPTkZJR19NaW5pT1MpICArPSAk KFNSQ1MtR05UVEFCKSBnbnRzaHJfdW5pbXAuYyBtaW5pb3MuYwotU1JDUy0kKENPTkZJR19GcmVl QlNEKSArPSBnbnR0YWJfdW5pbXAuYyBnbnRzaHJfdW5pbXAuYworU1JDUy0kKENPTkZJR19GcmVl QlNEKSArPSAkKFNSQ1MtR05UVEFCKSAkKFNSQ1MtR05UU0hSKSBmcmVlYnNkLmMKIFNSQ1MtJChD T05GSUdfU3VuT1MpICAgKz0gZ250dGFiX3VuaW1wLmMgZ250c2hyX3VuaW1wLmMKIFNSQ1MtJChD T05GSUdfTmV0QlNEKSAgKz0gZ250dGFiX3VuaW1wLmMgZ250c2hyX3VuaW1wLmMKIApkaWZmIC0t Z2l0IGEvdG9vbHMvbGlicy9nbnR0YWIvZnJlZWJzZC5jIGIvdG9vbHMvbGlicy9nbnR0YWIvZnJl ZWJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZjAyMzgKLS0tIC9k ZXYvbnVsbAorKysgYi90b29scy9saWJzL2dudHRhYi9mcmVlYnNkLmMKQEAgLTAsMCArMSwzMzUg QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCwgRCBHIE11cnJheSA8RGVyZWsuTXVy cmF5QGNsLmNhbS5hYy51az4KKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBBa3NoYXkgSmFn Z2kgPGphZ2dpQEZyZWVCU0Qub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU3BsaXQgb3V0IGZyb20g bGludXguYworICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50 Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNs dWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8eGVuL3N5cy9nbnRkZXYuaD4KKworI2luY2x1 ZGUgInByaXZhdGUuaCIKKworI2RlZmluZSBERVZYRU4gIi9kZXYveGVuLyIKKworI2RlZmluZSBS T1VORFVQKF94LF93KSAoKCh1bnNpZ25lZCBsb25nKShfeCkrKDFVTDw8KF93KSktMSkgJiB+KCgx VUw8PChfdykpLTEpKQorCisjZGVmaW5lIEdURVJST1IoX2wsIF9mLi4uKSB4dGxfbG9nKF9sLCBY VExfRVJST1IsIGVycm5vLCAiZ250dGFiIiwgX2YpCisjZGVmaW5lIEdTRVJST1IoX2wsIF9mLi4u KSB4dGxfbG9nKF9sLCBYVExfRVJST1IsIGVycm5vLCAiZ250c2hyIiwgX2YpCisKKyNkZWZpbmUg UEFHRV9TSElGVCAgICAgICAgICAgMTIKKyNkZWZpbmUgUEFHRV9TSVpFICAgICAgICAgICAgKDFV TCA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sgICAgICAgICAgICAofihQQUdFX1NJ WkUtMSkpCisKKyNpZm5kZWYgT19DTE9FWEVDCisjZGVmaW5lIE9fQ0xPRVhFQyAwCisjZW5kaWYK KworaW50IG9zZGVwX2dudHRhYl9vcGVuKHhlbmdudHRhYl9oYW5kbGUgKnhndCkKK3sKKyAgICBp bnQgZmQgPSBvcGVuKERFVlhFTiAiZ250ZGV2IiwgT19SRFdSfE9fQ0xPRVhFQyk7CisgICAgaWYg KCBmZCA9PSAtMSApCisgICAgICAgIHJldHVybiAtMTsKKyAgICB4Z3QtPmZkID0gZmQ7CisgICAg cmV0dXJuIDA7Cit9CisKK2ludCBvc2RlcF9nbnR0YWJfY2xvc2UoeGVuZ250dGFiX2hhbmRsZSAq eGd0KQoreworICAgIGlmICggeGd0LT5mZCA9PSAtMSApCisgICAgICAgIHJldHVybiAwOworCisg ICAgcmV0dXJuIGNsb3NlKHhndC0+ZmQpOworfQorCitpbnQgb3NkZXBfZ250dGFiX3NldF9tYXhf Z3JhbnRzKHhlbmdudHRhYl9oYW5kbGUgKnhndCwgdWludDMyX3QgY291bnQpCit7CisgICAgaW50 IGZkID0geGd0LT5mZCwgcmM7CisgICAgc3RydWN0IGlvY3RsX2dudGRldl9zZXRfbWF4X2dyYW50 cyBtYXhfZ3JhbnRzID0geyAuY291bnQgPSBjb3VudCB9OworCisgICAgcmMgPSBpb2N0bChmZCwg SU9DVExfR05UREVWX1NFVF9NQVhfR1JBTlRTLCAmbWF4X2dyYW50cyk7CisgICAgaWYgKHJjKSB7 CisgICAgICAgIC8qCisgICAgICAgICAqIEZyZWVCU0Qga2VybmVsIGRvZXNuJ3QgaW1wbGVtZW50 IHRoaXMgSU9DVEwsCisgICAgICAgICAqIHNvIGlnbm9yZSB0aGUgcmVzdWx0aW5nIHNwZWNpZmlj IGZhaWx1cmUsIGlmIGFueS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChlcnJubyA9PSBFTk9U VFkpCisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEdURVJS T1IoeGd0LT5sb2dnZXIsICJpb2N0bCBTRVRfTUFYX0dSQU5UUyBmYWlsZWQiKTsKKyAgICB9CisK KyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgKm9zZGVwX2dudHRhYl9ncmFudF9tYXAoeGVuZ250 dGFiX2hhbmRsZSAqeGd0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBj b3VudCwgaW50IGZsYWdzLCBpbnQgcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgKmRvbWlkcywgdWludDMyX3QgKnJlZnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IG5vdGlmeV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGV2dGNobl9wb3J0X3Qgbm90aWZ5X3BvcnQpCit7CisgICAgaW50IGZkID0geGd0LT5mZDsK KyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X21hcF9ncmFudF9yZWYgKm1hcDsKKyAgICB1bnNpZ25l ZCBpbnQgbWFwX3NpemUgPSBST1VORFVQKChzaXplb2YoKm1hcCkgKyAoY291bnQgLSAxKSAqCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGlvY3RsX2du dGRldl9tYXBfZ3JhbnRfcmVmKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQUdFX1NISUZUKTsKKyAgICB2b2lkICphZGRyID0gTlVMTDsKKyAgICBpbnQgZG9taWRzX3N0 cmlkZSA9IDE7CisgICAgaW50IGk7CisKKyAgICBpZiAoZmxhZ3MgJiBYRU5HTlRUQUJfR1JBTlRf TUFQX1NJTkdMRV9ET01BSU4pCisgICAgICAgIGRvbWlkc19zdHJpZGUgPSAwOworCisgICAgaWYg KCBtYXBfc2l6ZSA8PSBQQUdFX1NJWkUgKQorICAgICAgICBtYXAgPSBhbGxvY2Eoc2l6ZW9mKCpt YXApICsKKyAgICAgICAgICAgICAgICAgICAgIChjb3VudCAtIDEpICogc2l6ZW9mKHN0cnVjdCBp b2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZikpOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1h cCA9IG1tYXAoTlVMTCwgbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAg ICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAgICAgICBpZiAo IG1hcCA9PSBNQVBfRkFJTEVEICkKKyAgICAgICAgeworICAgICAgICAgICAgR1RFUlJPUih4Z3Qt PmxvZ2dlciwgIm1tYXAgb2YgbWFwIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQor ICAgIHsKKyAgICAgICAgbWFwLT5yZWZzW2ldLmRvbWlkID0gZG9taWRzW2kgKiBkb21pZHNfc3Ry aWRlXTsKKyAgICAgICAgbWFwLT5yZWZzW2ldLnJlZiA9IHJlZnNbaV07CisgICAgfQorCisgICAg bWFwLT5jb3VudCA9IGNvdW50OworCisgICAgaWYgKCBpb2N0bChmZCwgSU9DVExfR05UREVWX01B UF9HUkFOVF9SRUYsIG1hcCkgKSB7CisgICAgICAgIEdURVJST1IoeGd0LT5sb2dnZXIsICJpb2N0 bCBNQVBfR1JBTlRfUkVGIGZhaWxlZCIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyBy ZXRyeToKKyAgICBhZGRyID0gbW1hcChOVUxMLCBQQUdFX1NJWkUgKiBjb3VudCwgcHJvdCwgTUFQ X1NIQVJFRCwgZmQsCisgICAgICAgICAgICAgICAgbWFwLT5pbmRleCk7CisKKyAgICBpZiAoYWRk ciA9PSBNQVBfRkFJTEVEICYmIGVycm5vID09IEVBR0FJTikKKyAgICB7CisgICAgICAgIC8qCisg ICAgICAgICAqIFRoZSBncmFudCBoeXBlcmNhbGwgY2FuIHJldHVybiBFQUdBSU4gaWYgdGhlIGdy YW50ZWQgcGFnZQorICAgICAgICAgKiBpcyBzd2FwcGVkIG91dC4gU2luY2UgdGhlIHBhZ2luZyBk YWVtb24gbWF5IGJlIGluIHRoZSBzYW1lCisgICAgICAgICAqIGRvbWFpbiwgdGhlIGh5cGVyY2Fs bCBjYW5ub3QgYmxvY2sgd2l0aG91dCBjYXVzaW5nIGEKKyAgICAgICAgICogZGVhZGxvY2suCisg ICAgICAgICAqCisgICAgICAgICAqIEJlY2F1c2UgdGhlcmUgYXJlIG5vIG5vdGlmaWNhdGlvbnMg d2hlbiB0aGUgcGFnZSBpcyBzd2FwcGVkCisgICAgICAgICAqIGluLCB3YWl0IGEgYml0IGJlZm9y ZSByZXRyeWluZywgYW5kIGhvcGUgdGhhdCB0aGUgcGFnZSB3aWxsCisgICAgICAgICAqIGFycml2 ZSBldmVudHVhbGx5LgorICAgICAgICAgKi8KKyAgICAgICAgdXNsZWVwKDEwMDApOworICAgICAg ICBnb3RvIHJldHJ5OworICAgIH0KKworICAgIGlmIChhZGRyICE9IE1BUF9GQUlMRUQpCisgICAg eworICAgICAgICBpbnQgcnYgPSAwOworICAgICAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFw X25vdGlmeSBub3RpZnk7CisgICAgICAgIG5vdGlmeS5pbmRleCA9IG1hcC0+aW5kZXg7CisgICAg ICAgIG5vdGlmeS5hY3Rpb24gPSAwOworICAgICAgICBpZiAobm90aWZ5X29mZnNldCA8IFBBR0Vf U0laRSAqIGNvdW50KSB7CisgICAgICAgICAgICBub3RpZnkuaW5kZXggKz0gbm90aWZ5X29mZnNl dDsKKyAgICAgICAgICAgIG5vdGlmeS5hY3Rpb24gfD0gVU5NQVBfTk9USUZZX0NMRUFSX0JZVEU7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vdGlmeV9wb3J0ICE9IC0xKSB7CisgICAgICAgICAg ICBub3RpZnkuZXZlbnRfY2hhbm5lbF9wb3J0ID0gbm90aWZ5X3BvcnQ7CisgICAgICAgICAgICBu b3RpZnkuYWN0aW9uIHw9IFVOTUFQX05PVElGWV9TRU5EX0VWRU5UOworICAgICAgICB9CisgICAg ICAgIGlmIChub3RpZnkuYWN0aW9uKQorICAgICAgICAgICAgcnYgPSBpb2N0bChmZCwgSU9DVExf R05UREVWX1NFVF9VTk1BUF9OT1RJRlksICZub3RpZnkpOworICAgICAgICBpZiAocnYpIHsKKyAg ICAgICAgICAgIEdURVJST1IoeGd0LT5sb2dnZXIsICJpb2N0bCBTRVRfVU5NQVBfTk9USUZZIGZh aWxlZCIpOworICAgICAgICAgICAgbXVubWFwKGFkZHIsIGNvdW50ICogUEFHRV9TSVpFKTsKKyAg ICAgICAgICAgIGFkZHIgPSBNQVBfRkFJTEVEOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg KGFkZHIgPT0gTUFQX0ZBSUxFRCkKKyAgICB7CisgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVy cm5vOworICAgICAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZiB1bm1hcF9n cmFudDsKKworICAgICAgICAvKiBVbm1hcCB0aGUgZHJpdmVyIHNsb3RzIHVzZWQgdG8gc3RvcmUg dGhlIGdyYW50IGluZm9ybWF0aW9uLiAqLworICAgICAgICBHVEVSUk9SKHhndC0+bG9nZ2VyLCAi bW1hcCBmYWlsZWQiKTsKKyAgICAgICAgdW5tYXBfZ3JhbnQuaW5kZXggPSBtYXAtPmluZGV4Owor ICAgICAgICB1bm1hcF9ncmFudC5jb3VudCA9IGNvdW50OworICAgICAgICBpb2N0bChmZCwgSU9D VExfR05UREVWX1VOTUFQX0dSQU5UX1JFRiwgJnVubWFwX2dyYW50KTsKKyAgICAgICAgZXJybm8g PSBzYXZlZF9lcnJubzsKKyAgICAgICAgYWRkciA9IE5VTEw7CisgICAgfQorCisgb3V0OgorICAg IGlmICggbWFwX3NpemUgPiBQQUdFX1NJWkUgKQorICAgICAgICBtdW5tYXAobWFwLCBtYXBfc2l6 ZSk7CisKKyAgICByZXR1cm4gYWRkcjsKK30KKworaW50IG9zZGVwX2dudHRhYl91bm1hcCh4ZW5n bnR0YWJfaGFuZGxlICp4Z3QsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0YXJ0X2Fk ZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvdW50KQoreworICAgIGlu dCBmZCA9IHhndC0+ZmQ7CisgICAgc3RydWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92 YWRkciBnZXRfb2Zmc2V0OworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfZ3JhbnRfcmVm IHVubWFwX2dyYW50OworICAgIGludCByYzsKKworICAgIGlmICggc3RhcnRfYWRkcmVzcyA9PSBO VUxMICkKKyAgICB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7 CisgICAgfQorCisgICAgLyogRmlyc3QsIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgdGhlIG9mZnNl dCB3aGljaCB3YXMgaW5pdGlhbGx5IHVzZWQgdG8KKyAgICAgKiBtbWFwKCkgdGhlIHBhZ2VzLgor ICAgICAqLworICAgIGdldF9vZmZzZXQudmFkZHIgPSAodW5zaWduZWQgbG9uZylzdGFydF9hZGRy ZXNzOworICAgIGlmICggKHJjID0gaW9jdGwoZmQsIElPQ1RMX0dOVERFVl9HRVRfT0ZGU0VUX0ZP Ul9WQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICZnZXRfb2Zmc2V0KSkgKQorICAgICAgICBy ZXR1cm4gcmM7CisKKyAgICBpZiAoIGdldF9vZmZzZXQuY291bnQgIT0gY291bnQgKQorICAgIHsK KyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAg ICAvKiBOZXh0LCB1bm1hcCB0aGUgbWVtb3J5LiAqLworICAgIGlmICggKHJjID0gbXVubWFwKHN0 YXJ0X2FkZHJlc3MsIGNvdW50ICogUEFHRV9TSVpFKSkgKQorICAgICAgICByZXR1cm4gcmM7CisK KyAgICAvKiBGaW5hbGx5LCB1bm1hcCB0aGUgZHJpdmVyIHNsb3RzIHVzZWQgdG8gc3RvcmUgdGhl IGdyYW50IGluZm9ybWF0aW9uLiAqLworICAgIHVubWFwX2dyYW50LmluZGV4ID0gZ2V0X29mZnNl dC5vZmZzZXQ7CisgICAgdW5tYXBfZ3JhbnQuY291bnQgPSBjb3VudDsKKyAgICBpZiAoIChyYyA9 IGlvY3RsKGZkLCBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRfUkVGLCAmdW5tYXBfZ3JhbnQpKSAp CisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQorCitpbnQgb3NkZXBfZ250 c2hyX29wZW4oeGVuZ250c2hyX2hhbmRsZSAqeGdzKQoreworICAgIGludCBmZCA9IG9wZW4oREVW WEVOICJnbnRkZXYiLCBPX1JEV1IpOworICAgIGlmICggZmQgPT0gLTEgKQorICAgICAgICByZXR1 cm4gLTE7CisgICAgeGdzLT5mZCA9IGZkOworICAgIHJldHVybiAwOworfQorCitpbnQgb3NkZXBf Z250c2hyX2Nsb3NlKHhlbmdudHNocl9oYW5kbGUgKnhncykKK3sKKyAgICBpZiAoIHhncy0+ZmQg PT0gLTEgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjbG9zZSh4Z3MtPmZkKTsK K30KKwordm9pZCAqb3NkZXBfZ250c2hyX3NoYXJlX3BhZ2VzKHhlbmdudHNocl9oYW5kbGUgKnhn cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwgaW50IGNv dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyZWZzLCBpbnQg d3JpdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgbm90aWZ5 X29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnRjaG5fcG9ydF90IG5v dGlmeV9wb3J0KQoreworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZiAqZ3JlZl9p bmZvID0gTlVMTDsKKyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeSBub3RpZnk7 CisgICAgc3RydWN0IGlvY3RsX2dudGRldl9kZWFsbG9jX2dyZWYgZ3JlZl9kcm9wOworICAgIGlu dCBmZCA9IHhncy0+ZmQ7CisgICAgaW50IGVycjsKKyAgICB2b2lkICphcmVhID0gTlVMTDsKKyAg ICBncmVmX2luZm8gPSBtYWxsb2Moc2l6ZW9mKCpncmVmX2luZm8pICsgY291bnQgKiBzaXplb2Yo dWludDMyX3QpKTsKKyAgICBpZiAoIWdyZWZfaW5mbykKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgZ3JlZl9pbmZvLT5kb21pZCA9IGRvbWlkOworICAgIGdyZWZfaW5mby0+ZmxhZ3MgPSB3cml0 YWJsZSA/IEdOVERFVl9BTExPQ19GTEFHX1dSSVRBQkxFIDogMDsKKyAgICBncmVmX2luZm8tPmNv dW50ID0gY291bnQ7CisKKyAgICBlcnIgPSBpb2N0bChmZCwgSU9DVExfR05UREVWX0FMTE9DX0dS RUYsIGdyZWZfaW5mbyk7CisgICAgaWYgKGVycikgeworICAgICAgICBHU0VSUk9SKHhncy0+bG9n Z2VyLCAiaW9jdGwgZmFpbGVkIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGFy ZWEgPSBtbWFwKE5VTEwsIGNvdW50ICogUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF LAorICAgICAgICBNQVBfU0hBUkVELCBmZCwgZ3JlZl9pbmZvLT5pbmRleCk7CisKKyAgICBpZiAo YXJlYSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGFyZWEgPSBOVUxMOworICAgICAgICBHU0VS Uk9SKHhncy0+bG9nZ2VyLCAibW1hcCBmYWlsZWQiKTsKKyAgICAgICAgZ290byBvdXRfcmVtb3Zl X2ZkbWFwOworICAgIH0KKworICAgIG5vdGlmeS5pbmRleCA9IGdyZWZfaW5mby0+aW5kZXg7Cisg ICAgbm90aWZ5LmFjdGlvbiA9IDA7CisgICAgaWYgKG5vdGlmeV9vZmZzZXQgPCBQQUdFX1NJWkUg KiBjb3VudCkgeworICAgICAgICBub3RpZnkuaW5kZXggKz0gbm90aWZ5X29mZnNldDsKKyAgICAg ICAgbm90aWZ5LmFjdGlvbiB8PSBVTk1BUF9OT1RJRllfQ0xFQVJfQllURTsKKyAgICB9CisgICAg aWYgKG5vdGlmeV9wb3J0ICE9IC0xKSB7CisgICAgICAgIG5vdGlmeS5ldmVudF9jaGFubmVsX3Bv cnQgPSBub3RpZnlfcG9ydDsKKyAgICAgICAgbm90aWZ5LmFjdGlvbiB8PSBVTk1BUF9OT1RJRllf U0VORF9FVkVOVDsKKyAgICB9CisgICAgaWYgKG5vdGlmeS5hY3Rpb24pCisgICAgICAgIGVyciA9 IGlvY3RsKGZkLCBJT0NUTF9HTlRERVZfU0VUX1VOTUFQX05PVElGWSwgJm5vdGlmeSk7CisgICAg aWYgKGVycikgeworICAgICAgICBHU0VSUk9SKHhncy0+bG9nZ2VyLCAiaW9jdGwgU0VUX1VOTUFQ X05PVElGWSBmYWlsZWQiKTsKKyAgICAgICAgbXVubWFwKGFyZWEsIGNvdW50ICogUEFHRV9TSVpF KTsKKyAgICAgICAgYXJlYSA9IE5VTEw7CisgICAgfQorCisgICAgbWVtY3B5KHJlZnMsIGdyZWZf aW5mby0+Z3JlZl9pZHMsIGNvdW50ICogc2l6ZW9mKHVpbnQzMl90KSk7CisKKyBvdXRfcmVtb3Zl X2ZkbWFwOgorICAgIC8qIFJlbW92aW5nIHRoZSBtYXBwaW5nIGZyb20gdGhlIGZpbGUgZGVzY3Jp cHRvciBkb2VzIG5vdCBjYXVzZSB0aGUgcGFnZXMgdG8KKyAgICAgKiBiZSBkZWFsbG9jYXRlZCB1 bnRpbCB0aGUgbWFwcGluZyBpcyByZW1vdmVkLgorICAgICAqLworICAgIGdyZWZfZHJvcC5pbmRl eCA9IGdyZWZfaW5mby0+aW5kZXg7CisgICAgZ3JlZl9kcm9wLmNvdW50ID0gY291bnQ7CisgICAg aW9jdGwoZmQsIElPQ1RMX0dOVERFVl9ERUFMTE9DX0dSRUYsICZncmVmX2Ryb3ApOworIG91dDoK KyAgICBmcmVlKGdyZWZfaW5mbyk7CisgICAgcmV0dXJuIGFyZWE7Cit9CisKK2ludCBvc2RlcF9n bnRzaHJfdW5zaGFyZSh4ZW5nbnRzaHJfaGFuZGxlICp4Z3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqc3RhcnRfYWRkcmVzcywgdWludDMyX3QgY291bnQpCit7CisgICAgcmV0dXJu IG11bm1hcChzdGFydF9hZGRyZXNzLCBjb3VudCAqIFBBR0VfU0laRSk7Cit9CisKKy8qCisgKiBM b2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBj LWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBu aWwKKyAqIEVuZDoKKyAqLwo= --001a1140b16018b2e40539076444--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAAeUNVmz521zKZErZqsMuJKHcS_fSvVCw=LByQXoxh_RAiLwiQ>