From: "Rafael J. Wysocki" Subject: [RFC][PATCH] PCI PM: Make new suspend-resume callbacks carry out core operations (rev. 2) Date: Sun, 28 Dec 2008 16:07:27 +0100 Message-ID: <200812281607.28007.rjw@sisk.pl> References: <200812190049.34343.rjw@sisk.pl> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: base64 Return-path: Received: from ogre.sisk.pl ([217.79.144.158]:48406 "EHLO ogre.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754728AbYL1PHY (ORCPT ); Sun, 28 Dec 2008 10:07:24 -0500 In-Reply-To: <200812190049.34343.rjw@sisk.pl> Content-Disposition: inline Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: Len Brown Cc: ACPI Devel Maling List , Jesse Barnes , Pavel Machek , pm list , Matthew Wilcox , "H. Peter Anvin" , LKML , Greg KH T24gRnJpZGF5IDE5IERlY2VtYmVyIDIwMDgsIFJhZmFlbCBKLiBXeXNvY2tpIHdyb3RlOgo+IEhp IExlbiwKPiAKPiBUaGUgcGF0Y2ggYmVsb3cgYWRkcyB0aGUgY2FsbGJhY2tzIHRoYXQgc2F2ZS9y ZXN0b3JlIHRoZSBzdGFuZGFyZCBQQ0kgY29uZmlnCj4gcmVnaXN0ZXJzLCBjaGFuZ2UgdGhlIHBv d2VyIHN0YXRlIG9mIHRoZSBkZXZpY2UgZXRjLiB0byB0aGUgbmV3IHN1c3BlbmQtcmVzdW1lCj4g Y2FsbGJhY2tzICh3aGljaCBhcmUgbm90IHlldCB1c2VkIGJ5IGRldmljZSBkcml2ZXJzKSwgc28g dGhhdCB0aGUgZHJpdmVycyBkb24ndAo+IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlc2Ugb3BlcmF0 aW9ucy4KPiAKPiBUaGUgc2F2aW5nIGFuZCByZXN0b3Jpbmcgb2YgdGhlIHN0YW5kYXJkIFBDSSBj b25maWcgcmVnaXN0ZXJzIGlzIGRvbmUgd2l0aAo+IGludGVycnVwdHMgb2ZmLCB0aGUgb3RoZXIg dGhpbmdzIGFyZSBkb25lIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLgo+IAo+IFRoZSBwYXRjaCBz aG91bGQgYXBwbHkgdG8gdGhlIGN1cnJlbnQgbGludXgtbmV4dCB0cmVlLgoKQmVsb3cgaXMgYSBu ZXcgdmVyc2lvbiBvZiB0aGUgcGF0Y2guCgpOb3csIHRoZSBzdGFuZGFyZCBjb25maWcgc3BhY2Vz IG9mIGRldmljZXMgYXJlIHJlc3RvcmVkIHdpdGggaW50ZXJydXB0cwpkaXNhYmxlZCwgYnV0IG9u bHkgaWYgdGhlIGJyaWRnZXMgdGhlIGRldmljZXMgYXJlIGJlaGluZCBhcmUgaW4gRDAuICBPdGhl cndpc2UsCnRoZSBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkIGFnYWluIHdpdGggaW50ZXJydXB0cyBl bmFibGVkIChwcmVzdW1hYmx5IHRoZQpicmlkZ2Ugd291bGQgYmUgcHV0IGludG8gRDAgYmVmb3Jl IHRoYXQgaGFwcGVucykuCgpBbHNvLCBwY2lfZGlzYWJsZV9kZXZpY2UoKSBpcyBub3QgY2FsbGVk IGR1cmluZyByZXN1bWUgYW5kCnBjaV9yZWVuYWJsZV9kZXZpY2UoKSBpcyB1c2VkIHRvIGVuYWJs ZSB0aGUgZGV2aWNlcyB0aGF0IHdlcmUgZW5hYmxlZCBkdXJpbmcKc3VzcGVuZC4gIFRoaXMgYWxs b3dzIHVzIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCBwY2lfc2V0X21hc3RlcigpIGZvciBkZXZpY2Vz CnRoYXQgd2VyZSBidXMgbWFzdGVycyBiZWZvcmUgc3VzcGVuZC4gIEFkZGl0aW9uYWxseSwgdGhl IHBjaV9yZWVuYWJsZV9kZXZpY2UoKQptYXkgYmUgb3ZlcnJpZGVuIGJ5IHRoZSBkcml2ZXIsIGJ5 IGRpc2FibGluZyB0aGUgZGV2aWNlIGR1cmluZyBzdXNwZW5kLgoKRmluYWxseSwgYnJpZGdlcyBh cmUgaGFuZGxlZCBhIGJpdCBkaWZmZXJlbnRseSBmcm9tIHRoZSByZWd1bGFyIGRldmljZXMgKHRo ZXkKYXJlIG5vdCBwdXQgaW50byBsb3cgcG93ZXIgc3RhdGVzIGR1cmluZyBzdXNwZW5kIGFuZCBw Y2lfZW5hYmxlX3dha2UoKSBpcwpub3QgY2FsbGVkIGZvciB0aGVtLgoKVGhlIHBhdGNoIHNob3Vs ZCBhcHBseSBvbiB0b3Agb2YgbGludXgtbmV4dCB3aXRoIHRoZSBwYXRjaCBmaXhpbmcKcGNpX3Vw ZGF0ZV9jdXJyZW50X3N0YXRlKCkgSSBzZW50IHllc3RlcmRheQooaHR0cDovL21hcmMuaW5mby8/ bD1saW51eC1rZXJuZWwmbT0xMjMwMzkxOTk2MDcxNTkmdz00KS4KClBsZWFzZSByZXZpZXcuCgpU aGFua3MsClJhZmFlbAoKLS0tClRoZXJlIGFyZSBhIGZldyBzdGFuZGFyZCBQQ0kgY2FsbGJhY2tz IHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgYW55ClBDSSBkcml2ZXIgaW1wbGVtZW50aW5nIHN1c3Bl bmQtcmVzdW1lIGhhbmRsZXJzLiAgVGhlIGRyaXZlcnMsCmhvd2V2ZXIsIHRlbmQgdG8gdXNlIHRo ZXNlIGNhbGxiYWNrcyBpbiBkaWZmZXJlbnQgd2F5cywgaW4gZGlmZmVyZW50Cm9yZGVyIG9yIGV2 ZW4gbm90IGF0IGFsbC4gIFRoaXMgc29tZXRpbWVzIGNhdXNlcyBwcm9ibGVtcyB0byBhcHBlYXIK YW5kIG1ha2VzIFBDSSBzdXNwZW5kLXJlc3VtZSBkaWFnbm9zdGljcyB0cm91Ymxlc29tZS4gIFRo dXMgaXQgc2VlbXMKcmVhc29uYWJsZSB0byBtYWtlIHRoZSBQQ0kgY29yZSBleGVjdXRlIHRoZSBz dGFuZGFyZCBjYWxsYmFja3Mgc28KdGhhdCB0aGUgZHJpdmVycyBkb24ndCBoYXZlIHRvIGRvIGl0 LgoKTW9kaWZ5IHRoZSBwb3dlciBtYW5hZ2VtZW50IGZyYW1ld29yayBmb3IgUENJIGRldmljZXMg c28gdGhhdCB0aGUKc3RhbmRhcmQgUENJIFBNIGNhbGxiYWNrcyBhcmUgZXhlY3V0ZWQgYnkgdGhl IGNvcmUgaW4gdGhlIGZvbGxvd2luZwp3YXk6CgoqIFJpZ2h0IGFmdGVyIGV4ZWN1dGluZyB0aGUg LT5zdXNwZW5kKCkgY2FsbGJhY2sgZnJvbSB0aGUgZGV2aWNlCiAgZHJpdmVyJ3MgcG0gb2JqZWN0 IChpZS4gd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQpIHRoZSBjb3JlIHdpbGwKICBleGVjdXRlIHBj aV9zYXZlX3N0YXRlKCkgYW5kLCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBhIFBDSSBicmlkZ2UsCiAg dGhlIGNvcmUgd2lsbCBleGVjdXRlIHBjaV9wcmVwYXJlX3RvX3NsZWVwKCkuCgoqIFJpZ2h0IHBy aW9yIHRvIGV4ZWN1dGluZyB0aGUgLT5yZXN1bWVfbm9pcnEoKSBjYWxsYmFjayBmcm9tIHRoZQog IGRldmljZSBkcml2ZXIncyBwbSBvYmplY3QgKGllLiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQp LCB0aGUgY29yZQogIHdpbGwgZXhlY3V0ZSBwY2lfcmVzdG9yZV9zdGF0ZSgpIGFuZCB3aWxsIHVw ZGF0ZSB0aGUgZGV2aWNlJ3MKICBwY2lfZGV2IHN0cnVjdHVyZSB0byByZWZsZWN0IHRoZSBhY3R1 YWwgY3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUKICBkZXZpY2UuICBIb3dldmVyLCB0aGlzIGlz IG9ubHkgZ29pbmcgdG8gc3VjY2VlZCBpZiB0aGUgZGV2aWNlJ3MgYnVzCiAgaXMgb3BlcmF0aW9u YWwgKGllLiBpdHMgcGFyZW50IGJyaWRnZSBpbiBpcyB0aGUgRDAgcG93ZXIgc3RhdGUpIGF0CiAg dGhhdCB0aW1lLCBzbyB0aGUgbGFzdCBvcGVyYXRpb24gaGFzIHRvIGJlIHJlcGVhdGVkIGxhdGVy LgoKKiBQcmlvciB0byBleGVjdXRpbmcgdGhlIC0+cmVzdW1lKCkgY2FsbGJhY2sgZnJvbSB0aGUg ZGV2aWNlIGRyaXZlcidzCiAgcG0gb2JqZWN0IChpZS4gd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQp IHRoZSBjb3JlIHdpbGwgY2hlY2sgaWYgdGhlCiAgZGV2aWNlJ3Mgc3RhbmRhcmQgY29uZmlnIHJl Z2lzdGVycyBuZWVkIHRvIGJlIHJlc3RvcmVkIGFuZCBpdCB3aWxsCiAgY2FsbCBwY2lfcmVzdG9y ZV9zdGF0ZSgpIGlmIG5lY2Vzc2FyeS4gIE5leHQsIGlmIHRoZSBkZXZpY2UgaXMgbm90CiAgYSBQ Q0kgYnJpZGdlLCB0aGUgY29yZSB3aWxsIGRpc2FibGUgdGhlIGRldmljZSdzIHdha2UtdXAgY2Fw YWJpbGl0eQogIHVzaW5nIHBjaV9lbmFibGVfd2FrZSgpLiAgRmluYWxseSwgaXQgd2lsbCBleGVj dXRlCiAgcGNpX3JlZW5hYmxlX2RldmljZSgpIGFuZCwgaWYgbmVjZXNzYXJ5LCBwY2lfc2V0X21h c3RlcigpLCBpbiB0aGlzCiAgb3JkZXIgKGFsbCBvZiB0aGlzIGhhcHBlbnMgYmVmb3JlIHRoZSAt PnJlc3VtZSgpIGNhbGxiYWNrIGlzCiAgaW52b2tlZCkuCgpUaGUgc3RhbmRhcmQgY2FsbGJhY2tz IG1lbnRpb25lZCBhYm92ZSB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCBmb3IKYWxsIGRldmljZXMg d2l0aG91dCBkcml2ZXJzIHByb3ZpZGluZyB0aGUgbGVnYWN5IFBDSSBQTSBzdXBwb3J0CihpZS4g dGhlIC0+c3VzcGVuZCgpLCAtPnN1c3BlbmRfbGF0ZSgpLCAtPnJlc3VtZV9lYXJseSgpCm9yIC0+ cmVzdW1lKCkgaG9va3MgaW4gdGhlIHBjaV9kcml2ZXIgc3RydWN0dXJlKS4gIEluIHBhcnRpY3Vs YXIsCnRoZXkgd2lsbCBiZSBleGVjdXRlZCBmb3IgZGV2aWNlcyB0aGF0IGRvbid0IGhhdmUgZHJp dmVycyBhdCBhbGwuCgpBbmFsb2dvdXMgY2hhbmdlcyBhcmUgbWFkZSBpbiB0aGUgaGliZXJuYXRp b24tcmVsYXRlZCBQQ0kgUE0Kcm91dGluZXMuCgpTaWduZWQtb2ZmLWJ5OiBSYWZhZWwgSi4gV3lz b2NraSA8cmp3QHNpc2sucGw+Ci0tLQogZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIHwgIDM1NiAr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9w Y2kvcGNpLmMgICAgICAgIHwgICAgMiAKIGRyaXZlcnMvcGNpL3BjaS5oICAgICAgICB8ICAgIDEg CiAzIGZpbGVzIGNoYW5nZWQsIDIxMiBpbnNlcnRpb25zKCspLCAxNDcgZGVsZXRpb25zKC0pCgpJ bmRleDogbGludXgtMi42L2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBs aW51eC0yLjYub3JpZy9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGxpbnV4LTIuNi9kcml2 ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTMwMCw5OCArMzAwLDgzIEBAIHN0YXRpYyB2b2lkIHBj aV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGQKIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCi1z dGF0aWMgYm9vbCBwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHN0cnVjdCBwY2lfZGV2ICpwY2lf ZGV2KQotewotCXN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSBwY2lfZGV2LT5kcml2ZXI7Ci0KLQly ZXR1cm4gZHJ2ICYmIChkcnYtPnN1c3BlbmQgfHwgZHJ2LT5zdXNwZW5kX2xhdGUgfHwgZHJ2LT5y ZXN1bWUKLQkJfHwgZHJ2LT5yZXN1bWVfZWFybHkpOwotfQorLyogUm91dGluZXMgdXNlZCBpbiBi b3RoIHRoZSBsZWdhY3kgYW5kIG5ldyBwb3dlciBtYW5hZ2VtZW50IGNhbGxiYWNrcyAqLwogCi0v KgotICogRGVmYXVsdCAic3VzcGVuZCIgbWV0aG9kIGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBubyBk cml2ZXIgcHJvdmlkZWQgc3VzcGVuZCwKLSAqIG9yIG5vdCBldmVuIGEgZHJpdmVyIGF0IGFsbC4K LSAqLwotc3RhdGljIHZvaWQgcGNpX2RlZmF1bHRfcG1fc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAq cGNpX2RldikKK3N0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBw Y2lfZGV2ICpwY2lfZGV2KQogewotCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOwotCS8qCi0JICog bWFyayBpdHMgcG93ZXIgc3RhdGUgYXMgInVua25vd24iLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlm Ci0JICogZS5nLiB0aGUgQklPUyB3aWxsIGNoYW5nZSBpdHMgZGV2aWNlIHN0YXRlIHdoZW4gd2Ug c3VzcGVuZC4KLQkgKi8KLQlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDApCisJ c3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IHBjaV9kZXYtPmJ1cy0+c2VsZjsKKwlpbnQgZXJyb3Ig PSAwOworCisJLyogQ2hlY2sgaWYgdGhlIGRldmljZSdzIGJ1cyBpcyBvcGVyYXRpb25hbCAqLwor CWlmICghcGFyZW50IHx8IHBhcmVudC0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDApIHsKKwkJcGNp X3Jlc3RvcmVfc3RhdGUocGNpX2Rldik7CisJCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lf ZGV2LCBQQ0lfRDApOworCX0gZWxzZSB7CisJCWRldl93YXJuKCZwY2lfZGV2LT5kZXYsICJ1bmFi bGUgdG8gcmVzdG9yZSBjb25maWcsICIKKwkJCSJicmlkZ2UgJXMgaW4gbG93IHBvd2VyIHN0YXRl IEQlZFxuIiwgcGNpX25hbWUocGFyZW50KSwKKwkJCXBhcmVudC0+Y3VycmVudF9zdGF0ZSk7CiAJ CXBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgPSBQQ0lfVU5LTk9XTjsKLX0KKwkJZXJyb3IgPSAtRUFH QUlOOworCX0KIAotLyoKLSAqIERlZmF1bHQgInJlc3VtZSIgbWV0aG9kIGZvciBkZXZpY2VzIHRo YXQgaGF2ZSBubyBkcml2ZXIgcHJvdmlkZWQgcmVzdW1lLAotICogb3Igbm90IGV2ZW4gYSBkcml2 ZXIgYXQgYWxsIChmaXJzdCBwYXJ0KS4KLSAqLwotc3RhdGljIHZvaWQgcGNpX2RlZmF1bHRfcG1f cmVzdW1lX2Vhcmx5KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQotewotCS8qIHJlc3RvcmUgdGhl IFBDSSBjb25maWcgc3BhY2UgKi8KLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKKwlyZXR1 cm4gZXJyb3I7CiB9CiAKLS8qCi0gKiBEZWZhdWx0ICJyZXN1bWUiIG1ldGhvZCBmb3IgZGV2aWNl cyB0aGF0IGhhdmUgbm8gZHJpdmVyIHByb3ZpZGVkIHJlc3VtZSwKLSAqIG9yIG5vdCBldmVuIGEg ZHJpdmVyIGF0IGFsbCAoc2Vjb25kIHBhcnQpLgotICovCi1zdGF0aWMgaW50IHBjaV9kZWZhdWx0 X3BtX3Jlc3VtZV9sYXRlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQotewotCWludCByZXR2YWw7 Ci0KLQkvKiBpZiB0aGUgZGV2aWNlIHdhcyBlbmFibGVkIGJlZm9yZSBzdXNwZW5kLCByZWVuYWJs ZSAqLwotCXJldHZhbCA9IHBjaV9yZWVuYWJsZV9kZXZpY2UocGNpX2Rldik7Ci0JLyoKLQkgKiBp ZiB0aGUgZGV2aWNlIHdhcyBidXNtYXN0ZXIgYmVmb3JlIHRoZSBzdXNwZW5kLCBtYWtlIGl0IGJ1 c21hc3RlcgotCSAqIGFnYWluCi0JICovCi0JaWYgKHBjaV9kZXYtPmlzX2J1c21hc3RlcikKLQkJ cGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQorLyogTGVnYWN5 IHBvd2VyIG1hbmFnZW1lbnQgY2FsbGJhY2tzICovCiAKIHN0YXRpYyBpbnQgcGNpX2xlZ2FjeV9z dXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVj dCBwY2lfZGV2ICogcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3QgcGNpX2RyaXZl ciAqIGRydiA9IHBjaV9kZXYtPmRyaXZlcjsKLQlpbnQgaSA9IDA7CisJaW50IGVycm9yID0gMDsK IAogCWlmIChkcnYgJiYgZHJ2LT5zdXNwZW5kKSB7Ci0JCWkgPSBkcnYtPnN1c3BlbmQocGNpX2Rl diwgc3RhdGUpOwotCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kLCBpKTsKKwkJ ZXJyb3IgPSBkcnYtPnN1c3BlbmQocGNpX2Rldiwgc3RhdGUpOworCQlzdXNwZW5kX3JlcG9ydF9y ZXN1bHQoZHJ2LT5zdXNwZW5kLCBlcnJvcik7CiAJfSBlbHNlIHsKLQkJcGNpX2RlZmF1bHRfcG1f c3VzcGVuZChwY2lfZGV2KTsKKwkJZXJyb3IgPSBwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKwkJ LyoKKwkJICogbWFyayBpdHMgcG93ZXIgc3RhdGUgYXMgInVua25vd24iLCBzaW5jZSB3ZSBkb24n dCBrbm93IGlmCisJCSAqIGUuZy4gdGhlIEJJT1Mgd2lsbCBjaGFuZ2UgaXRzIGRldmljZSBzdGF0 ZSB3aGVuIHdlIHN1c3BlbmQuCisJCSAqLworCQlpZiAoIWVycm9yICYmIHBjaV9kZXYtPmN1cnJl bnRfc3RhdGUgPT0gUENJX0QwKQorCQkJcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSA9IFBDSV9VTktO T1dOOwogCX0KLQlyZXR1cm4gaTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgcGNp X2xlZ2FjeV9zdXNwZW5kX2xhdGUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3Rh dGUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0 cnVjdCBwY2lfZHJpdmVyICogZHJ2ID0gcGNpX2Rldi0+ZHJpdmVyOwotCWludCBpID0gMDsKKwlp bnQgZXJyb3IgPSAwOwogCiAJaWYgKGRydiAmJiBkcnYtPnN1c3BlbmRfbGF0ZSkgewotCQlpID0g ZHJ2LT5zdXNwZW5kX2xhdGUocGNpX2Rldiwgc3RhdGUpOwotCQlzdXNwZW5kX3JlcG9ydF9yZXN1 bHQoZHJ2LT5zdXNwZW5kX2xhdGUsIGkpOworCQllcnJvciA9IGRydi0+c3VzcGVuZF9sYXRlKHBj aV9kZXYsIHN0YXRlKTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+c3VzcGVuZF9sYXRl LCBlcnJvcik7CiAJfQotCXJldHVybiBpOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGlu dCBwY2lfbGVnYWN5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IGVycm9yOwog CXN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3QgcGNp X2RyaXZlciAqIGRydiA9IHBjaV9kZXYtPmRyaXZlcjsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoZHJ2 ICYmIGRydi0+cmVzdW1lKSB7CiAJCWVycm9yID0gZHJ2LT5yZXN1bWUocGNpX2Rldik7CiAJfSBl bHNlIHsKLQkJcGNpX2RlZmF1bHRfcG1fcmVzdW1lX2Vhcmx5KHBjaV9kZXYpOwotCQllcnJvciA9 IHBjaV9kZWZhdWx0X3BtX3Jlc3VtZV9sYXRlKHBjaV9kZXYpOworCQkvKiByZXN0b3JlIHRoZSBQ Q0kgY29uZmlnIHNwYWNlICovCisJCXBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOworCQkvKiBp ZiB0aGUgZGV2aWNlIHdhcyBlbmFibGVkIGJlZm9yZSBzdXNwZW5kLCByZWVuYWJsZSAqLworCQll cnJvciA9IHBjaV9yZWVuYWJsZV9kZXZpY2UocGNpX2Rldik7CisJCS8qCisJCSAqIGlmIHRoZSBk ZXZpY2Ugd2FzIGJ1c21hc3RlciBiZWZvcmUgdGhlIHN1c3BlbmQsIG1ha2UKKwkJICogaXQgYnVz bWFzdGVyIGFnYWluCisJCSAqLworCQlpZiAocGNpX2Rldi0+aXNfYnVzbWFzdGVyKQorCQkJcGNp X3NldF9tYXN0ZXIocGNpX2Rldik7CiAJfQogCXJldHVybiBlcnJvcjsKIH0KQEAgLTQwNyw2ICsz OTIsNjIgQEAgc3RhdGljIGludCBwY2lfbGVnYWN5X3Jlc3VtZV9lYXJseShzdHJ1YwogCXJldHVy biBlcnJvcjsKIH0KIAorLyogUm91dGluZXMgdXNlZCBpbiB0aGUgbmV3IHBvd2VyIG1hbmFnZW1l bnQgY2FsbGJhY2tzICovCisKK3N0YXRpYyBib29sIHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQo c3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJc3RydWN0IHBjaV9kcml2ZXIgKmRydiA9IHBj aV9kZXYtPmRyaXZlcjsKKworCXJldHVybiBkcnYgJiYgKGRydi0+c3VzcGVuZCB8fCBkcnYtPnN1 c3BlbmRfbGF0ZSB8fCBkcnYtPnJlc3VtZQorCQl8fCBkcnYtPnJlc3VtZV9lYXJseSk7Cit9CisK K3N0YXRpYyBib29sIHBjaV9pc19icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJ cmV0dXJuICEhKHBjaV9kZXYtPnN1Ym9yZGluYXRlKTsKK30KKworc3RhdGljIHZvaWQgcGNpX3Bt X2RlZmF1bHRfc3VzcGVuZF9ub2lycShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwkvKiBU aGUgZGV2aWNlJ3MgcG93ZXIgc3RhdGUgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIEJJT1MgYmVmb3Jl IHJlc3VtZSAqLworCWlmKCBwY2lfZGV2LT5jdXJyZW50X3N0YXRlID09IFBDSV9EMCkKKwkJcGNp X2Rldi0+Y3VycmVudF9zdGF0ZSA9IFBDSV9VTktOT1dOOworfQorCitzdGF0aWMgaW50IHBjaV9w bV9kZWZhdWx0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwlpbnQgZXJyb3Ig PSAwOworCisJLyoKKwkgKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcoKSBzaG91bGQgaGF2 ZSBiZWVuIGNhbGxlZCBiZWZvcmUsIGJ1dCBpdAorCSAqIHdvdWxkIGhhdmUgZmFpbGVkIGlmIHRo ZSBkZXZpY2UncyBidXMgaGFkIG5vdCBiZWVuIG9wZXJhdGlvbmFsIGF0CisJICogdGhhdCB0aW1l LiAgQ2hlY2sgaXQgYW5kIHRyeSBhZ2FpbiBpZiBuZWNlc3NhcnkuCisJICovCisJaWYgKHBjaV9k ZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX1VOS05PV04pIHsKKwkJZXJyb3IgPSBwY2lfcmVzdG9y ZV9zdGFuZGFyZF9jb25maWcocGNpX2Rldik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJv cjsKKwl9CisKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOwor CisJLyogRGlzYWJsZSB3YWtlLXVwIGNhcGFiaWxpdHkgb2YgcmVndWxhciBkZXZpY2VzICovCisJ aWYgKCFwY2lfaXNfYnJpZGdlKHBjaV9kZXYpKQorCQlwY2lfZW5hYmxlX3dha2UocGNpX2Rldiwg UENJX0QwLCBmYWxzZSk7CisJLyogSWYgZGV2aWNlIHdhcyBlbmFibGVkIGJlZm9yZSBzdXNwZW5k LCByZWVuYWJsZSBpdC4gKi8KKwllcnJvciA9IHBjaV9yZWVuYWJsZV9kZXZpY2UocGNpX2Rldik7 CisJLyoKKwkgKiBJZiBkZXZpY2Ugd2FzIGEgYnVzIG1hc3RlciBiZWZvcmUgdGhlIHN1c3BlbmQs IG1ha2UgaXQgYSBidXMgbWFzdGVyCisJICogYWdhaW4uCisJICovCisJaWYgKHBjaV9kZXYtPmlz X2J1c21hc3RlcikKKwkJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7CisKKwlyZXR1cm4gZXJyb3I7 Cit9CisKKy8qIE5ldyBwb3dlciBtYW5hZ2VtZW50IGNhbGxiYWNrcyAqLworCiBzdGF0aWMgaW50 IHBjaV9wbV9wcmVwYXJlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2Ry aXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CkBAIC00MzQsMTQgKzQ3NSwyMyBAQCBzdGF0aWMgaW50 IHBjaV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgCiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRy diA9IGRldi0+ZHJpdmVyOwogCWludCBlcnJvciA9IDA7CiAKLQlpZiAoZHJ2ICYmIGRydi0+cG0p IHsKLQkJaWYgKGRydi0+cG0tPnN1c3BlbmQpIHsKLQkJCWVycm9yID0gZHJ2LT5wbS0+c3VzcGVu ZChkZXYpOwotCQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0tPnN1c3BlbmQsIGVycm9y KTsKLQkJfQotCX0gZWxzZSBpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkg eworCWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKSB7CiAJCWVycm9yID0g cGNpX2xlZ2FjeV9zdXNwZW5kKGRldiwgUE1TR19TVVNQRU5EKTsKKwkJZ290byBFeGl0OworCX0K KworCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5zdXNwZW5kKSB7CisJCWVycm9yID0g ZHJ2LT5wbS0+c3VzcGVuZChkZXYpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5wbS0+ c3VzcGVuZCwgZXJyb3IpOworCX0KKworCWlmICghZXJyb3IpIHsKKwkJZXJyb3IgPSBwY2lfc2F2 ZV9zdGF0ZShwY2lfZGV2KTsKKwkJaWYgKCFlcnJvciAmJiAhcGNpX2lzX2JyaWRnZShwY2lfZGV2 KSkKKwkJCXBjaV9wcmVwYXJlX3RvX3NsZWVwKHBjaV9kZXYpOwogCX0KKworIEV4aXQ6CiAJcGNp X2ZpeHVwX2RldmljZShwY2lfZml4dXBfc3VzcGVuZCwgcGNpX2Rldik7CiAKIAlyZXR1cm4gZXJy b3I7CkBAIC00NTMsMTcgKzUwMywxNyBAQCBzdGF0aWMgaW50IHBjaV9wbV9zdXNwZW5kX25vaXJx KHN0cnVjdCBkCiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWlu dCBlcnJvciA9IDA7CiAKLQlpZiAoZHJ2ICYmIGRydi0+cG0pIHsKLQkJaWYgKGRydi0+cG0tPnN1 c3BlbmRfbm9pcnEpIHsKLQkJCWVycm9yID0gZHJ2LT5wbS0+c3VzcGVuZF9ub2lycShkZXYpOwot CQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0tPnN1c3BlbmRfbm9pcnEsIGVycm9yKTsK LQkJfQotCX0gZWxzZSBpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkgewot CQllcnJvciA9IHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19TVVNQRU5EKTsKLQl9 IGVsc2UgewotCQlwY2lfZGVmYXVsdF9wbV9zdXNwZW5kKHBjaV9kZXYpOworCWlmIChwY2lfaGFz X2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKQorCQlyZXR1cm4gcGNpX2xlZ2FjeV9zdXNwZW5k X2xhdGUoZGV2LCBQTVNHX1NVU1BFTkQpOworCisJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+ cG0tPnN1c3BlbmRfbm9pcnEpIHsKKwkJZXJyb3IgPSBkcnYtPnBtLT5zdXNwZW5kX25vaXJxKGRl dik7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnBtLT5zdXNwZW5kX25vaXJxLCBlcnJv cik7CiAJfQogCisJaWYgKCFlcnJvcikKKwkJcGNpX3BtX2RlZmF1bHRfc3VzcGVuZF9ub2lycShw Y2lfZGV2KTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDczLDE3ICs1MjMsMTYgQEAgc3Rh dGljIGludCBwY2lfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKgogCXN0cnVjdCBkZXZpY2VfZHJp dmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX2ZpeHVwX2Rl dmljZShwY2lfZml4dXBfcmVzdW1lLCBwY2lfZGV2KTsKLQotCWlmIChkcnYgJiYgZHJ2LT5wbSkg ewotCQlpZiAoZHJ2LT5wbS0+cmVzdW1lKQotCQkJZXJyb3IgPSBkcnYtPnBtLT5yZXN1bWUoZGV2 KTsKLQl9IGVsc2UgaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpIHsKLQkJ ZXJyb3IgPSBwY2lfbGVnYWN5X3Jlc3VtZShkZXYpOwotCX0gZWxzZSB7Ci0JCWVycm9yID0gcGNp X2RlZmF1bHRfcG1fcmVzdW1lX2xhdGUocGNpX2Rldik7CisJaWYgKHBjaV9oYXNfbGVnYWN5X3Bt X3N1cHBvcnQocGNpX2RldikpIHsKKwkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1l LCBwY2lfZGV2KTsKKwkJcmV0dXJuIHBjaV9sZWdhY3lfcmVzdW1lKGRldik7CiAJfQogCisJZXJy b3IgPSBwY2lfcG1fZGVmYXVsdF9yZXN1bWUocGNpX2Rldik7CisKKwlpZiAoIWVycm9yICYmIGRy diAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnJlc3VtZSkKKwkJZXJyb3IgPSBkcnYtPnBtLT5yZXN1 bWUoZGV2KTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDkzLDE1ICs1NDIsMTYgQEAgc3Rh dGljIGludCBwY2lfcG1fcmVzdW1lX25vaXJxKHN0cnVjdCBkZQogCXN0cnVjdCBkZXZpY2VfZHJp dmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX2ZpeHVwX2Rl dmljZShwY2lfZml4dXBfcmVzdW1lX2Vhcmx5LCB0b19wY2lfZGV2KGRldikpOworCWlmIChwY2lf aGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKSB7CisJCXBjaV9maXh1cF9kZXZpY2UocGNp X2ZpeHVwX3Jlc3VtZV9lYXJseSwgcGNpX2Rldik7CisJCXJldHVybiBwY2lfbGVnYWN5X3Jlc3Vt ZV9lYXJseShkZXYpOworCX0KIAotCWlmIChkcnYgJiYgZHJ2LT5wbSkgewotCQlpZiAoZHJ2LT5w bS0+cmVzdW1lX25vaXJxKQorCWlmICghcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9k ZXYpKSB7CisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwgcGNpX2Rl dik7CisKKwkJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnJlc3VtZV9ub2lycSkKIAkJ CWVycm9yID0gZHJ2LT5wbS0+cmVzdW1lX25vaXJxKGRldik7Ci0JfSBlbHNlIGlmIChwY2lfaGFz X2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKSB7Ci0JCWVycm9yID0gcGNpX2xlZ2FjeV9yZXN1 bWVfZWFybHkoZGV2KTsKLQl9IGVsc2UgewotCQlwY2lfZGVmYXVsdF9wbV9yZXN1bWVfZWFybHko cGNpX2Rldik7CiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtNTI0LDE2ICs1NzQsMjAgQEAgc3Rh dGljIGludCBwY2lfcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKgogCXN0cnVjdCBkZXZpY2VfZHJp dmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKGRydiAmJiBk cnYtPnBtKSB7Ci0JCWlmIChkcnYtPnBtLT5mcmVlemUpIHsKLQkJCWVycm9yID0gZHJ2LT5wbS0+ ZnJlZXplKGRldik7Ci0JCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5wbS0+ZnJlZXplLCBl cnJvcik7Ci0JCX0KLQl9IGVsc2UgaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2Rl dikpIHsKKwlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkgewogCQllcnJv ciA9IHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfRlJFRVpFKTsKIAkJcGNpX2ZpeHVwX2Rl dmljZShwY2lfZml4dXBfc3VzcGVuZCwgcGNpX2Rldik7CisJCXJldHVybiBlcnJvcjsKIAl9CiAK KwlpZiAoZHJ2ICYmIGRydi0+cG0gJiYgZHJ2LT5wbS0+ZnJlZXplKSB7CisJCWVycm9yID0gZHJ2 LT5wbS0+ZnJlZXplKGRldik7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnBtLT5mcmVl emUsIGVycm9yKTsKKwl9CisKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHBjaV9zYXZlX3N0YXRl KHBjaV9kZXYpOworCiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01NDMsMTcgKzU5NywxNyBAQCBz dGF0aWMgaW50IHBjaV9wbV9mcmVlemVfbm9pcnEoc3RydWN0IGRlCiAJc3RydWN0IGRldmljZV9k cml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCBlcnJvciA9IDA7CiAKLQlpZiAoZHJ2ICYm IGRydi0+cG0pIHsKLQkJaWYgKGRydi0+cG0tPmZyZWV6ZV9ub2lycSkgewotCQkJZXJyb3IgPSBk cnYtPnBtLT5mcmVlemVfbm9pcnEoZGV2KTsKLQkJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYt PnBtLT5mcmVlemVfbm9pcnEsIGVycm9yKTsKLQkJfQotCX0gZWxzZSBpZiAocGNpX2hhc19sZWdh Y3lfcG1fc3VwcG9ydChwY2lfZGV2KSkgewotCQllcnJvciA9IHBjaV9sZWdhY3lfc3VzcGVuZF9s YXRlKGRldiwgUE1TR19GUkVFWkUpOwotCX0gZWxzZSB7Ci0JCXBjaV9kZWZhdWx0X3BtX3N1c3Bl bmQocGNpX2Rldik7CisJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCisJ CXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmRfbGF0ZShkZXYsIFBNU0dfRlJFRVpFKTsKKworCWlm IChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5mcmVlemVfbm9pcnEpIHsKKwkJZXJyb3IgPSBk cnYtPnBtLT5mcmVlemVfbm9pcnEoZGV2KTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+ cG0tPmZyZWV6ZV9ub2lycSwgZXJyb3IpOwogCX0KIAorCWlmICghZXJyb3IpCisJCXBjaV9wbV9k ZWZhdWx0X3N1c3BlbmRfbm9pcnEocGNpX2Rldik7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAg LTU2MywxNCArNjE3LDE0IEBAIHN0YXRpYyBpbnQgcGNpX3BtX3RoYXcoc3RydWN0IGRldmljZSAq ZGUKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9y ID0gMDsKIAotCWlmIChkcnYgJiYgZHJ2LT5wbSkgewotCQlpZiAoZHJ2LT5wbS0+dGhhdykKLQkJ CWVycm9yID0gIGRydi0+cG0tPnRoYXcoZGV2KTsKLQl9IGVsc2UgaWYgKHBjaV9oYXNfbGVnYWN5 X3BtX3N1cHBvcnQocGNpX2RldikpIHsKKwlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChw Y2lfZGV2KSkgewogCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYp OwotCQllcnJvciA9IHBjaV9sZWdhY3lfcmVzdW1lKGRldik7CisJCXJldHVybiBwY2lfbGVnYWN5 X3Jlc3VtZShkZXYpOwogCX0KIAorCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT50aGF3 KQorCQllcnJvciA9IGRydi0+cG0tPnRoYXcoZGV2KTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApA QCAtNTgwLDE0ICs2MzQsMTcgQEAgc3RhdGljIGludCBwY2lfcG1fdGhhd19ub2lycShzdHJ1Y3Qg ZGV2aQogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJy b3IgPSAwOwogCi0JaWYgKGRydiAmJiBkcnYtPnBtKSB7Ci0JCWlmIChkcnYtPnBtLT50aGF3X25v aXJxKQotCQkJZXJyb3IgPSBkcnYtPnBtLT50aGF3X25vaXJxKGRldik7Ci0JfSBlbHNlIGlmIChw Y2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKSB7Ci0JCXBjaV9maXh1cF9kZXZpY2Uo cGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwgdG9fcGNpX2RldihkZXYpKTsKLQkJZXJyb3IgPSBwY2lf bGVnYWN5X3Jlc3VtZV9lYXJseShkZXYpOworCWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0 KHBjaV9kZXYpKSB7CisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwg cGNpX2Rldik7CisJCXJldHVybiBwY2lfbGVnYWN5X3Jlc3VtZV9lYXJseShkZXYpOwogCX0KIAor CWlmIChwY2lfZGV2LT5jdXJyZW50X3N0YXRlID09IFBDSV9VTktOT1dOKQorCQlwY2lfdXBkYXRl X2N1cnJlbnRfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKKworCWlmIChkcnYgJiYgZHJ2LT5wbSAm JiBkcnYtPnBtLT50aGF3X25vaXJxKQorCQllcnJvciA9IGRydi0+cG0tPnRoYXdfbm9pcnEoZGV2 KTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTk3LDMyICs2NTQsMzkgQEAgc3RhdGljIGlu dCBwY2lfcG1fcG93ZXJvZmYoc3RydWN0IGRldmljZQogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpk cnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX2ZpeHVwX2RldmljZShw Y2lfZml4dXBfc3VzcGVuZCwgcGNpX2Rldik7Ci0KLQlpZiAoZHJ2ICYmIGRydi0+cG0pIHsKLQkJ aWYgKGRydi0+cG0tPnBvd2Vyb2ZmKSB7Ci0JCQllcnJvciA9IGRydi0+cG0tPnBvd2Vyb2ZmKGRl dik7Ci0JCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5wbS0+cG93ZXJvZmYsIGVycm9yKTsK LQkJfQotCX0gZWxzZSBpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkgewor CWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKSB7CiAJCWVycm9yID0gcGNp X2xlZ2FjeV9zdXNwZW5kKGRldiwgUE1TR19ISUJFUk5BVEUpOworCQlnb3RvIEV4aXQ7CisJfQor CisJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnBvd2Vyb2ZmKSB7CisJCWVycm9yID0g ZHJ2LT5wbS0+cG93ZXJvZmYoZGV2KTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0t PnBvd2Vyb2ZmLCBlcnJvcik7CisJfQorCisJaWYgKCFlcnJvciAmJiAhcGNpX2lzX2JyaWRnZShw Y2lfZGV2KSkgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CisJCXBjaV9wcmVwYXJl X3RvX3NsZWVwKHBjaV9kZXYpOwogCX0KIAorIEV4aXQ6CisJcGNpX2ZpeHVwX2RldmljZShwY2lf Zml4dXBfc3VzcGVuZCwgcGNpX2Rldik7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBp bnQgcGNpX3BtX3Bvd2Vyb2ZmX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3Qg cGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZl ciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAotCWlmIChkcnYgJiYgZHJ2 LT5wbSkgewotCQlpZiAoZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEpIHsKLQkJCWVycm9yID0gZHJ2 LT5wbS0+cG93ZXJvZmZfbm9pcnEoZGV2KTsKLQkJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYt PnBtLT5wb3dlcm9mZl9ub2lycSwgZXJyb3IpOwotCQl9Ci0JfSBlbHNlIGlmIChwY2lfaGFzX2xl Z2FjeV9wbV9zdXBwb3J0KHRvX3BjaV9kZXYoZGV2KSkpIHsKLQkJZXJyb3IgPSBwY2lfbGVnYWN5 X3N1c3BlbmRfbGF0ZShkZXYsIFBNU0dfSElCRVJOQVRFKTsKKwlpZiAocGNpX2hhc19sZWdhY3lf cG1fc3VwcG9ydChwY2lfZGV2KSkKKwkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRl diwgUE1TR19ISUJFUk5BVEUpOworCisJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnBv d2Vyb2ZmX25vaXJxKSB7CisJCWVycm9yID0gZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEoZGV2KTsK KwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxLCBlcnJvcik7 CiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtNjM0LDE1ICs2OTgsMTUgQEAgc3RhdGljIGludCBw Y2lfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlIAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYg PSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKGRydiAmJiBkcnYtPnBtKSB7 Ci0JCWlmIChkcnYtPnBtLT5yZXN0b3JlKQotCQkJZXJyb3IgPSBkcnYtPnBtLT5yZXN0b3JlKGRl dik7Ci0JfSBlbHNlIGlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKSB7Ci0J CWVycm9yID0gcGNpX2xlZ2FjeV9yZXN1bWUoZGV2KTsKLQl9IGVsc2UgewotCQllcnJvciA9IHBj aV9kZWZhdWx0X3BtX3Jlc3VtZV9sYXRlKHBjaV9kZXYpOworCWlmIChwY2lfaGFzX2xlZ2FjeV9w bV9zdXBwb3J0KHBjaV9kZXYpKSB7CisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3Vt ZSwgcGNpX2Rldik7CisJCXJldHVybiBwY2lfbGVnYWN5X3Jlc3VtZShkZXYpOwogCX0KLQlwY2lf Zml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOworCisJZXJyb3IgPSBwY2lf cG1fZGVmYXVsdF9yZXN1bWUocGNpX2Rldik7CisKKwlpZiAoIWVycm9yICYmIGRydiAmJiBkcnYt PnBtICYmIGRydi0+cG0tPnJlc3RvcmUpCisJCWVycm9yID0gZHJ2LT5wbS0+cmVzdG9yZShkZXYp OwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNjUzLDE3ICs3MTcsMTcgQEAgc3RhdGljIGludCBw Y2lfcG1fcmVzdG9yZV9ub2lycShzdHJ1Y3QgZAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYg PSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX2ZpeHVwX2RldmljZShwY2lf Zml4dXBfcmVzdW1lLCBwY2lfZGV2KTsKKwlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChw Y2lfZGV2KSkgeworCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWVfZWFybHksIHBj aV9kZXYpOworCQlyZXR1cm4gcGNpX2xlZ2FjeV9yZXN1bWVfZWFybHkoZGV2KTsKKwl9CisKKwlp ZiAoIXBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhwY2lfZGV2KSkgeworCQlwY2lfZml4dXBf ZGV2aWNlKHBjaV9maXh1cF9yZXN1bWVfZWFybHksIHBjaV9kZXYpOwogCi0JaWYgKGRydiAmJiBk cnYtPnBtKSB7Ci0JCWlmIChkcnYtPnBtLT5yZXN0b3JlX25vaXJxKQorCQlpZiAoZHJ2ICYmIGRy di0+cG0gJiYgZHJ2LT5wbS0+cmVzdG9yZV9ub2lycSkKIAkJCWVycm9yID0gZHJ2LT5wbS0+cmVz dG9yZV9ub2lycShkZXYpOwotCX0gZWxzZSBpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChw Y2lfZGV2KSkgewotCQllcnJvciA9IHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7Ci0JfSBl bHNlIHsKLQkJcGNpX2RlZmF1bHRfcG1fcmVzdW1lX2Vhcmx5KHBjaV9kZXYpOwogCX0KLQlwY2lf Zml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWVfZWFybHksIHBjaV9kZXYpOwogCiAJcmV0dXJu IGVycm9yOwogfQpJbmRleDogbGludXgtMi42L2RyaXZlcnMvcGNpL3BjaS5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGxpbnV4LTIuNi5vcmlnL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBsaW51eC0yLjYvZHJpdmVy cy9wY2kvcGNpLmMKQEAgLTUyNiw3ICs1MjYsNyBAQCBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZShz dHJ1Y3QgcGNpX2RldiAqCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0 ZTogU3RhdGUgdG8gY2FjaGUgaW4gY2FzZSB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZSB0aGUgUE0g Y2FwYWJpbGl0eQogICovCi1zdGF0aWMgdm9pZCBwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUoc3Ry dWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpCit2b2lkIHBjaV91cGRhdGVfY3Vy cmVudF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSkKIHsKIAlp ZiAoZGV2LT5wbV9jYXApIHsKIAkJdTE2IHBtY3NyOwpJbmRleDogbGludXgtMi42L2RyaXZlcnMv cGNpL3BjaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi5vcmlnL2RyaXZlcnMvcGNpL3BjaS5o CisrKyBsaW51eC0yLjYvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTEyMSw2ICsxMjEsNyBAQCBzdGF0 aWMgaW5saW5lIGludCBwY2lfbm9fZDFkMihzdHJ1Y3QgcGNpCiAJcmV0dXJuIChkZXYtPm5vX2Qx ZDIgfHwgcGFyZW50X2RzdGF0ZXMpOwogCiB9CitleHRlcm4gdm9pZCBwY2lfdXBkYXRlX2N1cnJl bnRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogZXh0ZXJu IGludCBwY2llX21jaF9xdWlyazsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwY2lf ZGV2X2F0dHJzW107CiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfY3B1 YWZmaW5pdHk7CgAK