From mboxrd@z Thu Jan 1 00:00:00 1970 From: Noboru Iwamatsu Subject: [RFC][PATCH 3/4] PVUSB: backend driver Date: Tue, 17 Mar 2009 09:47:41 +0900 Message-ID: <49BEF32D.6040309@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010306000400070109030204" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------010306000400070109030204 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit This patch adds the PVUSB backendend driver. Signed-off-by: Noboru Iwamatsu --------------010306000400070109030204 Content-Type: text/plain; name="pvusb_usbback.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="pvusb_usbback.patch" ZGlmZiAtciA1MWRlY2MzOWU1ZTcgLXIgOWVmMmU4YzZjZjNkIGRyaXZlcnMveGVuL3VzYmJh Y2svTWFrZWZpbGUKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAw MDAKKysrIGIvZHJpdmVycy94ZW4vdXNiYmFjay9NYWtlZmlsZQlNb24gTWFyIDE2IDE4OjQx OjEyIDIwMDkgKzA5MDAKQEAgLTAsMCArMSw0IEBACitvYmotJChDT05GSUdfWEVOX1VTQl9C QUNLRU5EKSA6PSB1c2Jiay5vCisKK3VzYmJrLXkgICA6PSB1c2JzdHViLm8geGVuYnVzLm8g aW50ZXJmYWNlLm8gdXNiYmFjay5vCisKZGlmZiAtciA1MWRlY2MzOWU1ZTcgLXIgOWVmMmU4 YzZjZjNkIGRyaXZlcnMveGVuL3VzYmJhY2svaW50ZXJmYWNlLmMKLS0tIC9kZXYvbnVsbAlU aHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94ZW4vdXNiYmFj ay9pbnRlcmZhY2UuYwlNb24gTWFyIDE2IDE4OjQxOjEyIDIwMDkgKzA5MDAKQEAgLTAsMCAr MSwyMDggQEAKKy8qCisgKiBpbnRlcmZhY2UuYworICoKKyAqIFhlbiBVU0IgYmFja2VuZCBp bnRlcmZhY2UgbWFuYWdlbWVudC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIEZVSklU U1UgTEFCT1JBVE9SSUVTIExURC4KKyAqIEF1dGhvcjogTm9ib3J1IEl3YW1hdHN1IDxuX2l3 YW1hdHN1QGpwLmZ1aml0c3UuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBvciwKKyAqCisg KiBXaGVuIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9y IGluY29ycG9yYXRlZCBpbnRvCisgKiBvdGhlciBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEg Y29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQor ICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICog ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwg VEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNs dWRlICJ1c2JiYWNrLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQodXNiaWZfbGlzdCk7CitzdGF0 aWMgREVGSU5FX1NQSU5MT0NLKHVzYmlmX2xpc3RfbG9jayk7CisKK3VzYmlmX3QgKmZpbmRf dXNiaWYoaW50IGRvbV9pZCwgaW50IGRldl9pZCkKK3sKKwl1c2JpZl90ICp1c2JpZjsKKwlp bnQgZm91bmQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmdXNiaWZfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh1 c2JpZiwgJnVzYmlmX2xpc3QsIHVzYmlmX2xpc3QpIHsKKwkJaWYgKHVzYmlmLT5kb21pZCA9 PSBkb21faWQKKwkJCSYmIHVzYmlmLT5oYW5kbGUgPT0gZGV2X2lkKSB7CisJCQlmb3VuZCA9 IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2Jp Zl9saXN0X2xvY2ssIGZsYWdzKTsKKworCWlmIChmb3VuZCkKKwkJcmV0dXJuIHVzYmlmOwor CisJcmV0dXJuIE5VTEw7Cit9CisKK3VzYmlmX3QgKnVzYmlmX2FsbG9jKGRvbWlkX3QgZG9t aWQsIHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisJdXNiaWZfdCAqdXNiaWY7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXVzYmlmID0ga3phbGxvYyhzaXplb2YodXNi aWZfdCksIEdGUF9LRVJORUwpOworCWlmICghdXNiaWYpCisJCXJldHVybiBOVUxMOworCisJ dXNiaWYtPmRvbWlkID0gZG9taWQ7CisJdXNiaWYtPmhhbmRsZSA9IGhhbmRsZTsKKwlzcGlu X2xvY2tfaW5pdCgmdXNiaWYtPnJpbmdfbG9jayk7CisJYXRvbWljX3NldCgmdXNiaWYtPnJl ZmNudCwgMCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNiaWYtPndxKTsKKwlpbml0X3dh aXRxdWV1ZV9oZWFkKCZ1c2JpZi0+d2FpdGluZ190b19mcmVlKTsKKwlzcGluX2xvY2tfaW5p dCgmdXNiaWYtPnBsdWdfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnVzYmlmLT5wbHVnZ2Vk X2RldmljZXMpOworCXNwaW5fbG9ja19pbml0KCZ1c2JpZi0+YWRkcl9sb2NrKTsKKwlmb3Ig KGkgPSAwOyBpIDwgVVNCX0RFVl9BRERSX1NJWkU7IGkrKykgeworCQl1c2JpZi0+YWRkcl90 YWJsZVtpXSA9IE5VTEw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmlmX2xpc3Rf bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZ1c2JpZi0+dXNiaWZfbGlzdCwgJnVzYmlmX2xp c3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmlmX2xpc3RfbG9jaywgZmxhZ3Mp OworCisJcmV0dXJuIHVzYmlmOworfQorCitzdGF0aWMgaW50IG1hcF9mcm9udGVuZF9wYWdl KHVzYmlmX3QgKnVzYmlmLCB1bnNpZ25lZCBsb25nIHNoYXJlZF9wYWdlKQoreworCXN0cnVj dCBnbnR0YWJfbWFwX2dyYW50X3JlZiBvcDsKKworCWdudHRhYl9zZXRfbWFwX29wKCZvcCwg KHVuc2lnbmVkIGxvbmcpdXNiaWYtPnJpbmdfYXJlYS0+YWRkciwKKwkJCSAgR05UTUFQX2hv c3RfbWFwLCBzaGFyZWRfcGFnZSwgdXNiaWYtPmRvbWlkKTsKKworCWlmIChIWVBFUlZJU09S X2dyYW50X3RhYmxlX29wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSkpCisJCUJV RygpOworCisJaWYgKG9wLnN0YXR1cykgeworCQlwcmludGsoS0VSTl9FUlIgImdyYW50IHRh YmxlIG9wZXJhdGlvbiBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIG9wLnN0YXR1czsKKwl9CisK Kwl1c2JpZi0+c2htZW1fcmVmID0gc2hhcmVkX3BhZ2U7CisJdXNiaWYtPnNobWVtX2hhbmRs ZSA9IG9wLmhhbmRsZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1bm1hcF9m cm9udGVuZF9wYWdlKHVzYmlmX3QgKnVzYmlmKQoreworCXN0cnVjdCBnbnR0YWJfdW5tYXBf Z3JhbnRfcmVmIG9wOworCisJZ250dGFiX3NldF91bm1hcF9vcCgmb3AsICh1bnNpZ25lZCBs b25nKXVzYmlmLT5yaW5nX2FyZWEtPmFkZHIsCisJCQkgICAgR05UTUFQX2hvc3RfbWFwLCB1 c2JpZi0+c2htZW1faGFuZGxlKTsKKworCWlmIChIWVBFUlZJU09SX2dyYW50X3RhYmxlX29w KEdOVFRBQk9QX3VubWFwX2dyYW50X3JlZiwgJm9wLCAxKSkKKwkJQlVHKCk7Cit9CisKK2lu dCB1c2JpZl9tYXAodXNiaWZfdCAqdXNiaWYsIHVuc2lnbmVkIGxvbmcgc2hhcmVkX3BhZ2Us IHVuc2lnbmVkIGludCBldnRjaG4pCit7CisJaW50IGVycjsKKwl1c2JpZl9zcmluZ190ICpz cmluZzsKKworCWlmICh1c2JpZi0+aXJxKQorCQlyZXR1cm4gMDsKKworCWlmICgodXNiaWYt PnJpbmdfYXJlYSA9IGFsbG9jX3ZtX2FyZWEoUEFHRV9TSVpFKSkgPT0gTlVMTCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwllcnIgPSBtYXBfZnJvbnRlbmRfcGFnZSh1c2JpZiwgc2hhcmVk X3BhZ2UpOworCWlmIChlcnIpIHsKKwkJZnJlZV92bV9hcmVhKHVzYmlmLT5yaW5nX2FyZWEp OworCQlyZXR1cm4gZXJyOworCX0KKworCXNyaW5nID0gKHVzYmlmX3NyaW5nX3QgKikgdXNi aWYtPnJpbmdfYXJlYS0+YWRkcjsKKwlCQUNLX1JJTkdfSU5JVCgmdXNiaWYtPnJpbmcsIHNy aW5nLCBQQUdFX1NJWkUpOworCisJZXJyID0gYmluZF9pbnRlcmRvbWFpbl9ldnRjaG5fdG9f aXJxaGFuZGxlcigKKwkJCXVzYmlmLT5kb21pZCwgZXZ0Y2huLCB1c2Jia19iZV9pbnQsIDAs ICJ1c2JpZi1iYWNrZW5kIiwgdXNiaWYpOworCWlmIChlcnIgPCAwKQorCXsKKwkJdW5tYXBf ZnJvbnRlbmRfcGFnZSh1c2JpZik7CisJCWZyZWVfdm1fYXJlYSh1c2JpZi0+cmluZ19hcmVh KTsKKwkJdXNiaWYtPnJpbmcuc3JpbmcgPSBOVUxMOworCQlyZXR1cm4gZXJyOworCX0KKwl1 c2JpZi0+aXJxID0gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNiaWZfZGlzY29u bmVjdCh1c2JpZl90ICp1c2JpZikKK3sKKwlzdHJ1Y3QgdXNic3R1YiAqc3R1YiwgKnRtcDsK Kwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVzYmlmLT54ZW51c2JkKSB7CisJCWt0 aHJlYWRfc3RvcCh1c2JpZi0+eGVudXNiZCk7CisJCXVzYmlmLT54ZW51c2JkID0gTlVMTDsK Kwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaWYtPnBsdWdfbG9jaywgZmxhZ3MpOwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdHViLCB0bXAsICZ1c2JpZi0+cGx1Z2dlZF9k ZXZpY2VzLCBwbHVnZ2VkX2xpc3QpIHsKKwkJdXNiYmtfdW5saW5rX3VyYnMoc3R1Yik7CisJ CWRldGFjaF9kZXZpY2Vfd2l0aG91dF9sb2NrKHVzYmlmLCBzdHViKTsKKwl9CisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdXNiaWYtPnBsdWdfbG9jaywgZmxhZ3MpOworCisJd2FpdF9l dmVudCh1c2JpZi0+d2FpdGluZ190b19mcmVlLCBhdG9taWNfcmVhZCgmdXNiaWYtPnJlZmNu dCkgPT0gMCk7CisKKwlpZiAodXNiaWYtPmlycSkgeworCQl1bmJpbmRfZnJvbV9pcnFoYW5k bGVyKHVzYmlmLT5pcnEsIHVzYmlmKTsKKwkJdXNiaWYtPmlycSA9IDA7CisJfQorCisJaWYg KHVzYmlmLT5yaW5nLnNyaW5nKSB7CisJCXVubWFwX2Zyb250ZW5kX3BhZ2UodXNiaWYpOwor CQlmcmVlX3ZtX2FyZWEodXNiaWYtPnJpbmdfYXJlYSk7CisJCXVzYmlmLT5yaW5nLnNyaW5n ID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgdXNiaWZfZnJlZSh1c2JpZl90ICp1c2JpZikKK3sK Kwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmlmX2xp c3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZ1c2JpZi0+dXNiaWZfbGlzdCk7CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaWZfbGlzdF9sb2NrLCBmbGFncyk7CisJa2ZyZWUo dXNiaWYpOworfQpkaWZmIC1yIDUxZGVjYzM5ZTVlNyAtciA5ZWYyZThjNmNmM2QgZHJpdmVy cy94ZW4vdXNiYmFjay91c2JiYWNrLmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAw OjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94ZW4vdXNiYmFjay91c2JiYWNrLmMJTW9u IE1hciAxNiAxODo0MToxMiAyMDA5ICswOTAwCkBAIC0wLDAgKzEsMTA3NSBAQAorLyoKKyAq IHVzYmJhY2suYworICoKKyAqIFhlbiBVU0IgYmFja2VuZCBkcml2ZXIKKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMDksIEZVSklUU1UgTEFCT1JBVE9SSUVTIExURC4KKyAqIEF1dGhvcjog Tm9ib3J1IEl3YW1hdHN1IDxuX2l3YW1hdHN1QGpwLmZ1aml0c3UuY29tPgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyAqCisgKiBvciwKKyAqCisgKiBXaGVuIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJv bSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvCisgKiBvdGhlciBzb2Z0 d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgor ICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPHhlbi9i YWxsb29uLmg+CisjaW5jbHVkZSAidXNiYmFjay5oIgorCisjaWYgMAorI2luY2x1ZGUgIi4u Ly4uL3VzYi9jb3JlL2h1Yi5oIgorI2VuZGlmCisKK2ludCB1c2JpZl9yZXFzID0gVVNCSUZf QkFDS19NQVhfUEVORElOR19SRVFTOworbW9kdWxlX3BhcmFtX25hbWVkKHJlcXMsIHVzYmlm X3JlcXMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlcXMsICJOdW1iZXIgb2YgdXNi YmFjayByZXF1ZXN0cyB0byBhbGxvY2F0ZSIpOworCitzdHJ1Y3QgcGVuZGluZ19yZXFfc2Vn bWVudCB7CisJdWludDE2X3Qgb2Zmc2V0OworCXVpbnQxNl90IGxlbmd0aDsKK307CisKK3R5 cGVkZWYgc3RydWN0IHsKKwl1c2JpZl90ICp1c2JpZjsKKworCXVpbnQxNl90IGlkOyAvKiBy ZXF1ZXN0IGlkICovCisKKwlzdHJ1Y3QgdXNic3R1YiAqc3R1YjsKKwlzdHJ1Y3QgbGlzdF9o ZWFkIHVyYl9saXN0OworCisJLyogdXJiICovCisJc3RydWN0IHVyYiAqdXJiOworCXZvaWQg KmJ1ZmZlcjsKKwlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYTsKKwlzdHJ1Y3QgdXNiX2N0cmxy ZXF1ZXN0ICpzZXR1cDsKKwlkbWFfYWRkcl90IHNldHVwX2RtYTsKKworCS8qIHJlcXVlc3Qg c2VnbWVudHMgKi8KKwl1aW50MTZfdCBucl9idWZmZXJfc2VnczsgLyogbnVtYmVyIG9mIHVy Yi0+dHJhbnNmZXJfYnVmZmVyIHNlZ21lbnRzICovCisJdWludDE2X3QgbnJfZXh0cmFfc2Vn czsgLyogbnVtYmVyIG9mIGlzb19mcmFtZV9kZXNjIHNlZ21lbnRzIChJU08pICovCisJc3Ry dWN0IHBlbmRpbmdfcmVxX3NlZ21lbnQgKnNlZzsKKworCXN0cnVjdCBsaXN0X2hlYWQgZnJl ZV9saXN0OworfSBwZW5kaW5nX3JlcV90OworCitzdGF0aWMgcGVuZGluZ19yZXFfdCAqcGVu ZGluZ19yZXFzOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19mcmVlOworc3Rh dGljIERFRklORV9TUElOTE9DSyhwZW5kaW5nX2ZyZWVfbG9jayk7CitzdGF0aWMgREVDTEFS RV9XQUlUX1FVRVVFX0hFQUQocGVuZGluZ19mcmVlX3dxKTsKKworI2RlZmluZSBVU0JCQUNL X0lOVkFMSURfSEFORExFICh+MCkKKworc3RhdGljIHN0cnVjdCBwYWdlICoqcGVuZGluZ19w YWdlczsKK3N0YXRpYyBncmFudF9oYW5kbGVfdCAqcGVuZGluZ19ncmFudF9oYW5kbGVzOwor CitzdGF0aWMgaW5saW5lIGludCB2YWRkcl9wYWdlbnIocGVuZGluZ19yZXFfdCAqcmVxLCBp bnQgc2VnKQoreworCXJldHVybiAocmVxIC0gcGVuZGluZ19yZXFzKSAqIFVTQklGX01BWF9T RUdNRU5UU19QRVJfUkVRVUVTVCArIHNlZzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25l ZCBsb25nIHZhZGRyKHBlbmRpbmdfcmVxX3QgKnJlcSwgaW50IHNlZykKK3sKKwl1bnNpZ25l ZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBlbmRpbmdfcGFnZXNbdmFkZHJfcGFnZW5yKHJl cSwgc2VnKV0pOworCXJldHVybiAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIocGZuKTsK K30KKworI2RlZmluZSBwZW5kaW5nX2hhbmRsZShfcmVxLCBfc2VnKSBcCisJKHBlbmRpbmdf Z3JhbnRfaGFuZGxlc1t2YWRkcl9wYWdlbnIoX3JlcSwgX3NlZyldKQorCitzdGF0aWMgcGVu ZGluZ19yZXFfdCogYWxsb2NfcmVxKHZvaWQpCit7CisJcGVuZGluZ19yZXFfdCAqcmVxID0g TlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBl bmRpbmdfZnJlZV9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwZW5kaW5nX2Zy ZWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkocGVuZGluZ19mcmVlLm5leHQsIHBlbmRpbmdf cmVxX3QsIGZyZWVfbGlzdCk7CisJCWxpc3RfZGVsKCZyZXEtPmZyZWVfbGlzdCk7CisJfQor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBlbmRpbmdfZnJlZV9sb2NrLCBmbGFncyk7CisJ cmV0dXJuIHJlcTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9yZXEocGVuZGluZ19yZXFfdCAq cmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHdhc19lbXB0eTsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZwZW5kaW5nX2ZyZWVfbG9jaywgZmxhZ3MpOworCXdhc19lbXB0 eSA9IGxpc3RfZW1wdHkoJnBlbmRpbmdfZnJlZSk7CisJbGlzdF9hZGQoJnJlcS0+ZnJlZV9s aXN0LCAmcGVuZGluZ19mcmVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZW5kaW5n X2ZyZWVfbG9jaywgZmxhZ3MpOworCWlmICh3YXNfZW1wdHkpCisJCXdha2VfdXAoJnBlbmRp bmdfZnJlZV93cSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRfcmVxX3RvX3N1Ym1p dHRpbmdfbGlzdChzdHJ1Y3QgdXNic3R1YiAqc3R1YiwgcGVuZGluZ19yZXFfdCAqcGVuZGlu Z19yZXEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZzdHViLT5zdWJtaXR0aW5nX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZwZW5k aW5nX3JlcS0+dXJiX2xpc3QsICZzdHViLT5zdWJtaXR0aW5nX2xpc3QpOworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnN0dWItPnN1Ym1pdHRpbmdfbG9jaywgZmxhZ3MpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3JlcV9mcm9tX3N1Ym1pdHRpbmdfbGlzdChzdHJ1 Y3QgdXNic3R1YiAqc3R1YiwgcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEpCit7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzdHViLT5zdWJtaXR0 aW5nX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZwZW5kaW5nX3JlcS0+dXJiX2xp c3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0dWItPnN1Ym1pdHRpbmdfbG9jaywg ZmxhZ3MpOworfQorCit2b2lkIHVzYmJrX3VubGlua191cmJzKHN0cnVjdCB1c2JzdHViICpz dHViKQoreworCXBlbmRpbmdfcmVxX3QgKnJlcSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0dWItPnN1Ym1pdHRpbmdfbG9jaywgZmxh Z3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJnN0dWItPnN1Ym1p dHRpbmdfbGlzdCwgdXJiX2xpc3QpIHsKKwkJdXNiX3VubGlua191cmIocmVxLT51cmIpOwor CX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHViLT5zdWJtaXR0aW5nX2xvY2ssIGZs YWdzKTsKK30KKworc3RhdGljIHZvaWQgZmFzdF9mbHVzaF9hcmVhKHBlbmRpbmdfcmVxX3Qg KnBlbmRpbmdfcmVxKQoreworCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIHVubWFw W1VTQklGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVF07CisJdW5zaWduZWQgaW50IGksIG5y X3NlZ3MsIGludmNvdW50ID0gMDsKKwlncmFudF9oYW5kbGVfdCBoYW5kbGU7CisJaW50IHJl dDsKKworCW5yX3NlZ3MgPSBwZW5kaW5nX3JlcS0+bnJfYnVmZmVyX3NlZ3MgKyBwZW5kaW5n X3JlcS0+bnJfZXh0cmFfc2VnczsKKworCWlmIChucl9zZWdzKSB7CisJCWZvciAoaSA9IDA7 IGkgPCBucl9zZWdzOyBpKyspIHsKKwkJCWhhbmRsZSA9IHBlbmRpbmdfaGFuZGxlKHBlbmRp bmdfcmVxLCBpKTsKKwkJCWlmIChoYW5kbGUgPT0gVVNCQkFDS19JTlZBTElEX0hBTkRMRSkK KwkJCQljb250aW51ZTsKKwkJCWdudHRhYl9zZXRfdW5tYXBfb3AoJnVubWFwW2ludmNvdW50 XSwgdmFkZHIocGVuZGluZ19yZXEsIGkpLAorCQkJCQkgICAgR05UTUFQX2hvc3RfbWFwLCBo YW5kbGUpOworCQkJcGVuZGluZ19oYW5kbGUocGVuZGluZ19yZXEsIGkpID0gVVNCQkFDS19J TlZBTElEX0hBTkRMRTsKKwkJCWludmNvdW50Kys7CisJCX0KKworCQlyZXQgPSBIWVBFUlZJ U09SX2dyYW50X3RhYmxlX29wKAorCQkJR05UVEFCT1BfdW5tYXBfZ3JhbnRfcmVmLCB1bm1h cCwgaW52Y291bnQpOworCQlCVUdfT04ocmV0KTsKKworCQlrZnJlZShwZW5kaW5nX3JlcS0+ c2VnKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfYnVmZl90b19w YWdlcyh2b2lkICpidWZmLCBwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSwKKwkJaW50IHN0 YXJ0LCBpbnQgbnJfcGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBjb3BpZWQgPSAwOworCWlu dCBpOworCisJZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIG5yX3BhZ2VzOyBpKyspIHsK KwkJbWVtY3B5KCh2b2lkICopIHZhZGRyKHBlbmRpbmdfcmVxLCBpKSArIHBlbmRpbmdfcmVx LT5zZWdbaV0ub2Zmc2V0LAorCQkJYnVmZiArIGNvcGllZCwKKwkJCXBlbmRpbmdfcmVxLT5z ZWdbaV0ubGVuZ3RoKTsKKwkJY29waWVkICs9IHBlbmRpbmdfcmVxLT5zZWdbaV0ubGVuZ3Ro OworCX0KK30KKworc3RhdGljIHZvaWQgY29weV9wYWdlc190b19idWZmKHZvaWQgKmJ1ZmYs IHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxLAorCQlpbnQgc3RhcnQsIGludCBucl9wYWdl cykKK3sKKwl1bnNpZ25lZCBsb25nIGNvcGllZCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkg PSBzdGFydDsgaSA8IHN0YXJ0ICsgbnJfcGFnZXM7IGkrKykgeworCQltZW1jcHkoYnVmZiAr IGNvcGllZCwKKwkJCSh2b2lkICopIHZhZGRyKHBlbmRpbmdfcmVxLCBpKSArIHBlbmRpbmdf cmVxLT5zZWdbaV0ub2Zmc2V0LAorCQkJcGVuZGluZ19yZXEtPnNlZ1tpXS5sZW5ndGgpOwor CQljb3BpZWQgKz0gcGVuZGluZ19yZXEtPnNlZ1tpXS5sZW5ndGg7CisJfQorfQorCitzdGF0 aWMgaW50IHVzYmJrX2FsbG9jX3VyYih1c2JpZl9yZXF1ZXN0X3QgKnJlcSwgcGVuZGluZ19y ZXFfdCAqcGVuZGluZ19yZXEpCit7CisJaW50IHJldDsKKworCWlmICh1c2JfcGlwZWlzb2Mo cmVxLT5waXBlKSkKKwkJcGVuZGluZ19yZXEtPnVyYiA9IHVzYl9hbGxvY191cmIocmVxLT51 Lmlzb2MubnVtYmVyX29mX3BhY2tldHMsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJcGVuZGlu Z19yZXEtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZW5k aW5nX3JlcS0+dXJiKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYmFjazogY2FuJ3QgYWxs b2MgdXJiXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWlm IChyZXEtPmJ1ZmZlcl9sZW5ndGgpIHsKKwkJcGVuZGluZ19yZXEtPmJ1ZmZlciA9IHVzYl9i dWZmZXJfYWxsb2MocGVuZGluZ19yZXEtPnN0dWItPnVkZXYsCisJCQkJcmVxLT5idWZmZXJf bGVuZ3RoLCBHRlBfS0VSTkVMLAorCQkJCSZwZW5kaW5nX3JlcS0+dHJhbnNmZXJfZG1hKTsK KwkJaWYgKCFwZW5kaW5nX3JlcS0+YnVmZmVyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVz YmJhY2s6IGNhbid0IGFsbG9jIHVyYiBidWZmZXJcbiIpOworCQkJcmV0ID0gLUVOT01FTTsK KwkJCWdvdG8gZmFpbF9mcmVlX3VyYjsKKwkJfQorCX0KKworCWlmICh1c2JfcGlwZWNvbnRy b2wocmVxLT5waXBlKSkgeworCQlwZW5kaW5nX3JlcS0+c2V0dXAgPSB1c2JfYnVmZmVyX2Fs bG9jKHBlbmRpbmdfcmVxLT5zdHViLT51ZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2N0 cmxyZXF1ZXN0KSwgR0ZQX0tFUk5FTCwKKwkJCQkmcGVuZGluZ19yZXEtPnNldHVwX2RtYSk7 CisJCWlmICghcGVuZGluZ19yZXEtPnNldHVwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVz YmJhY2s6IGNhbid0IGFsbG9jIHVzYl9jdHJscmVxdWVzdFxuIik7CisJCQlyZXQgPSAtRU5P TUVNOworCQkJZ290byBmYWlsX2ZyZWVfYnVmZmVyOworCQl9CisJfQorCisJcmV0dXJuIDA7 CisKK2ZhaWxfZnJlZV9idWZmZXI6CisJaWYgKHJlcS0+YnVmZmVyX2xlbmd0aCkKKwkJdXNi X2J1ZmZlcl9mcmVlKHBlbmRpbmdfcmVxLT5zdHViLT51ZGV2LCByZXEtPmJ1ZmZlcl9sZW5n dGgsCisJCQkJcGVuZGluZ19yZXEtPmJ1ZmZlciwgcGVuZGluZ19yZXEtPnRyYW5zZmVyX2Rt YSk7CitmYWlsX2ZyZWVfdXJiOgorCXVzYl9mcmVlX3VyYihwZW5kaW5nX3JlcS0+dXJiKTsK K2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdXNiYmtfZnJlZV91cmIo c3RydWN0IHVyYiAqdXJiKQoreworCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkK KwkJdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LCBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVx dWVzdCksCisJCQkJdXJiLT5zZXR1cF9wYWNrZXQsIHVyYi0+c2V0dXBfZG1hKTsKKwlpZiAo dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQl1c2JfYnVmZmVyX2ZyZWUodXJiLT5k ZXYsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQl1cmItPnRyYW5zZmVyX2J1 ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOworCWJhcnJpZXIoKTsKKwl1c2JfZnJlZV91cmIo dXJiKTsKK30KKworc3RhdGljIHZvaWQgdXNiYmtfbm90aWZ5X3dvcmsodXNiaWZfdCAqdXNi aWYpCit7CisJdXNiaWYtPndhaXRpbmdfcmVxcyA9IDE7CisJd2FrZV91cCgmdXNiaWYtPndx KTsKK30KKworaXJxcmV0dXJuX3QgdXNiYmtfYmVfaW50KGludCBpcnEsIHZvaWQgKmRldl9p ZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdXNiYmtfbm90aWZ5X3dvcmsoZGV2X2lk KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmJrX2RvX3Jl c3BvbnNlKHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxLCBpbnQzMl90IHN0YXR1cywKKwkJ CQkJaW50MzJfdCBhY3R1YWxfbGVuZ3RoLCBpbnQzMl90IGVycm9yX2NvdW50LCB1aW50MTZf dCBzdGFydF9mcmFtZSkKK3sKKwl1c2JpZl90ICp1c2JpZiA9IHBlbmRpbmdfcmVxLT51c2Jp ZjsKKwl1c2JpZl9yZXNwb25zZV90ICpyaW5nX3JlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCWludCBub3RpZnk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaWYtPnJpbmdfbG9j aywgZmxhZ3MpOworCXJpbmdfcmVzID0gUklOR19HRVRfUkVTUE9OU0UoJnVzYmlmLT5yaW5n LCB1c2JpZi0+cmluZy5yc3BfcHJvZF9wdnQpOworCXJpbmdfcmVzLT5pZCA9IHBlbmRpbmdf cmVxLT5pZDsKKwlyaW5nX3Jlcy0+c3RhdHVzID0gc3RhdHVzOworCXJpbmdfcmVzLT5hY3R1 YWxfbGVuZ3RoID0gYWN0dWFsX2xlbmd0aDsKKwlyaW5nX3Jlcy0+ZXJyb3JfY291bnQgPSBl cnJvcl9jb3VudDsKKwlyaW5nX3Jlcy0+c3RhcnRfZnJhbWUgPSBzdGFydF9mcmFtZTsKKwl1 c2JpZi0+cmluZy5yc3BfcHJvZF9wdnQrKzsKKwliYXJyaWVyKCk7CisJUklOR19QVVNIX1JF U1BPTlNFU19BTkRfQ0hFQ0tfTk9USUZZKCZ1c2JpZi0+cmluZywgbm90aWZ5KTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZ1c2JpZi0+cmluZ19sb2NrLCBmbGFncyk7CisKKwlpZiAo bm90aWZ5KQorCQlub3RpZnlfcmVtb3RlX3ZpYV9pcnEodXNiaWYtPmlycSk7Cit9CisKK3N0 YXRpYyB2b2lkIHVzYmJrX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBw dF9yZWdzICpyZWdzKQoreworCXBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxID0gKHBlbmRp bmdfcmVxX3QgKil1cmItPmNvbnRleHQ7CisKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUp ICYmIHVyYi0+c3RhdHVzID09IDAgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkKKwkJY29w eV9idWZmX3RvX3BhZ2VzKHBlbmRpbmdfcmVxLT5idWZmZXIsIHBlbmRpbmdfcmVxLAorCQkJ CQkwLCBwZW5kaW5nX3JlcS0+bnJfYnVmZmVyX3NlZ3MpOworCisJaWYgKHVzYl9waXBlaXNv Yyh1cmItPnBpcGUpKQorCQljb3B5X2J1ZmZfdG9fcGFnZXMoJnVyYi0+aXNvX2ZyYW1lX2Rl c2NbMF0sIHBlbmRpbmdfcmVxLAorCQkJCQlwZW5kaW5nX3JlcS0+bnJfYnVmZmVyX3NlZ3Ms IHBlbmRpbmdfcmVxLT5ucl9leHRyYV9zZWdzKTsKKworCWJhcnJpZXIoKTsKKworCWZhc3Rf Zmx1c2hfYXJlYShwZW5kaW5nX3JlcSk7CisKKwl1c2Jia19kb19yZXNwb25zZShwZW5kaW5n X3JlcSwgdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCQkJdXJiLT5lcnJv cl9jb3VudCwgdXJiLT5zdGFydF9mcmFtZSk7CisKKwlyZW1vdmVfcmVxX2Zyb21fc3VibWl0 dGluZ19saXN0KHBlbmRpbmdfcmVxLT5zdHViLCBwZW5kaW5nX3JlcSk7CisKKwliYXJyaWVy KCk7CisJdXNiYmtfZnJlZV91cmIodXJiKTsKKwl1c2JpZl9wdXQocGVuZGluZ19yZXEtPnVz YmlmKTsKKwlmcmVlX3JlcShwZW5kaW5nX3JlcSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiYmtf Z250dGFiX21hcCh1c2JpZl90ICp1c2JpZiwKKwkJCXVzYmlmX3JlcXVlc3RfdCAqcmVxLCBw ZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSkKK3sKKwlpbnQgaSwgcmV0OworCXVuc2lnbmVk IGludCBucl9zZWdzOworCXVpbnQzMl90IGZsYWdzOworCXN0cnVjdCBnbnR0YWJfbWFwX2dy YW50X3JlZiBtYXBbVVNCSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUXTsKKworCW5yX3Nl Z3MgPSBwZW5kaW5nX3JlcS0+bnJfYnVmZmVyX3NlZ3MgKyBwZW5kaW5nX3JlcS0+bnJfZXh0 cmFfc2VnczsKKworCWlmIChucl9zZWdzID4gVVNCSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFV RVNUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQmFkIG51bWJlciBvZiBzZWdtZW50cyBpbiBy ZXF1ZXN0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworCWlm IChucl9zZWdzKSB7CisJCXBlbmRpbmdfcmVxLT5zZWcgPSBrbWFsbG9jKHNpemVvZihzdHJ1 Y3QgcGVuZGluZ19yZXFfc2VnbWVudCkKKwkJCQkqIG5yX3NlZ3MsIEdGUF9LRVJORUwpOwor CQlpZiAoIXBlbmRpbmdfcmVxLT5zZWcpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3Rv IGZhaWw7CisJCX0KKworCQlpZiAocGVuZGluZ19yZXEtPm5yX2J1ZmZlcl9zZWdzKSB7CisJ CQlmbGFncyA9IEdOVE1BUF9ob3N0X21hcDsKKwkJCWlmICh1c2JfcGlwZW91dChyZXEtPnBp cGUpKQorCQkJCWZsYWdzIHw9IEdOVE1BUF9yZWFkb25seTsKKwkJCWZvciAoaSA9IDA7IGkg PCBwZW5kaW5nX3JlcS0+bnJfYnVmZmVyX3NlZ3M7IGkrKykKKwkJCQlnbnR0YWJfc2V0X21h cF9vcCgmbWFwW2ldLCB2YWRkcigKKwkJCQkJCXBlbmRpbmdfcmVxLCBpKSwgZmxhZ3MsCisJ CQkJCQlyZXEtPnNlZ1tpXS5ncmVmLAorCQkJCQkJdXNiaWYtPmRvbWlkKTsKKwkJfQorCisJ CWlmIChwZW5kaW5nX3JlcS0+bnJfZXh0cmFfc2VncykgeworCQkJZmxhZ3MgPSBHTlRNQVBf aG9zdF9tYXA7CisJCQlmb3IgKGkgPSByZXEtPm5yX2J1ZmZlcl9zZWdzOyBpIDwgbnJfc2Vn czsgaSsrKQorCQkJCWdudHRhYl9zZXRfbWFwX29wKCZtYXBbaV0sIHZhZGRyKAorCQkJCQkJ cGVuZGluZ19yZXEsIGkpLCBmbGFncywKKwkJCQkJCXJlcS0+c2VnW2ldLmdyZWYsCisJCQkJ CQl1c2JpZi0+ZG9taWQpOworCQl9CisKKwkJcmV0ID0gSFlQRVJWSVNPUl9ncmFudF90YWJs ZV9vcChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLAorCQkJCQltYXAsIG5yX3NlZ3MpOworCQlC VUdfT04ocmV0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnJfc2VnczsgaSsrKSB7CisJCQlp ZiAodW5saWtlbHkobWFwW2ldLnN0YXR1cyAhPSAwKSkgeworCQkJCXByaW50ayhLRVJOX0VS UiAidXNiYmFjazogaW52YWxpZCBidWZmZXIgLS0gY291bGQgbm90IHJlbWFwIGl0XG4iKTsK KwkJCQltYXBbaV0uaGFuZGxlID0gVVNCQkFDS19JTlZBTElEX0hBTkRMRTsKKwkJCQlyZXQg fD0gMTsKKwkJCX0KKworCQkJcGVuZGluZ19oYW5kbGUocGVuZGluZ19yZXEsIGkpID0gbWFw W2ldLmhhbmRsZTsKKworCQkJaWYgKHJldCkKKwkJCQljb250aW51ZTsKKworCQkJc2V0X3Bo eXNfdG9fbWFjaGluZShfX3BhKHZhZGRyKAorCQkJCXBlbmRpbmdfcmVxLCBpKSkgPj4gUEFH RV9TSElGVCwKKwkJCQlGT1JFSUdOX0ZSQU1FKG1hcFtpXS5kZXZfYnVzX2FkZHIgPj4gUEFH RV9TSElGVCkpOworCisJCQlwZW5kaW5nX3JlcS0+c2VnW2ldLm9mZnNldCA9IHJlcS0+c2Vn W2ldLm9mZnNldDsKKwkJCXBlbmRpbmdfcmVxLT5zZWdbaV0ubGVuZ3RoID0gcmVxLT5zZWdb aV0ubGVuZ3RoOworCisJCQliYXJyaWVyKCk7CisKKwkJCWlmIChwZW5kaW5nX3JlcS0+c2Vn W2ldLm9mZnNldCA+PSBQQUdFX1NJWkUgfHwKKwkJCQkJcGVuZGluZ19yZXEtPnNlZ1tpXS5s ZW5ndGggPiBQQUdFX1NJWkUgfHwKKwkJCQkJcGVuZGluZ19yZXEtPnNlZ1tpXS5vZmZzZXQg KyBwZW5kaW5nX3JlcS0+c2VnW2ldLmxlbmd0aCA+IFBBR0VfU0laRSkKKwkJCQkJcmV0IHw9 IDE7CisJCX0KKworCQlpZiAocmV0KQorCQkJZ290byBmYWlsX2ZsdXNoOworCX0KKworCXJl dHVybiAwOworCitmYWlsX2ZsdXNoOgorCWZhc3RfZmx1c2hfYXJlYShwZW5kaW5nX3JlcSk7 CisJcmV0ID0gLUVOT01FTTsKKworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZCB1c2Jia19pbml0X3VyYih1c2JpZl9yZXF1ZXN0X3QgKnJlcSwgcGVuZGluZ19yZXFf dCAqcGVuZGluZ19yZXEpCit7CisJdW5zaWduZWQgaW50IHBpcGU7CisJc3RydWN0IHVzYl9k ZXZpY2UgKnVkZXYgPSBwZW5kaW5nX3JlcS0+c3R1Yi0+dWRldjsKKwlzdHJ1Y3QgdXJiICp1 cmIgPSBwZW5kaW5nX3JlcS0+dXJiOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUocmVxLT5w aXBlKSkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJaWYgKHVzYl9waXBlaW4ocmVx LT5waXBlKSkKKwkJCXBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgdXNiX3BpcGVlbmRw b2ludChyZXEtPnBpcGUpKTsKKwkJZWxzZQorCQkJcGlwZSA9IHVzYl9zbmRpc29jcGlwZSh1 ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHJlcS0+cGlwZSkpOworCisJCXVyYi0+ZGV2ID0gdWRl djsKKwkJdXJiLT5waXBlID0gcGlwZTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IHJlcS0+ dHJhbnNmZXJfZmxhZ3M7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0lTT19BU0FQ OworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBlbmRpbmdfcmVxLT5idWZmZXI7CisJCXVy Yi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHJlcS0+YnVmZmVyX2xlbmd0aDsKKwkJdXJi LT5jb21wbGV0ZSA9IHVzYmJrX3VyYl9jb21wbGV0ZTsKKwkJdXJiLT5jb250ZXh0ID0gcGVu ZGluZ19yZXE7CisJCXVyYi0+aW50ZXJ2YWwgPSByZXEtPnUuaXNvYy5pbnRlcnZhbDsKKwkJ dXJiLT5zdGFydF9mcmFtZSA9IHJlcS0+dS5pc29jLnN0YXJ0X2ZyYW1lOworCQl1cmItPm51 bWJlcl9vZl9wYWNrZXRzID0gcmVxLT51Lmlzb2MubnVtYmVyX29mX3BhY2tldHM7CisKKwkJ YnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJaWYgKHVzYl9waXBlaW4ocmVxLT5w aXBlKSkKKwkJCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCB1c2JfcGlwZWVuZHBvaW50 KHJlcS0+cGlwZSkpOworCQllbHNlCisJCQlwaXBlID0gdXNiX3NuZGludHBpcGUodWRldiwg dXNiX3BpcGVlbmRwb2ludChyZXEtPnBpcGUpKTsKKworCQl1c2JfZmlsbF9pbnRfdXJiKHVy YiwgdWRldiwgcGlwZSwKKwkJCQlwZW5kaW5nX3JlcS0+YnVmZmVyLCByZXEtPmJ1ZmZlcl9s ZW5ndGgsCisJCQkJdXNiYmtfdXJiX2NvbXBsZXRlLAorCQkJCXBlbmRpbmdfcmVxLCByZXEt PnUuaW50ci5pbnRlcnZhbCk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSByZXEtPnRyYW5z ZmVyX2ZsYWdzOworCisJCWJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgorCQlpZiAodXNi X3BpcGVpbihyZXEtPnBpcGUpKQorCQkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAw KTsKKwkJZWxzZQorCQkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKTsKKworCQl1 c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIHVkZXYsIHBpcGUsCisJCQkJKHVuc2lnbmVkIGNo YXIgKikgcGVuZGluZ19yZXEtPnNldHVwLAorCQkJCXBlbmRpbmdfcmVxLT5idWZmZXIsIHJl cS0+YnVmZmVyX2xlbmd0aCwKKwkJCQl1c2Jia191cmJfY29tcGxldGUsIHBlbmRpbmdfcmVx KTsKKwkJbWVtY3B5KHBlbmRpbmdfcmVxLT5zZXR1cCwgcmVxLT51LmN0cmwsIDgpOworCQl1 cmItPnNldHVwX2RtYSA9IHBlbmRpbmdfcmVxLT5zZXR1cF9kbWE7CisJCXVyYi0+dHJhbnNm ZXJfZmxhZ3MgPSByZXEtPnRyYW5zZmVyX2ZsYWdzOworCQl1cmItPnRyYW5zZmVyX2ZsYWdz IHw9IFVSQl9OT19TRVRVUF9ETUFfTUFQOworCisJCWJyZWFrOworCWNhc2UgUElQRV9CVUxL OgorCQlpZiAodXNiX3BpcGVpbihyZXEtPnBpcGUpKQorCQkJcGlwZSA9IHVzYl9yY3ZidWxr cGlwZSh1ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHJlcS0+cGlwZSkpOworCQllbHNlCisJCQlw aXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIHVzYl9waXBlZW5kcG9pbnQocmVxLT5waXBl KSk7CisKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1ZGV2LCBwaXBlLAorCQkJCXBlbmRp bmdfcmVxLT5idWZmZXIsIHJlcS0+YnVmZmVyX2xlbmd0aCwKKwkJCQl1c2Jia191cmJfY29t cGxldGUsIHBlbmRpbmdfcmVxKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IHJlcS0+dHJh bnNmZXJfZmxhZ3M7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJ aWYgKHJlcS0+YnVmZmVyX2xlbmd0aCkgeworCQl1cmItPnRyYW5zZmVyX2RtYSA9IHBlbmRp bmdfcmVxLT50cmFuc2Zlcl9kbWE7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05P X1RSQU5TRkVSX0RNQV9NQVA7CisJfQorfQorCitzdHJ1Y3Qgc2V0X2ludGVyZmFjZV9yZXF1 ZXN0IHsKKwlwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcTsKKwlpbnQgaW50ZXJmYWNlOwor CWludCBhbHRlcm5hdGU7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9OworCitzdGF0 aWMgdm9pZCB1c2Jia19zZXRfaW50ZXJmYWNlX3dvcmsodm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3Qgc2V0X2ludGVyZmFjZV9yZXF1ZXN0ICpyZXEgPSAoc3RydWN0IHNldF9pbnRlcmZhY2Vf cmVxdWVzdCAqKSBkYXRhOworCXBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxID0gcmVxLT5w ZW5kaW5nX3JlcTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHJlcS0+cGVuZGluZ19y ZXEtPnN0dWItPnVkZXY7CisKKwlpbnQgcmV0OworCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYp OworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIHJlcS0+aW50ZXJmYWNlLCByZXEt PmFsdGVybmF0ZSk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisJdXNiX3B1dF9kZXYo dWRldik7CisKKwl1c2Jia19kb19yZXNwb25zZShwZW5kaW5nX3JlcSwgcmV0LCAwLCAwLCAw KTsKKwl1c2JpZl9wdXQocGVuZGluZ19yZXEtPnVzYmlmKTsKKwlmcmVlX3JlcShwZW5kaW5n X3JlcSk7CisJa2ZyZWUocmVxKTsKK30KKworc3RhdGljIGludCB1c2Jia19zZXRfaW50ZXJm YWNlKHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxLCBpbnQgaW50ZXJmYWNlLCBpbnQgYWx0 ZXJuYXRlKQoreworCXN0cnVjdCBzZXRfaW50ZXJmYWNlX3JlcXVlc3QgKnJlcTsKKwlzdHJ1 Y3QgdXNiX2RldmljZSAqdWRldiA9IHBlbmRpbmdfcmVxLT5zdHViLT51ZGV2OworCisJcmVx ID0ga21hbGxvYyhzaXplb2YoKnJlcSksIEdGUF9LRVJORUwpOworCWlmICghcmVxKQorCQly ZXR1cm4gLUVOT01FTTsKKwlyZXEtPnBlbmRpbmdfcmVxID0gcGVuZGluZ19yZXE7CisJcmVx LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJcmVxLT5hbHRlcm5hdGUgPSBhbHRlcm5hdGU7 CisJSU5JVF9XT1JLKCZyZXEtPndvcmssIHVzYmJrX3NldF9pbnRlcmZhY2Vfd29yaywgcmVx KTsKKwl1c2JfZ2V0X2Rldih1ZGV2KTsKKwlzY2hlZHVsZV93b3JrKCZyZXEtPndvcmspOwor CXJldHVybiAwOworfQorCitzdHJ1Y3QgY2xlYXJfaGFsdF9yZXF1ZXN0IHsKKwlwZW5kaW5n X3JlcV90ICpwZW5kaW5nX3JlcTsKKwlpbnQgcGlwZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg d29yazsKK307CisKK3N0YXRpYyB2b2lkIHVzYmJrX2NsZWFyX2hhbHRfd29yayh2b2lkICpk YXRhKQoreworCXN0cnVjdCBjbGVhcl9oYWx0X3JlcXVlc3QgKnJlcSA9IChzdHJ1Y3QgY2xl YXJfaGFsdF9yZXF1ZXN0ICopIGRhdGE7CisJcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEg PSByZXEtPnBlbmRpbmdfcmVxOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcmVxLT5w ZW5kaW5nX3JlcS0+c3R1Yi0+dWRldjsKKwlpbnQgcmV0OworCisJdXNiX2xvY2tfZGV2aWNl KHVkZXYpOworCXJldCA9IHVzYl9jbGVhcl9oYWx0KHJlcS0+cGVuZGluZ19yZXEtPnN0dWIt PnVkZXYsIHJlcS0+cGlwZSk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisJdXNiX3B1 dF9kZXYodWRldik7CisKKwl1c2Jia19kb19yZXNwb25zZShwZW5kaW5nX3JlcSwgcmV0LCAw LCAwLCAwKTsKKwl1c2JpZl9wdXQocGVuZGluZ19yZXEtPnVzYmlmKTsKKwlmcmVlX3JlcShw ZW5kaW5nX3JlcSk7CisJa2ZyZWUocmVxKTsKK30KKworc3RhdGljIGludCB1c2Jia19jbGVh cl9oYWx0KHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxLCBpbnQgcGlwZSkKK3sKKwlzdHJ1 Y3QgY2xlYXJfaGFsdF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYg PSBwZW5kaW5nX3JlcS0+c3R1Yi0+dWRldjsKKworCXJlcSA9IGttYWxsb2Moc2l6ZW9mKCpy ZXEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmVx LT5wZW5kaW5nX3JlcSA9IHBlbmRpbmdfcmVxOworCXJlcS0+cGlwZSA9IHBpcGU7CisJSU5J VF9XT1JLKCZyZXEtPndvcmssIHVzYmJrX2NsZWFyX2hhbHRfd29yaywgcmVxKTsKKworCXVz Yl9nZXRfZGV2KHVkZXYpOworCXNjaGVkdWxlX3dvcmsoJnJlcS0+d29yayk7CisJcmV0dXJu IDA7Cit9CisKKyNpZiAwCitzdHJ1Y3QgcG9ydF9yZXNldF9yZXF1ZXN0IHsKKwlwZW5kaW5n X3JlcV90ICpwZW5kaW5nX3JlcTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKK307CisK K3N0YXRpYyB2b2lkIHVzYmJrX3BvcnRfcmVzZXRfd29yayh2b2lkICpkYXRhKQoreworCXN0 cnVjdCBwb3J0X3Jlc2V0X3JlcXVlc3QgKnJlcSA9IChzdHJ1Y3QgcG9ydF9yZXNldF9yZXF1 ZXN0ICopIGRhdGE7CisJcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEgPSByZXEtPnBlbmRp bmdfcmVxOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcGVuZGluZ19yZXEtPnN0dWIt PnVkZXY7CisJaW50IHJldCwgcmV0X2xvY2s7CisKKwlyZXQgPSByZXRfbG9jayA9IHVzYl9s b2NrX2RldmljZV9mb3JfcmVzZXQodWRldiwgTlVMTCk7CisJaWYgKHJldF9sb2NrID49IDAp IHsKKwkJcmV0ID0gdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKwkJaWYgKHJldF9sb2NrKQor CQkJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisJfQorCXVzYl9wdXRfZGV2KHVkZXYpOwor CisJdXNiYmtfZG9fcmVzcG9uc2UocGVuZGluZ19yZXEsIHJldCwgMCwgMCwgMCk7CisJdXNi aWZfcHV0KHBlbmRpbmdfcmVxLT51c2JpZik7CisJZnJlZV9yZXEocGVuZGluZ19yZXEpOwor CWtmcmVlKHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiYmtfcG9ydF9yZXNldChwZW5kaW5n X3JlcV90ICpwZW5kaW5nX3JlcSkKK3sKKwlzdHJ1Y3QgcG9ydF9yZXNldF9yZXF1ZXN0ICpy ZXE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwZW5kaW5nX3JlcS0+c3R1Yi0+dWRl djsKKworCXJlcSA9IGttYWxsb2Moc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXEtPnBlbmRpbmdfcmVxID0gcGVuZGlu Z19yZXE7CisJSU5JVF9XT1JLKCZyZXEtPndvcmssIHVzYmJrX3BvcnRfcmVzZXRfd29yaywg cmVxKTsKKworCXVzYl9nZXRfZGV2KHVkZXYpOworCXNjaGVkdWxlX3dvcmsoJnJlcS0+d29y ayk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNiYmtfc2V0X2Fk ZHJlc3ModXNiaWZfdCAqdXNiaWYsIHN0cnVjdCB1c2JzdHViICpzdHViLCBpbnQgY3VyX2Fk ZHIsIGludCBuZXdfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJnVzYmlmLT5hZGRyX2xvY2ssIGZsYWdzKTsKKwlpZiAoY3VyX2FkZHIp CisJCXVzYmlmLT5hZGRyX3RhYmxlW2N1cl9hZGRyXSA9IE5VTEw7CisJaWYgKG5ld19hZGRy KQorCQl1c2JpZi0+YWRkcl90YWJsZVtuZXdfYWRkcl0gPSBzdHViOworCXN0dWItPmFkZHIg PSBuZXdfYWRkcjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JpZi0+YWRkcl9sb2Nr LCBmbGFncyk7Cit9CisKK3N0cnVjdCB1c2JzdHViICpmaW5kX2F0dGFjaGVkX2RldmljZSh1 c2JpZl90ICp1c2JpZiwgaW50IHBvcnRudW0pCit7CisJc3RydWN0IHVzYnN0dWIgKnN0dWI7 CisJaW50IGZvdW5kID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJnVzYmlmLT5wbHVnX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHN0dWIsICZ1c2JpZi0+cGx1Z2dlZF9kZXZpY2VzLCBwbHVnZ2VkX2xpc3QpIHsKKwkJ aWYgKHN0dWItPmlkLT5wb3J0bnVtID09IHBvcnRudW0pIHsKKwkJCWZvdW5kID0gMTsKKwkJ CWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmlmLT5wbHVn X2xvY2ssIGZsYWdzKTsKKworCWlmIChmb3VuZCkKKwkJcmV0dXJuIHN0dWI7CisKKwlyZXR1 cm4gTlVMTDsKK30KKworc3RhdGljIGludCBjaGVja19hbmRfc3VibWl0X3NwZWNpYWxfY3Ry bHJlcSh1c2JpZl90ICp1c2JpZiwgdXNiaWZfcmVxdWVzdF90ICpyZXEsIHBlbmRpbmdfcmVx X3QgKnBlbmRpbmdfcmVxKQoreworCWludCBkZXZudW07CisJc3RydWN0IHVzYnN0dWIgKnN0 dWIgPSBOVUxMOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwgPSAoc3RydWN0IHVz Yl9jdHJscmVxdWVzdCAqKSByZXEtPnUuY3RybDsKKwlpbnQgcmV0OworCWludCBkb25lID0g MDsKKworCWRldm51bSA9IHVzYl9waXBlZGV2aWNlKHJlcS0+cGlwZSk7CisKKwkvKgorCSAq IFdoZW4gdGhlIGRldmljZSBpcyBmaXJzdCBjb25uZWN0ZWQgb3IgcmVzZXRlZCwgVVNCIGRl dmljZSBoYXMgbm8gYWRkcmVzcy4KKwkgKiBJbiB0aGlzIGluaXRpYWwgc3RhdGUsIGZvbGxv d2luZyByZXF1ZXN0cyBhcmUgc2VuZCB0byBkZXZpY2UgYWRkcmVzcyAoIzApLAorCSAqCisJ ICogIDEuIEdFVF9ERVNDUklQVE9SICh3aXRoIERlc2NyaXB0b3IgVHlwZSBpcyAiREVWSUNF IikgaXMgc2VuZCwKKwkgKiAgICAgYW5kIE9TIGtub3dzIHdoYXQgZGV2aWNlIGlzIGNvbm5l Y3RlZCB0by4KKwkgKgorCSAqICAyLiBTRVRfQUREUkVTUyBpcyBzZW5kLCBhbmQgdGhlbiwg ZGV2aWNlIGhhcyBpdHMgYWRkcmVzcy4KKwkgKgorCSAqIEluIHRoZSBuZXh0IHN0ZXAsIFNF VF9DT05GSUdVUkFUSU9OIGlzIHNlbmQgdG8gYWRkcmVzc2VkIGRldmljZSwgYW5kIHRoZW4s CisJICogdGhlIGRldmljZSBpcyBmaW5hbGx5IHJlYWR5IHRvIHVzZS4KKwkgKi8KKwlpZiAo dW5saWtlbHkoZGV2bnVtID09IDApKSB7CisJCXN0dWIgPSBmaW5kX2F0dGFjaGVkX2Rldmlj ZSh1c2JpZiwgdXNiaWZfcGlwZXBvcnRudW0ocmVxLT5waXBlKSk7CisJCWlmICh1bmxpa2Vs eSghc3R1YikpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWxfcmVzcG9uc2U7 CisJCX0KKworCQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9H RVRfREVTQ1JJUFRPUjoKKwkJCS8qCisJCQkgKiBHRVRfREVTQ1JJUFRPUiByZXF1ZXN0IHRv IGRldmljZSAjMC4KKwkJCSAqIHRocm91Z2ggdG8gbm9ybWFsIHVyYiB0cmFuc2Zlci4KKwkJ CSAqLworCQkJcGVuZGluZ19yZXEtPnN0dWIgPSBzdHViOworCQkJcmV0dXJuIDA7CisJCQli cmVhazsKKwkJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQkJLyoKKwkJCSAqIFNFVF9B RERSRVNTIHJlcXVlc3QgdG8gZGV2aWNlICMwLgorCQkJICogYWRkIGF0dGFjaGVkIGRldmlj ZSB0byBhZGRyX3RhYmxlLgorCQkJICovCisJCQl7CisJCQkJX191MTYgYWRkciA9IGxlMTZf dG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJCQkJdXNiYmtfc2V0X2FkZHJlc3ModXNiaWYsIHN0 dWIsIDAsIGFkZHIpOworCQkJfQorCQkJcmV0ID0gMDsKKwkJCWdvdG8gZmFpbF9yZXNwb25z ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8g ZmFpbF9yZXNwb25zZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseSghdXNiaWYt PmFkZHJfdGFibGVbZGV2bnVtXSkpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGZh aWxfcmVzcG9uc2U7CisJCX0KKwkJcGVuZGluZ19yZXEtPnN0dWIgPSB1c2JpZi0+YWRkcl90 YWJsZVtkZXZudW1dOworCX0KKworCS8qCisJICogQ2hlY2sgc3BlY2lhbCByZXF1ZXN0CisJ ICovCisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworCWNhc2UgVVNCX1JFUV9TRVRfQURE UkVTUzoKKwkJLyoKKwkJICogU0VUX0FERFJFU1MgcmVxdWVzdCB0byBhZGRyZXNzZWQgZGV2 aWNlLgorCQkgKiBjaGFuZ2UgYWRkciBvciByZW1vdmUgZnJvbSBhZGRyX3RhYmxlLgorCQkg Ki8KKwkJeworCQkJX191MTYgYWRkciA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJ CQl1c2Jia19zZXRfYWRkcmVzcyh1c2JpZiwgc3R1YiwgZGV2bnVtLCBhZGRyKTsKKwkJfQor CQlyZXQgPSAwOworCQlnb3RvIGZhaWxfcmVzcG9uc2U7CisJCWJyZWFrOworI2lmIDAKKwlj YXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCS8qCisJCSAqIGxpbnV4IDIuNi4y NyBvciBsYXRlciB2ZXJzaW9uIG9ubHkhCisJCSAqLworCQlpZiAoY3RybC0+UmVxdWVzdFR5 cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQkJX191MTYgY29uZmlnID0gbGUxNl90b19j cHUoY3RybC0+d1ZhbHVlKTsKKwkJCXVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24ocGVu ZGluZ19yZXEtPnN0dWItPnVkZXYsIGNvbmZpZyk7CisJCQlkb25lID0gMTsKKwkJfQorCQli cmVhazsKKyNlbmRpZgorCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlpZiAoY3Ry bC0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIHsKKwkJCV9fdTE2IGFs dCA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJCQlfX3UxNiBpbnRmID0gbGUxNl90 b19jcHUoY3RybC0+d0luZGV4KTsKKwkJCXVzYmJrX3NldF9pbnRlcmZhY2UocGVuZGluZ19y ZXEsIGludGYsIGFsdCk7CisJCQlkb25lID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFVT Ql9SRVFfQ0xFQVJfRkVBVFVSRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSA9PSBVU0Jf UkVDSVBfRU5EUE9JTlQKKwkJCSYmIGN0cmwtPndWYWx1ZSA9PSBVU0JfRU5EUE9JTlRfSEFM VCkgeworCQkJaW50IHBpcGU7CisJCQlpbnQgZXAgPSBsZTE2X3RvX2NwdShjdHJsLT53SW5k ZXgpICYgMHgwZjsKKwkJCWludCBkaXIgPSBsZTE2X3RvX2NwdShjdHJsLT53SW5kZXgpCisJ CQkJCSYgVVNCX0RJUl9JTjsKKwkJCWlmIChkaXIpCisJCQkJcGlwZSA9IHVzYl9yY3ZjdHJs cGlwZShwZW5kaW5nX3JlcS0+c3R1Yi0+dWRldiwgZXApOworCQkJZWxzZQorCQkJCXBpcGUg PSB1c2Jfc25kY3RybHBpcGUocGVuZGluZ19yZXEtPnN0dWItPnVkZXYsIGVwKTsKKwkJCXVz YmJrX2NsZWFyX2hhbHQocGVuZGluZ19yZXEsIHBpcGUpOworCQkJZG9uZSA9IDE7CisJCX0K KwkJYnJlYWs7CisjaWYgMCAvKiBub3QgdGVzdGVkIHlldCAqLworCWNhc2UgVVNCX1JFUV9T RVRfRkVBVFVSRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUlRfUE9SVCkg eworCQkJX191MTYgZmVhdCA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJCQlpZiAo ZmVhdCA9PSBVU0JfUE9SVF9GRUFUX1JFU0VUKSB7CisJCQkJdXNiYmtfcG9ydF9yZXNldChw ZW5kaW5nX3JlcSk7CisJCQkJZG9uZSA9IDE7CisJCQl9CisJCX0KKwkJYnJlYWs7CisjZW5k aWYKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZG9uZTsKKworZmFpbF9y ZXNwb25zZToKKwl1c2Jia19kb19yZXNwb25zZShwZW5kaW5nX3JlcSwgcmV0LCAwLCAwLCAw KTsKKwl1c2JpZl9wdXQodXNiaWYpOworCWZyZWVfcmVxKHBlbmRpbmdfcmVxKTsKKwlyZXR1 cm4gMTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hfcmVxdWVzdF90b19wZW5kaW5nX3Jl cXModXNiaWZfdCAqdXNiaWYsCisJCXVzYmlmX3JlcXVlc3RfdCAqcmVxLAorCQlwZW5kaW5n X3JlcV90ICpwZW5kaW5nX3JlcSkKK3sKKwlpbnQgcmV0OworCisJcGVuZGluZ19yZXEtPmlk ID0gcmVxLT5pZDsKKwlwZW5kaW5nX3JlcS0+dXNiaWYgPSB1c2JpZjsKKworCWJhcnJpZXIo KTsKKworCS8qCisJICogVE9ETzoKKwkgKiByZWNlaXZlIHVubGluayByZXF1ZXN0IGFuZCBj YW5jZWwgdGhlIHVyYiBpbiBiYWNrZW5kCisJICovCisjaWYgMAorCWlmICh1bmxpa2VseSh1 c2JfcGlwZXVubGluayhyZXEtPnBpcGUpKSkgeworCisJfQorI2VuZGlmCisKKwl1c2JpZl9n ZXQodXNiaWYpOworCisJaWYgKHVzYl9waXBlY29udHJvbChyZXEtPnBpcGUpKSB7CisJCWlm IChjaGVja19hbmRfc3VibWl0X3NwZWNpYWxfY3RybHJlcSh1c2JpZiwgcmVxLCBwZW5kaW5n X3JlcSkpCisJCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaW50IGRldm51bSA9IHVzYl9waXBl ZGV2aWNlKHJlcS0+cGlwZSk7CisJCWlmICh1bmxpa2VseSghdXNiaWYtPmFkZHJfdGFibGVb ZGV2bnVtXSkpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWxfcmVzcG9uc2U7 CisJCX0KKwkJcGVuZGluZ19yZXEtPnN0dWIgPSB1c2JpZi0+YWRkcl90YWJsZVtkZXZudW1d OworCX0KKworCWJhcnJpZXIoKTsKKworCXJldCA9IHVzYmJrX2FsbG9jX3VyYihyZXEsIHBl bmRpbmdfcmVxKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FU0hVVERPV047CisJCWdvdG8g ZmFpbF9yZXNwb25zZTsKKwl9CisKKwlhZGRfcmVxX3RvX3N1Ym1pdHRpbmdfbGlzdChwZW5k aW5nX3JlcS0+c3R1YiwgcGVuZGluZ19yZXEpOworCisJYmFycmllcigpOworCisJdXNiYmtf aW5pdF91cmIocmVxLCBwZW5kaW5nX3JlcSk7CisKKwliYXJyaWVyKCk7CisKKwlwZW5kaW5n X3JlcS0+bnJfYnVmZmVyX3NlZ3MgPSByZXEtPm5yX2J1ZmZlcl9zZWdzOworCWlmICh1c2Jf cGlwZWlzb2MocmVxLT5waXBlKSkKKwkJcGVuZGluZ19yZXEtPm5yX2V4dHJhX3NlZ3MgPSBy ZXEtPnUuaXNvYy5ucl9mcmFtZV9kZXNjX3NlZ3M7CisJZWxzZQorCQlwZW5kaW5nX3JlcS0+ bnJfZXh0cmFfc2VncyA9IDA7CisKKwliYXJyaWVyKCk7CisKKwlyZXQgPSB1c2Jia19nbnR0 YWJfbWFwKHVzYmlmLCByZXEsIHBlbmRpbmdfcmVxKTsKKwlpZiAocmV0KSB7CisJCXByaW50 ayhLRVJOX0VSUiAidXNiYmFjazogaW52YWxpZCBidWZmZXJcbiIpOworCQlyZXQgPSAtRVNI VVRET1dOOworCQlnb3RvIGZhaWxfZnJlZV91cmI7CisJfQorCisJYmFycmllcigpOworCisJ aWYgKHVzYl9waXBlb3V0KHJlcS0+cGlwZSkgJiYgcmVxLT5idWZmZXJfbGVuZ3RoKQorCQlj b3B5X3BhZ2VzX3RvX2J1ZmYocGVuZGluZ19yZXEtPmJ1ZmZlciwKKwkJCQkJcGVuZGluZ19y ZXEsCisJCQkJCTAsCisJCQkJCXBlbmRpbmdfcmVxLT5ucl9idWZmZXJfc2Vncyk7CisJaWYg KHVzYl9waXBlaXNvYyhyZXEtPnBpcGUpKSB7CisJCWNvcHlfcGFnZXNfdG9fYnVmZigmcGVu ZGluZ19yZXEtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbMF0sCisJCQlwZW5kaW5nX3JlcSwKKwkJ CXBlbmRpbmdfcmVxLT5ucl9idWZmZXJfc2VncywKKwkJCXBlbmRpbmdfcmVxLT5ucl9leHRy YV9zZWdzKTsKKwl9CisKKwliYXJyaWVyKCk7CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihw ZW5kaW5nX3JlcS0+dXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhL RVJOX0VSUiAidXNiYmFjazogZmFpbGVkIHN1Ym1pdHRpbmcgdXJiLCBlcnJvciAlZFxuIiwg cmV0KTsKKwkJcmV0ID0gLUVTSFVURE9XTjsKKwkJZ290byBmYWlsX2ZsdXNoX2FyZWE7CisJ fQorCXJldHVybjsKKworZmFpbF9mbHVzaF9hcmVhOgorCWZhc3RfZmx1c2hfYXJlYShwZW5k aW5nX3JlcSk7CitmYWlsX2ZyZWVfdXJiOgorCXJlbW92ZV9yZXFfZnJvbV9zdWJtaXR0aW5n X2xpc3QocGVuZGluZ19yZXEtPnN0dWIsIHBlbmRpbmdfcmVxKTsKKwliYXJyaWVyKCk7CisJ dXNiYmtfZnJlZV91cmIocGVuZGluZ19yZXEtPnVyYik7CitmYWlsX3Jlc3BvbnNlOgorCXVz YmJrX2RvX3Jlc3BvbnNlKHBlbmRpbmdfcmVxLCByZXQsIDAsIDAsIDApOworCXVzYmlmX3B1 dCh1c2JpZik7CisJZnJlZV9yZXEocGVuZGluZ19yZXEpOworfQorCitzdGF0aWMgaW50IHVz YmJrX3N0YXJ0X3N1Ym1pdF91cmIodXNiaWZfdCAqdXNiaWYpCit7CisJdXNiaWZfYmFja19y aW5nX3QgKnVzYl9yaW5nID0gJnVzYmlmLT5yaW5nOworCXVzYmlmX3JlcXVlc3RfdCAqcmlu Z19yZXE7CisJcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXE7CisJUklOR19JRFggcmMsIHJw OworCWludCBtb3JlX3RvX2RvID0gMDsKKworCXJjID0gdXNiX3JpbmctPnJlcV9jb25zOwor CXJwID0gdXNiX3JpbmctPnNyaW5nLT5yZXFfcHJvZDsKKwlybWIoKTsKKworCXdoaWxlIChy YyAhPSBycCkgeworCQlpZiAoUklOR19SRVFVRVNUX0NPTlNfT1ZFUkZMT1codXNiX3Jpbmcs IHJjKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUklOR19SRVFVRVNUX0NPTlNfT1ZF UkZMT1dcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlwZW5kaW5nX3JlcSA9IGFsbG9jX3Jl cSgpOworCQlpZiAoTlVMTCA9PSBwZW5kaW5nX3JlcSkgeworCQkJbW9yZV90b19kbyA9IDE7 CisJCQlicmVhazsKKwkJfQorCisJCXJpbmdfcmVxID0gUklOR19HRVRfUkVRVUVTVCh1c2Jf cmluZywgcmMpOworCQl1c2JfcmluZy0+cmVxX2NvbnMgPSArK3JjOworCisJCWRpc3BhdGNo X3JlcXVlc3RfdG9fcGVuZGluZ19yZXFzKHVzYmlmLCByaW5nX3JlcSwKKwkJCQkJCQlwZW5k aW5nX3JlcSk7CisJfQorCisJUklOR19GSU5BTF9DSEVDS19GT1JfUkVRVUVTVFMoJnVzYmlm LT5yaW5nLCBtb3JlX3RvX2RvKTsKKworCWNvbmRfcmVzY2hlZCgpOworCisJcmV0dXJuIG1v cmVfdG9fZG87Cit9CisKK2ludCB1c2Jia19zY2hlZHVsZSh2b2lkICphcmcpCit7CisgICAg ICAgIHVzYmlmX3QgKnVzYmlmID0gKHVzYmlmX3QgKilhcmc7CisKKyAgICAgICAgdXNiaWZf Z2V0KHVzYmlmKTsKKworICAgICAgICB3aGlsZSgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7 CisgICAgICAgICAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1c2JpZi0+d3EsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVzYmlmLT53YWl0aW5nX3JlcXMgfHwga3RocmVhZF9zaG91bGRfc3Rv cCgpKTsKKyAgICAgICAgICAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfZnJlZV93cSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIWxpc3RfZW1wdHkoJnBlbmRpbmdfZnJlZSkgfHwg a3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKyAgICAgICAgICAgICAgICB1c2JpZi0+d2FpdGlu Z19yZXFzID0gMDsKKyAgICAgICAgICAgICAgICBzbXBfbWIoKTsKKworICAgICAgICAgICAg ICAgIGlmICh1c2Jia19zdGFydF9zdWJtaXRfdXJiKHVzYmlmKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIHVzYmlmLT53YWl0aW5nX3JlcXMgPSAxOworICAgICAgICB9CisKKyAgICAg ICAgdXNiaWYtPnhlbnVzYmQgPSBOVUxMOworICAgICAgICB1c2JpZl9wdXQodXNiaWYpOwor CisgICAgICAgIHJldHVybiAwOworfQorCisvKgorICogYXR0YWNoIHRoZSBncmFiYmVkIGRl dmljZSB0byB1c2JpZi4KKyAqLwordm9pZCB1c2Jia19wbHVnX2RldmljZSh1c2JpZl90ICp1 c2JpZiwgc3RydWN0IHVzYnN0dWIgKnN0dWIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JpZi0+cGx1Z19sb2NrLCBmbGFncyk7CisJbGlz dF9hZGQoJnN0dWItPnBsdWdnZWRfbGlzdCwgJnVzYmlmLT5wbHVnZ2VkX2RldmljZXMpOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmlmLT5wbHVnX2xvY2ssIGZsYWdzKTsKKwlz dHViLT5wbHVnZ2VkID0gMTsKKwlzdHViLT51c2JpZiA9IHVzYmlmOworfQorCisvKgorICog ZGV0YWNoIHRoZSBncmFiYmVkIGRldmljZSBmcm9tIHVzYmlmLgorICovCit2b2lkIHVzYmJr X3VucGx1Z19kZXZpY2UodXNiaWZfdCAqdXNiaWYsIHN0cnVjdCB1c2JzdHViICpzdHViKQor eworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoc3R1Yi0+YWRkcikKKwkJdXNiYmtf c2V0X2FkZHJlc3ModXNiaWYsIHN0dWIsIHN0dWItPmFkZHIsIDApOworCXNwaW5fbG9ja19p cnFzYXZlKCZ1c2JpZi0+cGx1Z19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnN0dWItPnBs dWdnZWRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaWYtPnBsdWdfbG9j aywgZmxhZ3MpOworCXN0dWItPnBsdWdnZWQgPSAwOworCXN0dWItPnVzYmlmID0gTlVMTDsK K30KKwordm9pZCBkZXRhY2hfZGV2aWNlX3dpdGhvdXRfbG9jayh1c2JpZl90ICp1c2JpZiwg c3RydWN0IHVzYnN0dWIgKnN0dWIpCit7CisJaWYgKHN0dWItPmFkZHIpCisJCXVzYmJrX3Nl dF9hZGRyZXNzKHVzYmlmLCBzdHViLCBzdHViLT5hZGRyLCAwKTsKKwlsaXN0X2RlbCgmc3R1 Yi0+cGx1Z2dlZF9saXN0KTsKKwlzdHViLT5wbHVnZ2VkID0gMDsKKwlzdHViLT51c2JpZiA9 IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYmJhY2tfaW5pdCh2b2lkKQorewor CWludCBpLCBtbWFwX3BhZ2VzOworCisJaWYgKCFpc19ydW5uaW5nX29uX3hlbigpKQorCQly ZXR1cm4gLUVOT0RFVjsKKworCWlmICh1c2JzdHViX2luaXQoKSkKKwkJcmV0dXJuIC1FTk9E RVY7CisKKwltbWFwX3BhZ2VzID0gdXNiaWZfcmVxcyAqIFVTQklGX01BWF9TRUdNRU5UU19Q RVJfUkVRVUVTVDsKKwlwZW5kaW5nX3JlcXMgPSBrbWFsbG9jKHNpemVvZihwZW5kaW5nX3Jl cXNbMF0pICoKKwkJCXVzYmlmX3JlcXMsIEdGUF9LRVJORUwpOworCXBlbmRpbmdfZ3JhbnRf aGFuZGxlcyA9IGttYWxsb2Moc2l6ZW9mKHBlbmRpbmdfZ3JhbnRfaGFuZGxlc1swXSkgKgor CQkJbW1hcF9wYWdlcywgR0ZQX0tFUk5FTCk7CisJcGVuZGluZ19wYWdlcyA9IGFsbG9jX2Vt cHR5X3BhZ2VzX2FuZF9wYWdldmVjKG1tYXBfcGFnZXMpOworCisJaWYgKCFwZW5kaW5nX3Jl cXMgfHwgIXBlbmRpbmdfZ3JhbnRfaGFuZGxlcyB8fCAhcGVuZGluZ19wYWdlcykKKwkJZ290 byBvdXRfb2ZfbWVtb3J5OworCisJZm9yIChpID0gMDsgaSA8IG1tYXBfcGFnZXM7IGkrKykK KwkJcGVuZGluZ19ncmFudF9oYW5kbGVzW2ldID0gVVNCQkFDS19JTlZBTElEX0hBTkRMRTsK KworCW1lbXNldChwZW5kaW5nX3JlcXMsIDAsIHNpemVvZihwZW5kaW5nX3JlcXMpKTsKKwlJ TklUX0xJU1RfSEVBRCgmcGVuZGluZ19mcmVlKTsKKworCWZvciAoaSA9IDA7IGkgPCB1c2Jp Zl9yZXFzOyBpKyspIHsKKwkJbGlzdF9hZGRfdGFpbCgmcGVuZGluZ19yZXFzW2ldLmZyZWVf bGlzdCwgJnBlbmRpbmdfZnJlZSk7CisJfQorCisJdXNiYmFja194ZW5idXNfaW5pdCgpOwor CisJcmV0dXJuIDA7CisKKyBvdXRfb2ZfbWVtb3J5OgorCSBrZnJlZShwZW5kaW5nX3JlcXMp OworCSBrZnJlZShwZW5kaW5nX2dyYW50X2hhbmRsZXMpOworCSBmcmVlX2VtcHR5X3BhZ2Vz X2FuZF9wYWdldmVjKHBlbmRpbmdfcGFnZXMsIG1tYXBfcGFnZXMpOworCSBwcmludGsoIiVz OiBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCSByZXR1cm4gLUVOT01FTTsK K30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmJhY2tfZXhpdCh2b2lkKQoreworCXVzYmJh Y2tfeGVuYnVzX2V4aXQoKTsKKwl1c2JzdHViX2V4aXQoKTsKKwlrZnJlZShwZW5kaW5nX3Jl cXMpOworCWtmcmVlKHBlbmRpbmdfZ3JhbnRfaGFuZGxlcyk7CisJZnJlZV9lbXB0eV9wYWdl c19hbmRfcGFnZXZlYyhwZW5kaW5nX3BhZ2VzLCB1c2JpZl9yZXFzICogVVNCSUZfTUFYX1NF R01FTlRTX1BFUl9SRVFVRVNUKTsKK30KKworbW9kdWxlX2luaXQodXNiYmFja19pbml0KTsK K21vZHVsZV9leGl0KHVzYmJhY2tfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIiIpOworTU9E VUxFX0RFU0NSSVBUSU9OKCJYZW4gVVNCIGJhY2tlbmQgZHJpdmVyICh1c2JiYWNrKSIpOwor TU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwpkaWZmIC1yIDUxZGVjYzM5ZTVlNyAt ciA5ZWYyZThjNmNmM2QgZHJpdmVycy94ZW4vdXNiYmFjay91c2JiYWNrLmgKLS0tIC9kZXYv bnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94ZW4v dXNiYmFjay91c2JiYWNrLmgJTW9uIE1hciAxNiAxODo0MToxMiAyMDA5ICswOTAwCkBAIC0w LDAgKzEsMTU4IEBACisvKgorICogdXNiYmFjay5oCisgKgorICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgWGVuIFVTQiBiYWNrZW5kIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw MDksIEZVSklUU1UgTEFCT1JBVE9SSUVTIExURC4KKyAqIEF1dGhvcjogTm9ib3J1IEl3YW1h dHN1IDxuX2l3YW1hdHN1QGpwLmZ1aml0c3UuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBv ciwKKyAqCisgKiBXaGVuIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgg a2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvCisgKiBvdGhlciBzb2Z0d2FyZSBwYWNrYWdl cywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy ZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICov CisKKyNpZm5kZWYgX19YRU5fVVNCQkFDS19IX18KKyNkZWZpbmUgX19YRU5fVVNCQkFDS19I X18KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVy cnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Iu aD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVh ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPHhlbi9ldnRjaG4uaD4KKyNp bmNsdWRlIDx4ZW4vZ250dGFiLmg+CisjaW5jbHVkZSA8eGVuL2RyaXZlcl91dGlsLmg+Cisj aW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNl L2lvL3VzYmlmLmg+CisKK3N0cnVjdCB1c2JzdHViOworCisjZGVmaW5lIFVTQl9ERVZfQURE Ul9TSVpFIDEyOAorCit0eXBlZGVmIHN0cnVjdCB1c2JpZl9zdCB7CisJZG9taWRfdCAgICAg ICAgICAgZG9taWQ7CisJdW5zaWduZWQgaW50ICAgICAgaGFuZGxlOworCXN0cnVjdCB4ZW5i dXNfZGV2aWNlICp4YmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzYmlmX2xpc3Q7CisKKwl1 bnNpZ25lZCBpbnQgICAgICBpcnE7CisKKwl1c2JpZl9iYWNrX3JpbmdfdCByaW5nOworCXN0 cnVjdCB2bV9zdHJ1Y3QgKnJpbmdfYXJlYTsKKworCXNwaW5sb2NrX3QgcmluZ19sb2NrOwor CWF0b21pY190IHJlZmNudDsKKwlncmFudF9oYW5kbGVfdCBzaG1lbV9oYW5kbGU7CisJZ3Jh bnRfcmVmX3Qgc2htZW1fcmVmOworCisJLyogZGV2aWNlIGFkZHJlc3MgbG9va3VwIHRhYmxl ICovCisJc3BpbmxvY2tfdCBhZGRyX2xvY2s7CisJc3RydWN0IHVzYnN0dWIgKmFkZHJfdGFi bGVbVVNCX0RFVl9BRERSX1NJWkVdOworCisJLyogcGx1Z2dlZCBkZXZpY2UgbGlzdCAqLwor CXVuc2lnbmVkIHBsYWdnYWJsZToxOworCXNwaW5sb2NrX3QgcGx1Z19sb2NrOworCXN0cnVj dCBsaXN0X2hlYWQgcGx1Z2dlZF9kZXZpY2VzOworCisJLyogcmVxdWVzdCBzY2hlZHVsZSAq LworCXN0cnVjdCB0YXNrX3N0cnVjdCAqeGVudXNiZDsKKwl1bnNpZ25lZCBpbnQgd2FpdGlu Z19yZXFzOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRpbmdfdG9fZnJlZTsKKwl3YWl0X3F1 ZXVlX2hlYWRfdCB3cTsKKworfSB1c2JpZl90OworCitzdHJ1Y3QgdXNic3R1Yl9pZAorewor CXN0cnVjdCBsaXN0X2hlYWQgaWRfbGlzdDsKKworCWNoYXIgYnVzX2lkW0JVU19JRF9TSVpF XTsKKwlpbnQgZG9tX2lkOworCWludCBkZXZfaWQ7CisJaW50IHBvcnRudW07Cit9OworCitz dHJ1Y3QgdXNic3R1YgoreworCXN0cnVjdCB1c2JzdHViX2lkICppZDsKKwlzdHJ1Y3QgdXNi X2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXVz YmlmX3QgKnVzYmlmOworCisJc3RydWN0IGxpc3RfaGVhZCBncmFiYmVkX2xpc3Q7CisKKwl1 bnNpZ25lZCBwbHVnZ2VkOjE7CisJc3RydWN0IGxpc3RfaGVhZCBwbHVnZ2VkX2xpc3Q7CisK KwlpbnQgYWRkcjsKKworCXNwaW5sb2NrX3Qgc3VibWl0dGluZ19sb2NrOworCXN0cnVjdCBs aXN0X2hlYWQgc3VibWl0dGluZ19saXN0OworfTsKKwordXNiaWZfdCAqdXNiaWZfYWxsb2Mo ZG9taWRfdCBkb21pZCwgdW5zaWduZWQgaW50IGhhbmRsZSk7Cit2b2lkIHVzYmlmX2Rpc2Nv bm5lY3QodXNiaWZfdCAqdXNiaWYpOwordm9pZCB1c2JpZl9mcmVlKHVzYmlmX3QgKnVzYmlm KTsKK2ludCB1c2JpZl9tYXAodXNiaWZfdCAqdXNiaWYsIHVuc2lnbmVkIGxvbmcgc2hhcmVk X3BhZ2UsIHVuc2lnbmVkIGludCBldnRjaG4pOworCisjZGVmaW5lIHVzYmlmX2dldChfYikg KGF0b21pY19pbmMoJihfYiktPnJlZmNudCkpCisjZGVmaW5lIHVzYmlmX3B1dChfYikgXAor CWRvIHsgXAorCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmKF9iKS0+cmVmY250KSkgXAor CQl3YWtlX3VwKCYoX2IpLT53YWl0aW5nX3RvX2ZyZWUpOyBcCisJfSB3aGlsZSAoMCkKKwor dm9pZCB1c2JiYWNrX3hlbmJ1c19pbml0KHZvaWQpOwordm9pZCB1c2JiYWNrX3hlbmJ1c19l eGl0KHZvaWQpOworCitpcnFyZXR1cm5fdCB1c2Jia19iZV9pbnQoaW50IGlycSwgdm9pZCAq ZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgdXNiYmtfc2NoZWR1bGUodm9p ZCAqYXJnKTsKK3N0cnVjdCB1c2JzdHViICpmaW5kX2F0dGFjaGVkX2RldmljZSh1c2JpZl90 ICp1c2JpZiwgaW50IHBvcnQpOworc3RydWN0IHVzYnN0dWIgKmZpbmRfZ3JhYmJlZF9kZXZp Y2UoaW50IGRvbV9pZCwgaW50IGRldl9pZCwgaW50IHBvcnQpOwordXNiaWZfdCAqZmluZF91 c2JpZihpbnQgZG9tX2lkLCBpbnQgZGV2X2lkKTsKK3ZvaWQgdXNiYmFja19yZWNvbmZpZ3Vy ZSh1c2JpZl90ICp1c2JpZik7Cit2b2lkIHVzYmJrX3BsdWdfZGV2aWNlKHVzYmlmX3QgKnVz YmlmLCBzdHJ1Y3QgdXNic3R1YiAqc3R1Yik7Cit2b2lkIHVzYmJrX3VucGx1Z19kZXZpY2Uo dXNiaWZfdCAqdXNiaWYsIHN0cnVjdCB1c2JzdHViICpzdHViKTsKK3ZvaWQgZGV0YWNoX2Rl dmljZV93aXRob3V0X2xvY2sodXNiaWZfdCAqdXNiaWYsIHN0cnVjdCB1c2JzdHViICpzdHVi KTsKK3ZvaWQgdXNiYmtfdW5saW5rX3VyYnMoc3RydWN0IHVzYnN0dWIgKnN0dWIpOworCitp bnQgdXNic3R1Yl9pbml0KHZvaWQpOwordm9pZCB1c2JzdHViX2V4aXQodm9pZCk7CisKKyNl bmRpZiAvKiBfX1hFTl9VU0JCQUNLX0hfXyAqLwpkaWZmIC1yIDUxZGVjYzM5ZTVlNyAtciA5 ZWYyZThjNmNmM2QgZHJpdmVycy94ZW4vdXNiYmFjay91c2JzdHViLmMKLS0tIC9kZXYvbnVs bAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94ZW4vdXNi YmFjay91c2JzdHViLmMJTW9uIE1hciAxNiAxODo0MToxMiAyMDA5ICswOTAwCkBAIC0wLDAg KzEsNDQ3IEBACisvKgorICogdXNic3R1Yi5jCisgKgorICogVVNCIHN0dWIgZHJpdmVyIC0g Z3JhYmJpbmcgYW5kIG1hbmFnaW5nIFVTQiBkZXZpY2VzLgorICoKKyAqIENvcHlyaWdodCAo QykgMjAwOSwgRlVKSVRTVSBMQUJPUkFUT1JJRVMgTFRELgorICogQXV0aG9yOiBOb2JvcnUg SXdhbWF0c3UgPG5faXdhbWF0c3VAanAuZnVqaXRzdS5jb20+CisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoK KyAqIG9yLAorICoKKyAqIFdoZW4gZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBM aW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8KKyAqIG90aGVyIHNvZnR3YXJlIHBh Y2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNv ZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBO TyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKi8KKworI2luY2x1ZGUgInVzYmJhY2suaCIKKworc3RhdGljIExJU1RfSEVBRCh1c2Jz dHViX2lkcyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVzYnN0dWJfaWRzX2xvY2spOwor c3RhdGljIExJU1RfSEVBRChncmFiYmVkX2RldmljZXMpOworc3RhdGljIERFRklORV9TUElO TE9DSyhncmFiYmVkX2RldmljZXNfbG9jayk7CisKK3N0cnVjdCB1c2JzdHViICpmaW5kX2dy YWJiZWRfZGV2aWNlKGludCBkb21faWQsIGludCBkZXZfaWQsIGludCBwb3J0bnVtKQorewor CXN0cnVjdCB1c2JzdHViICpzdHViOworCWludCBmb3VuZCA9IDA7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncmFiYmVkX2RldmljZXNfbG9jaywg ZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3R1YiwgJmdyYWJiZWRfZGV2aWNlcywg Z3JhYmJlZF9saXN0KSB7CisJCWlmIChzdHViLT5pZC0+ZG9tX2lkID09IGRvbV9pZAorCQkJ CSYmIHN0dWItPmlkLT5kZXZfaWQgPT0gZGV2X2lkCisJCQkJJiYgc3R1Yi0+aWQtPnBvcnRu dW0gPT0gcG9ydG51bSkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JhYmJlZF9kZXZpY2VzX2xvY2ssIGZsYWdzKTsK KworCWlmIChmb3VuZCkKKwkJcmV0dXJuIHN0dWI7CisKKwlyZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIHN0cnVjdCB1c2JzdHViICp1c2JzdHViX2FsbG9jKHN0cnVjdCB1c2JfaW50ZXJm YWNlICppbnRlcmZhY2UsCisJCQkJCQlzdHJ1Y3QgdXNic3R1Yl9pZCAqc3R1Yl9pZCkKK3sK KwlzdHJ1Y3QgdXNic3R1YiAqc3R1YjsKKworCXN0dWIgPSBremFsbG9jKHNpemVvZigqc3R1 YiksIEdGUF9LRVJORUwpOworCWlmICghc3R1YikgeworCQlwcmludGsoS0VSTl9FUlIgIm5v IG1lbW9yeSBmb3IgYWxsb2MgdXNic3R1YlxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwor CXN0dWItPnVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFj ZSkpOworCXN0dWItPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwlzdHViLT5pZCA9IHN0dWJf aWQ7CisJc3Bpbl9sb2NrX2luaXQoJnN0dWItPnN1Ym1pdHRpbmdfbG9jayk7CisJSU5JVF9M SVNUX0hFQUQoJnN0dWItPnN1Ym1pdHRpbmdfbGlzdCk7CisKKwlyZXR1cm4gc3R1YjsKK30K Kworc3RhdGljIGludCB1c2JzdHViX2ZyZWUoc3RydWN0IHVzYnN0dWIgKnN0dWIpCit7CisJ aWYgKCFzdHViKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVzYl9wdXRfZGV2KHN0dWItPnVk ZXYpOworCXN0dWItPmludGVyZmFjZSA9IE5VTEw7CisJc3R1Yi0+dWRldiA9IE5VTEw7CisJ c3R1Yi0+aWQgPSBOVUxMOworCWtmcmVlKHN0dWIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgdXNic3R1Yl9tYXRjaF9vbmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVy ZmFjZSwKKwkJc3RydWN0IHVzYnN0dWJfaWQgKnN0dWJfaWQpCit7CisJY2hhciAqdWRldl9i dXNpZCA9IGludGVyZmFjZS0+ZGV2LnBhcmVudC0+YnVzX2lkOworCisJaWYgKCEoc3RybmNt cChzdHViX2lkLT5idXNfaWQsIHVkZXZfYnVzaWQsIEJVU19JRF9TSVpFKSkpIHsKKwkJcmV0 dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNic3R1Yl9p ZCAqdXNic3R1Yl9tYXRjaChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorewor CXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZh Y2UpOworCXN0cnVjdCB1c2JzdHViX2lkICpzdHViX2lkOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisJaW50IGZvdW5kID0gMDsKKworCS8qIGh1YiBjdXJyZW50bHkgbm90IHN1cHBvcnRl ZCwgc28gc2tpcC4gKi8KKwlpZiAodWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0g IFVTQl9DTEFTU19IVUIpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JnVzYnN0dWJfaWRzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0dWJf aWQsICZ1c2JzdHViX2lkcywgaWRfbGlzdCkgeworCQlpZiAodXNic3R1Yl9tYXRjaF9vbmUo aW50ZXJmYWNlLCBzdHViX2lkKSkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0K Kwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNic3R1Yl9pZHNfbG9jaywgZmxhZ3Mp OworCisJaWYgKGZvdW5kKQorCQlyZXR1cm4gc3R1Yl9pZDsKKworCXJldHVybiBOVUxMOwor fQorCitzdGF0aWMgdm9pZCBhZGRfdG9fZ3JhYmJlZF9kZXZpY2VzKHN0cnVjdCB1c2JzdHVi ICpzdHViKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmZ3JhYmJlZF9kZXZpY2VzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmc3R1Yi0+Z3Jh YmJlZF9saXN0LCAmZ3JhYmJlZF9kZXZpY2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZncmFiYmVkX2RldmljZXNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCByZW1v dmVfZnJvbV9ncmFiYmVkX2RldmljZXMoc3RydWN0IHVzYnN0dWIgKnN0dWIpCit7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncmFiYmVkX2Rldmlj ZXNfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZzdHViLT5ncmFiYmVkX2xpc3QpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmdyYWJiZWRfZGV2aWNlc19sb2NrLCBmbGFncyk7Cit9 CisKK3N0YXRpYyBpbnQgdXNic3R1Yl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50 ZXJmYWNlLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0 IHVzYnN0dWJfaWQgKnN0dWJfaWQgPSBOVUxMOworCXN0cnVjdCB1c2JzdHViICpzdHViID0g TlVMTDsKKwl1c2JpZl90ICp1c2JpZiA9IE5VTEw7CisJaW50IHJldHZhbCA9IDA7CisKKwlp ZiAoKHN0dWJfaWQgPSB1c2JzdHViX21hdGNoKGludGVyZmFjZSkpKSB7CisJCXN0dWIgPSB1 c2JzdHViX2FsbG9jKGludGVyZmFjZSwgc3R1Yl9pZCk7CisJCWlmICghc3R1YikKKwkJCXJl dHVybiAtRU5PTUVNOworCisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBzdHViKTsK KwkJYWRkX3RvX2dyYWJiZWRfZGV2aWNlcyhzdHViKTsKKwkJdXNiaWYgPSBmaW5kX3VzYmlm KHN0dWJfaWQtPmRvbV9pZCwgc3R1Yl9pZC0+ZGV2X2lkKTsKKwkJaWYgKHVzYmlmKSB7CisJ CQl1c2Jia19wbHVnX2RldmljZSh1c2JpZiwgc3R1Yik7CisJCQl1c2JiYWNrX3JlY29uZmln dXJlKHVzYmlmKTsKKwkJfQorCisJfSBlbHNlCisJCXJldHZhbCA9IC1FTk9ERVY7CisKKwly ZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCB1c2JzdHViX2Rpc2Nvbm5lY3Qoc3Ry dWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNic3R1YiAqc3R1 YgorCQk9IChzdHJ1Y3QgdXNic3R1YiAqKSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7 CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwlpZiAoIXN0dWIp CisJCXJldHVybjsKKworCWlmIChzdHViLT51c2JpZikgeworCQl1c2JiYWNrX3JlY29uZmln dXJlKHN0dWItPnVzYmlmKTsKKwkJdXNiYmtfdW5wbHVnX2RldmljZShzdHViLT51c2JpZiwg c3R1Yik7CisJfQorCisJdXNiYmtfdW5saW5rX3VyYnMoc3R1Yik7CisKKwlyZW1vdmVfZnJv bV9ncmFiYmVkX2RldmljZXMoc3R1Yik7CisKKwl1c2JzdHViX2ZyZWUoc3R1Yik7CisKKwly ZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0cl90b192cG9ydChjb25zdCBjaGFy ICpidWYsCisJCQkJCWNoYXIgKnBoeXNfYnVzLAorCQkJCQlpbnQgKmRvbV9pZCwKKwkJCQkJ aW50ICpkZXZfaWQsCisJCQkJCWludCAqcG9ydCkKK3sKKwljaGFyICpwOworCWludCBsZW47 CisJaW50IGVycjsKKworCS8qIG5vIHBoeXNpY2FsIGJ1cyAqLworCWlmICghKHAgPSBzdHJj aHIoYnVmLCAnOicpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsZW4gPSBwIC0gYnVmOwor CisJLyogYmFkIHBoeXNpY2FsIGJ1cyAqLworCWlmIChsZW4gKyAxID4gQlVTX0lEX1NJWkUp CisJCXJldHVybiAtRUlOVkFMOworCisJc3RybGNweShwaHlzX2J1cywgYnVmLCBsZW4gKyAx KTsKKwllcnIgPSBzc2NhbmYocCArIDEsICIlZDolZDolZCIsIGRvbV9pZCwgZGV2X2lkLCBw b3J0KTsKKwlpZiAoZXJyID09IDMpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1F SU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdXNic3R1Yl9pZF9hZGQoY29uc3QgY2hhciAqYnVz X2lkLAorCQkJCQljb25zdCBpbnQgZG9tX2lkLAorCQkJCQljb25zdCBpbnQgZGV2X2lkLAor CQkJCQljb25zdCBpbnQgcG9ydG51bSkKK3sKKwlzdHJ1Y3QgdXNic3R1Yl9pZCAqc3R1Yl9p ZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3R1Yl9pZCA9IGt6YWxsb2Moc2l6ZW9m KCpzdHViX2lkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdHViX2lkKQorCQlyZXR1cm4gLUVO T01FTTsKKworCXN0dWJfaWQtPmRvbV9pZCA9IGRvbV9pZDsKKwlzdHViX2lkLT5kZXZfaWQg PSBkZXZfaWQ7CisJc3R1Yl9pZC0+cG9ydG51bSA9IHBvcnRudW07CisKKwlzdHJuY3B5KHN0 dWJfaWQtPmJ1c19pZCwgYnVzX2lkLCBCVVNfSURfU0laRSk7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmdXNic3R1Yl9pZHNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZzdHViX2lkLT5p ZF9saXN0LCAmdXNic3R1Yl9pZHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYnN0 dWJfaWRzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVz YnN0dWJfaWRfcmVtb3ZlKGNvbnN0IGNoYXIgKnBoeXNfYnVzLAorCQkJCQljb25zdCBpbnQg ZG9tX2lkLAorCQkJCQljb25zdCBpbnQgZGV2X2lkLAorCQkJCQljb25zdCBpbnQgcG9ydG51 bSkKK3sKKwlzdHJ1Y3QgdXNic3R1Yl9pZCAqc3R1Yl9pZCwgKnRtcDsKKwlpbnQgZXJyID0g LUVOT0VOVDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JnVzYnN0dWJfaWRzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo c3R1Yl9pZCwgdG1wLCAmdXNic3R1Yl9pZHMsIGlkX2xpc3QpIHsKKwkJaWYgKHN0dWJfaWQt PmRvbV9pZCA9PSBkb21faWQKKwkJCQkmJiBzdHViX2lkLT5kZXZfaWQgPT0gZGV2X2lkCisJ CQkJJiYgc3R1Yl9pZC0+cG9ydG51bSA9PSBwb3J0bnVtKSB7CisJCQlsaXN0X2RlbCgmc3R1 Yl9pZC0+aWRfbGlzdCk7CisJCQlrZnJlZShzdHViX2lkKTsKKworCQkJZXJyID0gMDsKKwkJ fQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JzdHViX2lkc19sb2NrLCBmbGFn cyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCB1c2JzdHViX3Zwb3J0 X2FkZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAorCQljb25zdCBjaGFyICpidWYs IHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWNoYXIgYnVzX2lkW0JVU19J RF9TSVpFXTsKKwlpbnQgZG9tX2lkOworCWludCBkZXZfaWQ7CisJaW50IHBvcnRudW07CisK KwllcnIgPSBzdHJfdG9fdnBvcnQoYnVmLCAmYnVzX2lkWzBdLCAmZG9tX2lkLCAmZGV2X2lk LCAmcG9ydG51bSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSB1c2JzdHVi X2lkX2FkZCgmYnVzX2lkWzBdLCBkb21faWQsIGRldl9pZCwgcG9ydG51bSk7CisKK291dDoK KwlpZiAoIWVycikKKwkJZXJyID0gY291bnQ7CisJcmV0dXJuIGVycjsKK30KKworRFJJVkVS X0FUVFIobmV3X3Zwb3J0LCBTX0lXVVNSLCBOVUxMLCB1c2JzdHViX3Zwb3J0X2FkZCk7CisK K3N0YXRpYyBzc2l6ZV90IHVzYnN0dWJfdnBvcnRfcmVtb3ZlKHN0cnVjdCBkZXZpY2VfZHJp dmVyICpkcml2ZXIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWlu dCBlcnIgPSAwOworCisJY2hhciBidXNfaWRbQlVTX0lEX1NJWkVdOworCWludCBkb21faWQ7 CisJaW50IGRldl9pZDsKKwlpbnQgcG9ydG51bTsKKworCWVyciA9IHN0cl90b192cG9ydChi dWYsICZidXNfaWRbMF0sICZkb21faWQsICZkZXZfaWQsICZwb3J0bnVtKTsKKwlpZiAoZXJy KQorCQlnb3RvIG91dDsKKworCWVyciA9IHVzYnN0dWJfaWRfcmVtb3ZlKCZidXNfaWRbMF0s IGRvbV9pZCwgZGV2X2lkLCBwb3J0bnVtKTsKKworb3V0OgorCWlmICghZXJyKQorCQllcnIg PSBjb3VudDsKKwlyZXR1cm4gZXJyOworfQorCitEUklWRVJfQVRUUihyZW1vdmVfdnBvcnQs IFNfSVdVU1IsIE5VTEwsIHVzYnN0dWJfdnBvcnRfcmVtb3ZlKTsKKworc3RhdGljIHNzaXpl X3QgdXNic3R1Yl92cG9ydF9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCisJ CWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNic3R1Yl9pZCAqc3R1Yl9pZDsKKwlzaXplX3Qg Y291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmdXNic3R1Yl9pZHNfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3R1 Yl9pZCwgJnVzYnN0dWJfaWRzLCBpZF9saXN0KSB7CisJCWlmIChjb3VudCA+PSBQQUdFX1NJ WkUpCisJCQlicmVhazsKKwkJY291bnQgKz0gc2NucHJpbnRmKChjaGFyICopYnVmICsgY291 bnQsIFBBR0VfU0laRSAtIGNvdW50LAorCQkJCSIlczolZDolZDolZFxuIiwKKwkJCQkmc3R1 Yl9pZC0+YnVzX2lkWzBdLAorCQkJCXN0dWJfaWQtPmRvbV9pZCwKKwkJCQlzdHViX2lkLT5k ZXZfaWQsCisJCQkJc3R1Yl9pZC0+cG9ydG51bSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnVzYnN0dWJfaWRzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30K KworRFJJVkVSX0FUVFIodnBvcnRzLCBTX0lSVVNSLCB1c2JzdHViX3Zwb3J0X3Nob3csIE5V TEwpOworCitzdGF0aWMgc3NpemVfdCB1c2JzdHViX2RldmljZXNfc2hvdyhzdHJ1Y3QgZGV2 aWNlX2RyaXZlciAqZHJpdmVyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IHVzYnN0dWIg KnN0dWI7CisJc2l6ZV90IGNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJmdyYWJiZWRfZGV2aWNlc19sb2NrLCBmbGFncyk7CisJbGlz dF9mb3JfZWFjaF9lbnRyeShzdHViLCAmZ3JhYmJlZF9kZXZpY2VzLCBncmFiYmVkX2xpc3Qp IHsKKwkJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKKwkJCWJyZWFrOworCisJCWNvdW50ICs9 IHNjbnByaW50ZigoY2hhciAqKWJ1ZiArIGNvdW50LCBQQUdFX1NJWkUgLSBjb3VudCwKKwkJ CQkJIiV1LSVzOiV1LiV1XG4iLAorCQkJCQlzdHViLT51ZGV2LT5idXMtPmJ1c251bSwKKwkJ CQkJc3R1Yi0+dWRldi0+ZGV2cGF0aCwKKwkJCQkJc3R1Yi0+dWRldi0+Y29uZmlnLT5kZXNj LmJDb25maWd1cmF0aW9uVmFsdWUsCisJCQkJCXN0dWItPmludGVyZmFjZS0+Y3VyX2FsdHNl dHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisKKwl9CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZ3JhYmJlZF9kZXZpY2VzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3Vu dDsKK30KKworRFJJVkVSX0FUVFIoZ3JhYmJlZF9kZXZpY2VzLCBTX0lSVVNSLCB1c2JzdHVi X2RldmljZXNfc2hvdywgTlVMTCk7CisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCBtYXRj aGVzIGFueSB1c2JkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jz dHViX3RhYmxlW10gPSB7CisJCXsgLmRyaXZlcl9pbmZvID0gMSB9LCAvKiB3aWxkY2FyZCwg c2VlIHVzYl9tYXRjaF9pZCgpICovCisJCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwor fTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JzdHViX3RhYmxlKTsKKworc3RhdGlj IHN0cnVjdCB1c2JfZHJpdmVyIHVzYmJhY2tfdXNiX2RyaXZlciA9IHsKKwkJLm5hbWUgPSAi dXNiYmFjayIsCisJCS5wcm9iZSA9IHVzYnN0dWJfcHJvYmUsCisJCS5kaXNjb25uZWN0ID0g dXNic3R1Yl9kaXNjb25uZWN0LAorCQkuaWRfdGFibGUgPSB1c2JzdHViX3RhYmxlLAorfTsK KworaW50IF9faW5pdCB1c2JzdHViX2luaXQodm9pZCkKK3sKKyAJaW50IGVycjsKKworCWVy ciA9IHVzYl9yZWdpc3RlcigmdXNiYmFja191c2JfZHJpdmVyKTsKKwlpZiAoZXJyIDwgMCkK KwkJZ290byBvdXQ7CisJaWYgKCFlcnIpCisJCWVyciA9IGRyaXZlcl9jcmVhdGVfZmlsZSgm dXNiYmFja191c2JfZHJpdmVyLmRyaXZlciwKKwkJCQkmZHJpdmVyX2F0dHJfbmV3X3Zwb3J0 KTsKKwlpZiAoIWVycikKKwkJZXJyID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZ1c2JiYWNrX3Vz Yl9kcml2ZXIuZHJpdmVyLAorCQkJCSZkcml2ZXJfYXR0cl9yZW1vdmVfdnBvcnQpOworCWlm ICghZXJyKQorCQllcnIgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnVzYmJhY2tfdXNiX2RyaXZl ci5kcml2ZXIsCisJCQkJJmRyaXZlcl9hdHRyX3Zwb3J0cyk7CisJaWYgKCFlcnIpCisJCWVy ciA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmdXNiYmFja191c2JfZHJpdmVyLmRyaXZlciwKKwkJ CQkmZHJpdmVyX2F0dHJfZ3JhYmJlZF9kZXZpY2VzKTsKKwlpZiAoZXJyKQorCQl1c2JzdHVi X2V4aXQoKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgX19leGl0IHVzYnN0 dWJfZXhpdCh2b2lkKQoreworCWRyaXZlcl9yZW1vdmVfZmlsZSgmdXNiYmFja191c2JfZHJp dmVyLmRyaXZlciwKKwkJCSZkcml2ZXJfYXR0cl9uZXdfdnBvcnQpOworCWRyaXZlcl9yZW1v dmVfZmlsZSgmdXNiYmFja191c2JfZHJpdmVyLmRyaXZlciwKKwkJCSZkcml2ZXJfYXR0cl9y ZW1vdmVfdnBvcnQpOworCWRyaXZlcl9yZW1vdmVfZmlsZSgmdXNiYmFja191c2JfZHJpdmVy LmRyaXZlciwKKwkJCQkmZHJpdmVyX2F0dHJfdnBvcnRzKTsKKwlkcml2ZXJfcmVtb3ZlX2Zp bGUoJnVzYmJhY2tfdXNiX2RyaXZlci5kcml2ZXIsCisJCQkJJmRyaXZlcl9hdHRyX2dyYWJi ZWRfZGV2aWNlcyk7CisKKwl1c2JfZGVyZWdpc3RlcigmdXNiYmFja191c2JfZHJpdmVyKTsK K30KZGlmZiAtciA1MWRlY2MzOWU1ZTcgLXIgOWVmMmU4YzZjZjNkIGRyaXZlcnMveGVuL3Vz YmJhY2sveGVuYnVzLmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAg KzAwMDAKKysrIGIvZHJpdmVycy94ZW4vdXNiYmFjay94ZW5idXMuYwlNb24gTWFyIDE2IDE4 OjQxOjEyIDIwMDkgKzA5MDAKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiB4ZW5idXMuYwor ICoKKyAqIFhlbmJ1cyBpbnRlcmZhY2UgZm9yIFVTQiBiYWNrZW5kIGRyaXZlci4KKyAqCisg KiBDb3B5cmlnaHQgKEMpIDIwMDksIEZVSklUU1UgTEFCT1JBVE9SSUVTIExURC4KKyAqIEF1 dGhvcjogTm9ib3J1IEl3YW1hdHN1IDxuX2l3YW1hdHN1QGpwLmZ1aml0c3UuY29tPgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK KyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKyAqCisgKiBvciwKKyAqCisgKiBXaGVuIGRpc3RyaWJ1dGVkIHNlcGFyYXRl bHkgZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvCisgKiBvdGhl ciBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6 CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRv CisgKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisg KiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRl ZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CisjaW5jbHVk ZSAidXNiYmFjay5oIgorCitzdGF0aWMgaW50IHN0YXJ0X3hlbnVzYmQodXNiaWZfdCAqdXNi aWYpCit7CisgICAgICAgIGludCBlcnIgPSAwOworICAgICAgICBjaGFyIG5hbWVbVEFTS19D T01NX0xFTl07CisKKyAgICAgICAgc25wcmludGYobmFtZSwgVEFTS19DT01NX0xFTiwgInVz YmJhY2suJWQuJWQiLCB1c2JpZi0+ZG9taWQsIHVzYmlmLT5oYW5kbGUpOworICAgICAgICB1 c2JpZi0+eGVudXNiZCA9IGt0aHJlYWRfcnVuKHVzYmJrX3NjaGVkdWxlLCB1c2JpZiwgbmFt ZSk7CisgICAgICAgIGlmIChJU19FUlIodXNiaWYtPnhlbnVzYmQpKSB7CisgICAgICAgICAg ICAgICAgZXJyID0gUFRSX0VSUih1c2JpZi0+eGVudXNiZCk7CisgICAgICAgICAgICAgICAg dXNiaWYtPnhlbnVzYmQgPSBOVUxMOworICAgICAgICAgICAgICAgIHhlbmJ1c19kZXZfZXJy b3IodXNiaWYtPnhiZGV2LCBlcnIsICJzdGFydCB4ZW51c2JkIik7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1c2JiYWNrX3JlbW92ZShzdHJ1 Y3QgeGVuYnVzX2RldmljZSAqZGV2KQoreworCXVzYmlmX3QgKnVzYmlmID0gZGV2LT5kZXYu ZHJpdmVyX2RhdGE7CisKKwlpZiAodXNiaWYpIHsKKwkJdXNiaWZfZGlzY29ubmVjdCh1c2Jp Zik7CisJCXVzYmlmX2ZyZWUodXNiaWYpOzsKKwl9CisJZGV2LT5kZXYuZHJpdmVyX2RhdGEg PSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiYmFja19wcm9iZShz dHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LAorCQkJICBjb25zdCBzdHJ1Y3QgeGVuYnVzX2Rl dmljZV9pZCAqaWQpCit7CisJdXNiaWZfdCAqdXNiaWY7CisJdW5zaWduZWQgaW50IGhhbmRs ZTsKKwlpbnQgZXJyOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RF VjsKKworCWhhbmRsZSA9IHNpbXBsZV9zdHJ0b3VsKHN0cnJjaHIoZGV2LT5vdGhlcmVuZCwn LycpKzEsIE5VTEwsIDApOworCXVzYmlmID0gdXNiaWZfYWxsb2MoZGV2LT5vdGhlcmVuZF9p ZCwgaGFuZGxlKTsKKwlpZiAoIXVzYmlmKSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCAt RU5PTUVNLCAiYWxsb2NhdGluZyBiYWNrZW5kIGludGVyZmFjZSIpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisJdXNiaWYtPnhiZGV2ID0gZGV2OworCWRldi0+ZGV2LmRyaXZlcl9kYXRh ID0gdXNiaWY7CisKKwllcnIgPSB4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3Rh dGVJbml0V2FpdCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CisK K2ZhaWw6CisJdXNiYmFja19yZW1vdmUoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IGNvbm5lY3RfcmluZyh1c2JpZl90ICp1c2JpZikKK3sKKwlzdHJ1Y3QgeGVuYnVz X2RldmljZSAqZGV2ID0gdXNiaWYtPnhiZGV2OworCXVuc2lnbmVkIGxvbmcgcmluZ19yZWY7 CisJdW5zaWduZWQgaW50IGV2dGNobjsKKwlpbnQgZXJyOworCisJZXJyID0geGVuYnVzX2dh dGhlcihYQlRfTklMLCBkZXYtPm90aGVyZW5kLAorCQkJICAgICJyaW5nLXJlZiIsICIlbHUi LCAmcmluZ19yZWYsCisJCQkgICAgImV2ZW50LWNoYW5uZWwiLCAiJXUiLCAmZXZ0Y2huLCBO VUxMKTsKKwlpZiAoZXJyKSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsCisJCQkJ ICJyZWFkaW5nICVzL3JpbmctcmVmIGFuZCBldmVudC1jaGFubmVsIiwKKwkJCQkgZGV2LT5v dGhlcmVuZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcHJpbnRrKCJ1c2JiYWNrOiByaW5n LXJlZiAlbGQsIGV2ZW50LWNoYW5uZWwgJWRcbiIsCisJICAgICAgIHJpbmdfcmVmLCBldnRj aG4pOworCisJZXJyID0gdXNiaWZfbWFwKHVzYmlmLCByaW5nX3JlZiwgZXZ0Y2huKTsKKwlp ZiAoZXJyKSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJtYXBwaW5nIHJpbmct cmVmICVsdSBwb3J0ICV1IiwKKwkJCQkgcmluZ19yZWYsIGV2dGNobik7CisJCXJldHVybiBl cnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNiYmFja19kb19ob3RwbHVnKHVz YmlmX3QgKnVzYmlmKQoreworCXN0cnVjdCB4ZW5idXNfdHJhbnNhY3Rpb24geGJ0OworCXN0 cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYgPSB1c2JpZi0+eGJkZXY7CisJc3RydWN0IHVzYnN0 dWIgKnN0dWIgPSBOVUxMOworCWludCBlcnI7CisJY2hhciBwb3J0X3N0cls4XTsKKwlpbnQg aTsKKwlpbnQgbnVtX3BvcnRzOworCWludCBzdGF0ZTsKKworYWdhaW46CisJCWVyciA9IHhl bmJ1c190cmFuc2FjdGlvbl9zdGFydCgmeGJ0KTsKKwkJaWYgKGVycikgeworCQkJeGVuYnVz X2Rldl9mYXRhbChkZXYsIGVyciwgInN0YXJ0aW5nIHRyYW5zYWN0aW9uIik7CisJCQlyZXR1 cm47CisJCX0KKworCQllcnIgPSB4ZW5idXNfc2NhbmYoeGJ0LCBkZXYtPm5vZGVuYW1lLAor CQkJCQkibnVtLXBvcnRzIiwgIiVkIiwgJm51bV9wb3J0cyk7CisKKwkJZm9yIChpID0gMTsg aSA8PSBudW1fcG9ydHM7IGkrKykgeworCQkJc3R1YiA9IGZpbmRfYXR0YWNoZWRfZGV2aWNl KHVzYmlmLCBpKTsKKwkJCWlmIChzdHViKQorCQkJCXN0YXRlID0gc3R1Yi0+dWRldi0+c3Bl ZWQ7CisJCQllbHNlCisJCQkJc3RhdGUgPSAwOworCQkJc3ByaW50Zihwb3J0X3N0ciwgInBv cnQtJWQiLCBpKTsKKwkJCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVuYW1l LCBwb3J0X3N0ciwgIiVkIiwgc3RhdGUpOworCQkJaWYgKGVycikgeworCQkJCXhlbmJ1c19k ZXZfZmF0YWwoZGV2LCBlcnIsICJ3cml0aW5nIHBvcnQtJWQgc3RhdGUiLCBpKTsKKwkJCQln b3RvIGFib3J0OworCQkJfQorCQl9CisKKwkJZXJyID0geGVuYnVzX3RyYW5zYWN0aW9uX2Vu ZCh4YnQsIDApOworCQlpZiAoZXJyID09IC1FQUdBSU4pCisJCQlnb3RvIGFnYWluOworCQlp ZiAoZXJyKQorCQkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgImNvbXBsZXRpbmcgdHJh bnNhY3Rpb24iKTsKKworCQlyZXR1cm47CisKK2Fib3J0OgorCQl4ZW5idXNfdHJhbnNhY3Rp b25fZW5kKHhidCwgMSk7Cit9CisKK3ZvaWQgdXNiYmFja19yZWNvbmZpZ3VyZSh1c2JpZl90 ICp1c2JpZikKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gdXNiaWYtPnhiZGV2 OworCisJaWYgKGRldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVDb25uZWN0ZWQpCisJCXhlbmJ1 c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmcpOworfQorCit2 b2lkIGZyb250ZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiwKKwkJCQkg ICAgIGVudW0geGVuYnVzX3N0YXRlIGZyb250ZW5kX3N0YXRlKQoreworCXVzYmlmX3QgKnVz YmlmID0gZGV2LT5kZXYuZHJpdmVyX2RhdGE7CisJaW50IGVycjsKKworCXN3aXRjaCAoZnJv bnRlbmRfc3RhdGUpIHsKKwljYXNlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nOgorCQlpZiAo ZGV2LT5zdGF0ZSA9PSBYZW5idXNTdGF0ZUNsb3NlZCkgeworCQkJcHJpbnRrKCIlczogJXM6 IHByZXBhcmUgZm9yIHJlY29ubmVjdFxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRl di0+bm9kZW5hbWUpOworCQkJeGVuYnVzX3N3aXRjaF9zdGF0ZShkZXYsIFhlbmJ1c1N0YXRl SW5pdFdhaXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxp c2VkOgorCQllcnIgPSBjb25uZWN0X3JpbmcodXNiaWYpOworCQlpZiAoZXJyKQorCQkJYnJl YWs7CisJCXN0YXJ0X3hlbnVzYmQodXNiaWYpOworCQl1c2JiYWNrX2RvX2hvdHBsdWcodXNi aWYpOworCQl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQp OworCQlicmVhazsKKworCWNhc2UgWGVuYnVzU3RhdGVDb25uZWN0ZWQ6CisJCWlmIChkZXYt PnN0YXRlID09IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKQorCQkJYnJlYWs7CisJCXhlbmJ1c19z d2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNvbm5lY3RlZCk7CisJCWJyZWFrOworCisJ Y2FzZSBYZW5idXNTdGF0ZUNsb3Npbmc6CisJCXVzYmlmX2Rpc2Nvbm5lY3QodXNiaWYpOwor CQl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDbG9zaW5nKTsKKwkJYnJl YWs7CisKKwljYXNlIFhlbmJ1c1N0YXRlQ2xvc2VkOgorCQl4ZW5idXNfc3dpdGNoX3N0YXRl KGRldiwgWGVuYnVzU3RhdGVDbG9zZWQpOworCQlicmVhazsKKworCWNhc2UgWGVuYnVzU3Rh dGVSZWNvbmZpZ3VyaW5nOgorCQl1c2JiYWNrX2RvX2hvdHBsdWcodXNiaWYpOworCQl4ZW5i dXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyZWQpOworCQlicmVh azsKKworCWNhc2UgWGVuYnVzU3RhdGVVbmtub3duOgorCQlkZXZpY2VfdW5yZWdpc3Rlcigm ZGV2LT5kZXYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXhlbmJ1c19kZXZfZmF0YWwo ZGV2LCAtRUlOVkFMLCAic2F3IHN0YXRlICVkIGF0IGZyb250ZW5kIiwKKwkJCQkgZnJvbnRl bmRfc3RhdGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVu YnVzX2RldmljZV9pZCB1c2JiYWNrX2lkc1tdID0geworCXsgInZ1c2IiIH0sCisJeyAiIiB9 LAorfTsKKworc3RhdGljIHN0cnVjdCB4ZW5idXNfZHJpdmVyIHVzYmJhY2tfZHJpdmVyID0g eworCS5uYW1lID0gInZ1c2IiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pZHMgPSB1 c2JiYWNrX2lkcywKKwkucHJvYmUgPSB1c2JiYWNrX3Byb2JlLAorCS5vdGhlcmVuZF9jaGFu Z2VkID0gZnJvbnRlbmRfY2hhbmdlZCwKKwkucmVtb3ZlID0gdXNiYmFja19yZW1vdmUsCit9 OworCit2b2lkIHVzYmJhY2tfeGVuYnVzX2luaXQodm9pZCkKK3sKKwl4ZW5idXNfcmVnaXN0 ZXJfYmFja2VuZCgmdXNiYmFja19kcml2ZXIpOworfQorCit2b2lkIHVzYmJhY2tfeGVuYnVz X2V4aXQodm9pZCkKK3sKKwl4ZW5idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnVzYmJhY2tfZHJp dmVyKTsKK30K --------------010306000400070109030204 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 --------------010306000400070109030204--