From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jun Kamada Subject: [RFC] [2/4] PV driver for FC transport layer (pv-scsi backend driver) Date: Fri, 29 Jun 2007 20:06:55 +0900 Message-ID: <20070629200619.69EC.KAMA@jp.fujitsu.com> References: <20070629195146.69E6.KAMA@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------_4684E7AB6B9C04902400_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20070629195146.69E6.KAMA@jp.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com Cc: kama@jp.fujitsu.com, xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --------_4684E7AB6B9C04902400_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Jun Kamada Linux Technology Development Div. Server Systems Unit Fujitsu Ltd. kama@jp.fujitsu.com --------_4684E7AB6B9C04902400_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="scsiback.patch" Content-Disposition: attachment; filename="scsiback.patch" Content-Transfer-Encoding: base64 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEp1biBLYW1hZGEgPGthbWFAanAuZnVqaXRzdS5j b20+CiMgRGF0ZSAxMTgzMTA4MTAwIC0zMjQwMAojIE5vZGUgSUQgMDZkYjBlMTM3MzFjNjUwYzVi MmRkZjZkODA0OGY5Yzg5ZDg5YTAxMgojIFBhcmVudCAgNTJmOTljZjcyNDBmODRlODk3NDAyNDI4 MjhhM2MwOTU2NjEzOTA1NAphZGQgc2NzaWJhY2sgZHJpdmVyCgpTaWduZWQtb2ZmLWJ5OiBUb21v bmFyaSBIb3Jpa29zaGkgPHQuaG9yaWtvc2hpQGpwLmZ1aml0c3UuY29tPgpTaWduZWQtb2ZmLWJ5 OiBUc3VuZWhpc2EgRG9pIDxEb2kuVHN1bmVoaXNhQGpwLmZ1aml0c3UuY29tPgpTaWduZWQtb2Zm LWJ5OiBKdW4gS2FtYWRhIDxrYW1hQGpwLmZ1aml0c3UuY29tPgpTaWduZWQtb2ZmLWJ5OiBBa2ly YSBIYXlha2F3YSA8aGF5YWthd2EuYWtpcmFAanAuZnVqaXRzdS5jb20+CgpkaWZmIC1yIDUyZjk5 Y2Y3MjQwZiAtciAwNmRiMGUxMzczMWMgZHJpdmVycy94ZW4vc2NzaWJhY2svTWFrZWZpbGUKLS0t IC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94 ZW4vc2NzaWJhY2svTWFrZWZpbGUJRnJpIEp1biAyOSAxODowODoyMCAyMDA3ICswOTAwCkBAIC0w LDAgKzEsMiBAQAorb2JqLSQoQ09ORklHX1hFTl9TQ1NJX0JBQ0tFTkQpCSs9IHNjc2liay5vCitz Y3NpYmsteQkJCSs9IGludGVyZmFjZS5vIHNjc2liYWNrLm8KZGlmZiAtciA1MmY5OWNmNzI0MGYg LXIgMDZkYjBlMTM3MzFjIGRyaXZlcnMveGVuL3Njc2liYWNrL2NvbW1vbi5oCi0tLSAvZGV2L251 bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2li YWNrL2NvbW1vbi5oCUZyaSBKdW4gMjkgMTg6MDg6MjAgMjAwNyArMDkwMApAQCAtMCwwICsxLDEw MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgRlVKSVRTVSBMaW1pdGVkCisgKgorICog QmFzZWQgb24gdGhlIGJsa2JhY2sgZHJpdmVyIGNvZGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg b3IsIHdoZW4gZGlzdHJpYnV0ZWQKKyAqIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVs IG9yIGluY29ycG9yYXRlZCBpbnRvIG90aGVyCisgKiBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkK KyAqIG9mIHRoaXMgc291cmNlIGZpbGUgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dAorICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwKKyAqIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLAorICogYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fU0NTSUlGX19CQUNLRU5EX19DT01NT05fSF9fCisj ZGVmaW5lIF9fU0NTSUlGX19CQUNLRU5EX19DT01NT05fSF9fCisKKyNpbmNsdWRlIDxsaW51eC92 ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxs b2MuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5j bHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDx4 ZW4vZXZ0Y2huLmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDx4ZW4v Z250dGFiLmg+CisjaW5jbHVkZSA8eGVuL2RyaXZlcl91dGlsLmg+CisjaW5jbHVkZSA8eGVuL3hl bmJ1cy5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vcmluZy5oPgorI2luY2x1ZGUgPHhl bi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL3Nj c2lpZi5oPgorCisjZGVmaW5lIERQUklOVEsoX2YsIF9hLi4uKQkJCVwKKwlwcl9kZWJ1ZygiKGZp bGU9JXMsIGxpbmU9JWQpICIgX2YsCVwKKwkJIF9fRklMRV9fICwgX19MSU5FX18gLCAjIyBfYSAp CisKK3N0cnVjdCBzY3NpYmFja19pbmZvIHsKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2Owor CXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IHhlbmJ1c193YXRjaCBiYWNrZW5kX3dh dGNoOworCisJdW5zaWduZWQgaW50IGV2dGNobjsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJdW5z aWduZWQgc2hvcnQgaG9zdF9ubzsKKworCXNjc2lpZl9iYWNrX3JpbmdfdCByaW5nOworCXN0cnVj dCB2bV9zdHJ1Y3QgKnJpbmdfYXJlYTsKKworCWdyYW50X2hhbmRsZV90IHNobWVtX2hhbmRsZTsK KwlncmFudF9yZWZfdCBzaG1lbV9yZWY7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2NzaWJhY2tf d29yazsKKworCXNwaW5sb2NrX3QgcmluZ19sb2NrOworCWF0b21pY190IHJlZmNudDsKKworCXN0 cnVjdCB0YXNrX3N0cnVjdCAqa3RocmVhZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0aW5nX3Rv X2ZyZWU7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisJdW5zaWduZWQgaW50IHdhaXRpbmdfcmVx czsKKworCXN0cnVjdCBwYWdlICoqbW1hcF9wYWdlczsKK307CisKK2lycXJldHVybl90IHNjc2li YWNrX2ludHIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworaW50IHNjc2liYWNrX2lu aXRfc3Jpbmcoc3RydWN0IHNjc2liYWNrX2luZm8gKiwKKwkJCQl1bnNpZ25lZCBsb25nLCB1bnNp Z25lZCBpbnQpOworaW50IHNjc2liYWNrX3NjaGVkdWxlKHZvaWQgKmRhdGEpOworCisKKyNkZWZp bmUgc2NzaWJhY2tfZ2V0KF9iKSAoYXRvbWljX2luYygmKF9iKS0+cmVmY250KSkKKyNkZWZpbmUg c2NzaWJhY2tfcHV0KF9iKQkJCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKGF0b21pY19kZWNfYW5k X3Rlc3QoJihfYiktPnJlZmNudCkpCVwKKwkJCXdha2VfdXAoJihfYiktPndhaXRpbmdfdG9fZnJl ZSk7XAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBzY3NpYmFja19pbmZvICpzY3NpaW5mb19hbGxv Yyhkb21pZF90IGRvbWlkKTsKK3ZvaWQgc2NzaWJhY2tfZnJlZShzdHJ1Y3Qgc2NzaWJhY2tfaW5m byAqaW5mbyk7Cit2b2lkIHNjc2liYWNrX2Rpc2Nvbm5lY3Qoc3RydWN0IHNjc2liYWNrX2luZm8g KmluZm8pOwordm9pZCBfX2luaXQgc2NzaWJhY2tfaW50ZXJmYWNlX2luaXQodm9pZCk7CisKKyNl bmRpZiAvKiBfX1NDU0lJRl9fQkFDS0VORF9fQ09NTU9OX0hfXyAqLwpkaWZmIC1yIDUyZjk5Y2Y3 MjQwZiAtciAwNmRiMGUxMzczMWMgZHJpdmVycy94ZW4vc2NzaWJhY2svaW50ZXJmYWNlLmMKLS0t IC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94 ZW4vc2NzaWJhY2svaW50ZXJmYWNlLmMJRnJpIEp1biAyOSAxODowODoyMCAyMDA3ICswOTAwCkBA IC0wLDAgKzEsMTY1IEBACisvKgorICogaW50ZXJmYWNlIG1hbmFnZW1lbnQuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDA3LCBGVUpJVFNVIExpbWl0ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUgYmxr YmFjayBkcml2ZXIgY29kZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmli dXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVk IGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgbGljZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3Vy Y2UgZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisK KyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDx4ZW4vZXZ0Y2huLmg+CisjaW5jbHVkZSA8 bGludXgva3RocmVhZC5oPgorCitzdGF0aWMga21lbV9jYWNoZV90ICpzY3NpYmFja19jYWNoZXA7 CisKK3N0cnVjdCBzY3NpYmFja19pbmZvICpzY3NpaW5mb19hbGxvYyhkb21pZF90IGRvbWlkKQor eworCXN0cnVjdCBzY3NpYmFja19pbmZvICppbmZvOworCisJaW5mbyA9IGttZW1fY2FjaGVfYWxs b2Moc2NzaWJhY2tfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOworCisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCXNw aW5fbG9ja19pbml0KCZpbmZvLT5yaW5nX2xvY2spOworCWF0b21pY19zZXQoJmluZm8tPnJlZmNu dCwgMSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+d3EpOworCWluaXRfd2FpdHF1ZXVl X2hlYWQoJmluZm8tPndhaXRpbmdfdG9fZnJlZSk7CisKKwlyZXR1cm4gaW5mbzsKK30KKworc3Rh dGljIGludCBtYXBfZnJvbnRlbmRfcGFnZSgKKwlzdHJ1Y3Qgc2NzaWJhY2tfaW5mbyAqaW5mbywg dW5zaWduZWQgbG9uZyBzaGFyZWRfcGFnZSkKK3sKKwlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9y ZWYgb3A7CisJaW50IGVycjsKKworCWdudHRhYl9zZXRfbWFwX29wKCZvcCwgKHVuc2lnbmVkIGxv bmcpaW5mby0+cmluZ19hcmVhLT5hZGRyLAorCQkJCUdOVE1BUF9ob3N0X21hcCwgc2hhcmVkX3Bh Z2UsCisJCQkJaW5mby0+ZGV2LT5vdGhlcmVuZF9pZCk7CisKKwllcnIgPSBIWVBFUlZJU09SX2dy YW50X3RhYmxlX29wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSk7CisJQlVHX09OKGVy cik7CisKKwlpZiAob3Auc3RhdHVzKSB7CisJCXByaW50aygiIEdyYW50IHRhYmxlIG9wZXJhdGlv biBmYWlsdXJlICFcbiIpOworCQlyZXR1cm4gb3Auc3RhdHVzOworCX0KKworCWluZm8tPnNobWVt X3JlZiA9IHNoYXJlZF9wYWdlOworCWluZm8tPnNobWVtX2hhbmRsZSA9IG9wLmhhbmRsZTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1bm1hcF9mcm9udGVuZF9wYWdlKHN0cnVjdCBz Y3NpYmFja19pbmZvICppbmZvKQoreworCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIG9w OworCWludCBlcnI7CisKKwlnbnR0YWJfc2V0X3VubWFwX29wKCZvcCwgKHVuc2lnbmVkIGxvbmcp aW5mby0+cmluZ19hcmVhLT5hZGRyLAorCQkJCUdOVE1BUF9ob3N0X21hcCwgaW5mby0+c2htZW1f aGFuZGxlKTsKKworCWVyciA9IEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoR05UVEFCT1BfdW5t YXBfZ3JhbnRfcmVmLCAmb3AsIDEpOworCUJVR19PTihlcnIpOworfQorCitpbnQgc2NzaWJhY2tf aW5pdF9zcmluZyhzdHJ1Y3Qgc2NzaWJhY2tfaW5mbyAqaW5mbywKKwkJCSB1bnNpZ25lZCBsb25n IHNoYXJlZF9wYWdlLCB1bnNpZ25lZCBpbnQgZXZ0Y2huKQoreworCXN0cnVjdCBzY3NpaWZfc3Jp bmcgKnNyaW5nOworCWludCBlcnI7CisKKwlpZiAoaW5mby0+aXJxKSB7CisJCXByaW50aygiQWxy ZWFkeSBjb25uZWN0ZWQgdGhyb3VnaD9cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpbmZvLT5y aW5nX2FyZWEgPSBhbGxvY192bV9hcmVhKFBBR0VfU0laRSk7CisJaWYgKCFpbmZvKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWVyciA9IG1hcF9mcm9udGVuZF9wYWdlKGluZm8sIHNoYXJlZF9wYWdl KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfdm07CisKKwlzcmluZyA9IChzdHJ1Y3Qgc2NzaWlm X3NyaW5nICopIGluZm8tPnJpbmdfYXJlYS0+YWRkcjsKKwlCQUNLX1JJTkdfSU5JVCgmaW5mby0+ cmluZywgc3JpbmcsIFBBR0VfU0laRSk7CisKKwllcnIgPSBiaW5kX2ludGVyZG9tYWluX2V2dGNo bl90b19pcnFoYW5kbGVyKAorCQkJaW5mby0+ZGV2LT5vdGhlcmVuZF9pZCwgZXZ0Y2huLAorCQkJ c2NzaWJhY2tfaW50ciwgMCwgInNjc2lpZi1iYWNrZW5kIiwgaW5mbyk7CisKKwlpZiAoZXJyIDwg MCkKKwkJZ290byB1bm1hcF9wYWdlOworCisJaW5mby0+aXJxID0gZXJyOworCXJldHVybiAwOwor Cit1bm1hcF9wYWdlOgorCXVubWFwX2Zyb250ZW5kX3BhZ2UoaW5mbyk7CitmcmVlX3ZtOgorCWZy ZWVfdm1fYXJlYShpbmZvLT5yaW5nX2FyZWEpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgc2Nz aWJhY2tfZGlzY29ubmVjdChzdHJ1Y3Qgc2NzaWJhY2tfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5m by0+a3RocmVhZCkgeworCQlrdGhyZWFkX3N0b3AoaW5mby0+a3RocmVhZCk7CisJCWluZm8tPmt0 aHJlYWQgPSBOVUxMOworCX0KKworCWF0b21pY19kZWMoJmluZm8tPnJlZmNudCk7CisJd2FpdF9l dmVudChpbmZvLT53YWl0aW5nX3RvX2ZyZWUsIGF0b21pY19yZWFkKCZpbmZvLT5yZWZjbnQpID09 IDApOworCWF0b21pY19pbmMoJmluZm8tPnJlZmNudCk7CisKKwlpZiAoaW5mby0+aXJxKSB7CisJ CXVuYmluZF9mcm9tX2lycWhhbmRsZXIoaW5mby0+aXJxLCBpbmZvKTsKKwkJaW5mby0+aXJxID0g MDsKKwl9CisKKwlpZiAoaW5mby0+cmluZy5zcmluZykgeworCQl1bm1hcF9mcm9udGVuZF9wYWdl KGluZm8pOworCQlmcmVlX3ZtX2FyZWEoaW5mby0+cmluZ19hcmVhKTsKKwkJaW5mby0+cmluZy5z cmluZyA9IE5VTEw7CisJfQorfQorCit2b2lkIHNjc2liYWNrX2ZyZWUoc3RydWN0IHNjc2liYWNr X2luZm8gKmluZm8pCit7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZpbmZvLT5yZWZjbnQp KQorCQlCVUcoKTsKKwlrbWVtX2NhY2hlX2ZyZWUoc2NzaWJhY2tfY2FjaGVwLCBpbmZvKTsKK30K Kwordm9pZCBfX2luaXQgc2NzaWJhY2tfaW50ZXJmYWNlX2luaXQodm9pZCkKK3sKKwlzY3NpYmFj a19jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic2NzaWlmX2NhY2hlIiwKKwkJc2l6ZW9mKHN0 cnVjdCBzY3NpYmFja19pbmZvKSwgMCwgMCwgTlVMTCwgTlVMTCk7Cit9CmRpZmYgLXIgNTJmOTlj ZjcyNDBmIC1yIDA2ZGIwZTEzNzMxYyBkcml2ZXJzL3hlbi9zY3NpYmFjay9zY3NpYmFjay5jCi0t LSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMv eGVuL3Njc2liYWNrL3Njc2liYWNrLmMJRnJpIEp1biAyOSAxODowODoyMCAyMDA3ICswOTAwCkBA IC0wLDAgKzEsNzE2IEBACisvKgorICogWGVuIFNDU0kgYmFja2VuZCBkcml2ZXIKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMDcsIEZVSklUU1UgTGltaXRlZAorICoKKyAqIEJhc2VkIG9uIHRoZSBi bGtiYWNrIGRyaXZlciBjb2RlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IG9yLCB3aGVuIGRpc3Ry aWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4IGtlcm5lbCBvciBpbmNvcnBvcmF0 ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUgcGFja2FnZXMsIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBsaWNlbnNlOgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNv dXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNp bmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8eGVuL2JhbGxvb24uaD4KKyNpbmNs dWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUg PHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRl IDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgorI2luY2x1 ZGUgImNvbW1vbi5oIgorCisKKyNkZWZpbmUgSU5WQUxJRF9HUkFOVF9IQU5ETEUJMHhGRkZGCisK K3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3Qgc2NzaWJhY2tfaW5mbyAqaW5mbzsKKwl1bnNpZ25l ZCBsb25nIHJxaWQ7CisJaW50IHVzZV9zZzsKKwlhdG9taWNfdCBwZW5kY250OworCXN0cnVjdCBy ZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKK30gcGVuZGluZ19yZXFf dDsKKworc3RhdGljIHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxczsKK3N0YXRpYyBzdHJ1Y3Qg bGlzdF9oZWFkIHBlbmRpbmdfZnJlZTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGVuZGluZ19m cmVlX2xvY2spOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHBlbmRpbmdfZnJlZV93 cSk7CisKKyNkZWZpbmUgU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEUgKH4wKQorCitzdGF0aWMgc3Ry dWN0IHBhZ2UgKipwZW5kaW5nX3BhZ2VzOworc3RhdGljIGdyYW50X2hhbmRsZV90ICpwZW5kaW5n X2dyYW50X2hhbmRsZXM7CisKKworc3RhdGljIGlubGluZSBpbnQgdmFkZHJfcGFnZW5yKHBlbmRp bmdfcmVxX3QgKnJlcSwgaW50IHNlZykKK3sKKwlyZXR1cm4gKHJlcSAtIHBlbmRpbmdfcmVxcykg KiBTR19UQUJMRVNJWkUgKyBzZWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2 YWRkcihwZW5kaW5nX3JlcV90ICpyZXEsIGludCBzZWcpCit7CisJdW5zaWduZWQgbG9uZyBwZm4g PSBwYWdlX3RvX3BmbihwZW5kaW5nX3BhZ2VzW3ZhZGRyX3BhZ2VucihyZXEsIHNlZyldKTsKKwly ZXR1cm4gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBmbik7Cit9CisKKyNkZWZpbmUgcGVu ZGluZ19oYW5kbGUoX3JlcSwgX3NlZykgXAorCShwZW5kaW5nX2dyYW50X2hhbmRsZXNbdmFkZHJf cGFnZW5yKF9yZXEsIF9zZWcpXSkKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1pc2Mgc21hbGwgaGVs cGVycworICovCitzdGF0aWMgcGVuZGluZ19yZXFfdCogYWxsb2NfcmVxKHZvaWQpCit7CisJcGVu ZGluZ19yZXFfdCAqcmVxID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJnBlbmRpbmdfZnJlZV9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5 KCZwZW5kaW5nX2ZyZWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkocGVuZGluZ19mcmVlLm5leHQs IHBlbmRpbmdfcmVxX3QsIGZyZWVfbGlzdCk7CisJCWxpc3RfZGVsKCZyZXEtPmZyZWVfbGlzdCk7 CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBlbmRpbmdfZnJlZV9sb2NrLCBmbGFncyk7 CisJcmV0dXJuIHJlcTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9yZXEocGVuZGluZ19yZXFfdCAq cmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHdhc19lbXB0eTsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZwZW5kaW5nX2ZyZWVfbG9jaywgZmxhZ3MpOworCXdhc19lbXB0eSA9IGxp c3RfZW1wdHkoJnBlbmRpbmdfZnJlZSk7CisJbGlzdF9hZGQoJnJlcS0+ZnJlZV9saXN0LCAmcGVu ZGluZ19mcmVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZW5kaW5nX2ZyZWVfbG9jaywg ZmxhZ3MpOworCWlmICh3YXNfZW1wdHkpCisJCXdha2VfdXAoJnBlbmRpbmdfZnJlZV93cSk7Cit9 CisKKworc3RhdGljIHZvaWQgZmFzdF9mbHVzaF9hcmVhKHBlbmRpbmdfcmVxX3QgKnJlcSkKK3sK KwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiB1bm1hcFtTR19UQUJMRVNJWkVdOworCXVu c2lnbmVkIGludCBpLCBpbnZjb3VudCA9IDA7CisJZ3JhbnRfaGFuZGxlX3QgaGFuZGxlOworCWlu dCBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT51c2Vfc2c7IGkrKykgeworCQloYW5kbGUg PSBwZW5kaW5nX2hhbmRsZShyZXEsIGkpOworCQlpZiAoaGFuZGxlID09IFNDU0lCQUNLX0lOVkFM SURfSEFORExFKQorCQkJY29udGludWU7CisJCWdudHRhYl9zZXRfdW5tYXBfb3AoJnVubWFwW2ld LCB2YWRkcihyZXEsIGkpLAorCQkJCQlHTlRNQVBfaG9zdF9tYXAsIGhhbmRsZSk7CisJCXBlbmRp bmdfaGFuZGxlKHJlcSwgaSkgPSBTQ1NJQkFDS19JTlZBTElEX0hBTkRMRTsKKwkJaW52Y291bnQr KzsKKwl9CisKKwllcnIgPSBIWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKAorCQlHTlRUQUJPUF91 bm1hcF9ncmFudF9yZWYsIHVubWFwLCBpbnZjb3VudCk7CisJQlVHX09OKGVycik7Cit9CisKKwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICogTk9USUZJQ0FUSU9OIEZST00gR1VFU1QgT1MuCisg Ki8KK3N0YXRpYyB2b2lkIHNjc2liYWNrX25vdGlmeV93b3JrKHN0cnVjdCBzY3NpYmFja19pbmZv ICppbmZvKQoreworCWluZm8tPndhaXRpbmdfcmVxcyA9IDE7CisJd2FrZV91cCgmaW5mby0+d3Ep OworfQorCitpcnFyZXR1cm5fdCBzY3NpYmFja19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwg c3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc2NzaWJhY2tfbm90aWZ5X3dvcmsoZGV2X2lkKTsK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2Vfc2Vuc2Uoc3RydWN0 IHNjc2liYWNrX2luZm8gKmluZm8sIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQlpbnQzMl90IHJl c3VsdCwgdWludDY0X3QgcnFpZCkKK3sKKwlzdHJ1Y3Qgc2NzaWlmX3Jlc3BvbnNlICpyZXNwOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNjc2lpZl9iYWNrX3JpbmcgKnJpbmcgPSAm aW5mby0+cmluZzsKKwlpbnQgbW9yZV90b19kbyA9IDA7CisJaW50IG5vdGlmeTsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZpbmZvLT5yaW5nX2xvY2ssIGZsYWdzKTsKKworCXJlc3AgPSBSSU5HX0dF VF9SRVNQT05TRShyaW5nLCByaW5nLT5yc3BfcHJvZF9wdnQpOworCW1lbXNldChyZXNwLT5zZW5z ZV9idWZmZXIsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisKKwlyZXNwLT5yZXN1bHQgPSBy ZXN1bHQ7CisJcmVzcC0+cnFpZCAgID0gcnFpZDsKKworCWlmIChyZXEpIHsKKwkJbWVtY3B5KHJl c3AtPnNlbnNlX2J1ZmZlciwgcmVxLT5zZW5zZSwgcmVxLT5zZW5zZV9sZW4pOworCQlyZXNwLT5z ZW5zZV9sZW4gPSByZXEtPnNlbnNlX2xlbjsKKwl9IGVsc2UKKwkJcmVzcC0+c2Vuc2VfbGVuID0g MDsKKworCXJpbmctPnJzcF9wcm9kX3B2dCsrOworCisJUklOR19QVVNIX1JFU1BPTlNFU19BTkRf Q0hFQ0tfTk9USUZZKHJpbmcsIG5vdGlmeSk7CisKKwlpZiAocmluZy0+cnNwX3Byb2RfcHZ0ID09 IHJpbmctPnJlcV9jb25zKSB7CisJCVJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFUVVFU1RTKHJpbmcs IG1vcmVfdG9fZG8pOworCisJfSBlbHNlIGlmIChSSU5HX0hBU19VTkNPTlNVTUVEX1JFUVVFU1RT KHJpbmcpKSB7CisJCW1vcmVfdG9fZG8gPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmluZm8tPnJpbmdfbG9jaywgZmxhZ3MpOworCisJaWYgKG1vcmVfdG9fZG8pCisJCXNjc2li YWNrX25vdGlmeV93b3JrKGluZm8pOworCWlmIChub3RpZnkpCisJCW5vdGlmeV9yZW1vdGVfdmlh X2lycShpbmZvLT5pcnEpOworfQorCisKK3N0YXRpYyB2b2lkIHNjc2liYWNrX2VuZF9jbWRfZm4o c3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGVycm9yKQoreworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vf YnVmZmVyW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CisJcGVuZGluZ19yZXFfdCAqcGVuZGluZ19y ZXEgPSByZXEtPmVuZF9pb19kYXRhOworCXBlbmRpbmdfcmVxLT5ycSA9IHJlcTsKKworCWlmIChy ZXEtPmVycm9ycyAhPSAwKSB7CisJCXByaW50aygiQnVmZmVyIG5vdCB1cC10by1kYXRlIGF0IGVu ZCBvZiBvcGVyYXRpb24sICIKKwkJCSJyZXEtPmVycm9ycz0weCUwOHhcbiIsIHJlcS0+ZXJyb3Jz KTsKKwkJbWVtY3B5KHNlbnNlX2J1ZmZlciwgcmVxLT5zZW5zZSwgcmVxLT5zZW5zZV9sZW4pOwor CQlfX3Njc2lfcHJpbnRfc2Vuc2UoInNjc2liYWNrX2VuZF9jbWRfZm4iLCBzZW5zZV9idWZmZXIs CisJCQkJICAgcmVxLT5zZW5zZV9sZW4pOworCX0KKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0 KCZwZW5kaW5nX3JlcS0+cGVuZGNudCkpIHsKKwkJZmFzdF9mbHVzaF9hcmVhKHBlbmRpbmdfcmVx KTsKKwkJbWFrZV9zZW5zZShwZW5kaW5nX3JlcS0+aW5mbywgcGVuZGluZ19yZXEtPnJxLCAKKwkJ CQlyZXEtPmVycm9ycywgcGVuZGluZ19yZXEtPnJxaWQpOworCQlzY3NpYmFja19wdXQocGVuZGlu Z19yZXEtPmluZm8pOworCQlmcmVlX3JlcShwZW5kaW5nX3JlcSk7CisJfQorCQorCV9fYmxrX3B1 dF9yZXF1ZXN0KHJlcS0+cSwgcmVxKTsKK30KKworCisvKiBxdW90ZWQgc2NzaV9saWIuYy9zY3Np X21lcmdlX2JpbyAqLworc3RhdGljIGludCBzY3NpYmFja19tZXJnZV9iaW8oc3RydWN0IHJlcXVl c3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBy cS0+cTsKKworCWJpby0+YmlfZmxhZ3MgJj0gfigxIDw8IEJJT19TRUdfVkFMSUQpOworCWlmIChy cV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCisJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXKTsK KworCWJsa19xdWV1ZV9ib3VuY2UocSwgJmJpbyk7CisKKwlpZiAoIXJxLT5iaW8pCisJCWJsa19y cV9iaW9fcHJlcChxLCBycSwgYmlvKTsKKwllbHNlIGlmICghcS0+YmFja19tZXJnZV9mbihxLCBy cSwgYmlvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSB7CisJCXJxLT5iaW90YWlsLT5iaV9u ZXh0ID0gYmlvOworCQlycS0+YmlvdGFpbCAgICAgICAgICA9IGJpbzsKKwkJcnEtPmhhcmRfbnJf c2VjdG9ycyArPSBiaW9fc2VjdG9ycyhiaW8pOworCQlycS0+bnJfc2VjdG9ycyAgICAgICA9IHJx LT5oYXJkX25yX3NlY3RvcnM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyogcXVvdGVkIHNj c2lfbGliLmMvc2NzaV9iaV9lbmRpbyAqLworc3RhdGljIGludCBzY3NpYmFja19iaV9lbmRpbyhz dHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBieXRlc19kb25lLCBpbnQgZXJyb3IpCit7CisJ aWYgKGJpby0+Ymlfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJu IDA7Cit9CisKKworLyogcXVvdGVkIHNjc2lfbGliLmMvc2NzaV9yZXFfbWFwX3NnIC4gKi8KK3N0 YXRpYyBpbnQgcmVxdXNldF9tYXBfc2coc3RydWN0IHNjc2lpZl9yZXF1ZXN0ICpyaW5nX3JlcSwK KwkJCQlwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEg PSBwZW5kaW5nX3JlcS0+cnE7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBwZW5kaW5nX3Jl cS0+cnEtPnE7CisJaW50IG5yX3BhZ2VzOworCWludCBuc2VncyA9IHBlbmRpbmdfcmVxLT51c2Vf c2c7CisJdW5zaWduZWQgaW50IGRhdGFfbGVuID0gMCwgbGVuLCBieXRlcywgb2ZmOworCXN0cnVj dCBwYWdlICpwYWdlOworCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7CisJaW50IGksIGVyciwgbnJf dmVjcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnNlZ3M7IGkrKykgeworCQlwYWdlID0gdmly dF90b19wYWdlKHZhZGRyKHBlbmRpbmdfcmVxLCBpKSk7CisJCW9mZiA9IHJpbmdfcmVxLT5zZWdb aV0ub2Zmc2V0OworCQlsZW4gPSByaW5nX3JlcS0+c2VnW2ldLmxlbmd0aDsKKwkJZGF0YV9sZW4g Kz0gbGVuOworCisJCW5yX3BhZ2VzID0gKGxlbiArIG9mZiArIFBBR0VfU0laRSAtIDEpID4+IFBB R0VfU0hJRlQ7CisKKwkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCWJ5dGVzID0gbWluX3QodW5zaWdu ZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7CisKKwkJCWlmICghYmlvKSB7CisJCQkJbnJf dmVjcyA9IG1pbl90KGludCwgQklPX01BWF9QQUdFUywgbnJfcGFnZXMpOworCQkJCW5yX3BhZ2Vz IC09IG5yX3ZlY3M7CisJCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9LRVJORUwsIG5yX3ZlY3MpOwor CQkJCWlmICghYmlvKSB7CisJCQkJCWVyciA9IC1FTk9NRU07CisJCQkJCWdvdG8gZnJlZV9iaW9z OworCQkJCX0KKwkJCQliaW8tPmJpX2VuZF9pbyA9IHNjc2liYWNrX2JpX2VuZGlvOworCQkJfQor CisJCQlpZiAoYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFnZSwgYnl0ZXMsIG9mZikgIT0KKwkJ CQkJCWJ5dGVzKSB7CisJCQkJYmlvX3B1dChiaW8pOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJ Z290byBmcmVlX2Jpb3M7CisJCQl9CisKKwkJCWlmIChiaW8tPmJpX3ZjbnQgPj0gbnJfdmVjcykg eworCQkJCWVyciA9IHNjc2liYWNrX21lcmdlX2JpbyhycSwgYmlvKTsKKwkJCQlpZiAoZXJyKSB7 CisJCQkJCWJpb19lbmRpbyhiaW8sIGJpby0+Ymlfc2l6ZSwgMCk7CisJCQkJCWdvdG8gZnJlZV9i aW9zOworCQkJCX0KKwkJCQliaW8gPSBOVUxMOworCQkJfQorCisJCQlwYWdlKys7CisJCQlsZW4g LT0gYnl0ZXM7CisJCQlvZmYgPSAwOworCQl9CisJfQorCisJcnEtPmJ1ZmZlciAgID0gcnEtPmRh dGEgPSBOVUxMOworCXJxLT5kYXRhX2xlbiA9IGRhdGFfbGVuOworCXJldHVybiAwOworCitmcmVl X2Jpb3M6CisJd2hpbGUgKChiaW8gPSBycS0+YmlvKSAhPSBOVUxMKSB7CisJCXJxLT5iaW8gPSBi aW8tPmJpX25leHQ7CisJCS8qCisJCSAqIGNhbGwgZW5kaW8gaW5zdGVhZCBvZiBiaW9fcHV0IGlu Y2FzZSBpdCB3YXMgYm91bmNlZAorCQkgKi8KKwkJYmlvX2VuZGlvKGJpbywgYmlvLT5iaV9zaXpl LCAwKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBzY3NpYmFja19jbWRf ZXhlYyhzdHJ1Y3Qgc2NzaWJhY2tfaW5mbyAqaW5mbywKKwkJc3RydWN0IHNjc2lpZl9yZXF1ZXN0 ICpyaW5nX3JlcSwgcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEpCit7CisKKwlzdHJ1Y3QgZ250 dGFiX21hcF9ncmFudF9yZWYgbWFwW1NHX1RBQkxFU0laRV07CisJc3RydWN0IHNjc2lfZGV2aWNl ICpzZGV2OworCWNoYXIgc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKKworCWludCBpLCBl cnIgPSAwOworCWludCB3cml0ZSA9IChyaW5nX3JlcS0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1B X1RPX0RFVklDRSk7CisJdTMyIGZsYWdzLCB1c2Vfc2c7CisKKwl1c2Vfc2cgPSByaW5nX3JlcS0+ dXNlX3NnOworCXNkZXYgICA9IHNjc2lfZGV2aWNlX2xvb2t1cChpbmZvLT5ob3N0LCByaW5nX3Jl cS0+Y2hhbm5lbCwKKwkJCQkJcmluZ19yZXEtPmlkLCByaW5nX3JlcS0+bHVuKTsKKworCWlmIChz ZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKCJTY3NpIERldmljZSBOb3QgRm91bmRcbiIpOworCQln b3RvIGZhaWxfcmVzcG9uc2U7CisJfQorCisJcGVuZGluZ19yZXEtPnJxICAgICA9IGJsa19nZXRf cmVxdWVzdChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJCQkJd3JpdGUsIEdGUF9LRVJORUwpOwor CXBlbmRpbmdfcmVxLT5pbmZvICAgPSBpbmZvOworCXBlbmRpbmdfcmVxLT5ycWlkICAgPSByaW5n X3JlcS0+cnFpZDsKKwlwZW5kaW5nX3JlcS0+dXNlX3NnID0gdXNlX3NnOworCisKKwlwZW5kaW5n X3JlcS0+cnEtPmZsYWdzICB8PSBSRVFfQkxPQ0tfUEM7CisJcGVuZGluZ19yZXEtPnJxLT5jbWRf bGVuID0gcmluZ19yZXEtPmNtZF9sZW47CisJbWVtY3B5KHBlbmRpbmdfcmVxLT5ycS0+Y21kLCBy aW5nX3JlcS0+Y21uZCwgcmluZ19yZXEtPmNtZF9sZW4pOworCisJbWVtc2V0KHNlbnNlLCAwLCBz aXplb2Yoc2Vuc2UpKTsgLypGSVhNRSovCisJcGVuZGluZ19yZXEtPnJxLT5zZW5zZSAgICAgPSBz ZW5zZTsKKwlwZW5kaW5nX3JlcS0+cnEtPnNlbnNlX2xlbiA9IDA7CisKKwlwZW5kaW5nX3JlcS0+ cnEtPnJldHJpZXMgICA9IHJpbmdfcmVxLT5yZXRyaWVzOworCXBlbmRpbmdfcmVxLT5ycS0+dGlt ZW91dCAgID0gcmluZ19yZXEtPnRpbWVvdXRfcGVyX2NvbW1hbmQ7CisKKwlwZW5kaW5nX3JlcS0+ cnEtPmVuZF9pb19kYXRhID0gcGVuZGluZ19yZXE7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNlX3Nn OyBpKyspIHsKKwkJZmxhZ3MgPSBHTlRNQVBfaG9zdF9tYXA7CisJCWlmICh3cml0ZSkKKwkJCWZs YWdzIHw9IEdOVE1BUF9yZWFkb25seTsKKworCQlnbnR0YWJfc2V0X21hcF9vcCgmbWFwW2ldLCB2 YWRkcihwZW5kaW5nX3JlcSwgaSksIGZsYWdzLAorCQkJCQlyaW5nX3JlcS0+c2VnW2ldLmdyZWYs CisJCQkJCWluZm8tPmRldi0+b3RoZXJlbmRfaWQpOworCX0KKworCWlmICh1c2Vfc2cpIHsgCisJ CWVyciA9IEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoR05UVEFCT1BfbWFwX2dyYW50X3JlZiwK KwkJCQkJCQltYXAsIHVzZV9zZyk7CisJCUJVR19PTihlcnIpOworCX0KKworCWZvciAoaSA9IDA7 IGkgPCB1c2Vfc2c7IGkrKykgewkJCisJCWlmICh1bmxpa2VseShtYXBbaV0uc3RhdHVzICE9IDAp KSB7CisJCQlwcmludGsoImludmFsaWQgYnVmZmVyIC0tIGNvdWxkIG5vdCByZW1hcCBpdFxuIik7 CisJCQltYXBbaV0uaGFuZGxlID0gU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEU7CisJCQllcnIgfD0g MTsKKwkJfQorCisJCXBlbmRpbmdfaGFuZGxlKHBlbmRpbmdfcmVxLCBpKSA9IG1hcFtpXS5oYW5k bGU7CisKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCisJCXNldF9waHlzX3RvX21hY2hpbmUo X19wYSh2YWRkcigKKwkJCXBlbmRpbmdfcmVxLCBpKSkgPj4gUEFHRV9TSElGVCwKKwkJCUZPUkVJ R05fRlJBTUUobWFwW2ldLmRldl9idXNfYWRkciA+PiBQQUdFX1NISUZUKSk7CisJfQorCisJaWYg KGVycikKKwkJZ290byBmYWlsX2ZsdXNoOworCisJaWYgKHVzZV9zZykgeyAKKwkJaWYgKHJlcXVz ZXRfbWFwX3NnKHJpbmdfcmVxLCBwZW5kaW5nX3JlcSkpIHsKKwkJCXByaW50aygiU0cgUmVxdWVz dCBNYXAgRXJyb3JcbiIpOworCQkJZ290byBmYWlsX21hcDsKKwkJfQorCX0KKworCWF0b21pY19z ZXQoJnBlbmRpbmdfcmVxLT5wZW5kY250LCAxKTsKKwlzY3NpYmFja19nZXQoaW5mbyk7CisKKwli bGtfZXhlY3V0ZV9ycV9ub3dhaXQocGVuZGluZ19yZXEtPnJxLT5xLCBOVUxMLCBwZW5kaW5nX3Jl cS0+cnEsCisJCQkJMSwgc2NzaWJhY2tfZW5kX2NtZF9mbik7CisKKwlyZXR1cm4gOworCitmYWls X21hcDoKK2ZhaWxfZmx1c2g6CisJZmFzdF9mbHVzaF9hcmVhKHBlbmRpbmdfcmVxKTsKK2ZhaWxf cmVzcG9uc2U6CisJbWFrZV9zZW5zZShpbmZvLCBOVUxMLCAxLCByaW5nX3JlcS0+cnFpZCk7CisJ ZnJlZV9yZXEocGVuZGluZ19yZXEpOworCXByaW50aygiJXMgZXJyb3JcbiIsX19GVU5DVElPTl9f KTsKK30KKworc3RhdGljIGludCBkb19zY3NpYmFja19jbWRfZm4oc3RydWN0IHNjc2liYWNrX2lu Zm8gKmluZm8pCit7CisJc3RydWN0IHNjc2lpZl9iYWNrX3JpbmcgKnJpbmcgPSAmaW5mby0+cmlu ZzsKKwlzdHJ1Y3Qgc2NzaWlmX3JlcXVlc3QgKnJpbmdfcmVxOworCisJcGVuZGluZ19yZXFfdCAq cGVuZGluZ19yZXE7CisJUklOR19JRFggcmMsIHJwOworCWludCBtb3JlX3RvX2RvID0gMDsKKwor CXJjID0gcmluZy0+cmVxX2NvbnM7CisJcnAgPSByaW5nLT5zcmluZy0+cmVxX3Byb2Q7CisJcm1i KCk7CisKKwl3aGlsZSAoKHJjICE9IHJwKSAmJiAhUklOR19SRVFVRVNUX0NPTlNfT1ZFUkZMT1co cmluZywgcmMpKSB7CisKKwkJcGVuZGluZ19yZXEgPSBhbGxvY19yZXEoKTsKKwkJaWYgKE5VTEwg PT0gcGVuZGluZ19yZXEpIHsKKwkJCW1vcmVfdG9fZG8gPSAxOworCQkJYnJlYWs7CisJCX0KKwor CQlyaW5nX3JlcSA9IFJJTkdfR0VUX1JFUVVFU1QocmluZywgcmMpOworCQlyaW5nLT5yZXFfY29u cyA9ICsrcmM7CisKKwkJc2NzaWJhY2tfY21kX2V4ZWMoaW5mbywgcmluZ19yZXEsIHBlbmRpbmdf cmVxKTsKKwl9CisKKwlyZXR1cm4gbW9yZV90b19kbzsKK30KKworaW50IHNjc2liYWNrX3NjaGVk dWxlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNjc2liYWNrX2luZm8gKmluZm8gPSBkYXRhOwor CisJc2NzaWJhY2tfZ2V0KGluZm8pOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkp IHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKAorCQkJaW5mby0+d3EsCisJCQlpbmZvLT53 YWl0aW5nX3JlcXMgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwkJd2FpdF9ldmVudF9pbnRl cnJ1cHRpYmxlKAorCQkJcGVuZGluZ19mcmVlX3dxLAorCQkJIWxpc3RfZW1wdHkoJnBlbmRpbmdf ZnJlZSkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKworCQlpbmZvLT53YWl0aW5nX3JlcXMg PSAwOworCQlzbXBfbWIoKTsKKworCQlpZiAoZG9fc2NzaWJhY2tfY21kX2ZuKGluZm8pKQorCQkJ aW5mby0+d2FpdGluZ19yZXFzID0gMTsKKwl9CisKKwlpbmZvLT5rdGhyZWFkID0gTlVMTDsKKwlz Y3NpYmFja19wdXQoaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNjc2li YWNrX3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpYmFj a19pbmZvICppbmZvID0gZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisKKwlpZiAoaW5mby0+YmFja2Vu ZF93YXRjaC5ub2RlKSB7CisJCXVucmVnaXN0ZXJfeGVuYnVzX3dhdGNoKCZpbmZvLT5iYWNrZW5k X3dhdGNoKTsKKwkJa2ZyZWUoaW5mby0+YmFja2VuZF93YXRjaC5ub2RlKTsKKwkJaW5mby0+YmFj a2VuZF93YXRjaC5ub2RlID0gTlVMTDsKKwl9CisKKwlpZiAoaW5mbykgeworCQlzY3NpYmFja19k aXNjb25uZWN0KGluZm8pOworCQlzY3NpYmFja19mcmVlKGluZm8pOworCQlpbmZvID0gTlVMTDsK Kwl9CisKKwlrZnJlZShpbmZvKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2Nz aWJhY2tfY29ubmVjdChzdHJ1Y3Qgc2NzaWJhY2tfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgeGVu YnVzX2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OworCXVuc2lnbmVkIGxvbmcgcmluZ19yZWY7CisJ dW5zaWduZWQgaW50IGV2dGNobjsKKwlpbnQgZXJyOworCisJZXJyID0geGVuYnVzX2dhdGhlcihY QlRfTklMLCBkZXYtPm90aGVyZW5kLCAicmluZy1yZWYiLCAiJWx1IiwKKwkJCSZyaW5nX3JlZiwg ImV2ZW50LWNoYW5uZWwiLCAiJXUiLCAmZXZ0Y2huLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCXhl bmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJyZWFkaW5nICVzIHJpbmciLCBkZXYtPm90aGVyZW5k KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzY3NpYmFja19pbml0X3NyaW5nKGluZm8s IHJpbmdfcmVmLCBldnRjaG4pOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlp bmZvLT5rdGhyZWFkID0ga3RocmVhZF9ydW4oc2NzaWJhY2tfc2NoZWR1bGUsIGluZm8sICJzY3Np aWYiKTsKKwlpZiAoSVNfRVJSKGluZm8tPmt0aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5m by0+a3RocmVhZCk7CisJCWluZm8tPmt0aHJlYWQgPSBOVUxMOworCQl4ZW5idXNfZGV2X2Vycm9y KGluZm8tPmRldiwgZXJyLCAic3RhcnQgc2NzaWlmIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHNjc2liYWNrX2Zyb250ZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c19kZXZp Y2UgKmRldiwKKwkJCQkJZW51bSB4ZW5idXNfc3RhdGUgZnJvbnRlbmRfc3RhdGUpCit7CisJc3Ry dWN0IHNjc2liYWNrX2luZm8gKmluZm8gPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsKKwlpbnQgZXJy OworCisJc3dpdGNoIChmcm9udGVuZF9zdGF0ZSkgeworCWNhc2UgWGVuYnVzU3RhdGVJbml0aWFs aXNpbmc6CisJCWJyZWFrOworCisJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2VkOgorCWNhc2Ug WGVuYnVzU3RhdGVDb25uZWN0ZWQ6CisJCWlmIChkZXYtPnN0YXRlID09IFhlbmJ1c1N0YXRlQ29u bmVjdGVkKQorCQkJYnJlYWs7CisKKwkJZXJyID0gc2NzaWJhY2tfY29ubmVjdChpbmZvKTsKKwkJ aWYgKGVycikKKwkJCWJyZWFrOworCisJCWVyciA9IHhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBY ZW5idXNTdGF0ZUNvbm5lY3RlZCk7CisJCWlmIChlcnIpCisJCQl4ZW5idXNfZGV2X2ZhdGFsKGRl diwgZXJyLCAic3dpdGNoaW5nIHRvIENvbm5lY3RlZCBzdGF0ZSIsCisJCQkJCWRldi0+bm9kZW5h bWUpOworCQlicmVhazsKKworCWNhc2UgWGVuYnVzU3RhdGVDbG9zaW5nOgorCQlzY3NpYmFja19k aXNjb25uZWN0KGluZm8pOworCQl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVD bG9zaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIFhlbmJ1c1N0YXRlQ2xvc2VkOgorCQl4ZW5idXNf c3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDbG9zZWQpOworCQlpZiAoeGVuYnVzX2Rldl9p c19vbmxpbmUoZGV2KSkKKwkJCWJyZWFrOworCisJY2FzZSBYZW5idXNTdGF0ZVVua25vd246CisJ CS8qCisJCSAqIHdvcmthcm91bmQuCisJCSAqLworCQlpZiAoaW5mby0+aG9zdC0+aG9zdF9ubykK KwkJCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXhlbmJ1c19kZXZfZmF0YWwoZGV2LCAtRUlOVkFMLCAic2F3IHN0YXRlICVkIGF0IGZyb250ZW5k IiwKKwkJCQkJZnJvbnRlbmRfc3RhdGUpOworCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIHZv aWQgc2NzaWJhY2tfYmFja2VuZF9jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfd2F0Y2ggKndhdGNoLAor CQkJCQljb25zdCBjaGFyICoqdmVjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBzY3Np YmFja19pbmZvICppbmZvID0KKwkJY29udGFpbmVyX29mKHdhdGNoLCBzdHJ1Y3Qgc2NzaWJhY2tf aW5mbywgYmFja2VuZF93YXRjaCk7CisKKwlwcmludGsoIiVzICVwICV1XG4iLCBfX0ZVTkNUSU9O X18sIGluZm8tPmRldiwgaW5mby0+ZGV2LT5zdGF0ZSk7CisKKwkvKkZJWE1FKi8KK30KKworCitz dGF0aWMgaW50IHNjc2liYWNrX3Byb2JlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCisJCQkg ICBjb25zdCBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCAqaWQpCit7CisJaW50IGVyciwgaG9zdG5v OworCXN0cnVjdCBzY3NpYmFja19pbmZvICppbmZvOworCisKKwlEUFJJTlRLKCIlcCAlZFxuIiwg ZGV2LCBkZXYtPm90aGVyZW5kX2lkKTsKKworCWVyciA9IHhlbmJ1c19zY2FuZihYQlRfTklMLCBk ZXYtPm5vZGVuYW1lLCAiaG9zdG5vIiwgIiVkIiwgJmhvc3Rubyk7CisJaWYgKGVyciA9PSAtRU5P RU5UICkgeworCQlwcmludGsoImVycm9yIHhlbmJ1c19zY2FuZiBob3N0bm89JWRcbiIsaG9zdG5v KTsKKwkJZ290byBmYWlsOworCX0KKworCWluZm8gPSBzY3NpaW5mb19hbGxvYyhkZXYtPm90aGVy ZW5kX2lkKTsKKwlpZiAoSVNfRVJSKGluZm8pKSB7CisJCWVyciA9IFBUUl9FUlIoaW5mbyk7CisJ CWluZm8gPSBOVUxMOworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAiY3JlYXRpbmcgYmxv Y2sgaW50ZXJmYWNlIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpbmZvLT5ob3N0ID0gc2NzaV9o b3N0X2xvb2t1cChob3N0bm8pOworCisJZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBpbmZvOworCisJ aW5mby0+ZGV2ID0gZGV2OworCWluZm8tPmlycSA9IDA7CisKKwllcnIgPSB4ZW5idXNfd2F0Y2hf cGF0aDIoZGV2LCBkZXYtPm5vZGVuYW1lLAorCQkJCSJzY3NpLWhvc3QiLAorCQkJCSZpbmZvLT5i YWNrZW5kX3dhdGNoLAorCQkJCXNjc2liYWNrX2JhY2tlbmRfY2hhbmdlZCk7CisJaWYgKGVycikK KwkJZ290byBmYWlsOworCisJZXJyID0geGVuYnVzX3N3aXRjaF9zdGF0ZShkZXYsIFhlbmJ1c1N0 YXRlSW5pdFdhaXQpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworCitm YWlsOgorCXByaW50aygiJXMgZmFpbGVkXG4iLF9fRlVOQ1RJT05fXyk7CisJc2NzaWJhY2tfcmVt b3ZlKGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgeGVuYnVzX2Rl dmljZV9pZCBzY3NpYmFja19pZHNbXSA9IHsKKwl7ICJzY3NpaG9zdCIgfSwKKwl7ICIiIH0KK307 CisKK3N0YXRpYyBzdHJ1Y3QgeGVuYnVzX2RyaXZlciBzY3NpYmFjayA9IHsKKwkubmFtZQkJCT0g InNjc2lob3N0IiwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5pZHMJCQk9IHNjc2liYWNr X2lkcywKKwkucHJvYmUJCQk9IHNjc2liYWNrX3Byb2JlLAorCS5yZW1vdmUJCQk9IHNjc2liYWNr X3JlbW92ZSwKKwkub3RoZXJlbmRfY2hhbmdlZAk9IHNjc2liYWNrX2Zyb250ZW5kX2NoYW5nZWQK K307CisKK3N0YXRpYyBpbnQgX19pbml0IHNjc2liYWNrX2luaXQodm9pZCkKK3sKKwlpbnQgZXJy ID0gLUVOT01FTTsKKwlpbnQgaSwgbW1hcF9wYWdlczsKKworCWlmICghaXNfcnVubmluZ19vbl94 ZW4oKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltbWFwX3BhZ2VzID0gQ0FOX1FVRVVFICogU0df VEFCTEVTSVpFOworCisJcGVuZGluZ19yZXFzICAgICAgICAgID0ga21hbGxvYyhzaXplb2YocGVu ZGluZ19yZXFzWzBdKSAqCisJCQkJCUNBTl9RVUVVRSwgR0ZQX0tFUk5FTCk7CisJcGVuZGluZ19n cmFudF9oYW5kbGVzID0ga21hbGxvYyhzaXplb2YocGVuZGluZ19ncmFudF9oYW5kbGVzWzBdKSAq CisJCQkJCW1tYXBfcGFnZXMsIEdGUF9LRVJORUwpOworCXBlbmRpbmdfcGFnZXMgICAgICAgICA9 IGFsbG9jX2VtcHR5X3BhZ2VzX2FuZF9wYWdldmVjKG1tYXBfcGFnZXMpOworCisJaWYgKCFwZW5k aW5nX3JlcXMgfHwgIXBlbmRpbmdfZ3JhbnRfaGFuZGxlcyB8fCAhcGVuZGluZ19wYWdlcykKKwkJ Z290byBvdXRfb2ZfbWVtb3J5OworCisJZm9yIChpID0gMDsgaSA8IG1tYXBfcGFnZXM7IGkrKykK KwkJcGVuZGluZ19ncmFudF9oYW5kbGVzW2ldID0gU0NTSUJBQ0tfSU5WQUxJRF9IQU5ETEU7CisK KwlzY3NpYmFja19pbnRlcmZhY2VfaW5pdCgpOworCisJbWVtc2V0KHBlbmRpbmdfcmVxcywgMCwg c2l6ZW9mKHBlbmRpbmdfcmVxcykpOworCUlOSVRfTElTVF9IRUFEKCZwZW5kaW5nX2ZyZWUpOwor CisJZm9yIChpID0gMDsgaSA8IENBTl9RVUVVRTsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZwZW5k aW5nX3JlcXNbaV0uZnJlZV9saXN0LCAmcGVuZGluZ19mcmVlKTsKKworCWVyciA9IHhlbmJ1c19y ZWdpc3Rlcl9iYWNrZW5kKCZzY3NpYmFjayk7CisJaWYgKGVycikKKwkJZ290byBvdXRfb2ZfbWVt b3J5OworCisJcmV0dXJuIDA7CisKKyBvdXRfb2ZfbWVtb3J5OgorCWtmcmVlKHBlbmRpbmdfcmVx cyk7CisJa2ZyZWUocGVuZGluZ19ncmFudF9oYW5kbGVzKTsKKwlmcmVlX2VtcHR5X3BhZ2VzX2Fu ZF9wYWdldmVjKHBlbmRpbmdfcGFnZXMsIG1tYXBfcGFnZXMpOworCXByaW50aygiJXM6IG91dCBv ZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK21vZHVs ZV9pbml0KHNjc2liYWNrX2luaXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlhlbiBTQ1NJIGJh Y2tlbmQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CmRpZmYgLXIg NTJmOTljZjcyNDBmIC1yIDA2ZGIwZTEzNzMxYyBpbmNsdWRlL3B1YmxpYy9pby9zY3NpaWYuaAot LS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9pbmNsdWRl L3B1YmxpYy9pby9zY3NpaWYuaAlGcmkgSnVuIDI5IDE4OjA4OjIwIDIwMDcgKzA5MDAKQEAgLTAs MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodChjKSBGVUpJVFNVIExpbWl0ZWQgMjAwNy4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uIHRoZSBibGtiYWNr L2Jsa2Zyb250IGRyaXZlciBjb2RlLgorICoKKyAqLworI2lmbmRlZiBfX1hFTl9fUFVCTElDX0lP X1NDU0lfSF9fCisjZGVmaW5lIF9fWEVOX19QVUJMSUNfSU9fU0NTSV9IX18KKworI2luY2x1ZGUg InJpbmcuaCIKKyNpbmNsdWRlICIuLi9ncmFudF90YWJsZS5oIgorCisjZGVmaW5lIENBTl9RVUVV RQk4CisjZGVmaW5lIFNHX1RBQkxFU0laRQkxMQorCitzdHJ1Y3Qgc2NzaWlmX3JlcXVlc3Qgewor I2RlZmluZSBNQVhfQ09NTUFORF9TSVpFCTE2CisJdWludDhfdCBjbW5kW01BWF9DT01NQU5EX1NJ WkVdOworCXVpbnQ4X3QgY21kX2xlbjsKKwl1aW50MzJfdCBpZCwgbHVuLCBjaGFubmVsOworCXVp bnQxNl90IHNjX2RhdGFfZGlyZWN0aW9uOworCXVpbnQxNl90IHVzZV9zZzsKKwl1aW50MTZfdCBy ZXF1ZXN0X2J1ZmZsZW47CisJaW50MzJfdCByZXRyaWVzOworCWludDMyX3QgdGltZW91dF9wZXJf Y29tbWFuZDsKKwl1aW50NjRfdCBycWlkOworCXN0cnVjdCBzY3NpaWZfcmVxdWVzdF9zZWdtZW50 eworCQlncmFudF9yZWZfdCBncmVmOworCQl1aW50MzJfdCBvZmZzZXQ7CisJCXVpbnQzMl90IGxl bmd0aDsKKwl9IHNlZ1tTR19UQUJMRVNJWkVdOworfTsKKworc3RydWN0IHNjc2lpZl9yZXNwb25z ZSB7CisJdWludDY0X3QgcnFpZDsKKwlpbnQzMl90IHJlc3VsdDsKKwl1aW50NjRfdCBzZW5zZV9s ZW47CisjZGVmaW5lIFNDU0lfU0VOU0VfQlVGRkVSU0laRSAJOTYKKwl1aW50OF90IHNlbnNlX2J1 ZmZlcltTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOworfTsKKworREVGSU5FX1JJTkdfVFlQRVMoc2Nz aWlmLCBzdHJ1Y3Qgc2NzaWlmX3JlcXVlc3QsIHN0cnVjdCBzY3NpaWZfcmVzcG9uc2UpOworCisj ZW5kaWYK --------_4684E7AB6B9C04902400_MULTIPART_MIXED_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------_4684E7AB6B9C04902400_MULTIPART_MIXED_--