From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S263840AbUE1TvJ (ORCPT ); Fri, 28 May 2004 15:51:09 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S263842AbUE1TvI (ORCPT ); Fri, 28 May 2004 15:51:08 -0400 Received: from cfcafw.sgi.com ([198.149.23.1]:35658 "EHLO omx1.americas.sgi.com") by vger.kernel.org with ESMTP id S263860AbUE1Ts3 (ORCPT ); Fri, 28 May 2004 15:48:29 -0400 Date: Fri, 28 May 2004 14:48:16 -0500 From: Erik Jacobson To: Christoph Hellwig cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH] Process Aggregates (PAGG) update for 2.6.6 In-Reply-To: Message-ID: References: <20040528141939.GA28626@infradead.org> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-2136806248-749197509-1085773696=:727952" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---2136806248-749197509-1085773696=:727952 Content-Type: TEXT/PLAIN; charset=US-ASCII Argh. Sorry - I missed a couple and only just noticed. Another one. On Fri, 28 May 2004, Erik Jacobson wrote: > > Looks nice to me. Can you fix up the comments a little to use kernel-doc > > I just did this. Hopefully it looks ok? > > > And after all that we have a nice hookin mechanism without users, so where > > are the modules layering ontop of pagg hiding? ;-) > > We'll post the job patch shortly. Inescapable jobs makes use of PAGG. > > New patch attached. > > Thanks for the suggestions. > > -- > Erik Jacobson - Linux System Software - Silicon Graphics - Eagan, Minnesota -- Erik Jacobson - Linux System Software - Silicon Graphics - Eagan, Minnesota ---2136806248-749197509-1085773696=:727952 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="linux-2.6.6-pagg.patch-4" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="linux-2.6.6-pagg.patch-4" ZGlmZiAtTmFydSAyLjYtcGF0Y2gvRG9jdW1lbnRhdGlvbi9wYWdnLnR4dCAy LjZwYWdnLXBhdGNoL0RvY3VtZW50YXRpb24vcGFnZy50eHQNCi0tLSAyLjYt cGF0Y2gvRG9jdW1lbnRhdGlvbi9wYWdnLnR4dAkxOTY5LTEyLTMxIDE4OjAw OjAwLjAwMDAwMDAwMCAtMDYwMA0KKysrIDIuNnBhZ2ctcGF0Y2gvRG9jdW1l bnRhdGlvbi9wYWdnLnR4dAkyMDA0LTA1LTI0IDA4OjA4OjM0LjAwMDAwMDAw MCAtMDUwMA0KQEAgLTAsMCArMSwzMiBAQA0KK0xpbnV4IFByb2Nlc3MgQWdn cmVnYXRlcyAoUEFHRykNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQorDQorVGhlIHByb2Nlc3MgYWdncmVnYXRlcyBpbmZyYXN0cnVjdHVy ZSwgb3IgUEFHRywgcHJvdmlkZXMgYSBnZW5lcmFsaXplZA0KK21lY2hhbmlz bSBmb3IgcHJvdmlkaW5nIGFyYml0cmFyeSBwcm9jZXNzIGdyb3VwcyBpbiBM aW51eC4gIFBBR0cgY29uc2lzdHMNCitvZiBhIHNlcmllcyBvZiBmdW5jdGlv bnMgZm9yIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nIHN1cHBvcnQN Citmb3IgbmV3IHR5cGVzIG9mIHByb2Nlc3MgYWdncmVnYXRpb24gY29udGFp bmVycyB3aXRoIHRoZSBrZXJuZWwuDQorVGhpcyBpcyBzaW1pbGFyIHRvIHRo ZSBzdXBwb3J0IGN1cnJlbnRseSBwcm92aWRlZCB3aXRoaW4gTGludXggdGhh dA0KK2FsbG93cyBmb3IgZHluYW1pYyBzdXBwb3J0IG9mIGZpbGVzeXN0ZW1z LCBibG9jayBhbmQgY2hhcmFjdGVyIGRldmljZXMsDQorc3ltYm9sIHRhYmxl cywgbmV0d29yayBkZXZpY2VzLCBzZXJpYWwgZGV2aWNlcywgYW5kIGV4ZWN1 dGlvbiBkb21haW5zLg0KK1RoaXMgaW1wbGVtZW50YXRpb24gb2YgUEFHRyBw cm92aWRlcyBkZXZlbG9wZXJzIHRoZSBiYXNpYyBob29rcyBuZWNlc3NhcnkN Cit0byBpbXBsZW1lbnQga2VybmVsIG1vZHVsZXMgZm9yIHNwZWNpZmljIHBy b2Nlc3MgY29udGFpbmVycywgc3VjaCBhcw0KK3RoZSBqb2IgY29udGFpbmVy Lg0KKw0KK1RoZSBkb19mb3JrIGZ1bmN0aW9uIGluIHRoZSBrZXJuZWwgd2Fz IGFsdGVyZWQgdG8gc3VwcG9ydCBQQUdHLiAgSWYgYQ0KK3Byb2Nlc3MgaXMg YXR0YWNoZWQgdG8gYW55IFBBR0cgY29udGFpbmVycyBhbmQgc3Vic2VxdWVu dGx5IGZvcmtzIGENCitjaGlsZCBwcm9jZXNzLCB0aGUgY2hpbGQgcHJvY2Vz cyB3aWxsIGFsc28gYmUgYXR0YWNoZWQgdG8gdGhlIHNhbWUgUEFHRw0KK2Nv bnRhaW5lcnMuICBUaGUgUEFHRyBjb250YWluZXJzIGludm9sdmVkIGR1cmlu ZyB0aGUgZm9yayBhcmUgbm90aWZpZWQNCit0aGF0IGEgbmV3IHByb2Nlc3Mg aGFzIGJlZW4gYXR0YWNoZWQuICBUaGUgbm90aWZpY2F0aW9uIGlzIGFjY29t cGxpc2hlZA0KK3ZpYSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5 IHRoZSBQQUdHIG1vZHVsZS4NCisNCitUaGUgZG9fZXhpdCBmdW5jdGlvbiBp biB0aGUga2VybmVsIGhhcyBhbHNvIGJlZW4gYWx0ZXJlZC4gIElmIGEgcHJv Y2Vzcw0KK2lzIGF0dGFjaGVkIHRvIGFueSBQQUdHIGNvbnRhaW5lcnMgYW5k IHRoYXQgcHJvY2VzcyBpcyBleGl0aW5nLCB0aGUgUEFHRw0KK2NvbnRhaW5l cnMgYXJlIG5vdGlmaWVkIHRoYXQgYSBwcm9jZXNzIGhhcyBkZXRhY2hlZCBm cm9tIHRoZSBjb250YWluZXIuDQorVGhlIG5vdGlmaWNhdGlvbiBpcyBhY2Nv bXBsaXNoZWQgdmlhIGEgY2FsbGJhY2sgZnVuY3Rpb24gcHJvdmlkZWQgYnkN Cit0aGUgUEFHRyBtb2R1bGUuDQorDQorVGhlIHN5c19leGVjdmUgZnVuY3Rp b24gaGFzIGJlZW4gbW9kaWZpZWQgdG8gc3VwcG9ydCBhbiBvcHRpb25hbCBj YWxsb3V0DQordGhhdCBjYW4gYmUgcnVuIHdoZW4gYSBwcm9jZXNzIGluIGEg cGFnZyBsaXN0IGRvZXMgYW4gZXhlYy4gIEl0IGNhbiBiZSANCit1c2VkLCBm b3IgZXhhbXBsZSwgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMgdGhhdCB3aXNo IHRvIGRvIGFkdmFuY2VkIENQVQ0KK3BsYWNlbWVudCBvbiBtdWx0aS1wcm9j ZXNzb3Igc3lzdGVtcyAoanVzdCBvbmUgZXhhbXBsZSkuDQorDQpkaWZmIC1O YXJ1IDIuNi1wYXRjaC9mcy9leGVjLmMgMi42cGFnZy1wYXRjaC9mcy9leGVj LmMNCi0tLSAyLjYtcGF0Y2gvZnMvZXhlYy5jCTIwMDQtMDUtMTAgMTI6MDY6 MTEuMDAwMDAwMDAwIC0wNTAwDQorKysgMi42cGFnZy1wYXRjaC9mcy9leGVj LmMJMjAwNC0wNS0yMCAxNDo0Njo0OS4wMDAwMDAwMDAgLTA1MDANCkBAIC00 Niw3ICs0Niw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+DQog I2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+DQogI2luY2x1ZGUgPGxpbnV4 L3JtYXAuaD4NCi0NCisjaW5jbHVkZSA8bGludXgvcGFnZy5oPg0KICNpbmNs dWRlIDxhc20vdWFjY2Vzcy5oPg0KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5o Pg0KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4NCkBAIC0xMTQyLDYg KzExNDIsNyBAQA0KIAlyZXR2YWwgPSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIo JmJwcm0scmVncyk7DQogCWlmIChyZXR2YWwgPj0gMCkgew0KIAkJZnJlZV9h cmdfcGFnZXMoJmJwcm0pOw0KKwkJcGFnZ19leGVjKGN1cnJlbnQpOw0KIA0K IAkJLyogZXhlY3ZlIHN1Y2Nlc3MgKi8NCiAJCXNlY3VyaXR5X2Jwcm1fZnJl ZSgmYnBybSk7DQpkaWZmIC1OYXJ1IDIuNi1wYXRjaC9pbmNsdWRlL2xpbnV4 L2luaXRfdGFzay5oIDIuNnBhZ2ctcGF0Y2gvaW5jbHVkZS9saW51eC9pbml0 X3Rhc2suaA0KLS0tIDIuNi1wYXRjaC9pbmNsdWRlL2xpbnV4L2luaXRfdGFz ay5oCTIwMDQtMDUtMTAgMTI6MDY6MTEuMDAwMDAwMDAwIC0wNTAwDQorKysg Mi42cGFnZy1wYXRjaC9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCTIwMDQt MDUtMjAgMTQ6NDY6NDkuMDAwMDAwMDAwIC0wNTAwDQpAQCAtMiw2ICsyLDcg QEANCiAjZGVmaW5lIF9MSU5VWF9fSU5JVF9UQVNLX0gNCiANCiAjaW5jbHVk ZSA8bGludXgvZmlsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wYWdnLmg+DQog DQogI2RlZmluZSBJTklUX0ZJTEVTIFwNCiB7IAkJCQkJCQlcDQpAQCAtMTEy LDYgKzExMyw3IEBADQogCS5wcm9jX2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NL RUQsCQkJCVwNCiAJLnN3aXRjaF9sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VE LAkJCQlcDQogCS5qb3VybmFsX2luZm8JPSBOVUxMLAkJCQkJCVwNCisJSU5J VF9UQVNLX1BBR0codHNrKQkJCQkJCVwNCiB9DQogDQogDQpkaWZmIC1OYXJ1 IDIuNi1wYXRjaC9pbmNsdWRlL2xpbnV4L3BhZ2cuaCAyLjZwYWdnLXBhdGNo L2luY2x1ZGUvbGludXgvcGFnZy5oDQotLS0gMi42LXBhdGNoL2luY2x1ZGUv bGludXgvcGFnZy5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0w NjAwDQorKysgMi42cGFnZy1wYXRjaC9pbmNsdWRlL2xpbnV4L3BhZ2cuaAky MDA0LTA1LTI4IDE0OjQ1OjMwLjAwMDAwMDAwMCAtMDUwMA0KQEAgLTAsMCAr MSwyMDIgQEANCisvKiANCisgKiBQQUdHIChQcm9jZXNzIEFnZ3JlZ2F0ZXMp IGludGVyZmFjZQ0KKyAqDQorICogDQorICogQ29weXJpZ2h0IChjKSAyMDAw LTIwMDIsIDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0 cyBSZXNlcnZlZC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcg0KKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAq DQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3Vp dGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQorICoNCisgKg0K KyAqIENvbnRhY3QgaW5mb3JtYXRpb246ICBTaWxpY29uIEdyYXBoaWNzLCBJ bmMuLCAxNTAwIENyaXR0ZW5kZW4gTGFuZSwNCisgKiBNb3VudGFpbiBWaWV3 LCBDQSAgOTQwNDMsIG9yOg0KKyAqIA0KKyAqIGh0dHA6Ly93d3cuc2dpLmNv bSANCisgKiANCisgKiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiByZWdhcmRp bmcgdGhpcyBub3RpY2UsIHNlZTogDQorICogDQorICogaHR0cDovL29zcy5z Z2kuY29tL3Byb2plY3RzL0dlbkluZm8vTm90aWNlRXhwbGFuDQorICovDQor DQorLyoNCisgKiBEYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBhbmQgZnVu Y3Rpb24gcHJvdG90eXBlcyB1c2VkIHRvIGltcGxlbWVudA0KKyAqIHByb2Nl c3MgYWdncmVnYXRlcyAocGFnZ3MpLg0KKyAqDQorICogUGFnZ3MgcHJvdmlk ZXMgYSBnZW5lcmFsaXplZCB3YXkgdG8gaW1wbGVtZW50IHByb2Nlc3MgZ3Jv dXBpbmdzIG9yDQorICogY29udGFpbmVycy4gIE1vZHVsZXMgdXNlIHRoZXNl IGZ1bmN0aW9ucyB0byByZWdpc3RlciB3aXRoIHRoZSBrZXJuZWwgYXMNCisg KiBwcm92aWRlcnMgb2YgcHJvY2VzcyBhZ2dyZWdhdGlvbiBjb250YWluZXJz LiBUaGUgcGFnZyBkYXRhIHN0cnVjdHVyZXMNCisgKiBkZWZpbmUgdGhlIGNh bGxiYWNrIGZ1bmN0aW9ucyBhbmQgZGF0YSBhY2Nlc3MgcG9pbnRlcnMgYmFj ayBpbnRvIHRoZQ0KKyAqIHBhZ2cgbW9kdWxlcy4NCisgKi8NCisNCisjaWZu ZGVmIF9MSU5VWF9QQUdHX0gNCisjZGVmaW5lIF9MSU5VWF9QQUdHX0gNCisN CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisNCisjaWZkZWYgQ09ORklH X1BBR0cNCisNCisjZGVmaW5lIFBBR0dfTkFNRUxOCTMyCQkvKiBNYXggY2hh cnMgaW4gUEFHRyBtb2R1bGUgbmFtZSAqLw0KKw0KKw0KKy8qKg0KKyAqIElO SVRfUEFHR19MSVNUIC0gdXNlZCB0byBpbml0aWFsaXplIGEgcGFnZ19saXN0 IHN0cnVjdHVyZSBhZnRlciBkZWNsYXJhdGlvbiANCisgKiBAX2w6IFRhc2sg c3RydWN0IHRvIGluaXQgdGhlIHBhZ2dfbGlzdCBhbmQgc2VtYXBob3JlIGlu DQorICogDQorICovDQorI2RlZmluZSBJTklUX1BBR0dfTElTVChfbCkJCQkJ CQlcDQorZG8gewkJCQkJCQkJCVwNCisJSU5JVF9MSVNUX0hFQUQoJihfbCkt PnBhZ2dfbGlzdCk7CQkJCQlcDQorCWluaXRfcndzZW0oJihfbCktPnBhZ2df c2VtKTsJCQkJCQlcDQorfSB3aGlsZSgwKQ0KKwkNCisNCisvKg0KKyAqIFVz ZWQgYnkgdGFza19zdHJ1Y3QgdG8gbWFuYWdlIGxpc3Qgb2YgcGFnZyBhdHRh Y2htZW50cyBmb3IgdGhlIHByb2Nlc3MuICANCisgKiBFYWNoIHBhZ2cgcHJv dmlkZXMgdGhlIGxpbmsgYmV0d2VlbiB0aGUgcHJvY2VzcyBhbmQgdGhlIA0K KyAqIGNvcnJlY3QgcGFnZyBjb250YWluZXIuDQorICoNCisgKiBTVFJVQ1Qg TUVNQkVSUzoNCisgKiAgICAgaG9vazoJUmVmZXJlbmNlIHRvIHBhZ2cgbW9k dWxlIHN0cnVjdHVyZS4gIFRoYXQgc3RydWN0DQorICogICAgIAkJaG9sZHMg dGhlIG5hbWUga2V5IGFuZCBmdW5jdGlvbiBwb2ludGVycy4NCisgKiAgICAg ZGF0YToJT3BhcXVlIGRhdGEgcG9pbnRlciAtIGRlZmluZWQgYnkgcGFnZyBt b2R1bGVzLg0KKyAqICAgICBlbnRyeToJTGlzdCBwb2ludGVycw0KKyAqLw0K K3N0cnVjdCBwYWdnIHsNCisgICAgICAgc3RydWN0IHBhZ2dfaG9vawkqaG9v azsNCisgICAgICAgdm9pZAkJKmRhdGE7DQorICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQJZW50cnk7DQorfTsNCisNCisvKg0KKyAqIFVzZWQgYnkgcGFnZyBt b2R1bGVzIHRvIGRlZmluZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGludG8g dGhlIA0KKyAqIG1vZHVsZS4NCisgKg0KKyAqIFNUUlVDVCBNRU1CRVJTOg0K KyAqICAgICBuYW1lOiAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhZ2cg Y29udGFpbmVyIHR5cGUgcHJvdmlkZWQgYnkNCisgKiAgICAgICAgICAgICAg ICAgICAgIHRoZSBtb2R1bGUuIFRoaXMgd2lsbCBiZSBzZXQgYnkgdGhlIHBh Z2cgbW9kdWxlLg0KKyAqICAgICBhdHRhY2g6ICAgICAgICAgRnVuY3Rpb24g cG9pbnRlciB0byBmdW5jdGlvbiB1c2VkIHdoZW4gYXR0YWNoaW5nDQorICog ICAgICAgICAgICAgICAgICAgICBhIHByb2Nlc3MgdG8gdGhlIHBhZ2cgY29u dGFpbmVyIHJlZmVyZW5jZWQgYnkgDQorICogICAgICAgICAgICAgICAgICAg ICB0aGlzIHN0cnVjdC4NCisgKiAgICAgZGV0YWNoOiAgICAgICAgIEZ1bmN0 aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gdXNlZCB3aGVuIGRldGFjaGluZw0K KyAqICAgICAgICAgICAgICAgICAgICAgYSBwcm9jZXNzIHRvIHRoZSBwYWdn IGNvbnRhaW5lciByZWZlcmVuY2VkIGJ5IA0KKyAqICAgICAgICAgICAgICAg ICAgICAgdGhpcyBzdHJ1Y3QuDQorICogICAgIGluaXQ6ICAgICAgICAgICBG dW5jdGlvbiBwb2ludGVyIHRvIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAg VGhpcw0KKyAqICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXMgdXNl ZCB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIHRvIGF0dGFjaA0KKyAqICAg ICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgcHJvY2Vzc2VzIHRvIGEgZGVm YXVsdCBjb250YWluZXIgYXMgZGVmaW5lZCBieQ0KKyAqICAgICAgICAgICAg ICAgICAgICAgdGhlIHBhZ2cgbW9kdWxlLiBUaGlzIGlzIG9wdGlvbmFsIGFu ZCBtYXkgYmUgc2V0IHRvIA0KKyAqICAgICAgICAgICAgICAgICAgICAgTlVM TCBpZiBpdCBpcyBub3QgbmVlZGVkIGJ5IHRoZSBwYWdnIG1vZHVsZS4NCisg KiAgICAgZGF0YTogICAgICAgICAgIE9wYXF1ZSBkYXRhIHBvaW50ZXIgLSBk ZWZpbmVkIGJ5IHBhZ2cgbW9kdWxlcy4NCisgKiAgICAgbW9kdWxlOiAgICAg ICAgIFBvaW50ZXIgdG8ga2VybmVsIG1vZHVsZSBzdHJ1Y3QuICBVc2VkIHRv IGluY3JlbWVudCAmIA0KKyAqICAgICAgICAgICAgICAgICAgICAgZGVjcmVt ZW50IHRoZSB1c2UgY291bnQgZm9yIHRoZSBtb2R1bGUuDQorICogICAgIGVu dHJ5OgkgICAgICAgTGlzdCBwb2ludGVycw0KKyAqICAgICBleGVjOiAgICAg ICAgICAgRnVuY3Rpb24gcG9pbnRlciB0byBmdW5jdGlvbiB1c2VkIHdoZW4g YSBwcm9jZXNzDQorICogICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcGFn ZyBjb250YWluZXIgZXhlYydzIGEgbmV3IHByb2Nlc3MuIFRoaXMNCisgKiAg ICAgICAgICAgICAgICAgICAgIGlzIG9wdGlvbmFsIGFuZCBtYXkgYmUgc2V0 IHRvIE5VTEwgaWYgaXQgaXMgbm90IA0KKyAqICAgICAgICAgICAgICAgICAg ICAgbmVlZGVkIGJ5IHRoZSBwYWdnIG1vZHVsZS4NCisgKiAgICAgcmVmY250 OiAgICAgICAgIEtlZXAgdHJhY2sgb2YgdXNlciBjb3VudCBvZiB0aGUgcGFn ZyBob29rDQorICovDQorc3RydWN0IHBhZ2dfaG9vayB7DQorICAgICAgIHN0 cnVjdCBtb2R1bGUJKm1vZHVsZTsNCisgICAgICAgY2hhcgkJKm5hbWU7CS8q IE5hbWUgS2V5IC0gcmVzdHJpY3RlZCB0byAzMiBjaGFyYWN0ZXJzICovDQor ICAgICAgIHZvaWQJCSpkYXRhOwkvKiBPcGFxdWUgbW9kdWxlIHNwZWNpZmlj IGRhdGEgKi8NCisgICAgICAgc3RydWN0IGxpc3RfaGVhZAllbnRyeTsJLyog TGlzdCBwb2ludGVycyAqLw0KKwkJIGF0b21pY190IHJlZmNudDsgLyogdXNh Z2UgY291bnRlciAqLw0KKyAgICAgICBpbnQJCSgqaW5pdCkoc3RydWN0IHRh c2tfc3RydWN0ICosIHN0cnVjdCBwYWdnICopOw0KKyAgICAgICBpbnQJCSgq YXR0YWNoKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHBhZ2cgKiwg dm9pZCopOw0KKyAgICAgICBpbnQJCSgqZGV0YWNoKShzdHJ1Y3QgdGFza19z dHJ1Y3QgKiwgc3RydWN0IHBhZ2cgKik7DQorICAgICAgIHZvaWQJCSgqZXhl Yykoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwYWdnICopOw0KK307 DQorDQorDQorLyogS2VybmVsIHNlcnZpY2UgZnVuY3Rpb25zIGZvciBwcm92 aWRpbmcgUEFHRyBzdXBwb3J0ICovDQorZXh0ZXJuIHN0cnVjdCBwYWdnICpw YWdnX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmtleSk7 DQorZXh0ZXJuIHN0cnVjdCBwYWdnICpwYWdnX2FsbG9jKHN0cnVjdCB0YXNr X3N0cnVjdCAqdGFzaywgDQorCQkJICAgICAgIHN0cnVjdCBwYWdnX2hvb2sg KnB0KTsNCitleHRlcm4gdm9pZCBwYWdnX2ZyZWUoc3RydWN0IHBhZ2cgKnBh Z2cpOw0KK2V4dGVybiBpbnQgcGFnZ19ob29rX3JlZ2lzdGVyKHN0cnVjdCBw YWdnX2hvb2sgKnB0X25ldyk7DQorZXh0ZXJuIGludCBwYWdnX2hvb2tfdW5y ZWdpc3RlcihzdHJ1Y3QgcGFnZ19ob29rICpwdF9vbGQpOw0KK2V4dGVybiBp bnQgX19wYWdnX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvX3Rhc2ss IA0KKwkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb21fdGFzayk7DQorZXh0 ZXJuIGludCBfX3BhZ2dfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFz ayk7DQorZXh0ZXJuIGludCBfX3BhZ2dfZXhlYyhzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhc2spOw0KKw0KKy8qKg0KKyAqIHBhZ2dfYXR0YWNoIC0gY2hpbGQg aW5oZXJpdHMgYXR0YWNobWVudCB0byBwYWdnIGNvbnRhaW5lcnMgb2YgaXRz IHBhcmVudA0KKyAqIEBjaGlsZDogY2hpbGQgdGFzayAtIHRvIGluaGVyaXQN CisgKiBAcGFyZW50OiBwYXJlbmV0IHRhc2sgLSBjaGlsZCBpbmhlcml0cyBw YWdnIGNvbnRhaW5lcnMgZnJvbSB0aGlzIHBhcmVudA0KKyAqIA0KKyAqIGZ1 bmN0aW9uIHVzZWQgd2hlbiBhIGNoaWxkIHByb2Nlc3MgbXVzdCBpbmhlcml0 IGF0dGFjaG1lbnQgdG8gcGFnZw0KKyAqIGNvbnRhaW5lcnMgZnJvbSB0aGUg cGFyZW50Lg0KKyAqDQorICovDQorc3RhdGljIGlubGluZSBpbnQgcGFnZ19h dHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgDQorCQkJICAgICAg c3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpDQorew0KKwlJTklUX1BBR0df TElTVChjaGlsZCk7DQorCWlmICghbGlzdF9lbXB0eSgmcGFyZW50LT5wYWdn X2xpc3QpKQ0KKwkJcmV0dXJuIF9fcGFnZ19hdHRhY2goY2hpbGQsIHBhcmVu dCk7DQorCXJldHVybiAwOw0KK30NCisNCisNCisvKioNCisgKiBwYWdnX2Rl dGFjaCAtIERldGFjaCBhIHByb2Nlc3MgZnJvbSBhIHBhZ2cgY29udGFpbmVy IGl0IGlzIGEgbWVtYmVyIG9mDQorICogQHRhc2s6IFRoZSB0YXNrIHRoZSBw YWdnIHdpbGwgYmUgZGV0YWNoZWQgZnJvbQ0KKyAqDQorICovDQorc3RhdGlj IGlubGluZSB2b2lkIHBhZ2dfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAq dGFzaykNCit7DQorCWlmICghbGlzdF9lbXB0eSgmdGFzay0+cGFnZ19saXN0 KSkNCisJCV9fcGFnZ19kZXRhY2godGFzayk7DQorfQ0KKw0KKy8qKg0KKyAq IHBhZ2dfZXhlYyAtIFVzZWQgd2hlbiBhIHByb2Nlc3MgZXhlYydzDQorICog QHRhc2s6IFRoZSBwcm9jZXNzIGRvaW5nIHRoZSBleGVjDQorICoNCisgKi8N CitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZ19leGVjKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzaykNCit7DQorCWlmICghbGlzdF9lbXB0eSgmdGFzay0+cGFn Z19saXN0KSkNCisJCV9fcGFnZ19leGVjKHRhc2spOw0KK30NCisNCisvKiog DQorICogSU5JVF9UQVNLX1BBR0cgLSBVc2VkIGluIElOSVRfVEFTSyB0byBz ZXQgdGhlIGhlYWQgYW5kIHNlbSBvZiBwYWdnX2xpc3QNCisgKiBAdHNrOiBU aGUgdGFzayB3b3JrIHdpdGgNCisgKg0KKyAqIE1hcmNvIFVzZWQgaW4gSU5J VF9UQVNLIHRvIHNldCB0aGUgaGVhZCBhbmQgc2VtIG9mIHBhZ2dfbGlzdC4N CisgKiBJZiBDT05GSUdfUEFHRyBpcyBvZmYsIGl0IGlzIGRlZmluZWQgYXMg YW4gZW1wdHkgbWFjcm8gYmVsb3cuDQorICoNCisgKi8NCisjZGVmaW5lIElO SVRfVEFTS19QQUdHKHRzaykgXA0KKwkucGFnZ19saXN0ID0gTElTVF9IRUFE X0lOSVQodHNrLnBhZ2dfbGlzdCksICAgICBcDQorCS5wYWdnX3NlbSAgPSBf X1JXU0VNX0lOSVRJQUxJWkVSKHRzay5wYWdnX3NlbSkgIA0KKw0KKyNlbHNl ICAvKiBDT05GSUdfUEFHRyAqLw0KKw0KKy8qIA0KKyAqIFJlcGxhY2VtZW50 IG1hY3JvcyB1c2VkIHdoZW4gUEFHRyAoUHJvY2VzcyBBZ2dyZWdhdGVzKSBz dXBwb3J0IGlzIG5vdA0KKyAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4N CisgKi8NCisjZGVmaW5lIElOSVRfVEFTS19QQUdHKHRzaykNCisjZGVmaW5l IElOSVRfUEFHR19MSVNUKGwpIGRvIHsgfSB3aGlsZSgwKQ0KKyNkZWZpbmUg cGFnZ19hdHRhY2goY3QsIHB0KSAgZG8geyB9IHdoaWxlKDApDQorI2RlZmlu ZSBwYWdnX2RldGFjaCh0KSAgZG8geyAgfSB3aGlsZSgwKSAgICAgDQorI2Rl ZmluZSBwYWdnX2V4ZWModCkgIGRvIHsgIH0gd2hpbGUoMCkgICAgIA0KKw0K KyNlbmRpZiAvKiBDT05GSUdfUEFHRyAqLw0KKw0KKyNlbmRpZiAvKiBfTElO VVhfUEFHR19IICovDQpkaWZmIC1OYXJ1IDIuNi1wYXRjaC9pbmNsdWRlL2xp bnV4L3NjaGVkLmggMi42cGFnZy1wYXRjaC9pbmNsdWRlL2xpbnV4L3NjaGVk LmgNCi0tLSAyLjYtcGF0Y2gvaW5jbHVkZS9saW51eC9zY2hlZC5oCTIwMDQt MDUtMTAgMTI6MDY6MTEuMDAwMDAwMDAwIC0wNTAwDQorKysgMi42cGFnZy1w YXRjaC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJMjAwNC0wNS0yNiAwODozMToy NC4wMDAwMDAwMDAgLTA1MDANCkBAIC00OTksMTEgKzQ5OSwxNiBAQA0KIA0K IAlzdHJ1Y3QgZGVudHJ5ICpwcm9jX2RlbnRyeTsNCiAJc3RydWN0IGJhY2tp bmdfZGV2X2luZm8gKmJhY2tpbmdfZGV2X2luZm87DQotDQogCXN0cnVjdCBp b19jb250ZXh0ICppb19jb250ZXh0Ow0KIA0KIAl1bnNpZ25lZCBsb25nIHB0 cmFjZV9tZXNzYWdlOw0KIAlzaWdpbmZvX3QgKmxhc3Rfc2lnaW5mbzsgLyog Rm9yIHB0cmFjZSB1c2UuICAqLw0KKw0KKyNpZmRlZiBDT05GSUdfUEFHRw0K Ky8qIExpc3Qgb2YgcGFnZyAocHJvY2VzcyBhZ2dyZWdhdGUpIGF0dGFjaG1l bnRzICovDQorCXN0cnVjdCBsaXN0X2hlYWQgcGFnZ19saXN0Ow0KKwlzdHJ1 Y3Qgcndfc2VtYXBob3JlIHBhZ2dfc2VtOw0KKyNlbmRpZg0KIH07DQogDQog c3RhdGljIGlubGluZSBwaWRfdCBwcm9jZXNzX2dyb3VwKHN0cnVjdCB0YXNr X3N0cnVjdCAqdHNrKQ0KZGlmZiAtTmFydSAyLjYtcGF0Y2gvaW5pdC9LY29u ZmlnIDIuNnBhZ2ctcGF0Y2gvaW5pdC9LY29uZmlnDQotLS0gMi42LXBhdGNo L2luaXQvS2NvbmZpZwkyMDA0LTA1LTEwIDEyOjA2OjExLjAwMDAwMDAwMCAt MDUwMA0KKysrIDIuNnBhZ2ctcGF0Y2gvaW5pdC9LY29uZmlnCTIwMDQtMDUt MjAgMTQ6NDY6NDkuMDAwMDAwMDAwIC0wNTAwDQpAQCAtMTIxLDYgKzEyMSwx NCBAQA0KIAkgIHVwIHRvIHRoZSB1c2VyIGxldmVsIHByb2dyYW0gdG8gZG8g dXNlZnVsIHRoaW5ncyB3aXRoIHRoaXMNCiAJICBpbmZvcm1hdGlvbi4gIFRo aXMgaXMgZ2VuZXJhbGx5IGEgZ29vZCBpZGVhLCBzbyBzYXkgWS4NCiANCitj b25maWcgUEFHRw0KKwlib29sICJTdXBwb3J0IGZvciBwcm9jZXNzIGFnZ3Jl Z2F0ZXMgKFBBR0dzKSINCisJaGVscA0KKyAgICAgU2F5IFkgaGVyZSBpZiB5 b3Ugd2lsbCBiZSBsb2FkaW5nIG1vZHVsZXMgd2hpY2ggcHJvdmlkZSBzdXBw b3J0DQorICAgICBmb3IgcHJvY2VzcyBhZ2dyZWdhdGUgY29udGFpbmVycy4g IEV4YW1wbGVzIG9mIHN1Y2ggbW9kdWxlcyBpbmNsdWRlIHRoZQ0KKyAgICAg TGludXggSm9icyBtb2R1bGUgYW5kIHRoZSBMaW51eCBBcnJheSBTZXNzaW9u cyBtb2R1bGUuICBJZiB5b3Ugd2lsbCBub3QgDQorICAgICBiZSB1c2luZyBz dWNoIG1vZHVsZXMsIHNheSBOLg0KKw0KIGNvbmZpZyBTWVNDVEwNCiAJYm9v bCAiU3lzY3RsIHN1cHBvcnQiDQogCS0tLWhlbHAtLS0NCmRpZmYgLU5hcnUg Mi42LXBhdGNoL2tlcm5lbC9leGl0LmMgMi42cGFnZy1wYXRjaC9rZXJuZWwv ZXhpdC5jDQotLS0gMi42LXBhdGNoL2tlcm5lbC9leGl0LmMJMjAwNC0wNS0x MCAxMjowNjoxMS4wMDAwMDAwMDAgLTA1MDANCisrKyAyLjZwYWdnLXBhdGNo L2tlcm5lbC9leGl0LmMJMjAwNC0wNS0yMCAxNDo0Njo0OS4wMDAwMDAwMDAg LTA1MDANCkBAIC0yMiw3ICsyMiw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3By b2ZpbGUuaD4NCiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4NCiAjaW5jbHVk ZSA8bGludXgvcHJvY19mcy5oPg0KLQ0KKyNpbmNsdWRlIDxsaW51eC9wYWdn Lmg+DQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQogI2luY2x1ZGUgPGFz bS9wZ3RhYmxlLmg+DQogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPg0K QEAgLTc5OSw2ICs3OTksOSBAQA0KIAkJbW9kdWxlX3B1dCh0c2stPmJpbmZt dC0+bW9kdWxlKTsNCiANCiAJdHNrLT5leGl0X2NvZGUgPSBjb2RlOw0KKw0K KwlwYWdnX2RldGFjaCh0c2spOw0KKw0KIAlleGl0X25vdGlmeSh0c2spOw0K IAlzY2hlZHVsZSgpOw0KIAlCVUcoKTsNCmRpZmYgLU5hcnUgMi42LXBhdGNo L2tlcm5lbC9mb3JrLmMgMi42cGFnZy1wYXRjaC9rZXJuZWwvZm9yay5jDQot LS0gMi42LXBhdGNoL2tlcm5lbC9mb3JrLmMJMjAwNC0wNS0xMCAxMjowNjox MS4wMDAwMDAwMDAgLTA1MDANCisrKyAyLjZwYWdnLXBhdGNoL2tlcm5lbC9m b3JrLmMJMjAwNC0wNS0yMSAxMDoxMzo1My4wMDAwMDAwMDAgLTA1MDANCkBA IC0zMyw3ICszMyw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPg0K ICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPg0KICNpbmNsdWRlIDxsaW51eC9h dWRpdC5oPg0KLQ0KKyNpbmNsdWRlIDxsaW51eC9wYWdnLmg+DQogI2luY2x1 ZGUgPGFzbS9wZ3RhYmxlLmg+DQogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+ DQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQpAQCAtMjM2LDYgKzIzNiw5 IEBADQogDQogCWluaXRfdGFzay5ybGltW1JMSU1JVF9OUFJPQ10ucmxpbV9j dXIgPSBtYXhfdGhyZWFkcy8yOw0KIAlpbml0X3Rhc2sucmxpbVtSTElNSVRf TlBST0NdLnJsaW1fbWF4ID0gbWF4X3RocmVhZHMvMjsNCisNCisJLyogSW5p dGlhbGl6ZSB0aGUgcGFnZyBsaXN0IGluIHBpZCAwIGJlZm9yZSBpdCBjYW4g Y2xvbmUgaXRzZWxmLiAqLw0KKwlJTklUX1BBR0dfTElTVChjdXJyZW50KTsN CiB9DQogDQogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVwX3Rhc2tf c3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JpZykNCkBAIC05OTUsNiAr OTk4LDEyIEBADQogCSAgIA0KIAlwLT5wYXJlbnRfZXhlY19pZCA9IHAtPnNl bGZfZXhlY19pZDsNCiANCisJLyoNCisJICogY2FsbCBwYWdnIG1vZHVsZXMg dG8gcHJvcGVybHkgYXR0YWNoIG5ldyBwcm9jZXNzIHRvIHRoZSBzYW1lDQor CSAqIHByb2Nlc3MgYWdncmVnYXRlIGNvbnRhaW5lcnMgYXMgdGhlIHBhcmVu dCBwcm9jZXNzLg0KKwkgKi8NCisJcGFnZ19hdHRhY2gocCwgY3VycmVudCk7 DQorDQogCS8qIG9rLCBub3cgd2Ugc2hvdWxkIGJlIHNldCB1cC4uICovDQog CXAtPmV4aXRfc2lnbmFsID0gKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFE KSA/IC0xIDogKGNsb25lX2ZsYWdzICYgQ1NJR05BTCk7DQogCXAtPnBkZWF0 aF9zaWduYWwgPSAwOw0KZGlmZiAtTmFydSAyLjYtcGF0Y2gva2VybmVsL01h a2VmaWxlIDIuNnBhZ2ctcGF0Y2gva2VybmVsL01ha2VmaWxlDQotLS0gMi42 LXBhdGNoL2tlcm5lbC9NYWtlZmlsZQkyMDA0LTA1LTEwIDEyOjA2OjExLjAw MDAwMDAwMCAtMDUwMA0KKysrIDIuNnBhZ2ctcGF0Y2gva2VybmVsL01ha2Vm aWxlCTIwMDQtMDUtMjAgMTQ6NDY6NDkuMDAwMDAwMDAwIC0wNTAwDQpAQCAt MTgsNiArMTgsNyBAQA0KIG9iai0kKENPTkZJR19QTSkgKz0gcG93ZXIvDQog b2JqLSQoQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QpICs9IGFjY3Qubw0KIG9i ai0kKENPTkZJR19DT01QQVQpICs9IGNvbXBhdC5vDQorb2JqLSQoQ09ORklH X1BBR0cpICs9IHBhZ2cubw0KIG9iai0kKENPTkZJR19JS0NPTkZJRykgKz0g Y29uZmlncy5vDQogb2JqLSQoQ09ORklHX0lLQ09ORklHX1BST0MpICs9IGNv bmZpZ3Mubw0KIG9iai0kKENPTkZJR19TVE9QX01BQ0hJTkUpICs9IHN0b3Bf bWFjaGluZS5vDQpkaWZmIC1OYXJ1IDIuNi1wYXRjaC9rZXJuZWwvcGFnZy5j IDIuNnBhZ2ctcGF0Y2gva2VybmVsL3BhZ2cuYw0KLS0tIDIuNi1wYXRjaC9r ZXJuZWwvcGFnZy5jCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0w NjAwDQorKysgMi42cGFnZy1wYXRjaC9rZXJuZWwvcGFnZy5jCTIwMDQtMDUt MjggMTM6MDY6MTEuMDAwMDAwMDAwIC0wNTAwDQpAQCAtMCwwICsxLDM4MCBA QA0KKy8qIA0KKyAqIFBBR0cgKFByb2Nlc3MgQWdncmVnYXRlcykgaW50ZXJm YWNlDQorICoNCisgKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBT aWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0K KyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQor ICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0K KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m DQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRh dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv biwgTUEgMDIxMTEtMTMwNyBVU0ENCisgKg0KKyAqIENvbnRhY3QgaW5mb3Jt YXRpb246ICBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCAxNTAwIENyaXR0ZW5k ZW4gTGFuZSwNCisgKiBNb3VudGFpbiBWaWV3LCBDQSAgOTQwNDMsIG9yOg0K KyAqIA0KKyAqIGh0dHA6Ly93d3cuc2dpLmNvbSANCisgKi8NCisNCisjaW5j bHVkZSA8bGludXgvY29uZmlnLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BhZ2cuaD4NCisjaW5j bHVkZSA8YXNtL3NlbWFwaG9yZS5oPg0KKw0KKy8qIGxpc3Qgb2YgcGFnZyBo b29rIGVudHJpZXMgdGhhdCByZWZlcmVuY2UgdGhlICJtb2R1bGUiIGltcGxl bWVudGF0aW9ucyAqLw0KK3N0YXRpYyBMSVNUX0hFQUQocGFnZ19ob29rX2xp c3QpOw0KK3N0YXRpYyBERUNMQVJFX1JXU0VNKHBhZ2dfaG9va19saXN0X3Nl bSk7DQorDQorDQorLyoqDQorICogcGFnZ19nZXQgLSBnZXQgYSBwYWdnIGdp dmVuIGEgc2VhcmNoIGtleQ0KKyAqIEB0YXNrOiBXZSBleGFtaW5lIHRoZSBw YWdnX2xpc3QgZnJvbSB0aGUgZ2l2ZW4gdGFzaw0KKyAqIEBrZXk6IEtleSBu YW1lIG9mIHBhZ2cgd2Ugd2lzaCB0byByZXRyaWV2ZQ0KKyAqDQorICogR2l2 ZW4gYSBwYWdnX2xpc3QgbGlzdCBzdHJ1Y3R1cmUsIHRoaXMgZnVuY3Rpb24g d2lsbCByZXR1cm4NCisgKiBhIHBvaW50ZXIgdG8gdGhlIHBhZ2cgc3RydWN0 IHRoYXQgbWF0Y2hlcyB0aGUgc2VhcmNoDQorICoga2V5LiAgSWYgdGhlIGtl eSBpcyBub3QgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBOVUxM Lg0KKyAqDQorICogVGhlIGNhbGxlciBzaG91bGQgaG9sZCBhdCBsZWFzdCBh IHJlYWQgbG9jayBvbiB0aGUgcGFnZ19saXN0DQorICogZm9yIHRhc2sgdXNp bmcgZG93bl9yZWFkKCZ0YXNrLT5wYWdnX2xpc3Quc2VtKS4NCisgKg0KKyAq Lw0KK3N0cnVjdCBwYWdnICoNCitwYWdnX2dldChzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhc2ssIGNoYXIgKmtleSkNCit7DQorCXN0cnVjdCBwYWdnICpwYWdn Ow0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2csICZ0YXNrLT5wYWdn X2xpc3QsIGVudHJ5KSB7DQorCQlpZiAoIXN0cmNtcChwYWdnLT5ob29rLT5u YW1lLGtleSkpDQorCQkJcmV0dXJuIHBhZ2c7DQorCX0NCisJcmV0dXJuIE5V TEw7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIHBhZ2dfYWxsb2MgLSBJbnNlcnQg YSBuZXcgcGFnZyBpbiB0byB0aGUgcGFnZ19saXN0IGZvciBhIHRhc2sNCisg KiBAdGFzazogVGFzayB3ZSB3YW50IHRvIGluc2VydCB0aGUgcGFnZyBpbiB0 bw0KKyAqIEBwYWdnX2hvb2s6IFBhZ2cgaG9vayB0byBhc3NvY2lhdGUgd2l0 aCB0aGUgbmV3IHBhZ2cNCisgKg0KKyAqIEdpdmVuIGEgdGFzayBhbmQgYSBw YWdnIGhvb2ssIHRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZQ0KKyAqIGEg bmV3IHBhZ2cgc3RydWN0dXJlLCBpbml0aWFsaXplIHRoZSBzZXR0aW5ncywg YW5kIGluc2VydCB0aGUgcGFnZyBpbnRvDQorICogdGhlIHBhZ2dfbGlzdCBm b3IgdGhlIHRhc2suDQorICoNCisgKiBUaGUgY2FsbGVyIGZvciB0aGlzIGZ1 bmN0aW9uIHNob3VsZCBob2xkIGF0IGxlYXN0IGEgcmVhZCBsb2NrIG9uIHRo ZQ0KKyAqIHBhZ2dfaG9va19saXN0X3NlbSAtIG9yIGVuc3VyZSB0aGF0IHRo ZSBwYWdnIGhvb2sgZW50cnkgY2Fubm90IGJlIA0KKyAqIHJlbW92ZWQuIElm IHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tIHRoZSBwYWdnIG1vZHVs ZSAodXN1YWxseSB0aGUNCisgKiBjYXNlKSwgdGhlbiB0aGUgY2FsbGVyIG5l ZWQgbm90IGhvbGQgdGhpcyBsb2NrLiBUaGUgY2FsbGVyIHNob3VsZCBob2xk IA0KKyAqIGEgd3JpdGUgbG9jayBvbiBmb3IgdGhlIHRhc2tzIHBhZ2dfc2Vt LiAgVGhpcyBjYW4gYmUgbG9ja2VkIHVzaW5nIA0KKyAqIGRvd25fd3JpdGUo JnRhc2stPnBhZ2dfc2VtKQ0KKyAqIA0KKyAqLw0KK3N0cnVjdCBwYWdnICoN CitwYWdnX2FsbG9jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0 IHBhZ2dfaG9vayAqcGFnZ19ob29rKQ0KK3sNCisJc3RydWN0IHBhZ2cgKnBh Z2c7DQorDQorCXBhZ2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZyks IEdGUF9LRVJORUwpOw0KKwlpZiAoIXBhZ2cpDQorCQlyZXR1cm4gTlVMTDsN CisNCisJcGFnZy0+aG9vayA9IHBhZ2dfaG9vazsNCisJcGFnZy0+ZGF0YSA9 IE5VTEw7DQorCWF0b21pY19pbmMoJnBhZ2dfaG9vay0+cmVmY250KTsgIC8q IEluY3JlYXNlIGhvb2sncyByZWZlcmVuY2UgY291bnQgKi8NCisJbGlzdF9h ZGRfdGFpbCgmcGFnZy0+ZW50cnksICZ0YXNrLT5wYWdnX2xpc3QpOw0KKwly ZXR1cm4gcGFnZzsNCit9DQorDQorDQorLyoqDQorICogcGFnZ19mcmVlIC0g RGVsZXRlIHBhZ2cgZnJvbSB0aGUgbGlzdCBhbmQgZnJlZSBpdHMgbWVtb3J5 DQorICogQHBhZ2c6IFRoZSBwYWdnIHRvIGZyZWUNCisgKg0KKyAqIFRoaXMg ZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhlIHBhZ2cgaXMgZGVsZXRlZCBmb3Jt IA0KKyAqIHRoZSBsaXN0IG9mIHBhZ2cgZW50cmllcyBmb3IgdGhlIHRhc2su IEZpbmFsbHksIHRoZSBtZW1vcnkgZm9yIHRoZSANCisgKiBwYWdnIGlzIGRp c2NhcmRlZC4NCisgKg0KKyAqIFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlv biBzaG91bGQgaG9sZCBhIHdyaXRlIGxvY2sgb24gdGhlIHBhZ2dfc2VtDQor ICogZm9yIHRoZSB0YXNrLiBUaGlzIGNhbiBiZSBsb2NrZWQgdXNpbmcgZG93 bl93cml0ZSgmdGFzay0+cGFnZ19zZW0pLg0KKyAqDQorICogUHJpb3IgdG8g Y2FsbGluZyBwYWdnX2ZyZWUsIHRoZSBwYWdnIHNob3VsZCBoYXZlIGJlZW4g ZGV0YWNoZWQgZnJvbSB0aGUNCisgKiBwYWdnIGNvbnRhaW5lciByZXByZXNl bnRlZCBieSB0aGlzIHBhZ2cuICBUaGF0IGlzIHVzdWFsbHkgZG9uZSB1c2lu Zw0KKyAqIHAtPmhvb2stPmRldGFjaCh0YXNrLCBwYWdnKTsNCisgKiANCisg Ki8NCit2b2lkDQorcGFnZ19mcmVlKHN0cnVjdCBwYWdnICpwYWdnKSANCit7 DQorCWF0b21pY19kZWMoJnBhZ2ctPmhvb2stPnJlZmNudCk7IC8qIGRlY3Ig dGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgaG9vayAqLw0KKwlsaXN0X2Rl bCgmcGFnZy0+ZW50cnkpOw0KKwlrZnJlZShwYWdnKTsNCit9DQorDQorDQor LyoqDQorICogZ2V0X3BhZ2dfaG9vayAtIEdldCB0aGUgcGFnZyBob29rIG1h dGNoaW5nIHRoZSByZXF1ZXN0ZWQgbmFtZQ0KKyAqIEBrZXk6IFRoZSBuYW1l IG9mIHRoZSBwYWdnIGhvb2sgdG8gZ2V0DQorICoNCisgKiBHaXZlbiBhIHBh Z2cgaG9vayBuYW1lIGtleSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBh IHBvaW50ZXINCisgKiB0byB0aGUgcGFnZ19ob29rIHN0cnVjdCB0aGF0IG1h dGNoZXMgdGhlIG5hbWUuDQorICogDQorICogWW91IHNob3VsZCBob2xkIGVp dGhlciB0aGUgd3JpdGUgb3IgcmVhZCBsb2NrIGZvciBwYWdnX2hvb2tfbGlz dF9zZW0NCisgKiBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4gIFRoaXMg d2lsbCBlbnN1cmUgdGhhdCB0aGUgcGFnZ19ob29rX2xpc3QNCisgKiBkb2Vz IG5vdCBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3Qg ZW50cmllcy4NCisgKg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3QgcGFnZ19ob29r ICoNCitnZXRfcGFnZ19ob29rKGNoYXIgKmtleSkNCit7DQorCXN0cnVjdCBw YWdnX2hvb2sgKnBhZ2dfaG9vazsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRy eShwYWdnX2hvb2ssICZwYWdnX2hvb2tfbGlzdCwgZW50cnkpIHsNCisJCWlm ICghc3RyY21wKHBhZ2dfaG9vay0+bmFtZSwga2V5KSkgew0KKwkJCXJldHVy biBwYWdnX2hvb2s7DQorCQl9DQorCX0NCisJcmV0dXJuIE5VTEw7DQorfQ0K Kw0KKw0KKy8qKg0KKyAqIHBhZ2dfaG9va19yZWdpc3RlciAtIFJlZ2lzdGVy IGEgbmV3IHBhZ2cgaG9vayBhbmQgZW50ZXIgaXQgdGhlIGxpc3QNCisgKiBA cGFnZ19ob29rX25ldzogVGhlIG5ldyBwYWdnIGhvb2sgdG8gcmVnaXN0ZXIN CisgKg0KKyAqIFVzZWQgdG8gcmVnaXN0ZXIgYSBuZXcgcGFnZyBob29rIGFu ZCBlbnRlciBpdCBpbnRvIHRoZSBwYWdnX2hvb2tfbGlzdC4NCisgKiBUaGUg c2VydmljZSBuYW1lIGZvciBhIHBhZ2cgaG9vayBpcyByZXN0cmljdGVkIHRv IDMyIGNoYXJhY3RlcnMuDQorICoNCisgKiBJbiB0aGUgZnV0dXJlIGFuIGlu aXRpYWxpemF0aW9uIGZ1bmN0aW9uIG1heSBhbHNvIGJlIGRlZmluZWQgc28g dGhhdCBhbGwNCisgKiBleGlzdGluZyB0YXNrcyBjYW4gYmUgYXNzaWduZWQg dG8gYSBkZWZhdWx0IHBhZ2cgZW50cnkgZm9yIHRoZSBob29rLg0KKyAqIEhv d2V2ZXIsIHRoaXMgd291bGQgcmVxdWlyZSBpdGVyYXRpbmcgdGhyb3VnaCB0 aGUgdGFza2xpc3QuICBUbyBkbyB0aGF0DQorICogcmVxdWlyZXMgdGhhdCB0 aGUgdGFza2xpc3RfbG9jayBiZSByZWFkIGxvY2tlZC4gIFNpbmNlIHRoZSBp bml0aWFsaXphdGlvbg0KKyAqIGZ1bmN0aW9uIG1pZ2h0IGJlIGluIGEgbW9k dWxlLCBhbmQgdGhlcmVmb3JlIGl0IG1pZ2h0IHNsZWVwIChpbXBsZW1lbnRv cnMNCisgKiBkZWNpc2lvbiksIGhvbGRpbmcgdGhlIHRhc2tsaXN0X2xvY2sg c2VlbXMgbGlrZSBhIGJhZCBpZGVhLiBJdCBtYXkgYmUgYQ0KKyAqIHJlcXVp cmVtZW50IHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdpbGwg YmUgc3RyaWN0bHkgZm9yYmlkZGVuDQorICogZnJvbSBsb2NraW5nIC0gYnkg Z2VudGxlbWFucyBhZ3JlZW1lbnQuLi4gDQorICoNCisgKiBJZiBhIG1lbW9y eSBlcnJvciBpcyBlbmNvdW50ZXJlZCwgdGhlIHBhZ2cgaG9vayBpcyB1bnJl Z2lzdGVyZWQgYW5kIGFueQ0KKyAqIHRhc2tzIHRoYXQgaGF2ZSBiZWVuIGF0 dGFjaGVkIHRvIHRoZSBpbml0aWFsIHBhZ2cgY29udGFpbmVyIGFyZSBkZXRh Y2hlZA0KKyAqIGZyb20gdGhhdCBjb250YWluZXIuDQorICoNCisgKi8NCitp bnQNCitwYWdnX2hvb2tfcmVnaXN0ZXIoc3RydWN0IHBhZ2dfaG9vayAqcGFn Z19ob29rX25ldykNCit7DQorCXN0cnVjdCBwYWdnX2hvb2sgKnBhZ2dfaG9v ayA9IE5VTEw7DQorDQorCS8qIEFERCBORVcgUEFHRyBNT0RVTEUgVE8gQUND RVNTIExJU1QgKi8NCisJaWYgKCFwYWdnX2hvb2tfbmV3KQ0KKwkJcmV0dXJu IC1FSU5WQUw7CQkJLyogZXJyb3IgKi8NCisJaWYgKCFsaXN0X2VtcHR5KCZw YWdnX2hvb2tfbmV3LT5lbnRyeSkpDQorCQlyZXR1cm4gLUVJTlZBTDsJCQkv KiBlcnJvciAqLw0KKwlpZiAocGFnZ19ob29rX25ldy0+bmFtZSA9PSBOVUxM IHx8IHN0cmxlbihwYWdnX2hvb2tfbmV3LT5uYW1lKSA+IFBBR0dfTkFNRUxO KSANCisJCXJldHVybiAtRUlOVkFMOwkJCS8qIGVycm9yICovDQorDQorCS8q IFRyeSB0byBpbnNlcnQgbmV3IGhvb2sgZW50cnkgaW50byB0aGUgcGFnZyBo b29rIGxpc3QgKi8NCisJZG93bl93cml0ZSgmcGFnZ19ob29rX2xpc3Rfc2Vt KTsNCisNCisJcGFnZ19ob29rID0gZ2V0X3BhZ2dfaG9vayhwYWdnX2hvb2tf bmV3LT5uYW1lKTsNCisNCisJaWYgKHBhZ2dfaG9vaykgew0KKwkJdXBfd3Jp dGUoJnBhZ2dfaG9va19saXN0X3NlbSk7DQorCQlwcmludGsoS0VSTl9XQVJO SU5HICJBdHRlbXB0IHRvIHJlZ2lzdGVyIGR1cGxpY2F0ZSINCisJCQkJIiBQ QUdHIHN1cHBvcnQgKG5hbWU9JXMpXG4iLCBwYWdnX2hvb2tfbmV3LT5uYW1l KTsNCisJCXJldHVybiAtRUJVU1k7DQorCX0NCisNCisJLyogT2theSwgd2Ug Y2FuIGluc2VydCBpbnRvIHRoZSBwYWdnIGhvb2sgbGlzdCAqLw0KKwlsaXN0 X2FkZF90YWlsKCZwYWdnX2hvb2tfbmV3LT5lbnRyeSwgJnBhZ2dfaG9va19s aXN0KTsNCisJLyogc2V0IHRoZSByZWYgY291bnQgdG8gemVybyAqLw0KKwlh dG9taWNfc2V0KCZwYWdnX2hvb2tfbmV3LT5yZWZjbnQsIDApOw0KKwkvKiBw cmludGsoIkRFQlVHIC0gcGFnZyBob29rIHJlZ2lzdGVyIC0gcmVmY250IG5v dzogJWRcbiIsIA0KKwkJICAgICBhdG9taWNfcmVhZCgmcGFnZ19ob29rX25l dy0+cmVmY250KSk7ICovDQorCXVwX3dyaXRlKCZwYWdnX2hvb2tfbGlzdF9z ZW0pOw0KKw0KKwlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBQQUdH IHN1cHBvcnQgZm9yIChuYW1lPSVzKVxuIiwNCisJCQlwYWdnX2hvb2tfbmV3 LT5uYW1lKTsNCisNCisJcmV0dXJuIDA7CQkJCQkvKiBzdWNjZXNzICovDQor DQorfQ0KKw0KKw0KKy8qKg0KKyAqIHBhZ2dfaG9va191bnJlZ2lzdGVyIC0g VW5yZWdpc3RlciBwYWdnIGhvb2sgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBs aXN0DQorICogQHBhZ2dfaG9va19vbGQ6IFRoZSBob29rIHRvIHVucmVnaXN0 ZXIgYW5kIHJlbW92ZQ0KKyAqDQorICogVXNlZCB0byB1bnJlZ2lzdGVyIHBh Z2cgaG9va3MgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIHBhZ2dfaG9va19s aXN0Lg0KKyAqIE9uY2UgdGhlIHBhZ2cgaG9vayBlbnRyeSBpbiB0aGUgcGFn Z19ob29rX2xpc3QgaXMgZm91bmQsIHdlIGNoZWNrIGlmIA0KKyAqIHRoZSBw YWdnIGhvb2sgaXMgc3RpbGwgaW4gdXNlLiAgDQorICogDQorICovDQoraW50 DQorcGFnZ19ob29rX3VucmVnaXN0ZXIoc3RydWN0IHBhZ2dfaG9vayAqcGFn Z19ob29rX29sZCkNCit7DQorCXN0cnVjdCBwYWdnX2hvb2sgKnBhZ2dfaG9v azsNCisNCisJLyogQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBhcmd1bWVu dHMgKi8NCisJaWYgKCFwYWdnX2hvb2tfb2xkKQ0KKwkJcmV0dXJuIC1FSU5W QUw7CQkJLyogZXJyb3IgKi8NCisJaWYgKGxpc3RfZW1wdHkoJnBhZ2dfaG9v a19vbGQtPmVudHJ5KSkNCisJCXJldHVybiAtRUlOVkFMOwkJCS8qIGVycm9y ICovDQorCWlmIChwYWdnX2hvb2tfb2xkLT5uYW1lID09IE5VTEwpDQorCQly ZXR1cm4gLUVJTlZBTDsJCQkvKiBlcnJvciAqLw0KKw0KKwlkb3duX3dyaXRl KCZwYWdnX2hvb2tfbGlzdF9zZW0pOw0KKw0KKwlwYWdnX2hvb2sgPSBnZXRf cGFnZ19ob29rKHBhZ2dfaG9va19vbGQtPm5hbWUpOw0KKw0KKwkvKiBwcmlu dGsoIkRFQlVHIC0gcGFnZyBob29rIHVucmVnaXN0ZXIgLSByZWZjbnQgbm93 OiAlZFxuIiwgDQorCSAqCSAgICAgYXRvbWljX3JlYWQoJnBhZ2dfaG9vay0+ cmVmY250KSk7DQorCSAqLw0KKw0KKwlpZiAocGFnZ19ob29rICYmIHBhZ2df aG9vayA9PSBwYWdnX2hvb2tfb2xkKSB7DQorCQkvKiBJcyB0aGUgcGFnZyBo b29rIGJ1c3k/ICBDaGVjayBpZiB0aGUgcmVmY250IGlzIHplcm8gKi8NCisJ CWlmIChhdG9taWNfcmVhZCgmcGFnZ19ob29rLT5yZWZjbnQpICE9IDApIHsN CisJCQl1cF93cml0ZSgmcGFnZ19ob29rX2xpc3Rfc2VtKTsNCisJCQlwcmlu dGsoS0VSTl9JTkZPICJGYWlsZWQgYXR0ZW1wdCB0byB1bnJlZ2lzdGVyIGEg UEFHRyBob29rIGZyb206ICVzXG4iLCBwYWdnX2hvb2tfb2xkLT5uYW1lKTsN CisJCQlyZXR1cm4gLUVCVVNZOw0KKwkJfQ0KKwkJbGlzdF9kZWxfaW5pdCgm cGFnZ19ob29rLT5lbnRyeSk7DQorCQl1cF93cml0ZSgmcGFnZ19ob29rX2xp c3Rfc2VtKTsNCisNCisJCXByaW50ayhLRVJOX0lORk8gIlVucmVnaXN0ZXJp bmcgUEFHRyBzdXBwb3J0IGZvciINCisJCQkJIiAobmFtZT0lcylcbiIsIHBh Z2dfaG9va19vbGQtPm5hbWUpOw0KKw0KKwkJcmV0dXJuIDA7CQkJLyogc3Vj Y2VzcyAqLw0KKwl9DQorDQorCXVwX3dyaXRlKCZwYWdnX2hvb2tfbGlzdF9z ZW0pOw0KKw0KKwlwcmludGsoS0VSTl9XQVJOSU5HICJBdHRlbXB0IHRvIHVu cmVnaXN0ZXIgUEFHRyBzdXBwb3J0IChuYW1lPSVzKSINCisJCQkiIGZhaWxl ZCAtIG5vdCBmb3VuZFxuIiwgcGFnZ19ob29rX29sZC0+bmFtZSk7DQorCQ0K KwlyZXR1cm4gLUVJTlZBTDsJCQkJLyogZXJyb3IgKi8NCit9DQorDQorDQor LyoqDQorICogX19wYWdnX2F0dGFjaCAtIEF0dGFjaCBhIG5ldyB0YXNrIHRv IHRoZSBzYW1lIGNvbnRhaW5lcnMgb2YgaXRzIHBhcmVudA0KKyAqIEB0b190 YXNrOiBUaGUgY2hpbGQgdGFzayB0aGF0IHdpbGwgaW5oZXJpdCB0aGUgcGFy ZW50J3MgY29udGFpbmVycw0KKyAqIEBmcm9tX3Rhc2s6IFRoZSBwYXJlbnQg dGFzayANCisgKg0KKyAqIFVzZWQgdG8gYXR0YWNoIGEgbmV3IHRhc2sgdG8g dGhlIHNhbWUgcGFnZyBjb250YWluZXJzIHRvIHdoaWNoIGl0J3MgcGFyZW50 DQorICogaXMgYXR0YWNoZWQuDQorICoNCisgKiBUaGUgImZyb20iIGFyZ3Vt ZW50IGlzIHRoZSBwYXJlbnQgdGFzay4gIFRoZSAidG8iIGFyZ3VtZW50IGlz IHRoZSBjaGlsZA0KKyAqIHRhc2suIA0KKyAqDQorICovDQoraW50IF9fcGFn Z19hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0b190YXNrLCBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKmZyb21fdGFzaykNCit7DQorCWludCAgCQkgICByZXRj b2RlID0gMDsNCisJc3RydWN0IHBhZ2cgKmZyb21fcGFnZzsNCisNCisJLyog bG9jayB0aGUgcGFyZW50cyBwYWdnX2xpc3Qgd2UgYXJlIGNvcHlpbmcgZnJv bSAqLw0KKwlkb3duX3JlYWQoJmZyb21fdGFzay0+cGFnZ19zZW0pOyAvKiBy ZWFkIGxvY2sgdGhlIHBhZ2cgbGlzdCAqLw0KKw0KKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGZyb21fcGFnZywgJmZyb21fdGFzay0+cGFnZ19saXN0LCBlbnRy eSkgew0KKwkJc3RydWN0IHBhZ2cgKnRvX3BhZ2cgPSBOVUxMOw0KKw0KKwkJ dG9fcGFnZyA9IHBhZ2dfYWxsb2ModG9fdGFzaywgZnJvbV9wYWdnLT5ob29r KTsNCisJCWlmICghdG9fcGFnZykgew0KKwkJCXJldGNvZGUgPSAtRU5PTUVN Ow0KKwkJCWdvdG8gZXJyb3JfcmV0dXJuOw0KKwkJfQ0KKwkJcmV0Y29kZSA9 IHRvX3BhZ2ctPmhvb2stPmF0dGFjaCh0b190YXNrLCB0b19wYWdnLCBmcm9t X3BhZ2ctPmRhdGEpOw0KKwkJaWYgKHJldGNvZGUgIT0gMCkgew0KKwkJCS8q IGF0dGFjaCBzaG91bGQgaXNzdWUgZXJyb3IgbWVzc2FnZSAqLw0KKwkJCWdv dG8gZXJyb3JfcmV0dXJuOw0KKwkJfQ0KKwl9DQorDQorCXVwX3JlYWQoJmZy b21fdGFzay0+cGFnZ19zZW0pOyAvKiB1bmxvY2sgdGhlIHBhZ2cgbGlzdCAq Lw0KKw0KKwlyZXR1cm4gMDsJCQkJCS8qIHN1Y2Nlc3MgKi8NCisNCisgIGVy cm9yX3JldHVybjoNCisJLyogDQorCSAqIENsZWFuIHVwIGFsbCB0aGUgcGFn ZyBhdHRhY2htZW50cyBtYWRlIG9uIGJlaGFsZiBvZiB0aGUgbmV3DQorCSAq IHRhc2suICBTZXQgbmV3IHRhc2sgcGFnZyBwdHIgdG8gTlVMTCBmb3IgcmV0 dXJuLg0KKwkgKi8NCisJdXBfcmVhZCgmZnJvbV90YXNrLT5wYWdnX3NlbSk7 IC8qIHVubG9jayB0aGUgcGFnZyBsaXN0ICovDQorCV9fcGFnZ19kZXRhY2go dG9fdGFzayk7DQorCXJldHVybiByZXRjb2RlOwkJCQkvKiBmYWlsdXJlICov DQorfQ0KKw0KKy8qKg0KKyAqIF9fcGFnZ19kZXRhY2ggLSBEZXRhY2ggYSB0 YXNrIGZyb20gYWxsIHBhZ2cgY29udGFpbmVycyBpdCBpcyBhdHRhY2hlZCB0 bw0KKyAqIEB0YXNrOiBUYXNrIHRvIGRldGFjaCBmcm9tIHBhZ2cgY29udGFp bmVycw0KKyAqDQorICogVXNlZCB0byBkZXRhY2ggYSB0YXNrIGZyb20gYWxs IHBhZ2cgY29udGFpbmVycyB0byB3aGljaCBpdCBpcyBhdHRhY2hlZC4NCisg KiANCisgKi8NCitpbnQNCitfX3BhZ2dfZGV0YWNoKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzaykNCit7DQorCXN0cnVjdCBwYWdnICpwYWdnOw0KKwlzdHJ1 Y3QgcGFnZyAqcGFnZ3RtcDsNCisJaW50IHJldGNvZGUgPSAwOw0KKwlpbnQg cmV0dG1wID0gMDsNCisNCisJLyogUmVtb3ZlIHJlZi4gdG8gcGFnZ3MgZnJv bSB0YXNrIGltbWVkaWF0ZWx5ICovDQorCWRvd25fd3JpdGUoJnRhc2stPnBh Z2dfc2VtKTsgLyogd3JpdGUgbG9jayBwYWdnIGxpc3QgKi8NCisNCisJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2csIHBhZ2d0bXAsICZ0YXNrLT5w YWdnX2xpc3QsIGVudHJ5KSB7DQorCQlyZXR0bXAgPSBwYWdnLT5ob29rLT5k ZXRhY2godGFzaywgcGFnZyk7DQorCQlpZiAocmV0dG1wKSB7DQorCQkJLyog YW4gZXJyb3IgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkIGluIGZyZWVfcGFn ZyAqLw0KKwkJCXJldGNvZGUgPSByZXR0bXA7DQorCQl9DQorCQlwYWdnX2Zy ZWUocGFnZyk7DQorCX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIA0KKwl1cF93cml0ZSgmdGFzay0+cGFnZ19zZW0pOyAvKiB3cml0 ZSB1bmxvY2sgdGhlIHBhZ2cgbGlzdCAqLw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgDQorCXJldHVybiByZXRjb2RlOyAgIC8qIDAg PSBzdWNjZXNzLCBlbHNlIHJldHVybiBsYXN0IGNvZGUgZm9yIGZhaWx1cmUg Ki8NCit9DQorDQorDQorLyoqDQorICogX19wYWdnX2V4ZWMgLSBFeGVjdXRl IGNhbGxiYWNrIHdoZW4gYSBwcm9jZXNzIGluIGEgY29udGFpbmVyIGV4ZWNz DQorICogQHRhc2s6IFdlIGdvIHRocm91Z2ggdGhlIHBhZ2cgbGlzdCBpbiB0 aGUgZ2l2ZW4gdGFzaw0KKyAqDQorICogVXNlZCB0byB3aGVuIGEgcHJvY2Vz cyB0aGF0IGlzIGluIGEgcGFnZyBjb250YWluZXIgZG9lcyBhbiBleGVjLg0K KyAqDQorICogVGhlICJmcm9tIiBhcmd1bWVudCBpcyB0aGUgdGFzay4gIFRo ZSAibmFtZSIgYXJndW1lbnQgaXMgdGhlIG5hbWUNCisgKiBvZiB0aGUgcHJv Y2VzcyBiZWluZyBleGVjJ2VkLg0KKyAqDQorICovDQoraW50IF9fcGFnZ19l eGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykgDQorew0KKwlzdHJ1Y3Qg cGFnZwkqcGFnZzsNCisNCisJLyogbG9jayB0aGUgcGFyZW50cyBwYWdnX2xp c3Qgd2UgYXJlIGNvcHlpbmcgZnJvbSAqLw0KKwlkb3duX3JlYWQoJnRhc2st PnBhZ2dfc2VtKTsgLyogbG9jayB0aGUgcGFnZyBsaXN0ICovDQorDQorCWxp c3RfZm9yX2VhY2hfZW50cnkocGFnZywgJnRhc2stPnBhZ2dfbGlzdCwgZW50 cnkpIHsNCisJCWlmIChwYWdnLT5ob29rLT5leGVjKSAvKiBjb25kaXRpb25h bCBiZWNhdXNlIGl0J3Mgb3B0aW9uYWwgKi8NCisJCQlwYWdnLT5ob29rLT5l eGVjKHRhc2ssIHBhZ2cpOw0KKwl9DQorDQorCXVwX3JlYWQoJnRhc2stPnBh Z2dfc2VtKTsgLyogdW5sb2NrIHRoZSBwYWdnIGxpc3QgKi8NCisJcmV0dXJu IDA7DQorfQ0KKw0KKw0KK0VYUE9SVF9TWU1CT0wocGFnZ19nZXQpOw0KK0VY UE9SVF9TWU1CT0wocGFnZ19hbGxvYyk7DQorRVhQT1JUX1NZTUJPTChwYWdn X2ZyZWUpOw0KK0VYUE9SVF9TWU1CT0wocGFnZ19ob29rX3JlZ2lzdGVyKTsN CitFWFBPUlRfU1lNQk9MKHBhZ2dfaG9va191bnJlZ2lzdGVyKTsNCg== ---2136806248-749197509-1085773696=:727952--