From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 1/9] PM: Add suspend block api. Date: Wed, 29 Apr 2009 20:10:00 -0700 Message-ID: <1241061008-31134-2-git-send-email-arve@android.com> References: <1241061008-31134-1-git-send-email-arve@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1241061008-31134-1-git-send-email-arve@android.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: linux-pm@lists.linux-foundation.org Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com List-Id: linux-pm@vger.kernel.org QWRkcyAvc3lzL3Bvd2VyL3JlcXVlc3Rfc3RhdGUsIGEgbm9uLWJsb2NraW5nIGludGVyZmFjZSB0 aGF0IHNwZWNpZmllcwp3aGljaCBzdXNwZW5kIHN0YXRlIHRvIGVudGVyIHdoZW4gbm8gc3VzcGVu ZCBibG9ja2VycyBhcmUgYWN0aXZlLiBBCnNwZWNpYWwgc3RhdGUsICJvbiIsIHN0b3BzIHRoZSBw cm9jZXNzIGJ5IGFjdGl2YXRpbmcgdGhlICJtYWluIiBzdXNwZW5kCmJsb2NrZXIuCgpTaWduZWQt b2ZmLWJ5OiBBcnZlIEhqw7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgotLS0KIERvY3VtZW50 YXRpb24vcG93ZXIvc3VzcGVuZC1ibG9ja2Vycy50eHQgfCAgIDk1ICsrKysrKysrKysrCiBpbmNs dWRlL2xpbnV4L3N1c3BlbmRfYmxvY2tlci5oICAgICAgICAgIHwgICA2MCArKysrKysrCiBrZXJu ZWwvcG93ZXIvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArCiBrZXJuZWwvcG93 ZXIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBrZXJuZWwvcG93ZXIvbWFp bi5jICAgICAgICAgICAgICAgICAgICAgIHwgICA2MCArKysrKysrCiBrZXJuZWwvcG93ZXIvcG93 ZXIuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBrZXJuZWwvcG93ZXIvc3VzcGVuZF9i bG9ja2VyLmMgICAgICAgICAgIHwgIDI2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDcgZmlsZXMgY2hhbmdlZCwgNTAxIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJsb2NrZXJzLnR4dAog Y3JlYXRlIG1vZGUgMTAwNzU1IGluY2x1ZGUvbGludXgvc3VzcGVuZF9ibG9ja2VyLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBrZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9ja2VyLmMKCmRpZmYgLS1naXQg YS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tlcnMudHh0IGIvRG9jdW1lbnRhdGlv bi9wb3dlci9zdXNwZW5kLWJsb2NrZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45MjQ4YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9z dXNwZW5kLWJsb2NrZXJzLnR4dApAQCAtMCwwICsxLDk1IEBACitTdXNwZW5kIGJsb2NrZXJzCis9 PT09PT09PT09PT09PT09CisKK1N1c3BlbmQgYmxvY2tlcnMgcHJvdmlkZSBhIG1lY2hhbmlzbSBm b3IgZGV2aWNlIGRyaXZlcnMgYW5kIHVzZXItc3BhY2UgcHJvY2Vzc2VzCit0byBwcmV2ZW50IHRo ZSBzeXN0ZW0gZnJvbSBlbnRlcmluZyBzdXNwZW5kLiBPbmx5IHN1c3BlbmQgc3RhdGVzIHJlcXVl c3RlZAordGhyb3VnaCAvc3lzL3Bvd2VyL3JlcXVlc3Rfc3RhdGUgYXJlIHByZXZlbnRlZC4gV3Jp dGluZyB0byAvc3lzL3Bvd2VyL3N0YXRlCit3aWxsIGlnbm9yZSBzdXNwZW5kIGJsb2NrZXJzLCBh bmQgc2xlZXAgc3RhdGVzIGVudGVyZWQgZnJvbSBpZGxlIGFyZSB1bmFmZmVjdGVkLgorCitUbyB1 c2UgYSBzdXNwZW5kIGJsb2NrZXIsIGEgZGV2aWNlIGRyaXZlciBuZWVkcyBhIHN0cnVjdCBzdXNw ZW5kX2Jsb2NrZXIgb2JqZWN0Cit0aGF0IGhhcyB0byBiZSBpbml0aWFsaXplZCB3aXRoIHN1c3Bl bmRfYmxvY2tlcl9pbml0LiBXaGVuIG5vIGxvbmdlciBuZWVkZWQsCit0aGUgc3VzcGVuZCBibG9j a2VyIG11c3QgYmUgZGVzdHJveWVkIHdpdGggc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3kuCisKK0Eg c3VzcGVuZCBibG9ja2VyIGlzIGFjdGl2YXRlZCB1c2luZyBzdXNwZW5kX2Jsb2NrLCB3aGljaCBw cmV2ZW50cyB0aGUgc3lzdGVtCitmcm9tIGVudGVyaW5nIHN1c3BlbmQgdW50aWwgdGhlIHN1c3Bl bmQgYmxvY2tlciBpcyBkZWFjdGl2YXRlZCB3aXRoCitzdXNwZW5kX3VuYmxvY2suIE1hbnkgc3Vz cGVuZCBibG9ja2VycyBtYXkgYmUgdXNlZCBzaW11bHRhbmVvdXNseSwgYW5kIHRoZQorc3lzdGVt IGlzIHByZXZlbnRlZCBmcm9tIGVudGVyaW5nIHN1c3BlbmQgYXMgbG9uZyBhcyBhdCBsZWFzdCBv bmUgb2YgdGhlbSBpcworYWN0aXZlLgorCitJZiB0aGUgc3VzcGVuZCBvcGVyYXRpb24gaGFzIGFs cmVhZHkgc3RhcnRlZCB3aGVuIGNhbGxpbmcgc3VzcGVuZF9ibG9jayBvbiBhCitzdXNwZW5kX2Js b2NrZXIsIGl0IHdpbGwgYWJvcnQgdGhlIHN1c3BlbmQgb3BlcmF0aW9uIGFzIGxvbmcgaXQgaGFz IG5vdCBhbHJlYWR5CityZWFjaGVkIHRoZSBzeXNkZXYgc3VzcGVuZCBzdGFnZS4gVGhpcyBtZWFu cyB0aGF0IGNhbGxpbmcgc3VzcGVuZF9ibG9jayBmcm9tIGFuCitpbnRlcnJ1cHQgaGFuZGxlciBv ciBhIGZyZWV6ZWFibGUgdGhyZWFkIGFsd2F5cyB3b3JrcywgYnV0IGlmIHlvdSBjYWxsCitzdXNw ZW5kX2Jsb2NrIGZyb20gYSBzeXNkZXYgc3VzcGVuZCBoYW5kbGVyIHlvdSBtdXN0IGFsc28gcmV0 dXJuIGFuIGVycm9yIGZyb20KK3RoYXQgaGFuZGxlciB0byBhYm9ydCBhIHN1c3BlbmQgc2VxdWVu Y2UgdGhhdCB3YXMgYWxyZWFkeSBzdGFydGVkLgorCitJbiBjZWxsIHBob25lcyBvciBvdGhlciBl bWJlZGRlZCBzeXN0ZW1zIHdoZXJlIHBvd2VyaW5nIHRoZSBzY3JlZW4gaXMgYQorc2lnbmlmaWNh bnQgZHJhaW4gb24gdGhlIGJhdHRlcnksIHN1c3BlbmQgYmxvY2tlcnMgY2FuIGJlIHVzZWQgdG8g YWxsb3cKK3VzZXItc3BhY2UgdG8gZGVjaWRlIHdoZXRoZXIgYSBrZXlzdHJva2UgcmVjZWl2ZWQg d2hpbGUgdGhlIHN5c3RlbSBpcyBzdXNwZW5kZWQKK3Nob3VsZCBjYXVzZSB0aGUgc2NyZWVuIHRv IGJlIHR1cm5lZCBiYWNrIG9uIG9yIGFsbG93IHRoZSBzeXN0ZW0gdG8gZ28gYmFjayBpbnRvCitz dXNwZW5kLiBVc2Ugc2V0X2lycV93YWtlIG9yIGEgcGxhdGZvcm0gc3BlY2lmaWMgYXBpIHRvIG1h a2Ugc3VyZSB0aGUga2V5cGFkCitpbnRlcnJ1cHQgd2FrZXMgdXAgdGhlIGNwdS4gT25jZSB0aGUg a2V5cGFkIGRyaXZlciBoYXMgcmVzdW1lZCwgdGhlIHNlcXVlbmNlIG9mCitldmVudHMgY2FuIGxv b2sgbGlrZSB0aGlzOgorCistIFRoZSBLZXlwYWQgZHJpdmVyIGdldHMgYW4gaW50ZXJydXB0LiBJ dCB0aGVuIGNhbGxzIHN1c3BlbmRfYmxvY2sgb24gdGhlCisgIGtleXBhZC1zY2FuIHN1c3BlbmRf YmxvY2tlciBhbmQgc3RhcnRzIHNjYW5uaW5nIHRoZSBrZXlwYWQgbWF0cml4LgorLSBUaGUga2V5 cGFkLXNjYW4gY29kZSBkZXRlY3RzIGEga2V5IGNoYW5nZSBhbmQgcmVwb3J0cyBpdCB0byB0aGUg aW5wdXQtZXZlbnQKKyAgZHJpdmVyLgorLSBUaGUgaW5wdXQtZXZlbnQgZHJpdmVyIHNlZXMgdGhl IGtleSBjaGFuZ2UsIGVucXVldWVzIGFuIGV2ZW50LCBhbmQgY2FsbHMKKyAgc3VzcGVuZF9ibG9j ayBvbiB0aGUgaW5wdXQtZXZlbnQtcXVldWUgc3VzcGVuZF9ibG9ja2VyLgorLSBUaGUga2V5cGFk LXNjYW4gY29kZSBkZXRlY3RzIHRoYXQgbm8ga2V5cyBhcmUgaGVsZCBhbmQgY2FsbHMgc3VzcGVu ZF91bmJsb2NrCisgIG9uIHRoZSBrZXlwYWQtc2NhbiBzdXNwZW5kX2Jsb2NrZXIuCistIFRoZSB1 c2VyLXNwYWNlIGlucHV0LWV2ZW50IHRocmVhZCByZXR1cm5zIGZyb20gc2VsZWN0L3BvbGwsIGNh bGxzCisgIHN1c3BlbmRfYmxvY2sgb24gdGhlIHByb2Nlc3MtaW5wdXQtZXZlbnRzIHN1c3BlbmRf YmxvY2tlciBhbmQgdGhlbiBjYWxscyByZWFkCisgIG9uIHRoZSBpbnB1dC1ldmVudCBkZXZpY2Uu CistIFRoZSBpbnB1dC1ldmVudCBkcml2ZXIgZGVxdWV1ZXMgdGhlIGtleS1ldmVudCBhbmQsIHNp bmNlIHRoZSBxdWV1ZSBpcyBub3cKKyAgZW1wdHksIGl0IGNhbGxzIHN1c3BlbmRfdW5ibG9jayBv biB0aGUgaW5wdXQtZXZlbnQtcXVldWUgc3VzcGVuZF9ibG9ja2VyLgorLSBUaGUgdXNlci1zcGFj ZSBpbnB1dC1ldmVudCB0aHJlYWQgcmV0dXJucyBmcm9tIHJlYWQuIElmIGl0IGRldGVybWluZXMg dGhhdAorICB0aGUga2V5IHNob3VsZCBsZWF2ZSB0aGUgc2NyZWVuIG9mZiwgaXQgY2FsbHMgc3Vz cGVuZF91bmJsb2NrIG9uIHRoZQorICBwcm9jZXNzX2lucHV0X2V2ZW50cyBzdXNwZW5kX2Jsb2Nr ZXIgYW5kIHRoZW4gY2FsbHMgc2VsZWN0IG9yIHBvbGwuIFRoZQorICBzeXN0ZW0gd2lsbCBhdXRv bWF0aWNhbGx5IHN1c3BlbmQgYWdhaW4sIHNpbmNlIG5vdyBubyBzdXNwZW5kIGJsb2NrZXJzIGFy ZQorICBhY3RpdmUuCisKKyAgICAgICAgICAgICAgICAgS2V5IHByZXNzZWQgICBLZXkgcmVsZWFz ZWQKKyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAora2V5cGFkLXNjYW4gICAg ICAgICAgKysrKysrKysrKysrKysrKysrCitpbnB1dC1ldmVudC1xdWV1ZSAgICAgICAgKysrICAg ICAgICAgICsrKworcHJvY2Vzcy1pbnB1dC1ldmVudHMgICAgICAgKysrICAgICAgICAgICsrKwor CisKK0RyaXZlciBBUEkKKz09PT09PT09PT0KKworQSBkcml2ZXIgY2FuIHVzZSB0aGUgc3VzcGVu ZCBibG9jayBhcGkgYnkgYWRkaW5nIGEgc3VzcGVuZF9ibG9ja2VyIHZhcmlhYmxlIHRvCitpdHMg c3RhdGUgYW5kIGNhbGxpbmcgc3VzcGVuZF9ibG9ja2VyX2luaXQuIEZvciBpbnN0YW5jZToKK3N0 cnVjdCBzdGF0ZSB7CisJc3RydWN0IHN1c3BlbmRfYmxvY2tlciBzdXNwZW5kX2Jsb2NrZXI7Cit9 CisKK2luaXQoKSB7CisJc3VzcGVuZF9ibG9ja2VyX2luaXQoJnN0YXRlLT5zdXNwZW5kX2Jsb2Nr ZXIsICJzdXNwZW5kLWJsb2NrZXItbmFtZSIpOworfQorCitCZWZvcmUgZnJlZWluZyB0aGUgbWVt b3J5LCBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSBtdXN0IGJlIGNhbGxlZDoKKwordW5pbml0KCkg eworCXN1c3BlbmRfYmxvY2tlcl9kZXN0cm95KCZzdGF0ZS0+c3VzcGVuZF9ibG9ja2VyKTsKK30K KworV2hlbiB0aGUgZHJpdmVyIGRldGVybWluZXMgdGhhdCBpdCBuZWVkcyB0byBydW4gKHVzdWFs bHkgaW4gYW4gaW50ZXJydXB0CitoYW5kbGVyKSBpdCBjYWxscyBzdXNwZW5kX2Jsb2NrOgorCXN1 c3BlbmRfYmxvY2soJnN0YXRlLT5zdXNwZW5kX2Jsb2NrZXIpOworCitXaGVuIGl0IG5vIGxvbmdl ciBuZWVkcyB0byBydW4gaXQgY2FsbHMgc3VzcGVuZF91bmJsb2NrOgorCXN1c3BlbmRfdW5ibG9j aygmc3RhdGUtPnN1c3BlbmRfYmxvY2tlcik7CisKK0NhbGxpbmcgc3VzcGVuZF9ibG9jayB3aGVu IHRoZSBzdXNwZW5kIGJsb2NrZXIgaXMgYWN0aXZlIG9yIHN1c3BlbmRfdW5ibG9jayB3aGVuCitp dCBpcyBub3QgYWN0aXZlIGhhcyBubyBlZmZlY3QuIFRoaXMgYWxsb3dzIGRyaXZlcnMgdG8gdXBk YXRlIHRoZWlyIHN0YXRlIGFuZAorY2FsbCBzdXNwZW5kIHN1c3BlbmRfYmxvY2sgb3Igc3VzcGVu ZF91bmJsb2NrIGJhc2VkIG9uIHRoZSByZXN1bHQuCitGb3IgaW5zdGFuY2U6CisKK2lmIChsaXN0 X2VtcHR5KCZzdGF0ZS0+cGVuZGluZ193b3JrKSkKKwlzdXNwZW5kX3VuYmxvY2soJnN0YXRlLT5z dXNwZW5kX2Jsb2NrZXIpOworZWxzZQorCXN1c3BlbmRfYmxvY2soJnN0YXRlLT5zdXNwZW5kX2Js b2NrZXIpOworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfYmxvY2tlci5oIGIv aW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl eCAwMDAwMDAwLi4yMTY4OWNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zdXNw ZW5kX2Jsb2NrZXIuaApAQCAtMCwwICsxLDYwIEBACisvKiBpbmNsdWRlL2xpbnV4L3N1c3BlbmRf YmxvY2tlci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xlLCBJbmMuCisg KgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3Ry aWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfU1VTUEVORF9CTE9DS0VSX0gKKyNk ZWZpbmUgX0xJTlVYX1NVU1BFTkRfQkxPQ0tFUl9ICisKKy8qKgorICogc3RydWN0IHN1c3BlbmRf YmxvY2tlciAtIHRoZSBiYXNpYyBzdXNwZW5kX2Jsb2NrZXIgc3RydWN0dXJlCisgKiBAZmxhZ3M6 CVRyYWNrcyBpbml0aWFsaXplZCBhbmQgYWN0aXZlIHN0YXRlLgorICogQG5hbWU6CU5hbWUgdXNl ZCBmb3IgZGVidWdnaW5nLgorICoKKyAqIFdoZW4gYSBzdXNwZW5kX2Jsb2NrZXIgaXMgYWN0aXZl IGl0IHByZXZlbnRzIHRoZSBzeXN0ZW0gZnJvbSBlbnRlcmluZworICogc3VzcGVuZC4KKyAqCisg KiBUaGUgc3VzcGVuZF9ibG9ja2VyIHN0cnVjdHVyZSBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IHN1 c3BlbmRfYmxvY2tlcl9pbml0KCkKKyAqLworCitzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyIHsKKyNp ZmRlZiBDT05GSUdfU1VTUEVORF9CTE9DS0VSUworCWF0b21pY190ICAgICAgICAgICAgZmxhZ3M7 CisJY29uc3QgY2hhciAgICAgICAgICpuYW1lOworI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklH X1NVU1BFTkRfQkxPQ0tFUlMKKwordm9pZCBzdXNwZW5kX2Jsb2NrZXJfaW5pdChzdHJ1Y3Qgc3Vz cGVuZF9ibG9ja2VyICpibG9ja2VyLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgc3VzcGVuZF9i bG9ja2VyX2Rlc3Ryb3koc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7Cit2b2lkIHN1 c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7Cit2b2lkIHN1c3Bl bmRfdW5ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKTsKK2Jvb2wgc3VzcGVu ZF9ibG9ja2VyX2lzX2FjdGl2ZShzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKTsKK2Jv b2wgc3VzcGVuZF9pc19ibG9ja2VkKHZvaWQpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZv aWQgc3VzcGVuZF9ibG9ja2VyX2luaXQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlciwK KwkJCQkJY29uc3QgY2hhciAqbmFtZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5kX2Js b2NrZXJfZGVzdHJveShzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKSB7fQorc3RhdGlj IGlubGluZSB2b2lkIHN1c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tl cikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5kX3VuYmxvY2soc3RydWN0IHN1c3BlbmRf YmxvY2tlciAqYmxvY2tlcikge30KK3N0YXRpYyBpbmxpbmUgYm9vbCBzdXNwZW5kX2Jsb2NrZXJf aXNfYWN0aXZlKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsKQorCQkJCQkJCQl7IHJldHVybiAw OyB9CitzdGF0aWMgaW5saW5lIGJvb2wgc3VzcGVuZF9pc19ibG9ja2VkKHZvaWQpIHsgcmV0dXJu IDA7IH0KKworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2Nv bmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDIzYmQ0ZGEuLmEzNTg3ZDMgMTAwNjQ0 Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBA IC0xMTYsNiArMTE2LDE2IEBAIGNvbmZpZyBTVVNQRU5EX0ZSRUVaRVIKIAogCSAgVHVybmluZyBP RkYgdGhpcyBzZXR0aW5nIGlzIE5PVCByZWNvbW1lbmRlZCEgSWYgaW4gZG91YnQsIHNheSBZLgog Citjb25maWcgU1VTUEVORF9CTE9DS0VSUworCWJvb2wgIlN1c3BlbmQgYmxvY2tlcnMiCisJZGVw ZW5kcyBvbiBQTQorCXNlbGVjdCBSVENfTElCCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAg RW5hYmxlIHN1c3BlbmQgYmxvY2tlcnMuIFdoZW4gdXNlciBzcGFjZSByZXF1ZXN0cyBhIHNsZWVw IHN0YXRlCisJICB0aHJvdWdoIC9zeXMvcG93ZXIvcmVxdWVzdF9zdGF0ZSwgdGhlIHJlcXVlc3Rl ZCBzbGVlcCBzdGF0ZSB3aWxsIGJlCisJICBlbnRlcmVkIHdoZW4gbm8gc3VzcGVuZCBibG9ja2Vy cyBhcmUgYWN0aXZlLgorCiBjb25maWcgSElCRVJOQVRJT04KIAlib29sICJIaWJlcm5hdGlvbiAo YWthICdzdXNwZW5kIHRvIGRpc2snKSIKIAlkZXBlbmRzIG9uIFBNICYmIFNXQVAgJiYgQVJDSF9I SUJFUk5BVElPTl9QT1NTSUJMRQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxlIGIv a2VybmVsL3Bvd2VyL01ha2VmaWxlCmluZGV4IDcyMGVhNGYuLmU4YzdmODUgMTAwNjQ0Ci0tLSBh L2tlcm5lbC9wb3dlci9NYWtlZmlsZQorKysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKQEAgLTYs NiArNiw3IEBAIGVuZGlmCiBvYmotJChDT05GSUdfUE0pCQkrPSBtYWluLm8KIG9iai0kKENPTkZJ R19QTV9TTEVFUCkJCSs9IGNvbnNvbGUubwogb2JqLSQoQ09ORklHX0ZSRUVaRVIpCQkrPSBwcm9j ZXNzLm8KK29iai0kKENPTkZJR19TVVNQRU5EX0JMT0NLRVJTKQkrPSBzdXNwZW5kX2Jsb2NrZXIu bwogb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkrPSBzd3N1c3AubyBkaXNrLm8gc25hcHNob3Qu byBzd2FwLm8gdXNlci5vCiAKIG9iai0kKENPTkZJR19NQUdJQ19TWVNSUSkJKz0gcG93ZXJvZmYu bwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMK aW5kZXggYzk2MzJmOC4uNDY4MWMxZSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYwor KysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGlu dXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4 L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZF9ibG9ja2VyLmg+CiAKICNpbmNs dWRlICJwb3dlci5oIgogCkBAIC0zOTIsNiArMzkzLDcgQEAgc3RhdGljIHZvaWQgc3VzcGVuZF9m aW5pc2godm9pZCkKIAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBtX3N0YXRlc1tQTV9T VVNQRU5EX01BWF0gPSB7CisJW1BNX1NVU1BFTkRfT05dCQk9ICJvbiIsCiAJW1BNX1NVU1BFTkRf U1RBTkRCWV0JPSAic3RhbmRieSIsCiAJW1BNX1NVU1BFTkRfTUVNXQk9ICJtZW0iLAogfTsKQEAg LTU0MCw2ICs1NDIsNjEgQEAgc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmpl Y3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKIAogcG93ZXJfYXR0cihzdGF0 ZSk7CiAKKy8qKgorICoJcmVxdWVzdF9zdGF0ZSAtIGNvbnRyb2wgc3lzdGVtIHBvd2VyIHN0YXRl LgorICoKKyAqCVRoaXMgaXMgc2ltaWxhciB0byBzdGF0ZSwgYnV0IGl0IGRvZXMgbm90IGJsb2Nr IHVudGlsIHRoZSBzeXN0ZW0KKyAqCXJlc3VtZXMsIGFuZCBpdCB3aWxsIHRyeSB0byByZS1lbnRl ciB0aGUgc3RhdGUgdW50aWwgYW5vdGhlciBzdGF0ZSBpcworICoJcmVxdWVzdGVkLiBTdXNwZW5k IGJsb2NrZXJzIGFyZSByZXNwZWN0ZWQgYW5kIHRoZSByZXF1ZXN0ZWQgc3RhdGUgd2lsbAorICoJ b25seSBiZSBlbnRlcmVkIHdoZW4gbm8gc3VzcGVuZCBibG9ja2VycyBhcmUgYWN0aXZlLgorICoJ V3JpdGUgIm9uIiB0byBjYW5jZWwuCisgKi8KKworI2lmZGVmIENPTkZJR19TVVNQRU5EX0JMT0NL RVJTCitzdGF0aWMgc3NpemVfdCByZXF1ZXN0X3N0YXRlX3Nob3coc3RydWN0IGtvYmplY3QgKmtv YmosCisJCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlj aGFyICpzID0gYnVmOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBNX1NVU1BFTkRfTUFY OyBpKyspIHsKKwkJaWYgKHBtX3N0YXRlc1tpXSAmJiAoaSA9PSBQTV9TVVNQRU5EX09OIHx8IHZh bGlkX3N0YXRlKGkpKSkKKwkJCXMgKz0gc3ByaW50ZihzLCAiJXMgIiwgcG1fc3RhdGVzW2ldKTsK Kwl9CisJaWYgKHMgIT0gYnVmKQorCQkvKiBjb252ZXJ0IHRoZSBsYXN0IHNwYWNlIHRvIGEgbmV3 bGluZSAqLworCQkqKHMtMSkgPSAnXG4nOworCXJldHVybiAocyAtIGJ1Zik7Cit9CisKK3N0YXRp YyBzc2l6ZV90IHJlcXVlc3Rfc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJ ICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwg c2l6ZV90IG4pCit7CisJc3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gUE1fU1VTUEVORF9PTjsKKwlj b25zdCBjaGFyICogY29uc3QgKnM7CisJY2hhciAqcDsKKwlpbnQgbGVuOworCWludCBlcnJvciA9 IC1FSU5WQUw7CisKKwlwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJbGVuID0gcCA/IHAgLSBi dWYgOiBuOworCisJZm9yIChzID0gJnBtX3N0YXRlc1tzdGF0ZV07IHN0YXRlIDwgUE1fU1VTUEVO RF9NQVg7IHMrKywgc3RhdGUrKykgeworCQlpZiAoKnMgJiYgbGVuID09IHN0cmxlbigqcykgJiYg IXN0cm5jbXAoYnVmLCAqcywgbGVuKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoc3RhdGUgPCBQTV9T VVNQRU5EX01BWCAmJiAqcykKKwkJaWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT04gfHwgdmFsaWRf c3RhdGUoc3RhdGUpKSB7CisJCQllcnJvciA9IDA7CisJCQlyZXF1ZXN0X3N1c3BlbmRfc3RhdGUo c3RhdGUpOworCQl9CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBuOworfQorCitwb3dlcl9hdHRy KHJlcXVlc3Rfc3RhdGUpOworI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EX0JMT0NLRVJTICovCisK ICNpZmRlZiBDT05GSUdfUE1fVFJBQ0UKIGludCBwbV90cmFjZV9lbmFibGVkOwogCkBAIC01Njcs NiArNjI0LDkgQEAgcG93ZXJfYXR0cihwbV90cmFjZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmli dXRlICogZ1tdID0gewogCSZzdGF0ZV9hdHRyLmF0dHIsCisjaWZkZWYgQ09ORklHX1NVU1BFTkRf QkxPQ0tFUlMKKwkmcmVxdWVzdF9zdGF0ZV9hdHRyLmF0dHIsCisjZW5kaWYKICNpZmRlZiBDT05G SUdfUE1fVFJBQ0UKIAkmcG1fdHJhY2VfYXR0ci5hdHRyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9r ZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4IDQ2YjVlYzcu LjYwOWUwMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBiL2tlcm5lbC9w b3dlci9wb3dlci5oCkBAIC0yMjMsMyArMjIzLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1c3Bl bmRfdGhhd19wcm9jZXNzZXModm9pZCkKIHsKIH0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NV U1BFTkRfQkxPQ0tFUlMKKy8qIGtlcm5lbC9wb3dlci9zdXNwZW5kX2Jsb2NrLmMgKi8KK3ZvaWQg cmVxdWVzdF9zdXNwZW5kX3N0YXRlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CisjZW5kaWYKKwpk aWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2tlci5jIGIva2VybmVsL3Bvd2Vy L3N1c3BlbmRfYmxvY2tlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0 MmIwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9ja2VyLmMK QEAgLTAsMCArMSwyNjkgQEAKKy8qIGtlcm5lbC9wb3dlci9zdXNwZW5kX2Jsb2NrZXIuYworICoK KyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29m dHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1v ZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4K KyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZF9ibG9j a2VyLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSAicG93ZXIuaCIKKwor ZW51bSB7CisJREVCVUdfRVhJVF9TVVNQRU5EID0gMVUgPDwgMCwKKwlERUJVR19XQUtFVVAgPSAx VSA8PCAxLAorCURFQlVHX1VTRVJfU1RBVEUgPSAxVSA8PCAyLAorCURFQlVHX1NVU1BFTkQgPSAx VSA8PCAzLAorCURFQlVHX1NVU1BFTkRfQkxPQ0tFUiA9IDFVIDw8IDQsCit9Oworc3RhdGljIGlu dCBkZWJ1Z19tYXNrID0gREVCVUdfRVhJVF9TVVNQRU5EIHwgREVCVUdfV0FLRVVQIHwgREVCVUdf VVNFUl9TVEFURTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19tYXNrLCBkZWJ1Z19tYXNrLCBp bnQsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCk7CisKKyNkZWZpbmUgU0JfSU5JVElBTEla RUQgICAgICAgICAgICAoMVUgPDwgOCkKKyNkZWZpbmUgU0JfQUNUSVZFICAgICAgICAgICAgICAg ICAoMVUgPDwgOSkKKworc3RhdGljIERFRklORV9TUElOTE9DSyhzdGF0ZV9sb2NrKTsKK3N0YXRp YyBhdG9taWNfdCBzdXNwZW5kX2Jsb2NrX2NvdW50Oworc3RhdGljIGF0b21pY190IGN1cnJlbnRf ZXZlbnRfbnVtOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN1c3BlbmRfd29ya19xdWV1ZTsK K3N0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgbWFpbl9zdXNwZW5kX2Jsb2NrZXI7CitzdGF0aWMgc3Vz cGVuZF9zdGF0ZV90IHJlcXVlc3RlZF9zdXNwZW5kX3N0YXRlID0gUE1fU1VTUEVORF9NRU07Citz dGF0aWMgYm9vbCBlbmFibGVfc3VzcGVuZF9ibG9ja2VyczsKKworI2RlZmluZSBwcl9pbmZvX3Rp bWUoZm10LCBhcmdzLi4uKSBcCisJZG8geyBcCisJCXN0cnVjdCB0aW1lc3BlYyB0czsgXAorCQlz dHJ1Y3QgcnRjX3RpbWUgdG07IFwKKwkJZ2V0bnN0aW1lb2ZkYXkoJnRzKTsgXAorCQlydGNfdGlt ZV90b190bSh0cy50dl9zZWMsICZ0bSk7IFwKKwkJcHJfaW5mbyhmbXQgIiglZC0lMDJkLSUwMmQg JTAyZDolMDJkOiUwMmQuJTA5bHUgVVRDKVxuIiAsIFwKKwkJCWFyZ3MsIFwKKwkJCXRtLnRtX3ll YXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LCBcCisJCQl0bS50bV9ob3VyLCB0 bS50bV9taW4sIHRtLnRtX3NlYywgdHMudHZfbnNlYyk7IFwKKwl9IHdoaWxlICgwKTsKKworLyoq CisgKiBzdXNwZW5kX2lzX2Jsb2NrZWQoKSAtIENoZWNrIGlmIHN1c3BlbmQgc2hvdWxkIGJlIGJs b2NrZWQKKyAqCisgKiBzdXNwZW5kX2lzX2Jsb2NrZWQgY2FuIGJlIHVzZWQgYnkgZ2VuZXJpYyBw b3dlciBtYW5hZ2VtZW50IGNvZGUgdG8gYWJvcnQKKyAqIHN1c3BlbmQuCisgKgorICogVG8gcHJl c2VydmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBzdXNwZW5kX2lzX2Jsb2NrZWQgcmV0dXJucyAw IHVubGVzcyBpdAorICogaXMgY2FsbGVkIGR1cmluZyBzdXNwZW5kIGluaXRpYXRlZCBmcm9tIHRo ZSBzdXNwZW5kX2Jsb2NrIGNvZGUuCisgKi8KK2Jvb2wgc3VzcGVuZF9pc19ibG9ja2VkKHZvaWQp Cit7CisJaWYgKCFlbmFibGVfc3VzcGVuZF9ibG9ja2VycykKKwkJcmV0dXJuIDA7CisJcmV0dXJu ICEhYXRvbWljX3JlYWQoJnN1c3BlbmRfYmxvY2tfY291bnQpOworfQorCitzdGF0aWMgdm9pZCBz dXNwZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHJldDsKKwlp bnQgZW50cnlfZXZlbnRfbnVtOworCisJZW5hYmxlX3N1c3BlbmRfYmxvY2tlcnMgPSB0cnVlOwor CityZXRyeToKKwlpZiAoc3VzcGVuZF9pc19ibG9ja2VkKCkpIHsKKwkJaWYgKGRlYnVnX21hc2sg JiBERUJVR19TVVNQRU5EKQorCQkJcHJfaW5mbygic3VzcGVuZDogYWJvcnQgc3VzcGVuZFxuIik7 CisJCWdvdG8gYWJvcnQ7CisJfQorCisJZW50cnlfZXZlbnRfbnVtID0gYXRvbWljX3JlYWQoJmN1 cnJlbnRfZXZlbnRfbnVtKTsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCisJCXBy X2luZm8oInN1c3BlbmQ6IGVudGVyIHN1c3BlbmRcbiIpOworCXJldCA9IHBtX3N1c3BlbmQocmVx dWVzdGVkX3N1c3BlbmRfc3RhdGUpOworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhJVF9TVVNQ RU5EKQorCQlwcl9pbmZvX3RpbWUoInN1c3BlbmQ6IGV4aXQgc3VzcGVuZCwgcmV0ID0gJWQgIiwg cmV0KTsKKwlpZiAoYXRvbWljX3JlYWQoJmN1cnJlbnRfZXZlbnRfbnVtKSA9PSBlbnRyeV9ldmVu dF9udW0pIHsKKwkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19TVVNQRU5EKQorCQkJcHJfaW5mbygi c3VzcGVuZDogcG1fc3VzcGVuZCByZXR1cm5lZCB3aXRoIG5vIGV2ZW50XG4iKTsKKwkJZ290byBy ZXRyeTsKKwl9CithYm9ydDoKKwllbmFibGVfc3VzcGVuZF9ibG9ja2VycyA9IGZhbHNlOworfQor c3RhdGljIERFQ0xBUkVfV09SSyhzdXNwZW5kX3dvcmssIHN1c3BlbmRfd29ya2VyKTsKKworc3Rh dGljIGludCBzdXNwZW5kX2Jsb2NrX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1f bWVzc2FnZV90IHN0YXRlKQoreworCWludCByZXQgPSBzdXNwZW5kX2lzX2Jsb2NrZWQoKSA/IC1F QUdBSU4gOiAwOworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKKwkJcHJfaW5mbygi c3VzcGVuZF9ibG9ja19zdXNwZW5kIHJldHVybiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBzdXNwZW5kX2Jsb2NrX3N5c2NsYXNzID0g eworCS5uYW1lID0gInN1c3BlbmRfYmxvY2siLAorCS5zdXNwZW5kID0gc3VzcGVuZF9ibG9ja19z dXNwZW5kLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzdXNwZW5kX2Jsb2NrX3N5c2Rl diA9IHsKKwkuY2xzID0gJnN1c3BlbmRfYmxvY2tfc3lzY2xhc3MsCit9OworCisvKioKKyAqIHN1 c3BlbmRfYmxvY2tlcl9pbml0KCkgLSBJbml0aWFsaXplIGEgc3VzcGVuZCBibG9ja2VyCisgKiBA YmxvY2tlcjoJVGhlIHN1c3BlbmQgYmxvY2tlciB0byBpbml0aWFsaXplLgorICogQG5hbWU6CVRo ZSBuYW1lIG9mIHRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gc2hvdyBpbiBkZWJ1ZyBtZXNzYWdlcy4K KyAqCisgKiBUaGUgc3VzcGVuZCBibG9ja2VyIHN0cnVjdCBhbmQgbmFtZSBtdXN0IG5vdCBiZSBm cmVlZCBiZWZvcmUgY2FsbGluZworICogc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3kuCisgKi8KK3Zv aWQgc3VzcGVuZF9ibG9ja2VyX2luaXQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlciwg Y29uc3QgY2hhciAqbmFtZSkKK3sKKwlXQVJOX09OKCFuYW1lKTsKKworCWlmIChkZWJ1Z19tYXNr ICYgREVCVUdfU1VTUEVORF9CTE9DS0VSKQorCQlwcl9pbmZvKCJzdXNwZW5kX2Jsb2NrZXJfaW5p dCBuYW1lPSVzXG4iLCBuYW1lKTsKKworCWJsb2NrZXItPm5hbWUgPSBuYW1lOworCWF0b21pY19z ZXQoJmJsb2NrZXItPmZsYWdzLCBTQl9JTklUSUFMSVpFRCk7Cit9CitFWFBPUlRfU1lNQk9MKHN1 c3BlbmRfYmxvY2tlcl9pbml0KTsKKworLyoqCisgKiBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveSgp IC0gRGVzdHJveSBhIHN1c3BlbmQgYmxvY2tlcgorICogQGJsb2NrZXI6CVRoZSBzdXNwZW5kIGJs b2NrZXIgdG8gZGVzdHJveS4KKyAqLwordm9pZCBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveShzdHJ1 Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQoreworCWludCBmbGFnczsKKwlpZiAoZGVidWdf bWFzayAmIERFQlVHX1NVU1BFTkRfQkxPQ0tFUikKKwkJcHJfaW5mbygic3VzcGVuZF9ibG9ja2Vy X2Rlc3Ryb3kgbmFtZT0lc1xuIiwgYmxvY2tlci0+bmFtZSk7CisJZmxhZ3MgPSBhdG9taWNfeGNo ZygmYmxvY2tlci0+ZmxhZ3MsIDApOworCVdBUk4oIShmbGFncyAmIFNCX0lOSVRJQUxJWkVEKSwg InN1c3BlbmRfYmxvY2tlcl9kZXN0cm95IGNhbGxlZCBvbiAiCisJCQkJCSJ1bmluaXRpYWxpemVk IHN1c3BlbmRfYmxvY2tlclxuIik7CisJaWYgKGZsYWdzID09IChTQl9JTklUSUFMSVpFRCB8IFNC X0FDVElWRSkpCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdXNwZW5kX2Jsb2NrX2NvdW50 KSkKKwkJCXF1ZXVlX3dvcmsoc3VzcGVuZF93b3JrX3F1ZXVlLCAmc3VzcGVuZF93b3JrKTsKK30K K0VYUE9SVF9TWU1CT0woc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3kpOworCisvKioKKyAqIHN1c3Bl bmRfYmxvY2soKSAtIEJsb2NrIHN1c3BlbmQKKyAqIEBibG9ja2VyOglUaGUgc3VzcGVuZCBibG9j a2VyIHRvIHVzZQorICovCit2b2lkIHN1c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tl ciAqYmxvY2tlcikKK3sKKwlXQVJOX09OKCEoYXRvbWljX3JlYWQoJmJsb2NrZXItPmZsYWdzKSAm IFNCX0lOSVRJQUxJWkVEKSk7CisKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkRfQkxP Q0tFUikKKwkJcHJfaW5mbygic3VzcGVuZF9ibG9jazogJXNcbiIsIGJsb2NrZXItPm5hbWUpOwor CWlmIChhdG9taWNfY21weGNoZygmYmxvY2tlci0+ZmxhZ3MsIFNCX0lOSVRJQUxJWkVELAorCSAg ICBTQl9JTklUSUFMSVpFRCB8IFNCX0FDVElWRSkgPT0gU0JfSU5JVElBTElaRUQpCisJCWF0b21p Y19pbmMoJnN1c3BlbmRfYmxvY2tfY291bnQpOworCisJYXRvbWljX2luYygmY3VycmVudF9ldmVu dF9udW0pOworfQorRVhQT1JUX1NZTUJPTChzdXNwZW5kX2Jsb2NrKTsKKworLyoqCisgKiBzdXNw ZW5kX3VuYmxvY2soKSAtIFVuYmxvY2sgc3VzcGVuZAorICogQGJsb2NrZXI6CVRoZSBzdXNwZW5k IGJsb2NrZXIgdG8gdW5ibG9jay4KKyAqCisgKiBJZiBubyBvdGhlciBzdXNwZW5kIGJsb2NrZXJz IGJsb2NrIHN1c3BlbmQsIHRoZSBzeXN0ZW0gd2lsbCBzdXNwZW5kLgorICovCit2b2lkIHN1c3Bl bmRfdW5ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQoreworCVdBUk5fT04o IShhdG9taWNfcmVhZCgmYmxvY2tlci0+ZmxhZ3MpICYgU0JfSU5JVElBTElaRUQpKTsKKworCWlm IChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORF9CTE9DS0VSKQorCQlwcl9pbmZvKCJzdXNwZW5k X3VuYmxvY2s6ICVzXG4iLCBibG9ja2VyLT5uYW1lKTsKKworCWlmIChhdG9taWNfY21weGNoZygm YmxvY2tlci0+ZmxhZ3MsIFNCX0lOSVRJQUxJWkVEIHwgU0JfQUNUSVZFLAorCSAgICBTQl9JTklU SUFMSVpFRCkgPT0gKFNCX0lOSVRJQUxJWkVEIHwgU0JfQUNUSVZFKSkKKwkJaWYgKGF0b21pY19k ZWNfYW5kX3Rlc3QoJnN1c3BlbmRfYmxvY2tfY291bnQpKQorCQkJcXVldWVfd29yayhzdXNwZW5k X3dvcmtfcXVldWUsICZzdXNwZW5kX3dvcmspOworfQorRVhQT1JUX1NZTUJPTChzdXNwZW5kX3Vu YmxvY2spOworCisvKioKKyAqIHN1c3BlbmRfYmxvY2tlcl9pc19hY3RpdmUoKSAtIFRlc3QgaWYg YSBzdXNwZW5kIGJsb2NrZXIgaXMgYmxvY2tpbmcgc3VzcGVuZAorICogQGJsb2NrZXI6CVRoZSBz dXNwZW5kIGJsb2NrZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdXNw ZW5kX2Jsb2NrZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4KKyAqLworYm9vbCBzdXNwZW5kX2Jsb2Nr ZXJfaXNfYWN0aXZlKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCit7CisJV0FSTl9P TighKGF0b21pY19yZWFkKCZibG9ja2VyLT5mbGFncykgJiBTQl9JTklUSUFMSVpFRCkpOworCisJ cmV0dXJuICEhKGF0b21pY19yZWFkKCZibG9ja2VyLT5mbGFncykgJiBTQl9BQ1RJVkUpOworfQor RVhQT1JUX1NZTUJPTChzdXNwZW5kX2Jsb2NrZXJfaXNfYWN0aXZlKTsKKwordm9pZCByZXF1ZXN0 X3N1c3BlbmRfc3RhdGUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcg aXJxZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlX2xvY2ssIGlycWZsYWdzKTsKKwlp ZiAoZGVidWdfbWFzayAmIERFQlVHX1VTRVJfU1RBVEUpCisJCXByX2luZm9fdGltZSgicmVxdWVz dF9zdXNwZW5kX3N0YXRlOiAlcyAoJWQtPiVkKSBhdCAlbGxkICIsCisJCQkgICAgIHN0YXRlICE9 IFBNX1NVU1BFTkRfT04gPyAic2xlZXAiIDogIndha2V1cCIsCisJCQkgICAgIHJlcXVlc3RlZF9z dXNwZW5kX3N0YXRlLCBzdGF0ZSwKKwkJCSAgICAga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpKTsK KwlyZXF1ZXN0ZWRfc3VzcGVuZF9zdGF0ZSA9IHN0YXRlOworCWlmIChzdGF0ZSA9PSBQTV9TVVNQ RU5EX09OKQorCQlzdXNwZW5kX2Jsb2NrKCZtYWluX3N1c3BlbmRfYmxvY2tlcik7CisJZWxzZQor CQlzdXNwZW5kX3VuYmxvY2soJm1haW5fc3VzcGVuZF9ibG9ja2VyKTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZzdGF0ZV9sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0 IHN1c3BlbmRfYmxvY2tfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzdXNwZW5kX2Jsb2Nr ZXJfaW5pdCgmbWFpbl9zdXNwZW5kX2Jsb2NrZXIsICJtYWluIik7CisJc3VzcGVuZF9ibG9jaygm bWFpbl9zdXNwZW5kX2Jsb2NrZXIpOworCisJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZz dXNwZW5kX2Jsb2NrX3N5c2NsYXNzKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic3VzcGVuZF9i bG9ja19pbml0OiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJf c3lzZGV2X2NsYXNzX3JlZ2lzdGVyOworCX0KKwlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnN1c3Bl bmRfYmxvY2tfc3lzZGV2KTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic3VzcGVuZF9ibG9ja19p bml0OiBzdXNwZW5kX2Jsb2NrX3N5c2RldiBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9zeXNkZXZf cmVnaXN0ZXI7CisJfQorCisJc3VzcGVuZF93b3JrX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVh ZF93b3JrcXVldWUoInN1c3BlbmQiKTsKKwlpZiAoc3VzcGVuZF93b3JrX3F1ZXVlID09IE5VTEwp IHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3VzcGVuZF93b3JrX3F1ZXVlOworCX0K KworCXJldHVybiAwOworCitlcnJfc3VzcGVuZF93b3JrX3F1ZXVlOgorCXN5c2Rldl91bnJlZ2lz dGVyKCZzdXNwZW5kX2Jsb2NrX3N5c2Rldik7CitlcnJfc3lzZGV2X3JlZ2lzdGVyOgorCXN5c2Rl dl9jbGFzc191bnJlZ2lzdGVyKCZzdXNwZW5kX2Jsb2NrX3N5c2NsYXNzKTsKK2Vycl9zeXNkZXZf Y2xhc3NfcmVnaXN0ZXI6CisJc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koJm1haW5fc3VzcGVuZF9i bG9ja2VyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCAgX19leGl0IHN1c3BlbmRf YmxvY2tfZXhpdCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKHN1c3BlbmRfd29ya19xdWV1 ZSk7CisJc3lzZGV2X3VucmVnaXN0ZXIoJnN1c3BlbmRfYmxvY2tfc3lzZGV2KTsKKwlzeXNkZXZf Y2xhc3NfdW5yZWdpc3Rlcigmc3VzcGVuZF9ibG9ja19zeXNjbGFzcyk7CisJc3VzcGVuZF9ibG9j a2VyX2Rlc3Ryb3koJm1haW5fc3VzcGVuZF9ibG9ja2VyKTsKK30KKworY29yZV9pbml0Y2FsbChz dXNwZW5kX2Jsb2NrX2luaXQpOworbW9kdWxlX2V4aXQoc3VzcGVuZF9ibG9ja19leGl0KTsKLS0g CjEuNi4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1wbSBtYWlsaW5nIGxpc3QKbGludXgtcG1AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcK aHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXBt