From mboxrd@z Thu Jan 1 00:00:00 1970 From: Noboru Iwamatsu Subject: [PATCH 2/3] PVUSB update and bugfix: backend part Date: Wed, 07 Oct 2009 16:28:08 +0900 Message-ID: <4ACC4308.30305@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080808010303040704030203" 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. --------------080808010303040704030203 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Signed-off-by: Noboru Iwamatsu --------------080808010303040704030203 Content-Type: text/plain; name="usbback-v2.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="usbback-v2.patch" ZGlmZiAtciA0YWMzZTFkNjYwNWMgLXIgM2JlOTM5OTc1YWQ2IGRyaXZlcnMveGVuL3VzYmJh Y2svaW50ZXJmYWNlLmMKLS0tIGEvZHJpdmVycy94ZW4vdXNiYmFjay9pbnRlcmZhY2UuYwlU dWUgU2VwIDI5IDExOjIzOjA2IDIwMDkgKzAxMDAKKysrIGIvZHJpdmVycy94ZW4vdXNiYmFj ay9pbnRlcmZhY2UuYwlUdWUgT2N0IDA2IDE1OjE4OjI3IDIwMDkgKzA5MDAKQEAgLTQ4LDcg KzQ4LDcgQEAKIHN0YXRpYyBMSVNUX0hFQUQodXNiaWZfbGlzdCk7CiBzdGF0aWMgREVGSU5F X1NQSU5MT0NLKHVzYmlmX2xpc3RfbG9jayk7CiAKLXVzYmlmX3QgKmZpbmRfdXNiaWYoaW50 IGRvbV9pZCwgaW50IGRldl9pZCkKK3VzYmlmX3QgKmZpbmRfdXNiaWYoZG9taWRfdCBkb21p ZCwgdW5zaWduZWQgaW50IGhhbmRsZSkKIHsKIAl1c2JpZl90ICp1c2JpZjsKIAlpbnQgZm91 bmQgPSAwOwpAQCAtNTYsOCArNTYsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmlm X2xpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodXNiaWYsICZ1c2Jp Zl9saXN0LCB1c2JpZl9saXN0KSB7Ci0JCWlmICh1c2JpZi0+ZG9taWQgPT0gZG9tX2lkCi0J CQkmJiB1c2JpZi0+aGFuZGxlID09IGRldl9pZCkgeworCQlpZiAodXNiaWYtPmRvbWlkID09 IGRvbWlkCisJCQkmJiB1c2JpZi0+aGFuZGxlID09IGhhbmRsZSkgewogCQkJZm91bmQgPSAx OwogCQkJYnJlYWs7CiAJCX0KQEAgLTgyLDE2ICs4MiwxNiBAQAogCiAJdXNiaWYtPmRvbWlk ID0gZG9taWQ7CiAJdXNiaWYtPmhhbmRsZSA9IGhhbmRsZTsKLQlzcGluX2xvY2tfaW5pdCgm dXNiaWYtPnJpbmdfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnVzYmlmLT51cmJfcmluZ19s b2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmdXNiaWYtPmNvbm5fcmluZ19sb2NrKTsKIAlhdG9t aWNfc2V0KCZ1c2JpZi0+cmVmY250LCAwKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1c2Jp Zi0+d3EpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzYmlmLT53YWl0aW5nX3RvX2ZyZWUp OwotCXNwaW5fbG9ja19pbml0KCZ1c2JpZi0+cGx1Z19sb2NrKTsKLQlJTklUX0xJU1RfSEVB RCgmdXNiaWYtPnBsdWdnZWRfZGV2aWNlcyk7CisJc3Bpbl9sb2NrX2luaXQoJnVzYmlmLT5z dHViX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZ1c2JpZi0+c3R1Yl9saXN0KTsKIAlzcGlu X2xvY2tfaW5pdCgmdXNiaWYtPmFkZHJfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IFVTQl9E RVZfQUREUl9TSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX0RFVl9BRERSX1NJ WkU7IGkrKykKIAkJdXNiaWYtPmFkZHJfdGFibGVbaV0gPSBOVUxMOwotCX0KIAogCXNwaW5f bG9ja19pcnFzYXZlKCZ1c2JpZl9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZCgmdXNi aWYtPnVzYmlmX2xpc3QsICZ1c2JpZl9saXN0KTsKQEAgLTEwMCw3MCArMTAwLDEwOSBAQAog CXJldHVybiB1c2JpZjsKIH0KIAotc3RhdGljIGludCBtYXBfZnJvbnRlbmRfcGFnZSh1c2Jp Zl90ICp1c2JpZiwgdW5zaWduZWQgbG9uZyBzaGFyZWRfcGFnZSkKK3N0YXRpYyBpbnQgbWFw X2Zyb250ZW5kX3BhZ2VzKHVzYmlmX3QgKnVzYmlmLAorCQkJCWdyYW50X3JlZl90IHVyYl9y aW5nX3JlZiwKKwkJCQlncmFudF9yZWZfdCBjb25uX3JpbmdfcmVmKQogewogCXN0cnVjdCBn bnR0YWJfbWFwX2dyYW50X3JlZiBvcDsKIAotCWdudHRhYl9zZXRfbWFwX29wKCZvcCwgKHVu c2lnbmVkIGxvbmcpdXNiaWYtPnJpbmdfYXJlYS0+YWRkciwKLQkJCSAgR05UTUFQX2hvc3Rf bWFwLCBzaGFyZWRfcGFnZSwgdXNiaWYtPmRvbWlkKTsKKwlnbnR0YWJfc2V0X21hcF9vcCgm b3AsICh1bnNpZ25lZCBsb25nKXVzYmlmLT51cmJfcmluZ19hcmVhLT5hZGRyLAorCQkJICBH TlRNQVBfaG9zdF9tYXAsIHVyYl9yaW5nX3JlZiwgdXNiaWYtPmRvbWlkKTsKIAogCWlmIChI WVBFUlZJU09SX2dyYW50X3RhYmxlX29wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwg MSkpCiAJCUJVRygpOwogCiAJaWYgKG9wLnN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIg ImdyYW50IHRhYmxlIG9wZXJhdGlvbiBmYWlsdXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJS ICJncmFudCB0YWJsZSBmYWlsdXJlIG1hcHBpbmcgdXJiX3JpbmdfcmVmXG4iKTsKIAkJcmV0 dXJuIG9wLnN0YXR1czsKIAl9CiAKLQl1c2JpZi0+c2htZW1fcmVmID0gc2hhcmVkX3BhZ2U7 Ci0JdXNiaWYtPnNobWVtX2hhbmRsZSA9IG9wLmhhbmRsZTsKKwl1c2JpZi0+dXJiX3NobWVt X3JlZiA9IHVyYl9yaW5nX3JlZjsKKwl1c2JpZi0+dXJiX3NobWVtX2hhbmRsZSA9IG9wLmhh bmRsZTsKKworCWdudHRhYl9zZXRfbWFwX29wKCZvcCwgKHVuc2lnbmVkIGxvbmcpdXNiaWYt PmNvbm5fcmluZ19hcmVhLT5hZGRyLAorCQkJICBHTlRNQVBfaG9zdF9tYXAsIGNvbm5fcmlu Z19yZWYsIHVzYmlmLT5kb21pZCk7CisKKwlpZiAoSFlQRVJWSVNPUl9ncmFudF90YWJsZV9v cChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLCAmb3AsIDEpKQorCQlCVUcoKTsKKworCWlmIChv cC5zdGF0dXMpIHsKKwkJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgdW5vcDsKKwkJ Z250dGFiX3NldF91bm1hcF9vcCgmdW5vcCwKKwkJCQkodW5zaWduZWQgbG9uZykgdXNiaWYt PnVyYl9yaW5nX2FyZWEtPmFkZHIsCisJCQkJR05UTUFQX2hvc3RfbWFwLCB1c2JpZi0+dXJi X3NobWVtX2hhbmRsZSk7CisJCVZPSUQoSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRU QUJPUF91bm1hcF9ncmFudF9yZWYsICZ1bm9wLAorCQkJCTEpKTsKKwkJcHJpbnRrKEtFUk5f RVJSICJncmFudCB0YWJsZSBmYWlsdXJlIG1hcHBpbmcgY29ubl9yaW5nX3JlZlxuIik7CisJ CXJldHVybiBvcC5zdGF0dXM7CisJfQorCisJdXNiaWYtPmNvbm5fc2htZW1fcmVmID0gY29u bl9yaW5nX3JlZjsKKwl1c2JpZi0+Y29ubl9zaG1lbV9oYW5kbGUgPSBvcC5oYW5kbGU7CiAK IAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdW5tYXBfZnJvbnRlbmRfcGFnZSh1c2Jp Zl90ICp1c2JpZikKK3N0YXRpYyB2b2lkIHVubWFwX2Zyb250ZW5kX3BhZ2VzKHVzYmlmX3Qg KnVzYmlmKQogewogCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIG9wOwogCi0JZ250 dGFiX3NldF91bm1hcF9vcCgmb3AsICh1bnNpZ25lZCBsb25nKXVzYmlmLT5yaW5nX2FyZWEt PmFkZHIsCi0JCQkgICAgR05UTUFQX2hvc3RfbWFwLCB1c2JpZi0+c2htZW1faGFuZGxlKTsK KwlnbnR0YWJfc2V0X3VubWFwX29wKCZvcCwgKHVuc2lnbmVkIGxvbmcpdXNiaWYtPnVyYl9y aW5nX2FyZWEtPmFkZHIsCisJCQkgICAgR05UTUFQX2hvc3RfbWFwLCB1c2JpZi0+dXJiX3No bWVtX2hhbmRsZSk7CisKKwlpZiAoSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRUQUJP UF91bm1hcF9ncmFudF9yZWYsICZvcCwgMSkpCisJCUJVRygpOworCisJZ250dGFiX3NldF91 bm1hcF9vcCgmb3AsICh1bnNpZ25lZCBsb25nKXVzYmlmLT5jb25uX3JpbmdfYXJlYS0+YWRk ciwKKwkJCSAgICBHTlRNQVBfaG9zdF9tYXAsIHVzYmlmLT5jb25uX3NobWVtX2hhbmRsZSk7 CiAKIAlpZiAoSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRUQUJPUF91bm1hcF9ncmFu dF9yZWYsICZvcCwgMSkpCiAJCUJVRygpOwogfQogCi1pbnQgdXNiaWZfbWFwKHVzYmlmX3Qg KnVzYmlmLCB1bnNpZ25lZCBsb25nIHNoYXJlZF9wYWdlLCB1bnNpZ25lZCBpbnQgZXZ0Y2hu KQoraW50IHVzYmlmX21hcCh1c2JpZl90ICp1c2JpZiwgdW5zaWduZWQgbG9uZyB1cmJfcmlu Z19yZWYsCisJCXVuc2lnbmVkIGxvbmcgY29ubl9yaW5nX3JlZiwgdW5zaWduZWQgaW50IGV2 dGNobikKIHsKLQlpbnQgZXJyOwotCXVzYmlmX3NyaW5nX3QgKnNyaW5nOworCWludCBlcnIg PSAtRU5PTUVNOworCisJdXNiaWZfdXJiX3NyaW5nX3QgKnVyYl9zcmluZzsKKwl1c2JpZl9j b25uX3NyaW5nX3QgKmNvbm5fc3Jpbmc7CiAKIAlpZiAodXNiaWYtPmlycSkKIAkJcmV0dXJu IDA7CiAKLQlpZiAoKHVzYmlmLT5yaW5nX2FyZWEgPSBhbGxvY192bV9hcmVhKFBBR0VfU0la RSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICgodXNiaWYtPnVyYl9yaW5n X2FyZWEgPSBhbGxvY192bV9hcmVhKFBBR0VfU0laRSkpID09IE5VTEwpCisJCXJldHVybiBl cnI7CisJaWYgKCh1c2JpZi0+Y29ubl9yaW5nX2FyZWEgPSBhbGxvY192bV9hcmVhKFBBR0Vf U0laRSkpID09IE5VTEwpCisJCWdvdG8gZmFpbF9hbGxvYzsKIAotCWVyciA9IG1hcF9mcm9u dGVuZF9wYWdlKHVzYmlmLCBzaGFyZWRfcGFnZSk7Ci0JaWYgKGVycikgewotCQlmcmVlX3Zt X2FyZWEodXNiaWYtPnJpbmdfYXJlYSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Jc3Jpbmcg PSAodXNiaWZfc3JpbmdfdCAqKSB1c2JpZi0+cmluZ19hcmVhLT5hZGRyOwotCUJBQ0tfUklO R19JTklUKCZ1c2JpZi0+cmluZywgc3JpbmcsIFBBR0VfU0laRSk7CisJZXJyID0gbWFwX2Zy b250ZW5kX3BhZ2VzKHVzYmlmLCB1cmJfcmluZ19yZWYsIGNvbm5fcmluZ19yZWYpOworCWlm IChlcnIpCisJCWdvdG8gZmFpbF9tYXA7CiAKIAllcnIgPSBiaW5kX2ludGVyZG9tYWluX2V2 dGNobl90b19pcnFoYW5kbGVyKAotCQkJdXNiaWYtPmRvbWlkLCBldnRjaG4sIHVzYmJrX2Jl X2ludCwgMCwgInVzYmlmLWJhY2tlbmQiLCB1c2JpZik7CisJCQl1c2JpZi0+ZG9taWQsIGV2 dGNobiwgdXNiYmtfYmVfaW50LCAwLAorCQkJInVzYmlmLWJhY2tlbmQiLCB1c2JpZik7CiAJ aWYgKGVyciA8IDApCi0JewotCQl1bm1hcF9mcm9udGVuZF9wYWdlKHVzYmlmKTsKLQkJZnJl ZV92bV9hcmVhKHVzYmlmLT5yaW5nX2FyZWEpOwotCQl1c2JpZi0+cmluZy5zcmluZyA9IE5V TEw7Ci0JCXJldHVybiBlcnI7Ci0JfQorCQlnb3RvIGZhaWxfZXZ0Y2huOwogCXVzYmlmLT5p cnEgPSBlcnI7CiAKKwl1cmJfc3JpbmcgPSAodXNiaWZfdXJiX3NyaW5nX3QgKikgdXNiaWYt PnVyYl9yaW5nX2FyZWEtPmFkZHI7CisJQkFDS19SSU5HX0lOSVQoJnVzYmlmLT51cmJfcmlu ZywgdXJiX3NyaW5nLCBQQUdFX1NJWkUpOworCisJY29ubl9zcmluZyA9ICh1c2JpZl9jb25u X3NyaW5nX3QgKikgdXNiaWYtPmNvbm5fcmluZ19hcmVhLT5hZGRyOworCUJBQ0tfUklOR19J TklUKCZ1c2JpZi0+Y29ubl9yaW5nLCBjb25uX3NyaW5nLCBQQUdFX1NJWkUpOworCiAJcmV0 dXJuIDA7CisKK2ZhaWxfZXZ0Y2huOgorCXVubWFwX2Zyb250ZW5kX3BhZ2VzKHVzYmlmKTsK K2ZhaWxfbWFwOgorCWZyZWVfdm1fYXJlYSh1c2JpZi0+Y29ubl9yaW5nX2FyZWEpOworZmFp bF9hbGxvYzoKKwlmcmVlX3ZtX2FyZWEodXNiaWYtPnVyYl9yaW5nX2FyZWEpOworCisJcmV0 dXJuIGVycjsKIH0KIAogdm9pZCB1c2JpZl9kaXNjb25uZWN0KHVzYmlmX3QgKnVzYmlmKQpA QCAtMTc2LDEyICsyMTUsMTIgQEAKIAkJdXNiaWYtPnhlbnVzYmQgPSBOVUxMOwogCX0KIAot CXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JpZi0+cGx1Z19sb2NrLCBmbGFncyk7Ci0JbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKHN0dWIsIHRtcCwgJnVzYmlmLT5wbHVnZ2VkX2RldmljZXMs IHBsdWdnZWRfbGlzdCkgeworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JpZi0+c3R1Yl9sb2Nr LCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0dWIsIHRtcCwgJnVzYmlm LT5zdHViX2xpc3QsIGRldl9saXN0KSB7CiAJCXVzYmJrX3VubGlua191cmJzKHN0dWIpOwog CQlkZXRhY2hfZGV2aWNlX3dpdGhvdXRfbG9jayh1c2JpZiwgc3R1Yik7CiAJfQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnVzYmlmLT5wbHVnX2xvY2ssIGZsYWdzKTsKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZ1c2JpZi0+c3R1Yl9sb2NrLCBmbGFncyk7CiAKIAl3YWl0X2V2 ZW50KHVzYmlmLT53YWl0aW5nX3RvX2ZyZWUsIGF0b21pY19yZWFkKCZ1c2JpZi0+cmVmY250 KSA9PSAwKTsKIApAQCAtMTkwLDEwICsyMjksMTIgQEAKIAkJdXNiaWYtPmlycSA9IDA7CiAJ fQogCi0JaWYgKHVzYmlmLT5yaW5nLnNyaW5nKSB7Ci0JCXVubWFwX2Zyb250ZW5kX3BhZ2Uo dXNiaWYpOwotCQlmcmVlX3ZtX2FyZWEodXNiaWYtPnJpbmdfYXJlYSk7Ci0JCXVzYmlmLT5y aW5nLnNyaW5nID0gTlVMTDsKKwlpZiAodXNiaWYtPnVyYl9yaW5nLnNyaW5nKSB7CisJCXVu bWFwX2Zyb250ZW5kX3BhZ2VzKHVzYmlmKTsKKwkJZnJlZV92bV9hcmVhKHVzYmlmLT51cmJf cmluZ19hcmVhKTsKKwkJZnJlZV92bV9hcmVhKHVzYmlmLT5jb25uX3JpbmdfYXJlYSk7CisJ CXVzYmlmLT51cmJfcmluZy5zcmluZyA9IE5VTEw7CisJCXVzYmlmLT5jb25uX3Jpbmcuc3Jp bmcgPSBOVUxMOwogCX0KIH0KIApkaWZmIC1yIDRhYzNlMWQ2NjA1YyAtciAzYmU5Mzk5NzVh ZDYgZHJpdmVycy94ZW4vdXNiYmFjay91c2JiYWNrLmMKLS0tIGEvZHJpdmVycy94ZW4vdXNi YmFjay91c2JiYWNrLmMJVHVlIFNlcCAyOSAxMToyMzowNiAyMDA5ICswMTAwCisrKyBiL2Ry aXZlcnMveGVuL3VzYmJhY2svdXNiYmFjay5jCVR1ZSBPY3QgMDYgMTU6MTg6MjcgMjAwOSAr MDkwMApAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lIHBlbmRpbmdfaGFuZGxlKF9yZXEs IF9zZWcpIFwKIAkocGVuZGluZ19ncmFudF9oYW5kbGVzW3ZhZGRyX3BhZ2VucihfcmVxLCBf c2VnKV0pCiAKLXN0YXRpYyBwZW5kaW5nX3JlcV90KiBhbGxvY19yZXEodm9pZCkKK3N0YXRp YyBwZW5kaW5nX3JlcV90ICphbGxvY19yZXEodm9pZCkKIHsKIAlwZW5kaW5nX3JlcV90ICpy ZXEgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMjIsNyArMjIyLDcgQEAK IAl9CiB9CiAKLXN0YXRpYyBpbnQgdXNiYmtfYWxsb2NfdXJiKHVzYmlmX3JlcXVlc3RfdCAq cmVxLCBwZW5kaW5nX3JlcV90ICpwZW5kaW5nX3JlcSkKK3N0YXRpYyBpbnQgdXNiYmtfYWxs b2NfdXJiKHVzYmlmX3VyYl9yZXF1ZXN0X3QgKnJlcSwgcGVuZGluZ19yZXFfdCAqcGVuZGlu Z19yZXEpCiB7CiAJaW50IHJldDsKIApAQCAtMjk4LDIxICsyOTgsMjEgQEAKIAkJCQkJaW50 MzJfdCBhY3R1YWxfbGVuZ3RoLCBpbnQzMl90IGVycm9yX2NvdW50LCB1aW50MTZfdCBzdGFy dF9mcmFtZSkKIHsKIAl1c2JpZl90ICp1c2JpZiA9IHBlbmRpbmdfcmVxLT51c2JpZjsKLQl1 c2JpZl9yZXNwb25zZV90ICpyaW5nX3JlczsKKwl1c2JpZl91cmJfcmVzcG9uc2VfdCAqcmVz OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG5vdGlmeTsKIAotCXNwaW5fbG9ja19p cnFzYXZlKCZ1c2JpZi0+cmluZ19sb2NrLCBmbGFncyk7Ci0JcmluZ19yZXMgPSBSSU5HX0dF VF9SRVNQT05TRSgmdXNiaWYtPnJpbmcsIHVzYmlmLT5yaW5nLnJzcF9wcm9kX3B2dCk7Ci0J cmluZ19yZXMtPmlkID0gcGVuZGluZ19yZXEtPmlkOwotCXJpbmdfcmVzLT5zdGF0dXMgPSBz dGF0dXM7Ci0JcmluZ19yZXMtPmFjdHVhbF9sZW5ndGggPSBhY3R1YWxfbGVuZ3RoOwotCXJp bmdfcmVzLT5lcnJvcl9jb3VudCA9IGVycm9yX2NvdW50OwotCXJpbmdfcmVzLT5zdGFydF9m cmFtZSA9IHN0YXJ0X2ZyYW1lOwotCXVzYmlmLT5yaW5nLnJzcF9wcm9kX3B2dCsrOworCXNw aW5fbG9ja19pcnFzYXZlKCZ1c2JpZi0+dXJiX3JpbmdfbG9jaywgZmxhZ3MpOworCXJlcyA9 IFJJTkdfR0VUX1JFU1BPTlNFKCZ1c2JpZi0+dXJiX3JpbmcsIHVzYmlmLT51cmJfcmluZy5y c3BfcHJvZF9wdnQpOworCXJlcy0+aWQgPSBwZW5kaW5nX3JlcS0+aWQ7CisJcmVzLT5zdGF0 dXMgPSBzdGF0dXM7CisJcmVzLT5hY3R1YWxfbGVuZ3RoID0gYWN0dWFsX2xlbmd0aDsKKwly ZXMtPmVycm9yX2NvdW50ID0gZXJyb3JfY291bnQ7CisJcmVzLT5zdGFydF9mcmFtZSA9IHN0 YXJ0X2ZyYW1lOworCXVzYmlmLT51cmJfcmluZy5yc3BfcHJvZF9wdnQrKzsKIAliYXJyaWVy KCk7Ci0JUklOR19QVVNIX1JFU1BPTlNFU19BTkRfQ0hFQ0tfTk9USUZZKCZ1c2JpZi0+cmlu Zywgbm90aWZ5KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JpZi0+cmluZ19sb2Nr LCBmbGFncyk7CisJUklOR19QVVNIX1JFU1BPTlNFU19BTkRfQ0hFQ0tfTk9USUZZKCZ1c2Jp Zi0+dXJiX3JpbmcsIG5vdGlmeSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaWYt PnVyYl9yaW5nX2xvY2ssIGZsYWdzKTsKIAogCWlmIChub3RpZnkpCiAJCW5vdGlmeV9yZW1v dGVfdmlhX2lycSh1c2JpZi0+aXJxKTsKQEAgLTM0Niw3ICszNDYsNyBAQAogfQogCiBzdGF0 aWMgaW50IHVzYmJrX2dudHRhYl9tYXAodXNiaWZfdCAqdXNiaWYsCi0JCQl1c2JpZl9yZXF1 ZXN0X3QgKnJlcSwgcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEpCisJCQl1c2JpZl91cmJf cmVxdWVzdF90ICpyZXEsIHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxKQogewogCWludCBp LCByZXQ7CiAJdW5zaWduZWQgaW50IG5yX3NlZ3M7CkBAIC00MzQsNyArNDM0LDcgQEAKIAly ZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCB1c2Jia19pbml0X3VyYih1c2JpZl9yZXF1 ZXN0X3QgKnJlcSwgcGVuZGluZ19yZXFfdCAqcGVuZGluZ19yZXEpCitzdGF0aWMgdm9pZCB1 c2Jia19pbml0X3VyYih1c2JpZl91cmJfcmVxdWVzdF90ICpyZXEsIHBlbmRpbmdfcmVxX3Qg KnBlbmRpbmdfcmVxKQogewogCXVuc2lnbmVkIGludCBwaXBlOwogCXN0cnVjdCB1c2JfZGV2 aWNlICp1ZGV2ID0gcGVuZGluZ19yZXEtPnN0dWItPnVkZXY7CkBAIC02NzEsMTQgKzY3MSwx NCBAQAogCWludCBmb3VuZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5f bG9ja19pcnFzYXZlKCZ1c2JpZi0+cGx1Z19sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFj aF9lbnRyeShzdHViLCAmdXNiaWYtPnBsdWdnZWRfZGV2aWNlcywgcGx1Z2dlZF9saXN0KSB7 Ci0JCWlmIChzdHViLT5pZC0+cG9ydG51bSA9PSBwb3J0bnVtKSB7CisJc3Bpbl9sb2NrX2ly cXNhdmUoJnVzYmlmLT5zdHViX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHN0dWIsICZ1c2JpZi0+c3R1Yl9saXN0LCBkZXZfbGlzdCkgeworCQlpZiAoc3R1Yi0+cG9y dGlkLT5wb3J0bnVtID09IHBvcnRudW0pIHsKIAkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwog CQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmlmLT5wbHVnX2xvY2ssIGZs YWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JpZi0+c3R1Yl9sb2NrLCBmbGFn cyk7CiAKIAlpZiAoZm91bmQpCiAJCXJldHVybiBzdHViOwpAQCAtNjg2LDcgKzY4Niw0NyBA QAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX2FuZF9zdWJtaXRfc3Bl Y2lhbF9jdHJscmVxKHVzYmlmX3QgKnVzYmlmLCB1c2JpZl9yZXF1ZXN0X3QgKnJlcSwgcGVu ZGluZ19yZXFfdCAqcGVuZGluZ19yZXEpCitzdGF0aWMgdm9pZCBwcm9jZXNzX3VubGlua19y ZXEodXNiaWZfdCAqdXNiaWYsCisJCXVzYmlmX3VyYl9yZXF1ZXN0X3QgKnJlcSwgcGVuZGlu Z19yZXFfdCAqcGVuZGluZ19yZXEpCit7CisJcGVuZGluZ19yZXFfdCAqdW5saW5rX3JlcSA9 IE5VTEw7CisJaW50IGRldm51bTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCisJZGV2bnVtID0gdXNiX3BpcGVkZXZpY2UocmVxLT5waXBlKTsKKwlpZiAodW5s aWtlbHkoZGV2bnVtID09IDApKSB7CisJCXBlbmRpbmdfcmVxLT5zdHViID0gZmluZF9hdHRh Y2hlZF9kZXZpY2UodXNiaWYsIHVzYmlmX3BpcGVwb3J0bnVtKHJlcS0+cGlwZSkpOworCQlp ZiAodW5saWtlbHkoIXBlbmRpbmdfcmVxLT5zdHViKSkgeworCQkJcmV0ID0gLUVOT0RFVjsK KwkJCWdvdG8gZmFpbF9yZXNwb25zZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh1bmxpa2Vs eSghdXNiaWYtPmFkZHJfdGFibGVbZGV2bnVtXSkpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJ CQlnb3RvIGZhaWxfcmVzcG9uc2U7CisJCX0KKwkJcGVuZGluZ19yZXEtPnN0dWIgPSB1c2Jp Zi0+YWRkcl90YWJsZVtkZXZudW1dOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZW5k aW5nX3JlcS0+c3R1Yi0+c3VibWl0dGluZ19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFj aF9lbnRyeSh1bmxpbmtfcmVxLCAmcGVuZGluZ19yZXEtPnN0dWItPnN1Ym1pdHRpbmdfbGlz dCwgdXJiX2xpc3QpIHsKKwkJaWYgKHVubGlua19yZXEtPmlkID09IHJlcS0+dS51bmxpbmsu dW5saW5rX2lkKSB7CisJCQlyZXQgPSB1c2JfdW5saW5rX3VyYih1bmxpbmtfcmVxLT51cmIp OworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGVuZGlu Z19yZXEtPnN0dWItPnN1Ym1pdHRpbmdfbG9jaywgZmxhZ3MpOworCitmYWlsX3Jlc3BvbnNl OgorCXVzYmJrX2RvX3Jlc3BvbnNlKHBlbmRpbmdfcmVxLCByZXQsIDAsIDAsIDApOworCXVz YmlmX3B1dCh1c2JpZik7CisJZnJlZV9yZXEocGVuZGluZ19yZXEpOworCXJldHVybjsKK30K Kworc3RhdGljIGludCBjaGVja19hbmRfc3VibWl0X3NwZWNpYWxfY3RybHJlcSh1c2JpZl90 ICp1c2JpZiwKKwkJdXNiaWZfdXJiX3JlcXVlc3RfdCAqcmVxLCBwZW5kaW5nX3JlcV90ICpw ZW5kaW5nX3JlcSkKIHsKIAlpbnQgZGV2bnVtOwogCXN0cnVjdCB1c2JzdHViICpzdHViID0g TlVMTDsKQEAgLTgyNCw3ICs4NjQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBkaXNwYXRjaF9y ZXF1ZXN0X3RvX3BlbmRpbmdfcmVxcyh1c2JpZl90ICp1c2JpZiwKLQkJdXNiaWZfcmVxdWVz dF90ICpyZXEsCisJCXVzYmlmX3VyYl9yZXF1ZXN0X3QgKnJlcSwKIAkJcGVuZGluZ19yZXFf dCAqcGVuZGluZ19yZXEpCiB7CiAJaW50IHJldDsKQEAgLTgzNCwxNyArODc0LDEzIEBACiAK IAliYXJyaWVyKCk7CiAKLQkvKgotCSAqIFRPRE86Ci0JICogcmVjZWl2ZSB1bmxpbmsgcmVx dWVzdCBhbmQgY2FuY2VsIHRoZSB1cmIgaW4gYmFja2VuZAotCSAqLwotI2lmIDAKLQlpZiAo dW5saWtlbHkodXNiX3BpcGV1bmxpbmsocmVxLT5waXBlKSkpIHsKKwl1c2JpZl9nZXQodXNi aWYpOwogCisJLyogdW5saW5rIHJlcXVlc3QgKi8KKwlpZiAodW5saWtlbHkodXNiaWZfcGlw ZXVubGluayhyZXEtPnBpcGUpKSkgeworCQlwcm9jZXNzX3VubGlua19yZXEodXNiaWYsIHJl cSwgcGVuZGluZ19yZXEpOworCQlyZXR1cm47CiAJfQotI2VuZGlmCi0KLQl1c2JpZl9nZXQo dXNiaWYpOwogCiAJaWYgKHVzYl9waXBlY29udHJvbChyZXEtPnBpcGUpKSB7CiAJCWlmIChj aGVja19hbmRfc3VibWl0X3NwZWNpYWxfY3RybHJlcSh1c2JpZiwgcmVxLCBwZW5kaW5nX3Jl cSkpCkBAIC05MjcsMTggKzk2MywxOCBAQAogCiBzdGF0aWMgaW50IHVzYmJrX3N0YXJ0X3N1 Ym1pdF91cmIodXNiaWZfdCAqdXNiaWYpCiB7Ci0JdXNiaWZfYmFja19yaW5nX3QgKnVzYl9y aW5nID0gJnVzYmlmLT5yaW5nOwotCXVzYmlmX3JlcXVlc3RfdCAqcmluZ19yZXE7CisJdXNi aWZfdXJiX2JhY2tfcmluZ190ICp1cmJfcmluZyA9ICZ1c2JpZi0+dXJiX3Jpbmc7CisJdXNi aWZfdXJiX3JlcXVlc3RfdCAqcmVxOwogCXBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxOwog CVJJTkdfSURYIHJjLCBycDsKIAlpbnQgbW9yZV90b19kbyA9IDA7CiAKLQlyYyA9IHVzYl9y aW5nLT5yZXFfY29uczsKLQlycCA9IHVzYl9yaW5nLT5zcmluZy0+cmVxX3Byb2Q7CisJcmMg PSB1cmJfcmluZy0+cmVxX2NvbnM7CisJcnAgPSB1cmJfcmluZy0+c3JpbmctPnJlcV9wcm9k OwogCXJtYigpOwogCiAJd2hpbGUgKHJjICE9IHJwKSB7Ci0JCWlmIChSSU5HX1JFUVVFU1Rf Q09OU19PVkVSRkxPVyh1c2JfcmluZywgcmMpKSB7CisJCWlmIChSSU5HX1JFUVVFU1RfQ09O U19PVkVSRkxPVyh1cmJfcmluZywgcmMpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJS SU5HX1JFUVVFU1RfQ09OU19PVkVSRkxPV1xuIik7CiAJCQlicmVhazsKIAkJfQpAQCAtOTQ5 LDczICs5ODUsMTAwIEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJpbmdfcmVxID0gUklOR19H RVRfUkVRVUVTVCh1c2JfcmluZywgcmMpOwotCQl1c2JfcmluZy0+cmVxX2NvbnMgPSArK3Jj OworCQlyZXEgPSBSSU5HX0dFVF9SRVFVRVNUKHVyYl9yaW5nLCByYyk7CisJCXVyYl9yaW5n LT5yZXFfY29ucyA9ICsrcmM7CiAKLQkJZGlzcGF0Y2hfcmVxdWVzdF90b19wZW5kaW5nX3Jl cXModXNiaWYsIHJpbmdfcmVxLAorCQlkaXNwYXRjaF9yZXF1ZXN0X3RvX3BlbmRpbmdfcmVx cyh1c2JpZiwgcmVxLAogCQkJCQkJCXBlbmRpbmdfcmVxKTsKIAl9CiAKLQlSSU5HX0ZJTkFM X0NIRUNLX0ZPUl9SRVFVRVNUUygmdXNiaWYtPnJpbmcsIG1vcmVfdG9fZG8pOworCVJJTkdf RklOQUxfQ0hFQ0tfRk9SX1JFUVVFU1RTKCZ1c2JpZi0+dXJiX3JpbmcsIG1vcmVfdG9fZG8p OwogCiAJY29uZF9yZXNjaGVkKCk7CiAKIAlyZXR1cm4gbW9yZV90b19kbzsKIH0KIAordm9p ZCB1c2Jia19ob3RwbHVnX25vdGlmeSh1c2JpZl90ICp1c2JpZiwgaW50IHBvcnRudW0sIGlu dCBzcGVlZCkKK3sKKwl1c2JpZl9jb25uX2JhY2tfcmluZ190ICpyaW5nID0gJnVzYmlmLT5j b25uX3Jpbmc7CisJdXNiaWZfY29ubl9yZXF1ZXN0X3QgKnJlcTsKKwl1c2JpZl9jb25uX3Jl c3BvbnNlX3QgKnJlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBpZDsKKwlpbnQg bm90aWZ5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmlmLT5jb25uX3JpbmdfbG9jaywg ZmxhZ3MpOworCisJcmVxID0gUklOR19HRVRfUkVRVUVTVChyaW5nLCByaW5nLT5yZXFfY29u cyk7OworCWlkID0gcmVxLT5pZDsKKwlyaW5nLT5yZXFfY29ucysrOworCXJpbmctPnNyaW5n LT5yZXFfZXZlbnQgPSByaW5nLT5yZXFfY29ucyArIDE7CisKKwlyZXMgPSBSSU5HX0dFVF9S RVNQT05TRShyaW5nLCByaW5nLT5yc3BfcHJvZF9wdnQpOworCXJlcy0+aWQgPSBpZDsKKwly ZXMtPnBvcnRudW0gPSBwb3J0bnVtOworCXJlcy0+c3BlZWQgPSBzcGVlZDsKKwlyaW5nLT5y c3BfcHJvZF9wdnQrKzsKKwlSSU5HX1BVU0hfUkVTUE9OU0VTX0FORF9DSEVDS19OT1RJRlko cmluZywgbm90aWZ5KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmlmLT5jb25u X3JpbmdfbG9jaywgZmxhZ3MpOworCisJaWYgKG5vdGlmeSkKKwkJbm90aWZ5X3JlbW90ZV92 aWFfaXJxKHVzYmlmLT5pcnEpOworfQorCiBpbnQgdXNiYmtfc2NoZWR1bGUodm9pZCAqYXJn KQogewotICAgICAgICB1c2JpZl90ICp1c2JpZiA9ICh1c2JpZl90ICopYXJnOworCXVzYmlm X3QgKnVzYmlmID0gKHVzYmlmX3QgKikgYXJnOwogCi0gICAgICAgIHVzYmlmX2dldCh1c2Jp Zik7CisJdXNiaWZfZ2V0KHVzYmlmKTsKIAotICAgICAgICB3aGlsZSgha3RocmVhZF9zaG91 bGRfc3RvcCgpKSB7Ci0gICAgICAgICAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxl KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JpZi0+d3EsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmlmLT53YWl0aW5nX3JlcXMgfHwga3RocmVh ZF9zaG91bGRfc3RvcCgpKTsKLSAgICAgICAgICAgICAgICB3YWl0X2V2ZW50X2ludGVycnVw dGlibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfZnJlZV93 cSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWxpc3RfZW1wdHkoJnBlbmRp bmdfZnJlZSkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKLSAgICAgICAgICAgICAgICB1 c2JpZi0+d2FpdGluZ19yZXFzID0gMDsKLSAgICAgICAgICAgICAgICBzbXBfbWIoKTsKKwl3 aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQl3YWl0X2V2ZW50X2ludGVycnVw dGlibGUoCisJCQl1c2JpZi0+d3EsCisJCQl1c2JpZi0+d2FpdGluZ19yZXFzIHx8IGt0aHJl YWRfc2hvdWxkX3N0b3AoKSk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgKKwkJCXBl bmRpbmdfZnJlZV93cSwKKwkJCSFsaXN0X2VtcHR5KCZwZW5kaW5nX2ZyZWUpIHx8IGt0aHJl YWRfc2hvdWxkX3N0b3AoKSk7CisJCXVzYmlmLT53YWl0aW5nX3JlcXMgPSAwOworCQlzbXBf bWIoKTsKIAotICAgICAgICAgICAgICAgIGlmICh1c2Jia19zdGFydF9zdWJtaXRfdXJiKHVz YmlmKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzYmlmLT53YWl0aW5nX3JlcXMgPSAx OwotICAgICAgICB9CisJCWlmICh1c2Jia19zdGFydF9zdWJtaXRfdXJiKHVzYmlmKSkKKwkJ CXVzYmlmLT53YWl0aW5nX3JlcXMgPSAxOworCX0KIAotICAgICAgICB1c2JpZi0+eGVudXNi ZCA9IE5VTEw7Ci0gICAgICAgIHVzYmlmX3B1dCh1c2JpZik7CisJdXNiaWYtPnhlbnVzYmQg PSBOVUxMOworCXVzYmlmX3B1dCh1c2JpZik7CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0 dXJuIDA7CiB9CiAKIC8qCi0gKiBhdHRhY2ggdGhlIGdyYWJiZWQgZGV2aWNlIHRvIHVzYmlm LgorICogYXR0YWNoIHVzYnN0dWIgZGV2aWNlIHRvIHVzYmlmLgogICovCi12b2lkIHVzYmJr X3BsdWdfZGV2aWNlKHVzYmlmX3QgKnVzYmlmLCBzdHJ1Y3QgdXNic3R1YiAqc3R1YikKK3Zv aWQgdXNiYmtfYXR0YWNoX2RldmljZSh1c2JpZl90ICp1c2JpZiwgc3RydWN0IHVzYnN0dWIg KnN0dWIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZl KCZ1c2JpZi0+cGx1Z19sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoJnN0dWItPnBsdWdnZWRf bGlzdCwgJnVzYmlmLT5wbHVnZ2VkX2RldmljZXMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnVzYmlmLT5wbHVnX2xvY2ssIGZsYWdzKTsKLQlzdHViLT5wbHVnZ2VkID0gMTsKKwlz cGluX2xvY2tfaXJxc2F2ZSgmdXNiaWYtPnN0dWJfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRk KCZzdHViLT5kZXZfbGlzdCwgJnVzYmlmLT5zdHViX2xpc3QpOworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnVzYmlmLT5zdHViX2xvY2ssIGZsYWdzKTsKIAlzdHViLT51c2JpZiA9IHVz YmlmOwogfQogCiAvKgotICogZGV0YWNoIHRoZSBncmFiYmVkIGRldmljZSBmcm9tIHVzYmlm LgorICogZGV0YWNoIHVzYnN0dWIgZGV2aWNlIGZyb20gdXNiaWYuCiAgKi8KLXZvaWQgdXNi YmtfdW5wbHVnX2RldmljZSh1c2JpZl90ICp1c2JpZiwgc3RydWN0IHVzYnN0dWIgKnN0dWIp Cit2b2lkIHVzYmJrX2RldGFjaF9kZXZpY2UodXNiaWZfdCAqdXNiaWYsIHN0cnVjdCB1c2Jz dHViICpzdHViKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoc3R1Yi0+YWRk cikKIAkJdXNiYmtfc2V0X2FkZHJlc3ModXNiaWYsIHN0dWIsIHN0dWItPmFkZHIsIDApOwot CXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JpZi0+cGx1Z19sb2NrLCBmbGFncyk7Ci0JbGlzdF9k ZWwoJnN0dWItPnBsdWdnZWRfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNi aWYtPnBsdWdfbG9jaywgZmxhZ3MpOwotCXN0dWItPnBsdWdnZWQgPSAwOworCXNwaW5fbG9j a19pcnFzYXZlKCZ1c2JpZi0+c3R1Yl9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnN0dWIt PmRldl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JpZi0+c3R1Yl9sb2Nr LCBmbGFncyk7CiAJc3R1Yi0+dXNiaWYgPSBOVUxMOwogfQogCkBAIC0xMDIzLDggKzEwODYs NyBAQAogewogCWlmIChzdHViLT5hZGRyKQogCQl1c2Jia19zZXRfYWRkcmVzcyh1c2JpZiwg c3R1Yiwgc3R1Yi0+YWRkciwgMCk7Ci0JbGlzdF9kZWwoJnN0dWItPnBsdWdnZWRfbGlzdCk7 Ci0Jc3R1Yi0+cGx1Z2dlZCA9IDA7CisJbGlzdF9kZWwoJnN0dWItPmRldl9saXN0KTsKIAlz dHViLT51c2JpZiA9IE5VTEw7CiB9CiAKQEAgLTEwNTQsOSArMTExNiw4IEBACiAJbWVtc2V0 KHBlbmRpbmdfcmVxcywgMCwgc2l6ZW9mKHBlbmRpbmdfcmVxcykpOwogCUlOSVRfTElTVF9I RUFEKCZwZW5kaW5nX2ZyZWUpOwogCi0JZm9yIChpID0gMDsgaSA8IHVzYmlmX3JlcXM7IGkr KykgeworCWZvciAoaSA9IDA7IGkgPCB1c2JpZl9yZXFzOyBpKyspCiAJCWxpc3RfYWRkX3Rh aWwoJnBlbmRpbmdfcmVxc1tpXS5mcmVlX2xpc3QsICZwZW5kaW5nX2ZyZWUpOwotCX0KIAog CXVzYmJhY2tfeGVuYnVzX2luaXQoKTsKIApkaWZmIC1yIDRhYzNlMWQ2NjA1YyAtciAzYmU5 Mzk5NzVhZDYgZHJpdmVycy94ZW4vdXNiYmFjay91c2JiYWNrLmgKLS0tIGEvZHJpdmVycy94 ZW4vdXNiYmFjay91c2JiYWNrLmgJVHVlIFNlcCAyOSAxMToyMzowNiAyMDA5ICswMTAwCisr KyBiL2RyaXZlcnMveGVuL3VzYmJhY2svdXNiYmFjay5oCVR1ZSBPY3QgMDYgMTU6MTg6Mjcg MjAwOSArMDkwMApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHhlbi9nbnR0YWIuaD4K ICNpbmNsdWRlIDx4ZW4vZHJpdmVyX3V0aWwuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNl L3hlbi5oPgorI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJm YWNlL2lvL3VzYmlmLmg+CiAKIHN0cnVjdCB1c2JzdHViOwpAQCAtNjYsODkgKzY3LDEwMyBA QAogI2RlZmluZSBVU0JfREVWX0FERFJfU0laRSAxMjgKIAogdHlwZWRlZiBzdHJ1Y3QgdXNi aWZfc3QgewotCWRvbWlkX3QgICAgICAgICAgIGRvbWlkOwotCXVuc2lnbmVkIGludCAgICAg IGhhbmRsZTsKKwlkb21pZF90IGRvbWlkOworCXVuc2lnbmVkIGludCBoYW5kbGU7CisJaW50 IG51bV9wb3J0czsKKwllbnVtIHVzYl9zcGVjX3ZlcnNpb24gdXNiX3ZlcjsKKwogCXN0cnVj dCB4ZW5idXNfZGV2aWNlICp4YmRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHVzYmlmX2xpc3Q7 CiAKIAl1bnNpZ25lZCBpbnQgICAgICBpcnE7CiAKLQl1c2JpZl9iYWNrX3JpbmdfdCByaW5n OwotCXN0cnVjdCB2bV9zdHJ1Y3QgKnJpbmdfYXJlYTsKKwl1c2JpZl91cmJfYmFja19yaW5n X3QgdXJiX3Jpbmc7CisJdXNiaWZfY29ubl9iYWNrX3JpbmdfdCBjb25uX3Jpbmc7CisJc3Ry dWN0IHZtX3N0cnVjdCAqdXJiX3JpbmdfYXJlYTsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICpjb25u X3JpbmdfYXJlYTsKIAotCXNwaW5sb2NrX3QgcmluZ19sb2NrOworCXNwaW5sb2NrX3QgdXJi X3JpbmdfbG9jazsKKwlzcGlubG9ja190IGNvbm5fcmluZ19sb2NrOwogCWF0b21pY190IHJl ZmNudDsKLQlncmFudF9oYW5kbGVfdCBzaG1lbV9oYW5kbGU7Ci0JZ3JhbnRfcmVmX3Qgc2ht ZW1fcmVmOworCisJZ3JhbnRfaGFuZGxlX3QgdXJiX3NobWVtX2hhbmRsZTsKKwlncmFudF9y ZWZfdCB1cmJfc2htZW1fcmVmOworCWdyYW50X2hhbmRsZV90IGNvbm5fc2htZW1faGFuZGxl OworCWdyYW50X3JlZl90IGNvbm5fc2htZW1fcmVmOworCisJc3RydWN0IHhlbmJ1c193YXRj aCBiYWNrZW5kX3dhdGNoOwogCiAJLyogZGV2aWNlIGFkZHJlc3MgbG9va3VwIHRhYmxlICov CisJc3RydWN0IHVzYnN0dWIgKmFkZHJfdGFibGVbVVNCX0RFVl9BRERSX1NJWkVdOwogCXNw aW5sb2NrX3QgYWRkcl9sb2NrOwotCXN0cnVjdCB1c2JzdHViICphZGRyX3RhYmxlW1VTQl9E RVZfQUREUl9TSVpFXTsKIAotCS8qIHBsdWdnZWQgZGV2aWNlIGxpc3QgKi8KLQl1bnNpZ25l ZCBwbGFnZ2FibGU6MTsKLQlzcGlubG9ja190IHBsdWdfbG9jazsKLQlzdHJ1Y3QgbGlzdF9o ZWFkIHBsdWdnZWRfZGV2aWNlczsKKwkvKiBjb25uZWN0ZWQgZGV2aWNlIGxpc3QgKi8KKwlz dHJ1Y3QgbGlzdF9oZWFkIHN0dWJfbGlzdDsKKwlzcGlubG9ja190IHN0dWJfbG9jazsKIAog CS8qIHJlcXVlc3Qgc2NoZWR1bGUgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnhlbnVzYmQ7 CiAJdW5zaWduZWQgaW50IHdhaXRpbmdfcmVxczsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0 aW5nX3RvX2ZyZWU7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7Ci0KIH0gdXNiaWZfdDsKIAot c3RydWN0IHVzYnN0dWJfaWQKLXsKK3N0cnVjdCB2dXNiX3BvcnRfaWQgewogCXN0cnVjdCBs aXN0X2hlYWQgaWRfbGlzdDsKIAotCWNoYXIgYnVzX2lkW0JVU19JRF9TSVpFXTsKLQlpbnQg ZG9tX2lkOwotCWludCBkZXZfaWQ7CisJY2hhciBwaHlzX2J1c1tCVVNfSURfU0laRV07CisJ ZG9taWRfdCBkb21pZDsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlOwogCWludCBwb3J0bnVtOwor CXVuc2lnbmVkIGlzX2Nvbm5lY3RlZDoxOwogfTsKIAotc3RydWN0IHVzYnN0dWIKLXsKLQlz dHJ1Y3QgdXNic3R1Yl9pZCAqaWQ7CitzdHJ1Y3QgdXNic3R1YiB7CisJc3RydWN0IGtyZWYg a3JlZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OworCisJc3RydWN0IHZ1c2JfcG9y dF9pZCAqcG9ydGlkOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB1c2Jf aW50ZXJmYWNlICppbnRlcmZhY2U7CiAJdXNiaWZfdCAqdXNiaWY7Ci0KLQlzdHJ1Y3QgbGlz dF9oZWFkIGdyYWJiZWRfbGlzdDsKLQotCXVuc2lnbmVkIHBsdWdnZWQ6MTsKLQlzdHJ1Y3Qg bGlzdF9oZWFkIHBsdWdnZWRfbGlzdDsKLQogCWludCBhZGRyOwogCisJc3RydWN0IGxpc3Rf aGVhZCBzdWJtaXR0aW5nX2xpc3Q7CiAJc3BpbmxvY2tfdCBzdWJtaXR0aW5nX2xvY2s7Ci0J c3RydWN0IGxpc3RfaGVhZCBzdWJtaXR0aW5nX2xpc3Q7CiB9OwogCiB1c2JpZl90ICp1c2Jp Zl9hbGxvYyhkb21pZF90IGRvbWlkLCB1bnNpZ25lZCBpbnQgaGFuZGxlKTsKIHZvaWQgdXNi aWZfZGlzY29ubmVjdCh1c2JpZl90ICp1c2JpZik7CiB2b2lkIHVzYmlmX2ZyZWUodXNiaWZf dCAqdXNiaWYpOwotaW50IHVzYmlmX21hcCh1c2JpZl90ICp1c2JpZiwgdW5zaWduZWQgbG9u ZyBzaGFyZWRfcGFnZSwgdW5zaWduZWQgaW50IGV2dGNobik7CitpbnQgdXNiaWZfbWFwKHVz YmlmX3QgKnVzYmlmLCB1bnNpZ25lZCBsb25nIHVyYl9yaW5nX3JlZiwKKwkJdW5zaWduZWQg bG9uZyBjb25uX3JpbmdfcmVmLCB1bnNpZ25lZCBpbnQgZXZ0Y2huKTsKIAogI2RlZmluZSB1 c2JpZl9nZXQoX2IpIChhdG9taWNfaW5jKCYoX2IpLT5yZWZjbnQpKQogI2RlZmluZSB1c2Jp Zl9wdXQoX2IpIFwKIAlkbyB7IFwKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJihfYikt PnJlZmNudCkpIFwKLQkJd2FrZV91cCgmKF9iKS0+d2FpdGluZ190b19mcmVlKTsgXAorCQkJ d2FrZV91cCgmKF9iKS0+d2FpdGluZ190b19mcmVlKTsgXAogCX0gd2hpbGUgKDApCiAKK3Vz YmlmX3QgKmZpbmRfdXNiaWYoZG9taWRfdCBkb21pZCwgdW5zaWduZWQgaW50IGhhbmRsZSk7 CiB2b2lkIHVzYmJhY2tfeGVuYnVzX2luaXQodm9pZCk7CiB2b2lkIHVzYmJhY2tfeGVuYnVz X2V4aXQodm9pZCk7Ci0KK3N0cnVjdCB2dXNiX3BvcnRfaWQgKmZpbmRfcG9ydGlkX2J5X2J1 c2lkKGNvbnN0IGNoYXIgKmJ1c2lkKTsKK3N0cnVjdCB2dXNiX3BvcnRfaWQgKmZpbmRfcG9y dGlkKGNvbnN0IGRvbWlkX3QgZG9taWQsCisJCQkJCQljb25zdCB1bnNpZ25lZCBpbnQgaGFu ZGxlLAorCQkJCQkJY29uc3QgaW50IHBvcnRudW0pOworaW50IHBvcnRpZF9hZGQoY29uc3Qg Y2hhciAqYnVzaWQsCisJCQkJCWNvbnN0IGRvbWlkX3QgZG9taWQsCisJCQkJCWNvbnN0IHVu c2lnbmVkIGludCBoYW5kbGUsCisJCQkJCWNvbnN0IGludCBwb3J0bnVtKTsKK2ludCBwb3J0 aWRfcmVtb3ZlKGNvbnN0IGRvbWlkX3QgZG9taWQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGlu dCBoYW5kbGUsCisJCQkJCWNvbnN0IGludCBwb3J0bnVtKTsKIGlycXJldHVybl90IHVzYmJr X2JlX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsK IGludCB1c2Jia19zY2hlZHVsZSh2b2lkICphcmcpOwogc3RydWN0IHVzYnN0dWIgKmZpbmRf YXR0YWNoZWRfZGV2aWNlKHVzYmlmX3QgKnVzYmlmLCBpbnQgcG9ydCk7Ci1zdHJ1Y3QgdXNi c3R1YiAqZmluZF9ncmFiYmVkX2RldmljZShpbnQgZG9tX2lkLCBpbnQgZGV2X2lkLCBpbnQg cG9ydCk7Ci11c2JpZl90ICpmaW5kX3VzYmlmKGludCBkb21faWQsIGludCBkZXZfaWQpOwot dm9pZCB1c2JiYWNrX3JlY29uZmlndXJlKHVzYmlmX3QgKnVzYmlmKTsKLXZvaWQgdXNiYmtf cGx1Z19kZXZpY2UodXNiaWZfdCAqdXNiaWYsIHN0cnVjdCB1c2JzdHViICpzdHViKTsKLXZv aWQgdXNiYmtfdW5wbHVnX2RldmljZSh1c2JpZl90ICp1c2JpZiwgc3RydWN0IHVzYnN0dWIg KnN0dWIpOwordm9pZCB1c2Jia19hdHRhY2hfZGV2aWNlKHVzYmlmX3QgKnVzYmlmLCBzdHJ1 Y3QgdXNic3R1YiAqc3R1Yik7Cit2b2lkIHVzYmJrX2RldGFjaF9kZXZpY2UodXNiaWZfdCAq dXNiaWYsIHN0cnVjdCB1c2JzdHViICpzdHViKTsKK3ZvaWQgdXNiYmtfaG90cGx1Z19ub3Rp ZnkodXNiaWZfdCAqdXNiaWYsIGludCBwb3J0bnVtLCBpbnQgc3BlZWQpOwogdm9pZCBkZXRh Y2hfZGV2aWNlX3dpdGhvdXRfbG9jayh1c2JpZl90ICp1c2JpZiwgc3RydWN0IHVzYnN0dWIg KnN0dWIpOwogdm9pZCB1c2Jia191bmxpbmtfdXJicyhzdHJ1Y3QgdXNic3R1YiAqc3R1Yik7 CiAKZGlmZiAtciA0YWMzZTFkNjYwNWMgLXIgM2JlOTM5OTc1YWQ2IGRyaXZlcnMveGVuL3Vz YmJhY2svdXNic3R1Yi5jCi0tLSBhL2RyaXZlcnMveGVuL3VzYmJhY2svdXNic3R1Yi5jCVR1 ZSBTZXAgMjkgMTE6MjM6MDYgMjAwOSArMDEwMAorKysgYi9kcml2ZXJzL3hlbi91c2JiYWNr L3VzYnN0dWIuYwlUdWUgT2N0IDA2IDE1OjE4OjI3IDIwMDkgKzA5MDAKQEAgLTQ1LDM2ICs0 NSwxMDYgQEAKIAogI2luY2x1ZGUgInVzYmJhY2suaCIKIAotc3RhdGljIExJU1RfSEVBRCh1 c2JzdHViX2lkcyk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVzYnN0dWJfaWRzX2xvY2sp Owotc3RhdGljIExJU1RfSEVBRChncmFiYmVkX2RldmljZXMpOwotc3RhdGljIERFRklORV9T UElOTE9DSyhncmFiYmVkX2RldmljZXNfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHBvcnRf bGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBvcnRfbGlzdF9sb2NrKTsKIAotc3Ry dWN0IHVzYnN0dWIgKmZpbmRfZ3JhYmJlZF9kZXZpY2UoaW50IGRvbV9pZCwgaW50IGRldl9p ZCwgaW50IHBvcnRudW0pCitzdHJ1Y3QgdnVzYl9wb3J0X2lkICpmaW5kX3BvcnRpZF9ieV9i dXNpZChjb25zdCBjaGFyICpidXNpZCkKIHsKLQlzdHJ1Y3QgdXNic3R1YiAqc3R1YjsKKwlz dHJ1Y3QgdnVzYl9wb3J0X2lkICpwb3J0aWQ7CiAJaW50IGZvdW5kID0gMDsKIAl1bnNpZ25l ZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdyYWJiZWRfZGV2aWNlc19s b2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdHViLCAmZ3JhYmJlZF9kZXZp Y2VzLCBncmFiYmVkX2xpc3QpIHsKLQkJaWYgKHN0dWItPmlkLT5kb21faWQgPT0gZG9tX2lk Ci0JCQkJJiYgc3R1Yi0+aWQtPmRldl9pZCA9PSBkZXZfaWQKLQkJCQkmJiBzdHViLT5pZC0+ cG9ydG51bSA9PSBwb3J0bnVtKSB7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRfbGlzdF9s b2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0aWQsICZwb3J0X2xpc3Qs IGlkX2xpc3QpIHsKKwkJaWYgKCEoc3RybmNtcChwb3J0aWQtPnBoeXNfYnVzLCBidXNpZCwg QlVTX0lEX1NJWkUpKSkgewogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JhYmJlZF9kZXZpY2VzX2xvY2ssIGZsYWdzKTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJ aWYgKGZvdW5kKQotCQlyZXR1cm4gc3R1YjsKKwkJcmV0dXJuIHBvcnRpZDsKIAogCXJldHVy biBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYnN0dWIgKnVzYnN0dWJfYWxsb2Moc3Ry dWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLQkJCQkJCXN0cnVjdCB1c2JzdHViX2lk ICpzdHViX2lkKQorc3RydWN0IHZ1c2JfcG9ydF9pZCAqZmluZF9wb3J0aWQoY29uc3QgZG9t aWRfdCBkb21pZCwKKwkJCQkJCWNvbnN0IHVuc2lnbmVkIGludCBoYW5kbGUsCisJCQkJCQlj b25zdCBpbnQgcG9ydG51bSkKK3sKKwlzdHJ1Y3QgdnVzYl9wb3J0X2lkICpwb3J0aWQ7CisJ aW50IGZvdW5kID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShw b3J0aWQsICZwb3J0X2xpc3QsIGlkX2xpc3QpIHsKKwkJaWYgKChwb3J0aWQtPmRvbWlkID09 IGRvbWlkKQorCQkJCSYmIChwb3J0aWQtPmhhbmRsZSA9PSBoYW5kbGUpCisJCQkJJiYgKHBv cnRpZC0+cG9ydG51bSA9PSBwb3J0bnVtKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVh azsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X2xpc3RfbG9jaywg ZmxhZ3MpOworCisJaWYgKGZvdW5kKQorCQlyZXR1cm4gcG9ydGlkOworCisJcmV0dXJuIE5V TEw7Cit9CisKK2ludCBwb3J0aWRfYWRkKGNvbnN0IGNoYXIgKmJ1c2lkLAorCQkJCQljb25z dCBkb21pZF90IGRvbWlkLAorCQkJCQljb25zdCB1bnNpZ25lZCBpbnQgaGFuZGxlLAorCQkJ CQljb25zdCBpbnQgcG9ydG51bSkKK3sKKwlzdHJ1Y3QgdnVzYl9wb3J0X2lkICpwb3J0aWQ7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBvcnRpZCA9IGt6YWxsb2Moc2l6ZW9mKCpw b3J0aWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnRpZCkKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlwb3J0aWQtPmRvbWlkID0gZG9taWQ7CisJcG9ydGlkLT5oYW5kbGUgPSBoYW5kbGU7 CisJcG9ydGlkLT5wb3J0bnVtID0gcG9ydG51bTsKKworCXN0cm5jcHkocG9ydGlkLT5waHlz X2J1cywgYnVzaWQsIEJVU19JRF9TSVpFKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0 X2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZwb3J0aWQtPmlkX2xpc3QsICZwb3J0 X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfbGlzdF9sb2NrLCBmbGFn cyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBvcnRpZF9yZW1vdmUoY29uc3QgZG9taWRf dCBkb21pZCwKKwkJCQkJY29uc3QgdW5zaWduZWQgaW50IGhhbmRsZSwKKwkJCQkJY29uc3Qg aW50IHBvcnRudW0pCit7CisJc3RydWN0IHZ1c2JfcG9ydF9pZCAqcG9ydGlkLCAqdG1wOwor CWludCBlcnIgPSAtRU5PRU5UOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmcG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUocG9ydGlkLCB0bXAsICZwb3J0X2xpc3QsIGlkX2xpc3QpIHsKKwkJaWYgKHBv cnRpZC0+ZG9taWQgPT0gZG9taWQKKwkJCQkmJiBwb3J0aWQtPmhhbmRsZSA9PSBoYW5kbGUK KwkJCQkmJiBwb3J0aWQtPnBvcnRudW0gPT0gcG9ydG51bSkgeworCQkJbGlzdF9kZWwoJnBv cnRpZC0+aWRfbGlzdCk7CisJCQlrZnJlZShwb3J0aWQpOworCisJCQllcnIgPSAwOworCQl9 CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7 CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHVzYnN0dWIgKnVzYnN0dWJf YWxsb2Moc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCQlzdHJ1Y3QgdnVzYl9wb3J0 X2lkICpwb3J0aWQpCiB7CiAJc3RydWN0IHVzYnN0dWIgKnN0dWI7CiAKQEAgLTgzLDMxNCAr MTUzLDEzNSBAQAogCQlwcmludGsoS0VSTl9FUlIgIm5vIG1lbW9yeSBmb3IgYWxsb2MgdXNi c3R1YlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQotCXN0dWItPnVkZXYgPSB1c2JfZ2V0 X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOwotCXN0dWItPmludGVyZmFj ZSA9IGludGVyZmFjZTsKLQlzdHViLT5pZCA9IHN0dWJfaWQ7CisJa3JlZl9pbml0KCZzdHVi LT5rcmVmKTsKKwlzdHViLT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJc3R1Yi0+cG9y dGlkID0gcG9ydGlkOwogCXNwaW5fbG9ja19pbml0KCZzdHViLT5zdWJtaXR0aW5nX2xvY2sp OwogCUlOSVRfTElTVF9IRUFEKCZzdHViLT5zdWJtaXR0aW5nX2xpc3QpOwogCiAJcmV0dXJu IHN0dWI7CiB9CiAKLXN0YXRpYyBpbnQgdXNic3R1Yl9mcmVlKHN0cnVjdCB1c2JzdHViICpz dHViKQorc3RhdGljIHZvaWQgdXNic3R1Yl9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQog ewotCWlmICghc3R1YikKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IHVzYnN0dWIgKnN0 dWI7CisKKwlzdHViID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB1c2JzdHViLCBrcmVm KTsKIAogCXVzYl9wdXRfZGV2KHN0dWItPnVkZXYpOwotCXN0dWItPmludGVyZmFjZSA9IE5V TEw7CiAJc3R1Yi0+dWRldiA9IE5VTEw7Ci0Jc3R1Yi0+aWQgPSBOVUxMOworCXN0dWItPnBv cnRpZCA9IE5VTEw7CiAJa2ZyZWUoc3R1Yik7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGlj IGludCB1c2JzdHViX21hdGNoX29uZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNl LAotCQlzdHJ1Y3QgdXNic3R1Yl9pZCAqc3R1Yl9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB1 c2JzdHViX2dldChzdHJ1Y3QgdXNic3R1YiAqc3R1YikKIHsKLQljaGFyICp1ZGV2X2J1c2lk ID0gaW50ZXJmYWNlLT5kZXYucGFyZW50LT5idXNfaWQ7Ci0KLQlpZiAoIShzdHJuY21wKHN0 dWJfaWQtPmJ1c19pZCwgdWRldl9idXNpZCwgQlVTX0lEX1NJWkUpKSkgewotCQlyZXR1cm4g MTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlrcmVmX2dldCgmc3R1Yi0+a3JlZik7CiB9CiAKLXN0 YXRpYyBzdHJ1Y3QgdXNic3R1Yl9pZCAqdXNic3R1Yl9tYXRjaChzdHJ1Y3QgdXNiX2ludGVy ZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIGlubGluZSB2b2lkIHVzYnN0dWJfcHV0KHN0cnVj dCB1c2JzdHViICpzdHViKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJm YWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwotCXN0cnVjdCB1c2JzdHViX2lkICpzdHViX2lk OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZvdW5kID0gMDsKKwlrcmVmX3B1dCgm c3R1Yi0+a3JlZiwgdXNic3R1Yl9yZWxlYXNlKTsKK30KKworc3RhdGljIGludCB1c2JzdHVi X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNi X2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZh Y2VfdG9fdXNiZGV2KGludGYpOworCWNoYXIgKmJ1c2lkID0gaW50Zi0+ZGV2LnBhcmVudC0+ YnVzX2lkOworCXN0cnVjdCB2dXNiX3BvcnRfaWQgKnBvcnRpZCA9IE5VTEw7CisJc3RydWN0 IHVzYnN0dWIgKnN0dWIgPSBOVUxMOworCXVzYmlmX3QgKnVzYmlmID0gTlVMTDsKKwlpbnQg cmV0dmFsID0gLUVOT0RFVjsKIAogCS8qIGh1YiBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCwg c28gc2tpcC4gKi8KIAlpZiAodWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gIFVT Ql9DTEFTU19IVUIpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dDsKIAotCXNwaW5fbG9j a19pcnFzYXZlKCZ1c2JzdHViX2lkc19sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9l bnRyeShzdHViX2lkLCAmdXNic3R1Yl9pZHMsIGlkX2xpc3QpIHsKLQkJaWYgKHVzYnN0dWJf bWF0Y2hfb25lKGludGVyZmFjZSwgc3R1Yl9pZCkpIHsKLQkJCWZvdW5kID0gMTsKKwlwb3J0 aWQgPSBmaW5kX3BvcnRpZF9ieV9idXNpZChidXNpZCk7CisJaWYgKCFwb3J0aWQpCisJCWdv dG8gb3V0OworCisJdXNiaWYgPSBmaW5kX3VzYmlmKHBvcnRpZC0+ZG9taWQsIHBvcnRpZC0+ aGFuZGxlKTsKKwlpZiAoIXVzYmlmKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAodWRldi0+ c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJY2FzZSBVU0JfU1BFRURfRlVMTDoK KwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJaWYgKHVzYmlmLT51c2JfdmVy ID49IFVTQl9WRVJfVVNCMjApCiAJCQlicmVhazsKLQkJfQorCQkvKiBmYWxsIHRocm91Z2gg Ki8KKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmdXNic3R1Yl9pZHNfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGZvdW5kKQotCQlyZXR1cm4g c3R1Yl9pZDsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBhZGRfdG9fZ3Jh YmJlZF9kZXZpY2VzKHN0cnVjdCB1c2JzdHViICpzdHViKQotewotCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JhYmJlZF9kZXZpY2VzX2xvY2ssIGZs YWdzKTsKLQlsaXN0X2FkZCgmc3R1Yi0+Z3JhYmJlZF9saXN0LCAmZ3JhYmJlZF9kZXZpY2Vz KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncmFiYmVkX2RldmljZXNfbG9jaywgZmxh Z3MpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9ncmFiYmVkX2RldmljZXMoc3Ry dWN0IHVzYnN0dWIgKnN0dWIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5f bG9ja19pcnFzYXZlKCZncmFiYmVkX2RldmljZXNfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVs KCZzdHViLT5ncmFiYmVkX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdyYWJi ZWRfZGV2aWNlc19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNic3R1Yl9wcm9i ZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQljb25zdCBzdHJ1Y3QgdXNi X2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYnN0dWJfaWQgKnN0dWJfaWQgPSBOVUxM OwotCXN0cnVjdCB1c2JzdHViICpzdHViID0gTlVMTDsKLQl1c2JpZl90ICp1c2JpZiA9IE5V TEw7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAoKHN0dWJfaWQgPSB1c2JzdHViX21hdGNo KGludGVyZmFjZSkpKSB7Ci0JCXN0dWIgPSB1c2JzdHViX2FsbG9jKGludGVyZmFjZSwgc3R1 Yl9pZCk7CisJc3R1YiA9IGZpbmRfYXR0YWNoZWRfZGV2aWNlKHVzYmlmLCBwb3J0aWQtPnBv cnRudW0pOworCWlmICghc3R1YikgeworCQkvKiBuZXcgY29ubmVjdGlvbiAqLworCQlzdHVi ID0gdXNic3R1Yl9hbGxvYyh1ZGV2LCBwb3J0aWQpOwogCQlpZiAoIXN0dWIpCiAJCQlyZXR1 cm4gLUVOT01FTTsKKwkJdXNiYmtfYXR0YWNoX2RldmljZSh1c2JpZiwgc3R1Yik7CisJCXVz YmJrX2hvdHBsdWdfbm90aWZ5KHVzYmlmLCBwb3J0aWQtPnBvcnRudW0sIHVkZXYtPnNwZWVk KTsKKwl9IGVsc2UgeworCQkvKiBtYXliZSBhbHJlYWR5IGNhbGxlZCBhbmQgY29ubmVjdGVk IGJ5IG90aGVyIGludGYgKi8KKwkJaWYgKHN0cm5jbXAoc3R1Yi0+cG9ydGlkLT5waHlzX2J1 cywgYnVzaWQsIEJVU19JRF9TSVpFKSkKKwkJCWdvdG8gb3V0OyAvKiBpbnZhbGlkIGNhbGwg Ki8KKwl9CiAKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHN0dWIpOwotCQlhZGRf dG9fZ3JhYmJlZF9kZXZpY2VzKHN0dWIpOwotCQl1c2JpZiA9IGZpbmRfdXNiaWYoc3R1Yl9p ZC0+ZG9tX2lkLCBzdHViX2lkLT5kZXZfaWQpOwotCQlpZiAodXNiaWYpIHsKLQkJCXVzYmJr X3BsdWdfZGV2aWNlKHVzYmlmLCBzdHViKTsKLQkJCXVzYmJhY2tfcmVjb25maWd1cmUodXNi aWYpOwotCQl9CisJdXNic3R1Yl9nZXQoc3R1Yik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRm LCBzdHViKTsKKwlyZXR2YWwgPSAwOwogCi0JfSBlbHNlCi0JCXJldHZhbCA9IC1FTk9ERVY7 Ci0KK291dDoKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCB1c2JzdHViX2Rp c2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3N0YXRpYyB2b2lk IHVzYnN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlz dHJ1Y3QgdXNic3R1YiAqc3R1YgotCQk9IChzdHJ1Y3QgdXNic3R1YiAqKSB1c2JfZ2V0X2lu dGZkYXRhKGludGVyZmFjZSk7CisJCT0gKHN0cnVjdCB1c2JzdHViICopIHVzYl9nZXRfaW50 ZmRhdGEoaW50Zik7CiAKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJ dXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAogCWlmICghc3R1YikKIAkJcmV0dXJu OwogCiAJaWYgKHN0dWItPnVzYmlmKSB7Ci0JCXVzYmJhY2tfcmVjb25maWd1cmUoc3R1Yi0+ dXNiaWYpOwotCQl1c2Jia191bnBsdWdfZGV2aWNlKHN0dWItPnVzYmlmLCBzdHViKTsKKwkJ dXNiYmtfaG90cGx1Z19ub3RpZnkoc3R1Yi0+dXNiaWYsIHN0dWItPnBvcnRpZC0+cG9ydG51 bSwgMCk7CisJCXVzYmJrX2RldGFjaF9kZXZpY2Uoc3R1Yi0+dXNiaWYsIHN0dWIpOwogCX0K LQogCXVzYmJrX3VubGlua191cmJzKHN0dWIpOwotCi0JcmVtb3ZlX2Zyb21fZ3JhYmJlZF9k ZXZpY2VzKHN0dWIpOwotCi0JdXNic3R1Yl9mcmVlKHN0dWIpOwotCi0JcmV0dXJuOworCXVz YnN0dWJfcHV0KHN0dWIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzdHJfdG9fdnBvcnQo Y29uc3QgY2hhciAqYnVmLAotCQkJCQljaGFyICpwaHlzX2J1cywKLQkJCQkJaW50ICpkb21f aWQsCi0JCQkJCWludCAqZGV2X2lkLAotCQkJCQlpbnQgKnBvcnQpCi17Ci0JY2hhciAqcDsK LQlpbnQgbGVuOwotCWludCBlcnI7Ci0KLQkvKiBubyBwaHlzaWNhbCBidXMgKi8KLQlpZiAo IShwID0gc3RyY2hyKGJ1ZiwgJzonKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbGVuID0g cCAtIGJ1ZjsKLQotCS8qIGJhZCBwaHlzaWNhbCBidXMgKi8KLQlpZiAobGVuICsgMSA+IEJV U19JRF9TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmxjcHkocGh5c19idXMsIGJ1 ZiwgbGVuICsgMSk7Ci0JZXJyID0gc3NjYW5mKHAgKyAxLCAiJWQ6JWQ6JWQiLCBkb21faWQs IGRldl9pZCwgcG9ydCk7Ci0JaWYgKGVyciA9PSAzKQotCQlyZXR1cm4gMDsKLQllbHNlCi0J CXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IHVzYnN0dWJfaWRfYWRkKGNvbnN0 IGNoYXIgKmJ1c19pZCwKLQkJCQkJY29uc3QgaW50IGRvbV9pZCwKLQkJCQkJY29uc3QgaW50 IGRldl9pZCwKLQkJCQkJY29uc3QgaW50IHBvcnRudW0pCi17Ci0Jc3RydWN0IHVzYnN0dWJf aWQgKnN0dWJfaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN0dWJfaWQgPSBremFs bG9jKHNpemVvZigqc3R1Yl9pZCksIEdGUF9LRVJORUwpOwotCWlmICghc3R1Yl9pZCkKLQkJ cmV0dXJuIC1FTk9NRU07Ci0KLQlzdHViX2lkLT5kb21faWQgPSBkb21faWQ7Ci0Jc3R1Yl9p ZC0+ZGV2X2lkID0gZGV2X2lkOwotCXN0dWJfaWQtPnBvcnRudW0gPSBwb3J0bnVtOwotCi0J c3RybmNweShzdHViX2lkLT5idXNfaWQsIGJ1c19pZCwgQlVTX0lEX1NJWkUpOwotCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJnVzYnN0dWJfaWRzX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgm c3R1Yl9pZC0+aWRfbGlzdCwgJnVzYnN0dWJfaWRzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZ1c2JzdHViX2lkc19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCB1c2JzdHViX2lkX3JlbW92ZShjb25zdCBjaGFyICpwaHlzX2J1cywKLQkJCQkJ Y29uc3QgaW50IGRvbV9pZCwKLQkJCQkJY29uc3QgaW50IGRldl9pZCwKLQkJCQkJY29uc3Qg aW50IHBvcnRudW0pCi17Ci0Jc3RydWN0IHVzYnN0dWJfaWQgKnN0dWJfaWQsICp0bXA7Ci0J aW50IGVyciA9IC1FTk9FTlQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9j a19pcnFzYXZlKCZ1c2JzdHViX2lkc19sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKHN0dWJfaWQsIHRtcCwgJnVzYnN0dWJfaWRzLCBpZF9saXN0KSB7Ci0JCWlm IChzdHViX2lkLT5kb21faWQgPT0gZG9tX2lkCi0JCQkJJiYgc3R1Yl9pZC0+ZGV2X2lkID09 IGRldl9pZAotCQkJCSYmIHN0dWJfaWQtPnBvcnRudW0gPT0gcG9ydG51bSkgewotCQkJbGlz dF9kZWwoJnN0dWJfaWQtPmlkX2xpc3QpOwotCQkJa2ZyZWUoc3R1Yl9pZCk7Ci0KLQkJCWVy ciA9IDA7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNic3R1Yl9pZHNf bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHNzaXplX3QgdXNi c3R1Yl92cG9ydF9hZGQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKLQkJY29uc3Qg Y2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQljaGFyIGJ1 c19pZFtCVVNfSURfU0laRV07Ci0JaW50IGRvbV9pZDsKLQlpbnQgZGV2X2lkOwotCWludCBw b3J0bnVtOwotCi0JZXJyID0gc3RyX3RvX3Zwb3J0KGJ1ZiwgJmJ1c19pZFswXSwgJmRvbV9p ZCwgJmRldl9pZCwgJnBvcnRudW0pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJy ID0gdXNic3R1Yl9pZF9hZGQoJmJ1c19pZFswXSwgZG9tX2lkLCBkZXZfaWQsIHBvcnRudW0p OwotCi1vdXQ6Ci0JaWYgKCFlcnIpCi0JCWVyciA9IGNvdW50OwotCXJldHVybiBlcnI7Ci19 Ci0KLURSSVZFUl9BVFRSKG5ld192cG9ydCwgU19JV1VTUiwgTlVMTCwgdXNic3R1Yl92cG9y dF9hZGQpOwotCi1zdGF0aWMgc3NpemVfdCB1c2JzdHViX3Zwb3J0X3JlbW92ZShzdHJ1Y3Qg ZGV2aWNlX2RyaXZlciAqZHJpdmVyLAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWNoYXIgYnVzX2lkW0JVU19JRF9TSVpFXTsKLQlp bnQgZG9tX2lkOwotCWludCBkZXZfaWQ7Ci0JaW50IHBvcnRudW07Ci0KLQllcnIgPSBzdHJf dG9fdnBvcnQoYnVmLCAmYnVzX2lkWzBdLCAmZG9tX2lkLCAmZGV2X2lkLCAmcG9ydG51bSk7 Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSB1c2JzdHViX2lkX3JlbW92ZSgm YnVzX2lkWzBdLCBkb21faWQsIGRldl9pZCwgcG9ydG51bSk7Ci0KLW91dDoKLQlpZiAoIWVy cikKLQkJZXJyID0gY291bnQ7Ci0JcmV0dXJuIGVycjsKLX0KLQotRFJJVkVSX0FUVFIocmVt b3ZlX3Zwb3J0LCBTX0lXVVNSLCBOVUxMLCB1c2JzdHViX3Zwb3J0X3JlbW92ZSk7Ci0KLXN0 YXRpYyBzc2l6ZV90IHVzYnN0dWJfdnBvcnRfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAq ZHJpdmVyLAorc3RhdGljIHNzaXplX3QgdXNic3R1Yl9zaG93X3BvcnRpZHMoc3RydWN0IGRl dmljZV9kcml2ZXIgKmRyaXZlciwKIAkJY2hhciAqYnVmKQogewotCXN0cnVjdCB1c2JzdHVi X2lkICpzdHViX2lkOworCXN0cnVjdCB2dXNiX3BvcnRfaWQgKnBvcnRpZDsKIAlzaXplX3Qg Y291bnQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2 ZSgmdXNic3R1Yl9pZHNfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3R1 Yl9pZCwgJnVzYnN0dWJfaWRzLCBpZF9saXN0KSB7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBv cnRfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0aWQsICZw b3J0X2xpc3QsIGlkX2xpc3QpIHsKIAkJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKIAkJCWJy ZWFrOwogCQljb3VudCArPSBzY25wcmludGYoKGNoYXIgKilidWYgKyBjb3VudCwgUEFHRV9T SVpFIC0gY291bnQsCiAJCQkJIiVzOiVkOiVkOiVkXG4iLAotCQkJCSZzdHViX2lkLT5idXNf aWRbMF0sCi0JCQkJc3R1Yl9pZC0+ZG9tX2lkLAotCQkJCXN0dWJfaWQtPmRldl9pZCwKLQkJ CQlzdHViX2lkLT5wb3J0bnVtKTsKKwkJCQkmcG9ydGlkLT5waHlzX2J1c1swXSwKKwkJCQlw b3J0aWQtPmRvbWlkLAorCQkJCXBvcnRpZC0+aGFuZGxlLAorCQkJCXBvcnRpZC0+cG9ydG51 bSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYnN0dWJfaWRzX2xvY2ssIGZs YWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X2xpc3RfbG9jaywgZmxhZ3Mp OwogCiAJcmV0dXJuIGNvdW50OwogfQogCi1EUklWRVJfQVRUUih2cG9ydHMsIFNfSVJVU1Is IHVzYnN0dWJfdnBvcnRfc2hvdywgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IHVzYnN0dWJf ZGV2aWNlc19zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCi0JCWNoYXIgKmJ1 ZikKLXsKLQlzdHJ1Y3QgdXNic3R1YiAqc3R1YjsKLQlzaXplX3QgY291bnQgPSAwOwotCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JhYmJlZF9kZXZp Y2VzX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0dWIsICZncmFiYmVk X2RldmljZXMsIGdyYWJiZWRfbGlzdCkgewotCQlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQot CQkJYnJlYWs7Ci0KLQkJY291bnQgKz0gc2NucHJpbnRmKChjaGFyICopYnVmICsgY291bnQs IFBBR0VfU0laRSAtIGNvdW50LAotCQkJCQkiJXUtJXM6JXUuJXVcbiIsCi0JCQkJCXN0dWIt PnVkZXYtPmJ1cy0+YnVzbnVtLAotCQkJCQlzdHViLT51ZGV2LT5kZXZwYXRoLAotCQkJCQlz dHViLT51ZGV2LT5jb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSwKLQkJCQkJc3R1 Yi0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsK LQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncmFiYmVkX2RldmljZXNfbG9jaywg ZmxhZ3MpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1EUklWRVJfQVRUUihncmFiYmVkX2Rl dmljZXMsIFNfSVJVU1IsIHVzYnN0dWJfZGV2aWNlc19zaG93LCBOVUxMKTsKK0RSSVZFUl9B VFRSKHBvcnRfaWRzLCBTX0lSVVNSLCB1c2JzdHViX3Nob3dfcG9ydGlkcywgTlVMTCk7CiAK IC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCBtYXRjaGVzIGFueSB1c2JkZXZpY2UgKi8KIHN0 YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JzdHViX3RhYmxlW10gPSB7CkBAIC00MDQs NDQgKzI5NSwzMSBAQAogCQkucHJvYmUgPSB1c2JzdHViX3Byb2JlLAogCQkuZGlzY29ubmVj dCA9IHVzYnN0dWJfZGlzY29ubmVjdCwKIAkJLmlkX3RhYmxlID0gdXNic3R1Yl90YWJsZSwK KwkJLm5vX2R5bmFtaWNfaWQgPSAxLAogfTsKIAogaW50IF9faW5pdCB1c2JzdHViX2luaXQo dm9pZCkKIHsKLSAJaW50IGVycjsKKwlpbnQgZXJyOwogCiAJZXJyID0gdXNiX3JlZ2lzdGVy KCZ1c2JiYWNrX3VzYl9kcml2ZXIpOwotCWlmIChlcnIgPCAwKQorCWlmIChlcnIgPCAwKSB7 CisJCXByaW50ayhLRVJOX0VSUiAidXNiYmFjazogdXNiX3JlZ2lzdGVyIGZhaWxlZCAoZXJy b3IgJWQpXG4iLCBlcnIpOwogCQlnb3RvIG91dDsKLQlpZiAoIWVycikKLQkJZXJyID0gZHJp dmVyX2NyZWF0ZV9maWxlKCZ1c2JiYWNrX3VzYl9kcml2ZXIuZHJpdmVyLAotCQkJCSZkcml2 ZXJfYXR0cl9uZXdfdnBvcnQpOwotCWlmICghZXJyKQotCQllcnIgPSBkcml2ZXJfY3JlYXRl X2ZpbGUoJnVzYmJhY2tfdXNiX2RyaXZlci5kcml2ZXIsCi0JCQkJJmRyaXZlcl9hdHRyX3Jl bW92ZV92cG9ydCk7Ci0JaWYgKCFlcnIpCi0JCWVyciA9IGRyaXZlcl9jcmVhdGVfZmlsZSgm dXNiYmFja191c2JfZHJpdmVyLmRyaXZlciwKLQkJCQkmZHJpdmVyX2F0dHJfdnBvcnRzKTsK LQlpZiAoIWVycikKLQkJZXJyID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZ1c2JiYWNrX3VzYl9k cml2ZXIuZHJpdmVyLAotCQkJCSZkcml2ZXJfYXR0cl9ncmFiYmVkX2RldmljZXMpOworCX0K KworCWVyciA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmdXNiYmFja191c2JfZHJpdmVyLmRyaXZl ciwKKwkJCQkmZHJpdmVyX2F0dHJfcG9ydF9pZHMpOwogCWlmIChlcnIpCi0JCXVzYnN0dWJf ZXhpdCgpOworCQl1c2JfZGVyZWdpc3RlcigmdXNiYmFja191c2JfZHJpdmVyKTsKIAogb3V0 OgogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgdXNic3R1Yl9leGl0KHZvaWQpCit2b2lkIF9f ZXhpdCB1c2JzdHViX2V4aXQodm9pZCkKIHsKIAlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnVzYmJh Y2tfdXNiX2RyaXZlci5kcml2ZXIsCi0JCQkmZHJpdmVyX2F0dHJfbmV3X3Zwb3J0KTsKLQlk cml2ZXJfcmVtb3ZlX2ZpbGUoJnVzYmJhY2tfdXNiX2RyaXZlci5kcml2ZXIsCi0JCQkmZHJp dmVyX2F0dHJfcmVtb3ZlX3Zwb3J0KTsKLQlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnVzYmJhY2tf dXNiX2RyaXZlci5kcml2ZXIsCi0JCQkJJmRyaXZlcl9hdHRyX3Zwb3J0cyk7Ci0JZHJpdmVy X3JlbW92ZV9maWxlKCZ1c2JiYWNrX3VzYl9kcml2ZXIuZHJpdmVyLAotCQkJCSZkcml2ZXJf YXR0cl9ncmFiYmVkX2RldmljZXMpOwotCisJCQkJJmRyaXZlcl9hdHRyX3BvcnRfaWRzKTsK IAl1c2JfZGVyZWdpc3RlcigmdXNiYmFja191c2JfZHJpdmVyKTsKIH0KZGlmZiAtciA0YWMz ZTFkNjYwNWMgLXIgM2JlOTM5OTc1YWQ2IGRyaXZlcnMveGVuL3VzYmJhY2sveGVuYnVzLmMK LS0tIGEvZHJpdmVycy94ZW4vdXNiYmFjay94ZW5idXMuYwlUdWUgU2VwIDI5IDExOjIzOjA2 IDIwMDkgKzAxMDAKKysrIGIvZHJpdmVycy94ZW4vdXNiYmFjay94ZW5idXMuYwlUdWUgT2N0 IDA2IDE1OjE4OjI3IDIwMDkgKzA5MDAKQEAgLTQzLDI5ICs0MywxMTggQEAKICAqIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgog I2luY2x1ZGUgInVzYmJhY2suaCIKIAogc3RhdGljIGludCBzdGFydF94ZW51c2JkKHVzYmlm X3QgKnVzYmlmKQogewotICAgICAgICBpbnQgZXJyID0gMDsKLSAgICAgICAgY2hhciBuYW1l W1RBU0tfQ09NTV9MRU5dOworCWludCBlcnIgPSAwOworCWNoYXIgbmFtZVtUQVNLX0NPTU1f TEVOXTsKIAotICAgICAgICBzbnByaW50ZihuYW1lLCBUQVNLX0NPTU1fTEVOLCAidXNiYmFj ay4lZC4lZCIsIHVzYmlmLT5kb21pZCwgdXNiaWYtPmhhbmRsZSk7Ci0gICAgICAgIHVzYmlm LT54ZW51c2JkID0ga3RocmVhZF9ydW4odXNiYmtfc2NoZWR1bGUsIHVzYmlmLCBuYW1lKTsK LSAgICAgICAgaWYgKElTX0VSUih1c2JpZi0+eGVudXNiZCkpIHsKLSAgICAgICAgICAgICAg ICBlcnIgPSBQVFJfRVJSKHVzYmlmLT54ZW51c2JkKTsKLSAgICAgICAgICAgICAgICB1c2Jp Zi0+eGVudXNiZCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgeGVuYnVzX2Rldl9lcnJvcih1 c2JpZi0+eGJkZXYsIGVyciwgInN0YXJ0IHhlbnVzYmQiKTsKLSAgICAgICAgfQotICAgICAg ICByZXR1cm4gZXJyOworCXNucHJpbnRmKG5hbWUsIFRBU0tfQ09NTV9MRU4sICJ1c2JiYWNr LiVkLiVkIiwgdXNiaWYtPmRvbWlkLAorCQkJdXNiaWYtPmhhbmRsZSk7CisJdXNiaWYtPnhl bnVzYmQgPSBrdGhyZWFkX3J1bih1c2Jia19zY2hlZHVsZSwgdXNiaWYsIG5hbWUpOworCWlm IChJU19FUlIodXNiaWYtPnhlbnVzYmQpKSB7CisJCWVyciA9IFBUUl9FUlIodXNiaWYtPnhl bnVzYmQpOworCQl1c2JpZi0+eGVudXNiZCA9IE5VTEw7CisJCXhlbmJ1c19kZXZfZXJyb3Io dXNiaWYtPnhiZGV2LCBlcnIsICJzdGFydCB4ZW51c2JkIik7CisJfQorCisJcmV0dXJuIGVy cjsKK30KKworc3RhdGljIHZvaWQgYmFja2VuZF9jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfd2F0 Y2ggKndhdGNoLAorCQkJY29uc3QgY2hhciAqKnZlYywgdW5zaWduZWQgaW50IGxlbikKK3sK KwlzdHJ1Y3QgeGVuYnVzX3RyYW5zYWN0aW9uIHhidDsKKwlpbnQgZXJyOworCWludCBpOwor CWNoYXIgbm9kZVs4XTsKKwljaGFyICpidXNpZDsKKwlzdHJ1Y3QgdnVzYl9wb3J0X2lkICpw b3J0aWQgPSBOVUxMOworCisJdXNiaWZfdCAqdXNiaWYgPSBjb250YWluZXJfb2Yod2F0Y2gs IHVzYmlmX3QsIGJhY2tlbmRfd2F0Y2gpOworCXN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYg PSB1c2JpZi0+eGJkZXY7CisKK2FnYWluOgorCWVyciA9IHhlbmJ1c190cmFuc2FjdGlvbl9z dGFydCgmeGJ0KTsKKwlpZiAoZXJyKSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIs ICJzdGFydGluZyB0cmFuc2FjdGlvbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0g MTsgaSA8PSB1c2JpZi0+bnVtX3BvcnRzOyBpKyspIHsKKwkJc3ByaW50Zihub2RlLCAicG9y dC8lZCIsIGkpOworCQlidXNpZCA9IHhlbmJ1c19yZWFkKHhidCwgZGV2LT5ub2RlbmFtZSwg bm9kZSwgTlVMTCk7CisJCWlmIChJU19FUlIoYnVzaWQpKSB7CisJCQllcnIgPSBQVFJfRVJS KGJ1c2lkKTsKKwkJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJyZWFkaW5nIHBvcnQv JWQiLCBpKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKworCQkvKgorCQkgKiByZW1vdmUgcG9y dGlkLCBpZiB0aGUgcG9ydCBpcyBub3QgY29ubmVjdGVkLAorCQkgKi8KKwkJaWYgKHN0cmxl bihidXNpZCkgPT0gMCkgeworCQkJcG9ydGlkID0gZmluZF9wb3J0aWQodXNiaWYtPmRvbWlk LCB1c2JpZi0+aGFuZGxlLCBpKTsKKwkJCWlmIChwb3J0aWQpIHsKKwkJCQlpZiAocG9ydGlk LT5pc19jb25uZWN0ZWQpCisJCQkJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsCisJCQkJ CQkiY2FuJ3QgcmVtb3ZlIHBvcnQvJWQsIHVuYmluZCBmaXJzdCIsIGkpOworCQkJCWVsc2UK KwkJCQkJcG9ydGlkX3JlbW92ZSh1c2JpZi0+ZG9taWQsIHVzYmlmLT5oYW5kbGUsIGkpOwor CQkJfQorCQkJY29udGludWU7IC8qIG5ldmVyIGNvbmZpZ3VyZWQsIGlnbm9yZSAqLworCQl9 CisKKwkJLyoKKwkJICogYWRkIHBvcnRpZCwKKwkJICogaWYgdGhlIHBvcnQgaXMgbm90IGNv bmZpZ3VyZWQgYW5kIG5vdCB1c2VkIGZyb20gb3RoZXIgdXNiaWYuCisJCSAqLworCQlwb3J0 aWQgPSBmaW5kX3BvcnRpZCh1c2JpZi0+ZG9taWQsIHVzYmlmLT5oYW5kbGUsIGkpOworCQlp ZiAocG9ydGlkKSB7CisJCQlpZiAoKHN0cm5jbXAocG9ydGlkLT5waHlzX2J1cywgYnVzaWQs IEJVU19JRF9TSVpFKSkpCisJCQkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwKKwkJCQkJ ImNhbid0IGFkZCBwb3J0LyVkLCByZW1vdmUgZmlyc3QiLCBpKTsKKwkJCWVsc2UKKwkJCQlj b250aW51ZTsgLyogYWxyZWFkeSBjb25maWd1cmVkLCBpZ25vcmUgKi8KKwkJfSBlbHNlIHsK KwkJCWlmIChmaW5kX3BvcnRpZF9ieV9idXNpZChidXNpZCkpCisJCQkJeGVuYnVzX2Rldl9m YXRhbChkZXYsIGVyciwKKwkJCQkJImNhbid0IGFkZCBwb3J0LyVkLCBidXNpZCBhbHJlYWR5 IHVzZWQiLCBpKTsKKwkJCWVsc2UKKwkJCQlwb3J0aWRfYWRkKGJ1c2lkLCB1c2JpZi0+ZG9t aWQsIHVzYmlmLT5oYW5kbGUsIGkpOworCQl9CisJfQorCisJZXJyID0geGVuYnVzX3RyYW5z YWN0aW9uX2VuZCh4YnQsIDApOworCWlmIChlcnIgPT0gLUVBR0FJTikKKwkJZ290byBhZ2Fp bjsKKwlpZiAoZXJyKQorCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAiY29tcGxldGlu ZyB0cmFuc2FjdGlvbiIpOworCisJcmV0dXJuOworCithYm9ydDoKKwl4ZW5idXNfdHJhbnNh Y3Rpb25fZW5kKHhidCwgMSk7CisKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgdXNiYmFj a19yZW1vdmUoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldikKIHsKIAl1c2JpZl90ICp1c2Jp ZiA9IGRldi0+ZGV2LmRyaXZlcl9kYXRhOworCWludCBpOworCisJaWYgKHVzYmlmLT5iYWNr ZW5kX3dhdGNoLm5vZGUpIHsKKwkJdW5yZWdpc3Rlcl94ZW5idXNfd2F0Y2goJnVzYmlmLT5i YWNrZW5kX3dhdGNoKTsKKwkJa2ZyZWUodXNiaWYtPmJhY2tlbmRfd2F0Y2gubm9kZSk7CisJ CXVzYmlmLT5iYWNrZW5kX3dhdGNoLm5vZGUgPSBOVUxMOworCX0KIAogCWlmICh1c2JpZikg eworCQkvKiByZW1vdmUgYWxsIHBvcnRzICovCisJCWZvciAoaSA9IDE7IGkgPD0gdXNiaWYt Pm51bV9wb3J0czsgaSsrKQorCQkJcG9ydGlkX3JlbW92ZSh1c2JpZi0+ZG9taWQsIHVzYmlm LT5oYW5kbGUsIGkpOwogCQl1c2JpZl9kaXNjb25uZWN0KHVzYmlmKTsKIAkJdXNiaWZfZnJl ZSh1c2JpZik7OwogCX0KQEAgLTc5LDEyICsxNjgsMTQgQEAKIHsKIAl1c2JpZl90ICp1c2Jp ZjsKIAl1bnNpZ25lZCBpbnQgaGFuZGxlOworCWludCBudW1fcG9ydHM7CisJaW50IHVzYl92 ZXI7CiAJaW50IGVycjsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9E RVY7CiAKLQloYW5kbGUgPSBzaW1wbGVfc3RydG91bChzdHJyY2hyKGRldi0+b3RoZXJlbmQs Jy8nKSsxLCBOVUxMLCAwKTsKKwloYW5kbGUgPSBzaW1wbGVfc3RydG91bChzdHJyY2hyKGRl di0+b3RoZXJlbmQsICcvJykgKyAxLCBOVUxMLCAwKTsKIAl1c2JpZiA9IHVzYmlmX2FsbG9j KGRldi0+b3RoZXJlbmRfaWQsIGhhbmRsZSk7CiAJaWYgKCF1c2JpZikgewogCQl4ZW5idXNf ZGV2X2ZhdGFsKGRldiwgLUVOT01FTSwgImFsbG9jYXRpbmcgYmFja2VuZCBpbnRlcmZhY2Ui KTsKQEAgLTkzLDYgKzE4NCwzNCBAQAogCXVzYmlmLT54YmRldiA9IGRldjsKIAlkZXYtPmRl di5kcml2ZXJfZGF0YSA9IHVzYmlmOwogCisJZXJyID0geGVuYnVzX3NjYW5mKFhCVF9OSUws IGRldi0+bm9kZW5hbWUsCisJCQkJIm51bS1wb3J0cyIsICIlZCIsICZudW1fcG9ydHMpOwor CWlmIChlcnIgIT0gMSkgeworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAicmVhZGlu ZyBudW0tcG9ydHMiKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAobnVtX3BvcnRzIDwgMSB8 fCBudW1fcG9ydHMgPiBVU0JfTUFYQ0hJTERSRU4pIHsKKwkJeGVuYnVzX2Rldl9mYXRhbChk ZXYsIGVyciwgImludmFsaWQgbnVtLXBvcnRzIik7CisJCWdvdG8gZmFpbDsKKwl9CisJdXNi aWYtPm51bV9wb3J0cyA9IG51bV9wb3J0czsKKworCWVyciA9IHhlbmJ1c19zY2FuZihYQlRf TklMLCBkZXYtPm5vZGVuYW1lLAorCQkJCSJ1c2ItdmVyIiwgIiVkIiwgJnVzYl92ZXIpOwor CWlmIChlcnIgIT0gMSkgeworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAicmVhZGlu ZyB1c2ItdmVyIik7CisJCWdvdG8gZmFpbDsKKwl9CisJc3dpdGNoICh1c2JfdmVyKSB7CisJ Y2FzZSBVU0JfVkVSX1VTQjExOgorCWNhc2UgVVNCX1ZFUl9VU0IyMDoKKwkJdXNiaWYtPnVz Yl92ZXIgPSB1c2JfdmVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl4ZW5idXNfZGV2X2Zh dGFsKGRldiwgZXJyLCAiaW52YWxpZCB1c2ItdmVyIik7CisJCWdvdG8gZmFpbDsKKwl9CisK IAllcnIgPSB4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVJbml0V2FpdCk7 CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwpAQCAtMTA0LDE1ICsyMjMsMTcgQEAKIAlyZXR1 cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGNvbm5lY3RfcmluZyh1c2JpZl90ICp1c2JpZikK K3N0YXRpYyBpbnQgY29ubmVjdF9yaW5ncyh1c2JpZl90ICp1c2JpZikKIHsKIAlzdHJ1Y3Qg eGVuYnVzX2RldmljZSAqZGV2ID0gdXNiaWYtPnhiZGV2OwotCXVuc2lnbmVkIGxvbmcgcmlu Z19yZWY7CisJdW5zaWduZWQgbG9uZyB1cmJfcmluZ19yZWY7CisJdW5zaWduZWQgbG9uZyBj b25uX3JpbmdfcmVmOwogCXVuc2lnbmVkIGludCBldnRjaG47CiAJaW50IGVycjsKIAogCWVy ciA9IHhlbmJ1c19nYXRoZXIoWEJUX05JTCwgZGV2LT5vdGhlcmVuZCwKLQkJCSAgICAicmlu Zy1yZWYiLCAiJWx1IiwgJnJpbmdfcmVmLAorCQkJICAgICJ1cmItcmluZy1yZWYiLCAiJWx1 IiwgJnVyYl9yaW5nX3JlZiwKKwkJCSAgICAiY29ubi1yaW5nLXJlZiIsICIlbHUiLCAmY29u bl9yaW5nX3JlZiwKIAkJCSAgICAiZXZlbnQtY2hhbm5lbCIsICIldSIsICZldnRjaG4sIE5V TEwpOwogCWlmIChlcnIpIHsKIAkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwKQEAgLTEy MSw4MSArMjQyLDMyIEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpbnRrKCJ1c2JiYWNr OiByaW5nLXJlZiAlbGQsIGV2ZW50LWNoYW5uZWwgJWRcbiIsCi0JICAgICAgIHJpbmdfcmVm LCBldnRjaG4pOworCXByaW50aygidXNiYmFjazogdXJiLXJpbmctcmVmICVsZCwgY29ubi1y aW5nLXJlZiAlbGQsIGV2ZW50LWNoYW5uZWwgJWRcbiIsCisJICAgICAgIHVyYl9yaW5nX3Jl ZiwgY29ubl9yaW5nX3JlZiwgZXZ0Y2huKTsKIAotCWVyciA9IHVzYmlmX21hcCh1c2JpZiwg cmluZ19yZWYsIGV2dGNobik7CisJZXJyID0gdXNiaWZfbWFwKHVzYmlmLCB1cmJfcmluZ19y ZWYsIGNvbm5fcmluZ19yZWYsIGV2dGNobik7CiAJaWYgKGVycikgewotCQl4ZW5idXNfZGV2 X2ZhdGFsKGRldiwgZXJyLCAibWFwcGluZyByaW5nLXJlZiAlbHUgcG9ydCAldSIsCi0JCQkJ IHJpbmdfcmVmLCBldnRjaG4pOworCQl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLAorCQkJ CSJtYXBwaW5nIHVyYi1yaW5nLXJlZiAlbHUgY29ubi1yaW5nLXJlZiAlbHUgcG9ydCAldSIs CisJCQkJdXJiX3JpbmdfcmVmLCBjb25uX3JpbmdfcmVmLCBldnRjaG4pOwogCQlyZXR1cm4g ZXJyOwogCX0KIAogCXJldHVybiAwOwogfQogCi12b2lkIHVzYmJhY2tfZG9faG90cGx1Zyh1 c2JpZl90ICp1c2JpZikKLXsKLQlzdHJ1Y3QgeGVuYnVzX3RyYW5zYWN0aW9uIHhidDsKLQlz dHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gdXNiaWYtPnhiZGV2OwotCXN0cnVjdCB1c2Jz dHViICpzdHViID0gTlVMTDsKLQlpbnQgZXJyOwotCWNoYXIgcG9ydF9zdHJbOF07Ci0JaW50 IGk7Ci0JaW50IG51bV9wb3J0czsKLQlpbnQgc3RhdGU7Ci0KLWFnYWluOgotCQllcnIgPSB4 ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7Ci0JCWlmIChlcnIpIHsKLQkJCXhlbmJ1 c19kZXZfZmF0YWwoZGV2LCBlcnIsICJzdGFydGluZyB0cmFuc2FjdGlvbiIpOwotCQkJcmV0 dXJuOwotCQl9Ci0KLQkJZXJyID0geGVuYnVzX3NjYW5mKHhidCwgZGV2LT5ub2RlbmFtZSwK LQkJCQkJIm51bS1wb3J0cyIsICIlZCIsICZudW1fcG9ydHMpOwotCi0JCWZvciAoaSA9IDE7 IGkgPD0gbnVtX3BvcnRzOyBpKyspIHsKLQkJCXN0dWIgPSBmaW5kX2F0dGFjaGVkX2Rldmlj ZSh1c2JpZiwgaSk7Ci0JCQlpZiAoc3R1YikKLQkJCQlzdGF0ZSA9IHN0dWItPnVkZXYtPnNw ZWVkOwotCQkJZWxzZQotCQkJCXN0YXRlID0gMDsKLQkJCXNwcmludGYocG9ydF9zdHIsICJw b3J0LSVkIiwgaSk7Ci0JCQllcnIgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFt ZSwgcG9ydF9zdHIsICIlZCIsIHN0YXRlKTsKLQkJCWlmIChlcnIpIHsKLQkJCQl4ZW5idXNf ZGV2X2ZhdGFsKGRldiwgZXJyLCAid3JpdGluZyBwb3J0LSVkIHN0YXRlIiwgaSk7Ci0JCQkJ Z290byBhYm9ydDsKLQkJCX0KLQkJfQotCi0JCWVyciA9IHhlbmJ1c190cmFuc2FjdGlvbl9l bmQoeGJ0LCAwKTsKLQkJaWYgKGVyciA9PSAtRUFHQUlOKQotCQkJZ290byBhZ2FpbjsKLQkJ aWYgKGVycikKLQkJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJjb21wbGV0aW5nIHRy YW5zYWN0aW9uIik7Ci0KLQkJcmV0dXJuOwotCi1hYm9ydDoKLQkJeGVuYnVzX3RyYW5zYWN0 aW9uX2VuZCh4YnQsIDEpOwotfQotCi12b2lkIHVzYmJhY2tfcmVjb25maWd1cmUodXNiaWZf dCAqdXNiaWYpCi17Ci0Jc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiA9IHVzYmlmLT54YmRl djsKLQotCWlmIChkZXYtPnN0YXRlID09IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKQotCQl4ZW5i dXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nKTsKLX0KLQot dm9pZCBmcm9udGVuZF9jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCitzdGF0 aWMgdm9pZCBmcm9udGVuZF9jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCiAJ CQkJICAgICBlbnVtIHhlbmJ1c19zdGF0ZSBmcm9udGVuZF9zdGF0ZSkKIHsKIAl1c2JpZl90 ICp1c2JpZiA9IGRldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWludCBlcnI7CiAKIAlzd2l0Y2gg KGZyb250ZW5kX3N0YXRlKSB7CisJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2VkOgorCWNh c2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nOgorCWNhc2UgWGVuYnVzU3RhdGVSZWNvbmZp Z3VyZWQ6CisJCWJyZWFrOworCiAJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZzoKIAkJ aWYgKGRldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVDbG9zZWQpIHsKIAkJCXByaW50aygiJXM6 ICVzOiBwcmVwYXJlIGZvciByZWNvbm5lY3RcbiIsCkBAIC0yMDQsMTcgKzI3NiwxOCBAQAog CQl9CiAJCWJyZWFrOwogCi0JY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2VkOgotCQllcnIg PSBjb25uZWN0X3JpbmcodXNiaWYpOworCWNhc2UgWGVuYnVzU3RhdGVDb25uZWN0ZWQ6CisJ CWlmIChkZXYtPnN0YXRlID09IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKQorCQkJYnJlYWs7CisJ CWVyciA9IGNvbm5lY3RfcmluZ3ModXNiaWYpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0J CXN0YXJ0X3hlbnVzYmQodXNiaWYpOwotCQl1c2JiYWNrX2RvX2hvdHBsdWcodXNiaWYpOwot CQl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQpOwotCQli cmVhazsKLQotCWNhc2UgWGVuYnVzU3RhdGVDb25uZWN0ZWQ6Ci0JCWlmIChkZXYtPnN0YXRl ID09IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKQorCQllcnIgPSBzdGFydF94ZW51c2JkKHVzYmlm KTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQllcnIgPSB4ZW5idXNfd2F0Y2hfcGF0aDIo ZGV2LCBkZXYtPm5vZGVuYW1lLCAicG9ydCIsCisJCQkJCSZ1c2JpZi0+YmFja2VuZF93YXRj aCwgYmFja2VuZF9jaGFuZ2VkKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwogCQl4ZW5idXNf c3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQpOwogCQlicmVhazsKQEAg LTIyNiwxMyArMjk5LDkgQEAKIAogCWNhc2UgWGVuYnVzU3RhdGVDbG9zZWQ6CiAJCXhlbmJ1 c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNsb3NlZCk7Ci0JCWJyZWFrOwotCi0J Y2FzZSBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmc6Ci0JCXVzYmJhY2tfZG9faG90cGx1Zyh1 c2JpZik7Ci0JCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZVJlY29uZmln dXJlZCk7Ci0JCWJyZWFrOwotCisJCWlmICh4ZW5idXNfZGV2X2lzX29ubGluZShkZXYpKQor CQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCBpZiBub3Qgb25saW5lICovCiAJY2FzZSBY ZW5idXNTdGF0ZVVua25vd246CiAJCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmRldik7CiAJ CWJyZWFrOwo= --------------080808010303040704030203 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 --------------080808010303040704030203--