From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Lemoine" Subject: [patch sungem] improved locking Date: Thu, 9 Nov 2006 22:33:22 +0100 Message-ID: <5cac192f0611091333w5740810bhe1966d6391c6d46a@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_52921_2058939.1163108002722" Return-path: Received: from ug-out-1314.google.com ([66.249.92.173]:36784 "EHLO ug-out-1314.google.com") by vger.kernel.org with ESMTP id S966052AbWKIVdZ (ORCPT ); Thu, 9 Nov 2006 16:33:25 -0500 Received: by ug-out-1314.google.com with SMTP id m3so350631ugc for ; Thu, 09 Nov 2006 13:33:23 -0800 (PST) To: netdev@vger.kernel.org, "Benjamin Herrenschmidt" , "David S. Miller" Sender: netdev-owner@vger.kernel.org List-Id: netdev.vger.kernel.org ------=_Part_52921_2058939.1163108002722 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline The attached patch improves locking in the sungem driver: - a single lock is used in the driver - gem_start_xmit, gem_poll, and gem_interrupt are lockless The new locking design is based on what's in tg3.c. The patch runs smoothly on my ibook (with CONFIG_SMP set), but it will need extensive testing on a multi-cpu box. The patch includes two implementations for gem_interrupt(). One is lockless while the other makes use of a spinlock. The spinlock version is there because I was not sure the lockless version would work with net_poll_controller. One of the two versions must be removed in the final patch. Patch applies to current git net-2.6. Please review, and test if possible. Thanks, Signed-ff-by: Eric Lemoine -- Eric ------=_Part_52921_2058939.1163108002722 Content-Type: application/octet-stream; name=sungem-locking.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_eubogfvb Content-Disposition: attachment; filename="sungem-locking.patch" LS0tIGRyaXZlcnMvbmV0L3N1bmdlbS5jLm9yaWcJMjAwNi0xMS0wNyAyMTowODo0My4wMDAwMDAw MDAgKzAxMDAKKysrIGRyaXZlcnMvbmV0L3N1bmdlbS5jCTIwMDYtMTEtMDkgMjE6Mjk6NDUuMDAw MDAwMDAwICswMTAwCkBAIC05LDI2ICs5LDYgQEAKICAqCiAgKiBOQVBJIGFuZCBORVRQT0xMIHN1 cHBvcnQKICAqIChDKSAyMDA0IGJ5IEVyaWMgTGVtb2luZSAoZXJpYy5sZW1vaW5lQGdtYWlsLmNv bSkKLSAqCi0gKiBUT0RPOgotICogIC0gTm93IHRoYXQgdGhlIGRyaXZlciB3YXMgc2lnbmlmaWNh bnRseSBzaW1wbGlmaWVkLCBJIG5lZWQgdG8gcmV3b3JrCi0gKiAgICB0aGUgbG9ja2luZy4gSSdt IHN1cmUgd2UgZG9uJ3QgbmVlZCBfMl8gc3BpbmxvY2tzLCBhbmQgd2UgcHJvYmFibHkKLSAqICAg IGNhbiBhdm9pZCB0YWtpbmcgbW9zdCBvZiB0aGVtIGZvciBzbyBsb25nIHBlcmlvZCBvZiB0aW1l IChhbmQgc2NoZWR1bGUKLSAqICAgIGluc3RlYWQpLiBUaGUgbWFpbiBpc3N1ZXMgYXQgdGhpcyBw b2ludCBhcmUgY2F1c2VkIGJ5IHRoZSBuZXRkZXYgbGF5ZXIKLSAqICAgIHRob3VnaDoKLSAqCi0g KiAgICBnZW1fY2hhbmdlX210dSgpIGFuZCBnZW1fc2V0X211bHRpY2FzdCgpIGFyZSBjYWxsZWQg d2l0aCBhIHJlYWRfbG9jaygpCi0gKiAgICBoZWxwIGJ5IG5ldC9jb3JlL2Rldi5jLCB0aHVzIHRo ZXkgY2FuJ3Qgc2NoZWR1bGUuIFRoYXQgbWVhbnMgdGhleSBjYW4ndAotICogICAgY2FsbCBuZXRp Zl9wb2xsX2Rpc2FibGUoKSBuZWl0aGVyLCB0aHVzIGZvcmNlIGdlbV9wb2xsKCkgdG8ga2VlcCBh IHNwaW5sb2NrCi0gKiAgICB3aGVyZSBpdCBjb3VsZCBoYXZlIGJlZW4gZHJvcHBlZC4gY2hhbmdl X210dSBlc3BlY2lhbGx5IHdvdWxkIGxvdmUgYWxzbyB0bwotICogICAgYmUgYWJsZSB0byBtc2xl ZXAgaW5zdGVhZCBvZiBob3JyaWQgbG9ja2VkIGRlbGF5cyB3aGVuIHJlc2V0dGluZyB0aGUgSFcs Ci0gKiAgICBidXQgdGhhdCByZWFkX2xvY2soKSBtYWtlcyBpdCBpbXBvc3NpYmxlLCB1bmxlc3Mg SSBkZWZlciBpdCdzIGFjdGlvbiB0bwotICogICAgdGhlIHJlc2V0IHRhc2ssIHdoaWNoIG1lYW5z IGl0J2xsIGJlIGFzeW5jaHJvbm91cyAod29uJ3QgdGFrZSBlZmZlY3QgdW50aWwKLSAqICAgIHRo ZSBzeXN0ZW0gc2NoZWR1bGVzIGEgYml0KS4KLSAqCi0gKiAgICBBbHNvLCBpdCB3b3VsZCBwcm9i YWJseSBiZSBwb3NzaWJsZSB0byBhbHNvIHJlbW92ZSBtb3N0IG9mIHRoZSBsb25nLWxpZmUKLSAq ICAgIGxvY2tpbmcgaW4gb3Blbi9yZXN1bWUgY29kZSBwYXRoIChnZW1fcmVpbml0X2NoaXApIGJ5 IGJlZWluZyBtb3JlIGNhcmVmdWwKLSAqICAgIGFib3V0IHdoZW4gd2UgY2FuIHN0YXJ0IHRha2lu ZyBpbnRlcnJ1cHRzIG9yIGdldCB4bWl0KCkgY2FsbGVkLi4uCiAgKi8KIAogI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgpAQCAtMjA2LDExICsxODYsMTggQEAKIAlfX3BoeV93cml0ZShncCwgZ3At Pm1paV9waHlfYWRkciwgcmVnLCB2YWwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VtX2Vu YWJsZV9pbnRzKHN0cnVjdCBnZW0gKmdwKQorc3RhdGljIGlubGluZSB2b2lkIF9fZ2VtX2VuYWJs ZV9pbnRzKHN0cnVjdCBnZW0gKmdwKQogewogCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0cyBidXQg VFhET05FICovCiAJd3JpdGVsKEdSRUdfU1RBVF9UWERPTkUsIGdwLT5yZWdzICsgR1JFR19JTUFT Syk7CiB9CisJCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VtX2VuYWJsZV9pbnRzKHN0cnVjdCBnZW0g KmdwKQoreworCWdwLT5pcnFfc3luYyA9IDA7CisJd21iKCk7CisJX19nZW1fZW5hYmxlX2ludHMo Z3ApOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VtX2Rpc2FibGVfaW50cyhzdHJ1Y3QgZ2Vt ICpncCkKIHsKQEAgLTIxOCw2ICsyMDUsNTkgQEAKIAl3cml0ZWwoR1JFR19TVEFUX05BUEkgfCBH UkVHX1NUQVRfVFhET05FLCBncC0+cmVncyArIEdSRUdfSU1BU0spOwogfQogCisjaWYgR0VNX0lO VEVSUlVQVF9MT0NLTEVTUworc3RhdGljIGlubGluZSB1MzIgZ2VtX3JlYWRfc3RhdHVzMihzdHJ1 Y3QgZ2VtICpncCkKK3sKKwlyZXR1cm4gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVHX1NUQVQyKTsKK30K KyNlbHNlCitzdGF0aWMgaW5saW5lIHUzMiBnZW1fcmVhZF9zdGF0dXMoc3RydWN0IGdlbSAqZ3Ap Cit7CisJcmV0dXJuIHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKK30KKyNlbmRpZgorCitz dGF0aWMgaW5saW5lIHZvaWQgZ2VtX2Fja19pbnQoc3RydWN0IGdlbSAqZ3ApCit7CisJd3JpdGVs KDB4M2YsIGdwLT5yZWdzICsgR1JFR19JQUNLKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdl bV9uZXRpZl9zdG9wKHN0cnVjdCBnZW0gKmdwKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYg PSBncC0+ZGV2OworCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7IC8qIHByZXZlbnQgdHgg dGltZW91dCAqLworCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOworCW5ldGlmX3R4X2Rpc2FibGUo ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbV9uZXRpZl9zdGFydChzdHJ1Y3QgZ2Vt ICpncCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZ3AtPmRldjsKKworCS8qIFVuY29u ZGl0aW9ubmFseSBuZXRpZl93YWtlX3F1ZXVlIGlzIG9rIHNvIGxvbmcgYXMgY2FsbGVyIGhhcwor CSAqIGZyZWVkIHR4IHNsb3RzLCB3aGlzIGRvbmUgaW4gZ2VtX3JlaW5pdF9jaGlwKCkuCisJICov CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCW5ldGlmX3BvbGxfZW5hYmxlKGRldik7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBnZW1fc2NoZWR1bGVfcmVzZXRfdGFzayhzdHJ1Y3QgZ2VtICpn cCkKK3sKKwlncC0+cmVzZXRfdGFza19wZW5kaW5nID0gMTsKKwlzbXBfbWIoKTsKKwlzY2hlZHVs ZV93b3JrKCZncC0+cmVzZXRfdGFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW1fd2Fp dF9yZXNldF90YXNrKHN0cnVjdCBnZW0gKmdwKQoreworCW1iKCk7CisJd2hpbGUgKGdwLT5yZXNl dF90YXNrX3BlbmRpbmcpIHsKKwkJeWllbGQoKTsKKwkJbWIoKTsKKwl9Cit9CisKIHN0YXRpYyB2 b2lkIGdlbV9nZXRfY2VsbChzdHJ1Y3QgZ2VtICpncCkKIHsKIAlCVUdfT04oZ3AtPmNlbGxfZW5h YmxlZCA8IDApOwpAQCAtNjU4LDEyICs2OTgsMjAgQEAKIAlyZXR1cm4gMDsKIAogZG9fcmVzZXQ6 Ci0JZ3AtPnJlc2V0X3Rhc2tfcGVuZGluZyA9IDE7Ci0Jc2NoZWR1bGVfd29yaygmZ3AtPnJlc2V0 X3Rhc2spOworCWdlbV9zY2hlZHVsZV9yZXNldF90YXNrKGdwKTsKIAogCXJldHVybiAxOwogfQog CitzdGF0aWMgaW5saW5lIHUzMiBnZW1fdHhfYXZhaWwoc3RydWN0IGdlbSAqZ3ApCit7CisJc21w X21iKCk7CisJcmV0dXJuIChncC0+dHhfb2xkIDw9IGdwLT50eF9uZXcpID8KKwkJZ3AtPnR4X29s ZCArIChUWF9SSU5HX1NJWkUgLSAxKSAtIGdwLT50eF9uZXcgOgorCQlncC0+dHhfb2xkIC0gZ3At PnR4X25ldyAtIDE7Cit9CisKKwogc3RhdGljIF9faW5saW5lX18gdm9pZCBnZW1fdHgoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGdlbSAqZ3AsIHUzMiBnZW1fc3RhdHVzKQogewogCWlu dCBlbnRyeSwgbGltaXQ7CkBAIC03MTcsMTEgKzc2NSwyMCBAQAogCQlncC0+bmV0X3N0YXRzLnR4 X3BhY2tldHMrKzsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAl9CisKIAlncC0+dHhfb2xk ID0gZW50cnk7CiAKLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCi0JICAgIFRYX0JV RkZTX0FWQUlMKGdwKSA+IChNQVhfU0tCX0ZSQUdTICsgMSkpCi0JCW5ldGlmX3dha2VfcXVldWUo ZGV2KTsKKwkvKiBOZWVkIHRvIG1ha2UgdHhfb2xkIHVwZGF0ZSB2aXNpYmxlIHRvIGdlbV9zdGFy dF94bWl0KCkgKi8KKwlzbXBfbWIoKTsKKworCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9w cGVkKGRldikgJiYKKwkgICAgZ2VtX3R4X2F2YWlsKGdwKSA+IChNQVhfU0tCX0ZSQUdTICsgMSkp KSB7CisJCW5ldGlmX3R4X2xvY2soZGV2KTsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2 KSAmJgorCSAgICAJICAgIGdlbV90eF9hdmFpbChncCkgPiAoTUFYX1NLQl9GUkFHUyArIDEpKQor CQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQluZXRpZl90eF91bmxvY2soZGV2KTsKKwl9CiB9 CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgZ2VtX3Bvc3RfcnhkcyhzdHJ1Y3QgZ2VtICpncCwg aW50IGxpbWl0KQpAQCAtODgyLDEyICs5MzksNiBAQAogc3RhdGljIGludCBnZW1fcG9sbChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKIHsKIAlzdHJ1Y3QgZ2VtICpncCA9IGRl di0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBOQVBJIGxvY2tpbmcg bmlnaHRtYXJlOiBTZWUgY29tbWVudCBhdCBoZWFkIG9mIGRyaXZlcgotCSAqLwotCXNwaW5fbG9j a19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOwogCiAJZG8gewogCQlpbnQgd29ya190b19kbywg d29ya19kb25lOwpAQCAtODk5LDE5ICs5NTAsMTAgQEAKIAkJfQogCiAJCS8qIFJ1biBUWCBjb21w bGV0aW9uIHRocmVhZCAqLwotCQlzcGluX2xvY2soJmdwLT50eF9sb2NrKTsKIAkJZ2VtX3R4KGRl diwgZ3AsIGdwLT5zdGF0dXMpOwotCQlzcGluX3VubG9jaygmZ3AtPnR4X2xvY2spOwotCi0JCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKLQkJLyogUnVuIFJYIHRo cmVhZC4gV2UgZG9uJ3QgdXNlIGFueSBsb2NraW5nIGhlcmUsCi0JCSAqIGNvZGUgd2lsbGluZyB0 byBkbyBiYWQgdGhpbmdzIC0gbGlrZSBjbGVhbmluZyB0aGUKLQkJICogcnggcmluZyAtIG11c3Qg Y2FsbCBuZXRpZl9wb2xsX2Rpc2FibGUoKSwgd2hpY2gKLQkJICogc2NoZWR1bGVfdGltZW91dCgp J3MgaWYgcG9sbGluZyBpcyBhbHJlYWR5IGRpc2FibGVkLgotCQkgKi8KKwkJLyogUnVuIFJYIHRo cmVhZCAqLwogCQl3b3JrX3RvX2RvID0gbWluKCpidWRnZXQsIGRldi0+cXVvdGEpOwotCiAJCXdv cmtfZG9uZSA9IGdlbV9yeChncCwgd29ya190b19kbyk7CiAKIAkJKmJ1ZGdldCAtPSB3b3JrX2Rv bmU7CkBAIC05MjAsMjMgKzk2Miw1NyBAQAogCQlpZiAod29ya19kb25lID49IHdvcmtfdG9fZG8p CiAJCQlyZXR1cm4gMTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsK LQogCQlncC0+c3RhdHVzID0gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVHX1NUQVQpOwogCX0gd2hpbGUg KGdwLT5zdGF0dXMgJiBHUkVHX1NUQVRfTkFQSSk7CiAKIAlfX25ldGlmX3J4X2NvbXBsZXRlKGRl dik7Ci0JZ2VtX2VuYWJsZV9pbnRzKGdwKTsKKwlfX2dlbV9lbmFibGVfaW50cyhncCk7CiAKLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQog CitzdGF0aWMgdm9pZCBnZW1faXJxX3F1aWVzY2Uoc3RydWN0IGdlbSAqZ3ApCit7CisJQlVHX09O KGdwLT5pcnFfc3luYyk7CisKKwlncC0+aXJxX3N5bmMgPSAxOworCXNtcF9tYigpOworCisJc3lu Y2hyb25pemVfaXJxKGdwLT5wZGV2LT5pcnEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZW1f aXJxX3N5bmMoc3RydWN0IGdlbSAqZ3ApCit7CisJcmV0dXJuIGdwLT5pcnFfc3luYzsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGdlbV9mdWxsX2xvY2soc3RydWN0IGdlbSAqZ3AsIGludCBpcnFf c3luYykKK3sKKwlzcGluX2xvY2tfYmgoJmdwLT5sb2NrKTsKKwlpZiAoaXJxX3N5bmMpCisJCWdl bV9pcnFfcXVpZXNjZShncCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW1fZnVsbF91bmxv Y2soc3RydWN0IGdlbSAqZ3ApCit7CisJc3Bpbl91bmxvY2tfYmgoJmdwLT5sb2NrKTsKK30KKwor I2lmIEdFTV9JTlRFUlJVUFRfTE9DS0xFU1MKKworLyogTG9ja2xlc3MgaW1wbGVtZW50YXRpb24g b2YgSVJRIGhhbmRsZXIuCisgKgorICogVGhlIGRvd25zaWRlIG9mIHRoaXMgaW1wbGVtZW50YXRp b24gaXMgdGhhdCBpdCByZXF1aXJlcyB0aHJlZSBQSU8KKyAqIG9wZXJhdGlvbnM6IHJlYWQgc3Rh dHVzLCBkaXNhYmxlIGludGVycnVwdHMgYW5kIGFjayBpbnRlcnJ1cHQuCisgKgorICogQWxzbywg dGhpcyBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IHdvcmsgd2l0aCBORVRfUE9MTF9DT05UUk9MTEVS LiAKKyAqIFRPRE86IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgorICovCiBzdGF0aWMgaXJx cmV0dXJuX3QgZ2VtX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKIAlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsK LQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBnZW1fc3RhdHVzOwogCiAJLyogU3dhbGxvdyBp bnRlcnJ1cHRzIHdoZW4gc2h1dHRpbmcgdGhlIGNoaXAgZG93biwgdGhvdWdoCiAJICogdGhhdCBz aG91bGRuJ3QgaGFwcGVuLCB3ZSBzaG91bGQgaGF2ZSBkb25lIGZyZWVfaXJxKCkgYXQKQEAgLTk0 NSwyOSArMTAyMSw3MSBAQAogCWlmICghZ3AtPnJ1bm5pbmcpCiAJCXJldHVybiBJUlFfSEFORExF RDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOworCWdlbV9zdGF0dXMg PSBnZW1fcmVhZF9zdGF0dXMyKGdwKTsKKwlpZiAodW5saWtlbHkoIWdlbV9zdGF0dXMpKSAvKiBz aGFyZWQgaXJxPyAqLworCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAobmV0aWZfcnhfc2NoZWR1 bGVfcHJlcChkZXYpKSB7Ci0JCXUzMiBnZW1fc3RhdHVzID0gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVH X1NUQVQpOworCQlnZW1fZGlzYWJsZV9pbnRzKGdwKTsKKwkJZ2VtX2Fja19pbnQoZ3ApOwogCi0J CWlmIChnZW1fc3RhdHVzID09IDApIHsKKwkJaWYgKGdlbV9pcnFfc3luYyhncCkpIHsKKwkJCS8q IFdlIGFyZSBzdXJlIHRoYXQgKndlKiBkaXNhYmxlZCBwb2xsaW5nLCBzbyB3ZSBjYW4KKwkJCSAq IHNhZmVseSByZWVuYWJsZSBpdCBiZWZvcmUgcmV0dXJuaW5nLgorCQkJICovCiAJCQluZXRpZl9w b2xsX2VuYWJsZShkZXYpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZs YWdzKTsKLQkJCXJldHVybiBJUlFfTk9ORTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQor CiAJCWdwLT5zdGF0dXMgPSBnZW1fc3RhdHVzOwotCQlnZW1fZGlzYWJsZV9pbnRzKGdwKTsKIAkJ X19uZXRpZl9yeF9zY2hlZHVsZShkZXYpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmdwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2Vsc2UKK3N0YXRp YyBpcnFyZXR1cm5fdCBnZW1faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlz dHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5w cml2OworCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwog Ci0JLyogSWYgcG9sbGluZyB3YXMgZGlzYWJsZWQgYXQgdGhlIHRpbWUgd2UgcmVjZWl2ZWQgdGhh dAotCSAqIGludGVycnVwdCwgd2UgbWF5IHJldHVybiBJUlFfSEFORExFRCBoZXJlIHdoaWxlIHdl Ci0JICogc2hvdWxkIHJldHVybiBJUlFfTk9ORS4gTm8gYmlnIGRlYWwuLi4KKwkvKiBTd2FsbG93 IGludGVycnVwdHMgd2hlbiBzaHV0dGluZyB0aGUgY2hpcCBkb3duLCB0aG91Z2gKKwkgKiB0aGF0 IHNob3VsZG4ndCBoYXBwZW4sIHdlIHNob3VsZCBoYXZlIGRvbmUgZnJlZV9pcnEoKSBhdAorCSAq IHRoaXMgcG9pbnQuLi4KIAkgKi8KKwlpZiAoIWdwLT5ydW5uaW5nKQorCQlyZXR1cm4gSVJRX0hB TkRMRUQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmludF9sb2NrLCBmbGFncyk7CisKKwlp ZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CisJCXUzMiBnZW1fc3RhdHVzID0gZ2Vt X3JlYWRfc3RhdHVzKGdwKTsKKworCQlpZiAodW5saWtlbHkoIWdlbV9zdGF0dXMpKSB7CisJCQlu ZXRpZl9wb2xsX2VuYWJsZShkZXYpOworCQkJaGFuZGxlZCA9IDA7CisJCQlnb3RvIG91dDsKKwkJ fQorCisJCWdlbV9kaXNhYmxlX2ludHMoZ3ApOworCQlnZW1fYWNrX2ludChncCk7CisKKwkJaWYg KGdlbV9pcnFfc3luYyhncCkpIHsKKwkJCW5ldGlmX3BvbGxfZW5hYmxlKGRldik7CisJCQlnb3Rv IG91dDsKKwkJfQorCisJCWdwLT5zdGF0dXMgPSBnZW1fc3RhdHVzOworCQlfX25ldGlmX3J4X3Nj aGVkdWxlKGRldik7CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmlu dF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQorI2VuZGlmCiAKICNpZmRl ZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgZ2VtX3BvbGxfY29udHJv bGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtOTk5LDE0ICsxMTE3LDggQEAKIAkgICAg ICAgcmVhZGwoZ3AtPnJlZ3MgKyBNQUNfUlhTVEFUKSwKIAkgICAgICAgcmVhZGwoZ3AtPnJlZ3Mg KyBNQUNfUlhDRkcpKTsKIAotCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKLQlzcGluX2xvY2so JmdwLT50eF9sb2NrKTsKLQotCWdwLT5yZXNldF90YXNrX3BlbmRpbmcgPSAxOwotCXNjaGVkdWxl X3dvcmsoJmdwLT5yZXNldF90YXNrKTsKLQotCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7Ci0J c3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGdlbV90 eF90aW1lb3V0XG4iLCBkZXYtPm5hbWUpOworCWdlbV9zY2hlZHVsZV9yZXNldF90YXNrKGdwKTsK IH0KIAogc3RhdGljIF9faW5saW5lX18gaW50IGdlbV9pbnRtZShpbnQgZW50cnkpCkBAIC0xMDIz LDcgKzExMzUsNiBAQAogCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OwogCWludCBlbnRyeTsK IAl1NjQgY3RybDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJY3RybCA9IDA7CiAJaWYgKHNr Yi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKQEAgLTEwMzcsMjQgKzExNDgsMTMg QEAKIAkJCShjc3VtX3N0dWZmX29mZiA8PCAyMSkpOwogCX0KIAotCWxvY2FsX2lycV9zYXZlKGZs YWdzKTsKLQlpZiAoIXNwaW5fdHJ5bG9jaygmZ3AtPnR4X2xvY2spKSB7Ci0JCS8qIFRlbGwgdXBw ZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXJl dHVybiBORVRERVZfVFhfTE9DS0VEOwotCX0KLQkvKiBXZSByYWNlZCB3aXRoIGdlbV9kb19zdG9w KCkgKi8KLQlpZiAoIWdwLT5ydW5uaW5nKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdw LT50eF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0KIAkvKiBU aGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwotCWlmIChUWF9CVUZGU19BVkFJTChncCkg PD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgewotCQluZXRpZl9zdG9wX3F1ZXVl KGRldik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT50eF9sb2NrLCBmbGFncyk7Ci0J CXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3 YWtlIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJaWYgKGdlbV90eF9hdmFpbChncCkgPD0g KHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgeworCQlpZiAoIW5ldGlmX3F1ZXVlX3N0 b3BwZWQoZGV2KSkgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJcHJpbnRrKEtFUk5f RVJSIFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gIgorCQkJICAgICAgICJxdWV1ZSBh d2FrZSFcbiIsIGRldi0+bmFtZSk7CisJCX0KIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0K IApAQCAtMTEzMSwxNSArMTIzMSwxNyBAQAogCX0KIAogCWdwLT50eF9uZXcgPSBlbnRyeTsKLQlp ZiAoVFhfQlVGRlNfQVZBSUwoZ3ApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpCisJaWYgKHVubGlr ZWx5KGdlbV90eF9hdmFpbChncCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKIAkJbmV0aWZf c3RvcF9xdWV1ZShkZXYpOworCQlpZiAoZ2VtX3R4X2F2YWlsKGdwKSA+IChNQVhfU0tCX0ZSQUdT ICsgMSkpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQogCiAJaWYgKG5ldGlmX21zZ190 eF9xdWV1ZWQoZ3ApKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1ZXVlZCwgc2xvdCAl ZCwgc2tibGVuICVkXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBlbnRyeSwgc2tiLT5sZW4pOwog CW1iKCk7CiAJd3JpdGVsKGdwLT50eF9uZXcsIGdwLT5yZWdzICsgVFhETUFfS0lDSyk7Ci0Jc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPnR4X2xvY2ssIGZsYWdzKTsKIAogCWRldi0+dHJhbnNf c3RhcnQgPSBqaWZmaWVzOwogCkBAIC0xMTQ4LDcgKzEyNTAsNiBAQAogCiAjZGVmaW5lIFNUT1Bf VFJJRVMgMzIKIAotLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGdwLT5sb2NrIGFuZCBncC0+dHhf bG9jay4gKi8KIHN0YXRpYyB2b2lkIGdlbV9yZXNldChzdHJ1Y3QgZ2VtICpncCkKIHsKIAlpbnQg bGltaXQ7CkBAIC0xMTc0LDcgKzEyNzUsNiBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTVyBy ZXNldCBpcyBnaGV0dG8uXG4iLCBncC0+ZGV2LT5uYW1lKTsKIH0KIAotLyogTXVzdCBiZSBpbnZv a2VkIHVuZGVyIGdwLT5sb2NrIGFuZCBncC0+dHhfbG9jay4gKi8KIHN0YXRpYyB2b2lkIGdlbV9z dGFydF9kbWEoc3RydWN0IGdlbSAqZ3ApCiB7CiAJdTMyIHZhbDsKQEAgLTExOTcsOSArMTI5Nyw3 IEBACiAJd3JpdGVsKFJYX1JJTkdfU0laRSAtIDQsIGdwLT5yZWdzICsgUlhETUFfS0lDSyk7CiB9 CiAKLS8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBncC0+bG9jayBhbmQgZ3AtPnR4X2xvY2suIERN QSB3b24ndCBiZQotICogYWN0dWFsbHkgc3RvcHBlZCBiZWZvcmUgYWJvdXQgNG1zIHRobyAuLi4K LSAqLworLyogRE1BIHdvbid0IGJlIGFjdHVhbGx5IHN0b3BwZWQgYmVmb3JlIGFib3V0IDRtcyB0 aG8gLi4uICovCiBzdGF0aWMgdm9pZCBnZW1fc3RvcF9kbWEoc3RydWN0IGdlbSAqZ3ApCiB7CiAJ dTMyIHZhbDsKQEAgLTEyMjAsOCArMTMxOCw3IEBACiB9CiAKIAotLyogTXVzdCBiZSBpbnZva2Vk IHVuZGVyIGdwLT5sb2NrIGFuZCBncC0+dHhfbG9jay4gKi8KLS8vIFhYWCBkYmwgY2hlY2sgd2hh dCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBkbyB3aGVuIGNhbGxlZCBvbiBQQ1MgUEhZCisvKiBYWFgg ZGJsIGNoZWNrIHdoYXQgdGhhdCBmdW5jdGlvbiBzaG91bGQgZG8gd2hlbiBjYWxsZWQgb24gUENT IFBIWSAqLwogc3RhdGljIHZvaWQgZ2VtX2JlZ2luX2F1dG9fbmVnb3RpYXRpb24oc3RydWN0IGdl bSAqZ3AsIHN0cnVjdCBldGh0b29sX2NtZCAqZXApCiB7CiAJdTMyIGFkdmVydGlzZSwgZmVhdHVy ZXM7CkBAIC0xMzA2LDggKzE0MDMsNiBAQAogCiAvKiBBIGxpbmstdXAgY29uZGl0aW9uIGhhcyBv Y2N1cnJlZCwgaW5pdGlhbGl6ZSBhbmQgZW5hYmxlIHRoZQogICogcmVzdCBvZiB0aGUgY2hpcC4K LSAqCi0gKiBNdXN0IGJlIGludm9rZWQgdW5kZXIgZ3AtPmxvY2sgYW5kIGdwLT50eF9sb2NrLgog ICovCiBzdGF0aWMgaW50IGdlbV9zZXRfbGlua19tb2RlcyhzdHJ1Y3QgZ2VtICpncCkKIHsKQEAg LTE0MTcsNyArMTUxMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIE11c3QgYmUgaW52b2tlZCB1 bmRlciBncC0+bG9jayBhbmQgZ3AtPnR4X2xvY2suICovCiBzdGF0aWMgaW50IGdlbV9tZGlvX2xp bmtfbm90X3VwKHN0cnVjdCBnZW0gKmdwKQogewogCXN3aXRjaCAoZ3AtPmxzdGF0ZSkgewpAQCAt MTQ3NCwxMyArMTU2OCwxMyBAQAogCWlmIChncC0+YXNsZWVwKQogCQlyZXR1cm47CiAKLQlzcGlu X2xvY2tfaXJxKCZncC0+bG9jayk7Ci0Jc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CisJZ2VtX2Z1 bGxfbG9jayhncCwgMCk7CiAJZ2VtX2dldF9jZWxsKGdwKTsKIAogCS8qIElmIHRoZSByZXNldCB0 YXNrIGlzIHN0aWxsIHBlbmRpbmcsIHdlIGp1c3QKIAkgKiByZXNjaGVkdWxlIHRoZSBsaW5rIHRp bWVyCiAJICovCisJc21wX21iKCk7CiAJaWYgKGdwLT5yZXNldF90YXNrX3BlbmRpbmcpCiAJCWdv dG8gcmVzdGFydDsKIApAQCAtMTUyOCw4ICsxNjIyLDcgQEAKIAkJCQlwcmludGsoS0VSTl9JTkZP ICIlczogTGluayBkb3duXG4iLAogCQkJCQlncC0+ZGV2LT5uYW1lKTsKIAkJCW5ldGlmX2NhcnJp ZXJfb2ZmKGdwLT5kZXYpOwotCQkJZ3AtPnJlc2V0X3Rhc2tfcGVuZGluZyA9IDE7Ci0JCQlzY2hl ZHVsZV93b3JrKCZncC0+cmVzZXRfdGFzayk7CisJCQlnZW1fc2NoZWR1bGVfcmVzZXRfdGFzayhn cCk7CiAJCQlyZXN0YXJ0X2FuZWcgPSAxOwogCQl9IGVsc2UgaWYgKCsrZ3AtPnRpbWVyX3RpY2tz ID4gMTApIHsKIAkJCWlmIChmb3VuZF9taWlfcGh5KGdwKSkKQEAgLTE1NDYsMTEgKzE2MzksOSBA QAogCW1vZF90aW1lcigmZ3AtPmxpbmtfdGltZXIsIGppZmZpZXMgKyAoKDEyICogSFopIC8gMTAp KTsKIG91dF91bmxvY2s6CiAJZ2VtX3B1dF9jZWxsKGdwKTsKLQlzcGluX3VubG9jaygmZ3AtPnR4 X2xvY2spOwotCXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxvY2spOworCWdlbV9mdWxsX3VubG9jayhn cCk7CiB9CiAKLS8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBncC0+bG9jayBhbmQgZ3AtPnR4X2xv Y2suICovCiBzdGF0aWMgdm9pZCBnZW1fY2xlYW5fcmluZ3Moc3RydWN0IGdlbSAqZ3ApCiB7CiAJ c3RydWN0IGdlbV9pbml0X2Jsb2NrICpnYiA9IGdwLT5pbml0X2Jsb2NrOwpAQCAtMTYwMSw3ICsx NjkyLDYgQEAKIAl9CiB9CiAKLS8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBncC0+bG9jayBhbmQg Z3AtPnR4X2xvY2suICovCiBzdGF0aWMgdm9pZCBnZW1faW5pdF9yaW5ncyhzdHJ1Y3QgZ2VtICpn cCkKIHsKIAlzdHJ1Y3QgZ2VtX2luaXRfYmxvY2sgKmdiID0gZ3AtPmluaXRfYmxvY2s7CkBAIC0x Nzc1LDEyICsxODY1LDkgQEAKIAluZXRpZl9jYXJyaWVyX29mZihncC0+ZGV2KTsKIAogCS8qIENh biBJIGFkdmVydGlzZSBnaWdhYml0IGhlcmUgPyBJJ2QgbmVlZCBCQ00gUEhZIGRvY3MuLi4gKi8K LQlzcGluX2xvY2tfaXJxKCZncC0+bG9jayk7CiAJZ2VtX2JlZ2luX2F1dG9fbmVnb3RpYXRpb24o Z3AsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycSgmZ3AtPmxvY2spOwogfQogCi0vKiBNdXN0IGJl IGludm9rZWQgdW5kZXIgZ3AtPmxvY2sgYW5kIGdwLT50eF9sb2NrLiAqLwogc3RhdGljIHZvaWQg Z2VtX2luaXRfZG1hKHN0cnVjdCBnZW0gKmdwKQogewogCXU2NCBkZXNjX2RtYSA9ICh1NjQpIGdw LT5nYmxvY2tfZHZtYTsKQEAgLTE4MTgsNyArMTkwNSw2IEBACiAJCSAgICAgICBncC0+cmVncyAr IFJYRE1BX0JMQU5LKTsKIH0KIAotLyogTXVzdCBiZSBpbnZva2VkIHVuZGVyIGdwLT5sb2NrIGFu ZCBncC0+dHhfbG9jay4gKi8KIHN0YXRpYyB1MzIgZ2VtX3NldHVwX211bHRpY2FzdChzdHJ1Y3Qg Z2VtICpncCkKIHsKIAl1MzIgcnhjZmcgPSAwOwpAQCAtMTg2MCw3ICsxOTQ2LDYgQEAKIAlyZXR1 cm4gcnhjZmc7CiB9CiAKLS8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBncC0+bG9jayBhbmQgZ3At PnR4X2xvY2suICovCiBzdGF0aWMgdm9pZCBnZW1faW5pdF9tYWMoc3RydWN0IGdlbSAqZ3ApCiB7 CiAJdW5zaWduZWQgY2hhciAqZSA9ICZncC0+ZGV2LT5kZXZfYWRkclswXTsKQEAgLTE5NDMsNyAr MjAyOCw2IEBACiAJCXdyaXRlbCgwLCBncC0+cmVncyArIFdPTF9XQUtFQ1NSKTsKIH0KIAotLyog TXVzdCBiZSBpbnZva2VkIHVuZGVyIGdwLT5sb2NrIGFuZCBncC0+dHhfbG9jay4gKi8KIHN0YXRp YyB2b2lkIGdlbV9pbml0X3BhdXNlX3RocmVzaG9sZHMoc3RydWN0IGdlbSAqZ3ApCiB7CiAgICAg ICAgCXUzMiBjZmc7CkBAIC0yMDk2LDcgKzIxODAsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBN dXN0IGJlIGludm9rZWQgdW5kZXIgZ3AtPmxvY2sgYW5kIGdwLT50eF9sb2NrLiAqLwogc3RhdGlj IHZvaWQgZ2VtX3JlaW5pdF9jaGlwKHN0cnVjdCBnZW0gKmdwKQogewogCS8qIFJlc2V0IHRoZSBj aGlwICovCkBAIC0yMTE2LDEyICsyMTk5LDEwIEBACiAJZ2VtX2luaXRfbWFjKGdwKTsKIH0KIAot CiAvKiBNdXN0IGJlIGludm9rZWQgd2l0aCBubyBsb2NrIGhlbGQuICovCiBzdGF0aWMgdm9pZCBn ZW1fc3RvcF9waHkoc3RydWN0IGdlbSAqZ3AsIGludCB3b2wpCiB7CiAJdTMyIG1pZmNmZzsKLQl1 bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogTGV0IHRoZSBjaGlwIHNldHRsZSBkb3duIGEgYml0 LCBpdCBzZWVtcyB0aGF0IGhlbHBzCiAJICogZm9yIHNsZWVwIG1vZGUgb24gc29tZSBtb2RlbHMK QEAgLTIxNjcsMTMgKzIyNDgsMTMgQEAKIAl3cml0ZWwoMCwgZ3AtPnJlZ3MgKyBSWERNQV9DRkcp OwogCiAJaWYgKCF3b2wpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7 Ci0JCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOworCQlnZW1fZnVsbF9sb2NrKGdwLCAwKTsKKwog CQlnZW1fcmVzZXQoZ3ApOwogCQl3cml0ZWwoTUFDX1RYUlNUX0NNRCwgZ3AtPnJlZ3MgKyBNQUNf VFhSU1QpOwogCQl3cml0ZWwoTUFDX1JYUlNUX0NNRCwgZ3AtPnJlZ3MgKyBNQUNfUlhSU1QpOwot CQlzcGluX3VubG9jaygmZ3AtPnR4X2xvY2spOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZn cC0+bG9jaywgZmxhZ3MpOworCisJCWdlbV9mdWxsX3VubG9jayhncCk7CiAKIAkJLyogTm8gbmVl ZCB0byB0YWtlIHRoZSBsb2NrIGhlcmUgKi8KIApAQCAtMjE5MiwxNCArMjI3MywxMSBAQAogCX0K IH0KIAotCiBzdGF0aWMgaW50IGdlbV9kb19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQog ewogCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAK LQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJmdwLT50 eF9sb2NrKTsKKwlnZW1fZnVsbF9sb2NrKGdwLCAwKTsKIAogCS8qIEVuYWJsZSB0aGUgY2VsbCAq LwogCWdlbV9nZXRfY2VsbChncCk7CkBAIC0yMjExLDI4ICsyMjg5LDI1IEBACiAKIAlpZiAoZ3At PmxzdGF0ZSA9PSBsaW5rX3VwKSB7CiAJCW5ldGlmX2NhcnJpZXJfb24oZ3AtPmRldik7CisJCS8q IGdlbV9zZXRfbGlua19tb2RlcyBzdGFydHMgRE1BIGFuZCBlbmFibGVkIGludHMgKi8KIAkJZ2Vt X3NldF9saW5rX21vZGVzKGdwKTsKIAl9CiAKLQluZXRpZl93YWtlX3F1ZXVlKGdwLT5kZXYpOwot Ci0Jc3Bpbl91bmxvY2soJmdwLT50eF9sb2NrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZn cC0+bG9jaywgZmxhZ3MpOworCWdlbV9mdWxsX3VubG9jayhncCk7CiAKIAlpZiAocmVxdWVzdF9p cnEoZ3AtPnBkZXYtPmlycSwgZ2VtX2ludGVycnVwdCwKLQkJCQkgICBJUlFGX1NIQVJFRCwgZGV2 LT5uYW1lLCAodm9pZCAqKWRldikpIHsKKwkJICAgICAgICBJUlFGX1NIQVJFRCwgZGV2LT5uYW1l LCAodm9pZCAqKWRldikpIHsKKwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVx dWVzdCBpcnEgIVxuIiwgZ3AtPmRldi0+bmFtZSk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdw LT5sb2NrLCBmbGFncyk7Ci0JCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOworCQlnZW1fZnVsbF9s b2NrKGdwLCAwKTsKIAogCQlncC0+cnVubmluZyA9ICAwOwogCQlnZW1fcmVzZXQoZ3ApOwogCQln ZW1fY2xlYW5fcmluZ3MoZ3ApOwogCQlnZW1fcHV0X2NlbGwoZ3ApOwogCi0JCXNwaW5fdW5sb2Nr KCZncC0+dHhfbG9jayk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFn cyk7CisJCWdlbV9mdWxsX3VubG9jayhncCk7CiAKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAt MjI0MywyMiArMjMxOCwxNCBAQAogc3RhdGljIHZvaWQgZ2VtX2RvX3N0b3Aoc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgaW50IHdvbCkKIHsKIAlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsKLQl1 bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFn cyk7Ci0Jc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7Ci0KLQlncC0+cnVubmluZyA9IDA7Ci0KLQkv KiBTdG9wIG5ldGlmIHF1ZXVlICovCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JLyogTWFr ZSBzdXJlIGludHMgYXJlIGRpc2FibGVkICovCisJZ2VtX2Z1bGxfbG9jayhncCwgMSk7CiAJZ2Vt X2Rpc2FibGVfaW50cyhncCk7CisJCisJZ3AtPnJ1bm5pbmcgPSAwOwogCi0JLyogV2UgY2FuIGRy b3AgdGhlIGxvY2sgbm93ICovCi0Jc3Bpbl91bmxvY2soJmdwLT50eF9sb2NrKTsKLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOworCS8qIFdlIGNhbiBkcm9wIHRoZSBs b2NrIG5vdyB0aGF0IHJ1bm5pbmcgaXMgc2V0IHRvIDAgKi8KKwlnZW1fZnVsbF91bmxvY2soZ3Ap OwogCiAJLyogSWYgd2UgYXJlIGdvaW5nIHRvIHNsZWVwIHdpdGggV09MICovCiAJZ2VtX3N0b3Bf ZG1hKGdwKTsKQEAgLTIyNzUsOSArMjM0Miw5IEBACiAKIAkvKiBDZWxsIG5vdCBuZWVkZWQgbmVp dGhlciBpZiBubyBXT0wgKi8KIAlpZiAoIXdvbCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3At PmxvY2ssIGZsYWdzKTsKKwkJZ2VtX2Z1bGxfbG9jayhncCwgMCk7CiAJCWdlbV9wdXRfY2VsbChn cCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CisJCWdlbV9m dWxsX3VubG9jayhncCk7CiAJfQogfQogCkBAIC0yMjg3LDMwICsyMzU0LDI2IEBACiAKIAltdXRl eF9sb2NrKCZncC0+cG1fbXV0ZXgpOwogCi0JbmV0aWZfcG9sbF9kaXNhYmxlKGdwLT5kZXYpOwot Ci0Jc3Bpbl9sb2NrX2lycSgmZ3AtPmxvY2spOwotCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOwor CWdlbV9mdWxsX2xvY2soZ3AsIDEpOworCWdlbV9kaXNhYmxlX2ludHMoZ3ApOwogCiAJaWYgKGdw LT5ydW5uaW5nID09IDApCiAJCWdvdG8gbm90X3J1bm5pbmc7CiAKLQlpZiAoZ3AtPnJ1bm5pbmcp IHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShncC0+ZGV2KTsKKwlnZW1fbmV0aWZfc3RvcChncCk7CiAK LQkJLyogUmVzZXQgdGhlIGNoaXAgJiByaW5ncyAqLwotCQlnZW1fcmVpbml0X2NoaXAoZ3ApOwot CQlpZiAoZ3AtPmxzdGF0ZSA9PSBsaW5rX3VwKQotCQkJZ2VtX3NldF9saW5rX21vZGVzKGdwKTsK LQkJbmV0aWZfd2FrZV9xdWV1ZShncC0+ZGV2KTsKLQl9Ci0gbm90X3J1bm5pbmc6Ci0JZ3AtPnJl c2V0X3Rhc2tfcGVuZGluZyA9IDA7CisJLyogUmVzZXQgdGhlIGNoaXAgJiByaW5ncyAqLworCWdl bV9yZWluaXRfY2hpcChncCk7CisJaWYgKGdwLT5sc3RhdGUgPT0gbGlua191cCkKKwkJZ2VtX3Nl dF9saW5rX21vZGVzKGdwKTsKIAotCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7Ci0Jc3Bpbl91 bmxvY2tfaXJxKCZncC0+bG9jayk7CisJZ2VtX25ldGlmX3N0YXJ0KGdwKTsKIAotCW5ldGlmX3Bv bGxfZW5hYmxlKGdwLT5kZXYpOworbm90X3J1bm5pbmc6CisJZ3AtPnJlc2V0X3Rhc2tfcGVuZGlu ZyA9IDA7CisKKwlnZW1fZW5hYmxlX2ludHMoZ3ApOworCWdlbV9mdWxsX3VubG9jayhncCk7CiAK IAltdXRleF91bmxvY2soJmdwLT5wbV9tdXRleCk7CiB9CkBAIC0yMzI0LDggKzIzODcsMTIgQEAK IAltdXRleF9sb2NrKCZncC0+cG1fbXV0ZXgpOwogCiAJLyogV2UgbmVlZCB0aGUgY2VsbCBlbmFi bGVkICovCi0JaWYgKCFncC0+YXNsZWVwKQorCWlmICghZ3AtPmFzbGVlcCkgewogCQlyYyA9IGdl bV9kb19zdGFydChkZXYpOworCQlpZiAocmMgPT0gMCkKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRl dik7CisJfQorCiAJZ3AtPm9wZW5lZCA9IChyYyA9PSAwKTsKIAogCW11dGV4X3VubG9jaygmZ3At PnBtX211dGV4KTsKQEAgLTIzMzcsMTUgKzI0MDQsMTQgQEAKIHsKIAlzdHJ1Y3QgZ2VtICpncCA9 IGRldi0+cHJpdjsKIAotCS8qIE5vdGU6IHdlIGRvbid0IG5lZWQgdG8gY2FsbCBuZXRpZl9wb2xs X2Rpc2FibGUoKSBoZXJlIGJlY2F1c2UKLQkgKiBvdXIgY2FsbGVyIChkZXZfY2xvc2UpIGFscmVh ZHkgZGlkIGl0IGZvciB1cwotCSAqLwotCiAJbXV0ZXhfbG9jaygmZ3AtPnBtX211dGV4KTsKIAog CWdwLT5vcGVuZWQgPSAwOwotCWlmICghZ3AtPmFzbGVlcCkKKwlpZiAoIWdwLT5hc2xlZXApIHsK KwkJLyogVXBwZXIgbGF5ZXIgdG9vayBjYXJlIG9mIGRpc2FibGluZyBwb2xsaW5nICovCisJCW5l dGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJZ2VtX2RvX3N0b3AoZGV2LCAwKTsKKwl9CiAKIAltdXRl eF91bmxvY2soJmdwLT5wbV9tdXRleCk7CiAKQEAgLTIzNTcsMjIgKzI0MjMsMTcgQEAKIHsKIAlz dHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBn ZW0gKmdwID0gZGV2LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2Nr KCZncC0+cG1fbXV0ZXgpOwogCi0JbmV0aWZfcG9sbF9kaXNhYmxlKGRldik7Ci0KIAlwcmludGso S0VSTl9JTkZPICIlczogc3VzcGVuZGluZywgV2FrZU9uTGFuICVzXG4iLAogCSAgICAgICBkZXYt Pm5hbWUsCiAJICAgICAgIChncC0+d2FrZV9vbl9sYW4gJiYgZ3AtPm9wZW5lZCkgPyAiZW5hYmxl ZCIgOiAiZGlzYWJsZWQiKTsKIAogCS8qIEtlZXAgdGhlIGNlbGwgZW5hYmxlZCBkdXJpbmcgdGhl IGVudGlyZSBvcGVyYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdz KTsKLQlzcGluX2xvY2soJmdwLT50eF9sb2NrKTsKKwlnZW1fZnVsbF9sb2NrKGdwLCAwKTsKIAln ZW1fZ2V0X2NlbGwoZ3ApOwotCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7Ci0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKKwlnZW1fZnVsbF91bmxvY2soZ3ApOwog CiAJLyogSWYgdGhlIGRyaXZlciBpcyBvcGVuZWQsIHdlIHN0b3AgdGhlIE1BQyAqLwogCWlmIChn cC0+b3BlbmVkKSB7CkBAIC0yMzgxLDYgKzI0NDIsNyBAQAogCiAJCS8qIFN3aXRjaCBvZmYgTUFD LCByZW1lbWJlciBXT0wgc2V0dGluZyAqLwogCQlncC0+YXNsZWVwX3dvbCA9IGdwLT53YWtlX29u X2xhbjsKKwkJZ2VtX25ldGlmX3N0b3AoZ3ApOwogCQlnZW1fZG9fc3RvcChkZXYsIGdwLT5hc2xl ZXBfd29sKTsKIAl9IGVsc2UKIAkJZ3AtPmFzbGVlcF93b2wgPSAwOwpAQCAtMjM5OSw4ICsyNDYx LDcgQEAKIAltdXRleF91bmxvY2soJmdwLT5wbV9tdXRleCk7CiAKIAkvKiBXYWl0IGZvciBhIHBl bmRpbmcgcmVzZXQgdGFzayB0byBjb21wbGV0ZSAqLwotCXdoaWxlIChncC0+cmVzZXRfdGFza19w ZW5kaW5nKQotCQl5aWVsZCgpOworCWdlbV93YWl0X3Jlc2V0X3Rhc2soZ3ApOwogCWZsdXNoX3Nj aGVkdWxlZF93b3JrKCk7CiAKIAkvKiBTaHV0IHRoZSBQSFkgZG93biBldmVudHVhbGx5IGFuZCBz ZXR1cCBXT0wgKi8KQEAgLTI0MjEsNyArMjQ4Miw2IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2Ug KmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJp djsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc3Vt aW5nXG4iLCBkZXYtPm5hbWUpOwogCkBAIC0yNDY1LDExICsyNTI1LDkgQEAKIAogCQkvKiBSZS1h dHRhY2ggbmV0IGRldmljZSAqLwogCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0KIAl9CiAK LQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJmdwLT50 eF9sb2NrKTsKKwlnZW1fZnVsbF9sb2NrKGdwLCAwKTsKIAogCS8qIElmIHdlIGhhZCBXT0wgZW5h YmxlZCwgdGhlIGNlbGwgY2xvY2sgd2FzIG5ldmVyIHR1cm5lZCBvZmYgZHVyaW5nCiAJICogc2xl ZXAsIHNvIHdlIGVuZCB1cCBiZWVpbmcgdW5iYWxhbmNlZC4gRml4IHRoYXQgaGVyZQpAQCAtMjQ4 MiwxMCArMjU0MCw5IEBACiAJICovCiAJZ2VtX3B1dF9jZWxsKGdwKTsKIAotCXNwaW5fdW5sb2Nr KCZncC0+dHhfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdz KTsKKwlnZW1fZnVsbF91bmxvY2soZ3ApOwogCi0JbmV0aWZfcG9sbF9lbmFibGUoZGV2KTsKKwln ZW1fbmV0aWZfc3RhcnQoZ3ApOwogCiAJbXV0ZXhfdW5sb2NrKCZncC0+cG1fbXV0ZXgpOwogCkBA IC0yNDk4LDggKzI1NTUsOCBAQAogCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OwogCXN0cnVj dCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZncC0+bmV0X3N0YXRzOwogCi0Jc3Bpbl9sb2Nr X2lycSgmZ3AtPmxvY2spOwotCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOworCWdlbV9uZXRpZl9z dG9wKGdwKTsKKwlnZW1fZnVsbF9sb2NrKGdwLCAwKTsKIAogCS8qIEkgaGF2ZSBzZWVuIHRoaXMg YmVpbmcgY2FsbGVkIHdoaWxlIHRoZSBQTSB3YXMgaW4gcHJvZ3Jlc3MsCiAJICogc28gd2Ugc2hp ZWxkIGFnYWluc3QgdGhpcwpAQCAtMjUyMiwyNyArMjU3OSwyNiBAQAogCQl3cml0ZWwoMCwgZ3At PnJlZ3MgKyBNQUNfTENPTEwpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7Ci0J c3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CisJZ2VtX2Z1bGxfdW5sb2NrKGdwKTsKKwlnZW1f bmV0aWZfc3RhcnQoZ3ApOwogCiAJcmV0dXJuICZncC0+bmV0X3N0YXRzOwogfQogCisvKiBnZW1f c2V0X211bHRpY2FzdCBpcyBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGhlbGQuIFRodXMsIGl0 CisgKiBjYW5ub3Qgc2xlZXAuCisgKi8KIHN0YXRpYyB2b2lkIGdlbV9zZXRfbXVsdGljYXN0KHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7CiAJ dTMyIHJ4Y2ZnLCByeGNmZ19uZXc7CiAJaW50IGxpbWl0ID0gMTAwMDA7CiAKLQotCXNwaW5fbG9j a19pcnEoJmdwLT5sb2NrKTsKLQlzcGluX2xvY2soJmdwLT50eF9sb2NrKTsKKwlnZW1fZnVsbF9s b2NrKGdwLCAwKTsKIAogCWlmICghZ3AtPnJ1bm5pbmcpCiAJCWdvdG8gYmFpbDsKIAotCW5ldGlm X3N0b3BfcXVldWUoZGV2KTsKLQogCXJ4Y2ZnID0gcmVhZGwoZ3AtPnJlZ3MgKyBNQUNfUlhDRkcp OwogCXJ4Y2ZnX25ldyA9IGdlbV9zZXR1cF9tdWx0aWNhc3QoZ3ApOwogI2lmZGVmIFNUUklQX0ZD UwpAQCAtMjU2MiwxMSArMjYxOCw4IEBACiAKIAl3cml0ZWwocnhjZmcsIGdwLT5yZWdzICsgTUFD X1JYQ0ZHKTsKIAotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQogIGJhaWw6Ci0Jc3Bpbl91bmxv Y2soJmdwLT50eF9sb2NrKTsKLQlzcGluX3VubG9ja19pcnEoJmdwLT5sb2NrKTsKKwlnZW1fZnVs bF91bmxvY2soZ3ApOwogfQogCiAvKiBKdW1iby1ncmFtcyBkb24ndCBzZWVtIHRvIHdvcmsgOi0o ICovCkBAIC0yNTkzLDE2ICsyNjQ2LDIyIEBACiAJfQogCiAJbXV0ZXhfbG9jaygmZ3AtPnBtX211 dGV4KTsKLQlzcGluX2xvY2tfaXJxKCZncC0+bG9jayk7Ci0Jc3Bpbl9sb2NrKCZncC0+dHhfbG9j ayk7CisKKwlnZW1fbmV0aWZfc3RvcChncCk7CisJZ2VtX2Z1bGxfbG9jayhncCwgMSk7CisJZ2Vt X2Rpc2FibGVfaW50cyhncCk7CisJCiAJZGV2LT5tdHUgPSBuZXdfbXR1OwogCWlmIChncC0+cnVu bmluZykgewogCQlnZW1fcmVpbml0X2NoaXAoZ3ApOwogCQlpZiAoZ3AtPmxzdGF0ZSA9PSBsaW5r X3VwKQogCQkJZ2VtX3NldF9saW5rX21vZGVzKGdwKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmdwLT50 eF9sb2NrKTsKLQlzcGluX3VubG9ja19pcnEoJmdwLT5sb2NrKTsKKworCWdlbV9uZXRpZl9zdGFy dChncCk7CisJZ2VtX2VuYWJsZV9pbnRzKGdwKTsKKwlnZW1fZnVsbF91bmxvY2soZ3ApOworCiAJ bXV0ZXhfdW5sb2NrKCZncC0+cG1fbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0yNjM1LDcgKzI2 OTQsNyBAQAogCQljbWQtPnBoeV9hZGRyZXNzID0gMDsgLyogWFhYIGZpeGVkIFBIWUFEICovCiAK IAkJLyogUmV0dXJuIGN1cnJlbnQgUEhZIHNldHRpbmdzICovCi0JCXNwaW5fbG9ja19pcnEoJmdw LT5sb2NrKTsKKwkJZ2VtX2Z1bGxfbG9jayhncCwgMCk7CiAJCWNtZC0+YXV0b25lZyA9IGdwLT53 YW50X2F1dG9uZWc7CiAJCWNtZC0+c3BlZWQgPSBncC0+cGh5X21paS5zcGVlZDsKIAkJY21kLT5k dXBsZXggPSBncC0+cGh5X21paS5kdXBsZXg7CkBAIC0yNjQ3LDcgKzI3MDYsNyBAQAogCQkgKi8K IAkJaWYgKGNtZC0+YWR2ZXJ0aXNpbmcgPT0gMCkKIAkJCWNtZC0+YWR2ZXJ0aXNpbmcgPSBjbWQt PnN1cHBvcnRlZDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CisJCWdlbV9mdWxsX3Vu bG9jayhncCk7CiAJfSBlbHNlIHsgLy8gWFhYIFBDUyA/CiAJCWNtZC0+c3VwcG9ydGVkID0KIAkJ CShTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CkBAIC0y Njg1LDExICsyNzQ0LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogQXBwbHkgc2V0dGlu Z3MgYW5kIHJlc3RhcnQgbGluayBwcm9jZXNzLiAqLwotCXNwaW5fbG9ja19pcnEoJmdwLT5sb2Nr KTsKKwlnZW1fZnVsbF9sb2NrKGdwLCAwKTsKIAlnZW1fZ2V0X2NlbGwoZ3ApOwogCWdlbV9iZWdp bl9hdXRvX25lZ290aWF0aW9uKGdwLCBjbWQpOwogCWdlbV9wdXRfY2VsbChncCk7Ci0Jc3Bpbl91 bmxvY2tfaXJxKCZncC0+bG9jayk7CisJZ2VtX2Z1bGxfdW5sb2NrKGdwKTsKIAogCXJldHVybiAw OwogfQpAQCAtMjcwMiwxMSArMjc2MSwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFJl c3RhcnQgbGluayBwcm9jZXNzLiAqLwotCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKKwlnZW1f ZnVsbF9sb2NrKGdwLCAwKTsKIAlnZW1fZ2V0X2NlbGwoZ3ApOwogCWdlbV9iZWdpbl9hdXRvX25l Z290aWF0aW9uKGdwLCBOVUxMKTsKIAlnZW1fcHV0X2NlbGwoZ3ApOwotCXNwaW5fdW5sb2NrX2ly cSgmZ3AtPmxvY2spOworCWdlbV9mdWxsX3VubG9jayhncCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAg LTI3NzAsMTYgKzI4MjksMTUgQEAKIAlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsKIAlzdHJ1 Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKIAlpbnQgcmMgPSAtRU9QTk9U U1VQUDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogSG9sZCB0aGUgUE0gbXV0ZXggd2hp bGUgZG9pbmcgaW9jdGwncyBvciB3ZSBtYXkgY29sbGlkZQogCSAqIHdpdGggcG93ZXIgbWFuYWdl bWVudC4KIAkgKi8KIAltdXRleF9sb2NrKCZncC0+cG1fbXV0ZXgpOwogCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CisJZ2VtX2Z1bGxfbG9jayhncCwgMCk7CiAJZ2VtX2dl dF9jZWxsKGdwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwor CWdlbV9mdWxsX3VubG9jayhncCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQ SFk6CQkvKiBHZXQgYWRkcmVzcyBvZiBNSUkgUEhZIGluIHVzZS4gKi8KQEAgLTI4MDksOSArMjg2 Nyw5IEBACiAJCWJyZWFrOwogCX07CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZs YWdzKTsKKwlnZW1fZnVsbF9sb2NrKGdwLCAwKTsKIAlnZW1fcHV0X2NlbGwoZ3ApOwotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CisJZ2VtX2Z1bGxfdW5sb2NrKGdw KTsKIAogCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKIApAQCAtMjkxOCw2ICsyOTc2LDcg QEAKIAlpZiAoZGV2KSB7CiAJCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OwogCisJCS8qIHVu cmVnaXN0ZXJfbmV0ZGV2IHdpbGwgY2xvc2UgdGhlIGRldmljZSBpZiBpdCdzIG9wZW4gKi8KIAkJ dW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCQkvKiBTdG9wIHRoZSBsaW5rIHRpbWVyICovCkBA IC0yOTI3LDggKzI5ODYsNyBAQAogCQlnZW1fZ2V0X2NlbGwoZ3ApOwogCiAJCS8qIFdhaXQgZm9y IGEgcGVuZGluZyByZXNldCB0YXNrIHRvIGNvbXBsZXRlICovCi0JCXdoaWxlIChncC0+cmVzZXRf dGFza19wZW5kaW5nKQotCQkJeWllbGQoKTsKKwkJZ2VtX3dhaXRfcmVzZXRfdGFzayhncCk7CiAJ CWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAkJLyogU2h1dCB0aGUgUEhZIGRvd24gKi8KQEAg LTMwMzUsOCArMzA5MywxMSBAQAogCiAJZ3AtPm1zZ19lbmFibGUgPSBERUZBVUxUX01TRzsKIAor CWdwLT5pcnFfc3luYyA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmdwLT5sb2NrKTsKLQlzcGluX2xv Y2tfaW5pdCgmZ3AtPnR4X2xvY2spOworI2lmICFHRU1fSU5URVJSVVBUX0xPQ0tMRVNTCisJc3Bp bl9sb2NrX2luaXQoJmdwLT5pbnRfbG9jayk7CisjZW5kaWYKIAltdXRleF9pbml0KCZncC0+cG1f bXV0ZXgpOwogCiAJaW5pdF90aW1lcigmZ3AtPmxpbmtfdGltZXIpOwpAQCAtMzEzMiw5ICszMTkz LDcgQEAKIAkgKi8KIAlnZW1faW5pdF9waHkoZ3ApOwogCi0Jc3Bpbl9sb2NrX2lycSgmZ3AtPmxv Y2spOwogCWdlbV9wdXRfY2VsbChncCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7CiAK IAkvKiBSZWdpc3RlciB3aXRoIGtlcm5lbCAqLwogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkg ewpAQCAtMzE1Niw4ICszMjE1LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZvdW5kICVz IFBIWVxuIiwgZGV2LT5uYW1lLAogCQkJZ3AtPnBoeV9taWkuZGVmID8gZ3AtPnBoeV9taWkuZGVm LT5uYW1lIDogIm5vIik7CiAKLQkvKiBHRU0gY2FuIGRvIGl0IGFsbC4uLiAqLwotCWRldi0+ZmVh dHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfTExUWDsKKwlk ZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CiAJaWYgKHBjaV91 c2luZ19kYWMpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCkBAIC0zMTc3 LDcgKzMyMzUsNiBAQAogZXJyX2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShw ZGV2KTsKIAlyZXR1cm4gZXJyOwotCiB9CiAKIAo= ------=_Part_52921_2058939.1163108002722--