From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 1/6] vga_switcheroo: Add support for switching only the DDC Date: Tue, 6 Oct 2015 09:27:24 +0200 Message-ID: <20151006072724.GO3383@phenom.ffwll.local> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f170.google.com (mail-wi0-f170.google.com [209.85.212.170]) by gabe.freedesktop.org (Postfix) with ESMTPS id A37186EA56 for ; Tue, 6 Oct 2015 00:24:31 -0700 (PDT) Received: by wicgb1 with SMTP id gb1so151508496wic.1 for ; Tue, 06 Oct 2015 00:24:30 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lukas Wunner Cc: William Brown , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBdWcgMTQsIDIwMTUgYXQgMDY6NTA6MTVQTSArMDIwMCwgTHVrYXMgV3VubmVyIHdy b3RlOgo+IE9yaWdpbmFsbHkgYnkgU2V0aCBGb3JzaGVlIDxzZXRoLmZvcnNoZWVAY2Fub25pY2Fs LmNvbT4sIDIwMTItMTAtMDQ6Cj4gICAgIER1cmluZyBncmFwaGljcyBkcml2ZXIgaW5pdGlhbGl6 YXRpb24gaXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0byBtdXgKPiAgICAgb25seSB0aGUgRERDIHRv IHRoZSBpbmFjdGl2ZSBjbGllbnQgaW4gb3JkZXIgdG8gcmVhZCB0aGUgRURJRC4gQWRkCj4gICAg IGEgc3dpdGNoX2RkYyBjYWxsYmFjayB0byBhbGxvdyBjYXBhYmxlIGhhbmRsZXJzIHRvIHByb3Zp ZGUgdGhpcwo+ICAgICBmdW5jdGlvbmFsaXR5LCBhbmQgYWRkIHZnYV9zd2l0Y2hlcm9vX3N3aXRj aF9kZGMoKSB0byBhbGxvdyBEUk0KPiAgICAgdG8gbXV4IG9ubHkgdGhlIEREQy4KPiAKPiBNb2Rp ZmllZCBieSBEYXZlIEFpcmxpZSA8YWlybGllZEBnbWFpbC5jb20+LCAyMDEyLTEyLTIyOgo+ICAg ICBJIGNhbid0IGZpZ3VyZSBvdXQgd2h5IEkgZGlkbid0IGxpa2UgdGhpcywgYnV0IEkgcmV3cm90 ZSB0aGlzIFsuLi5dCj4gICAgIHRvIGxvY2svdW5sb2NrIHRoZSBkZGMgbGluZXMgWy4uLl0uIEkg dGhpbmsgSSdkIHByZWZlciBzb21ldGhpbmcKPiAgICAgbGlrZSB0aGF0IG90aGVyd2lzZSB0aGUg aW50ZXJmYWNlIGdvdCByZWFsbHkgdWdseS4KPiAKPiBNb2RpZmllZCBieSBMdWthcyBXdW5uZXIg PGx1a2FzQHd1bm5lci5kZT4sIDIwMTUtMDgtMTQ6Cj4gICAgIERvbid0IGxvY2sgdmdhc3JfbXV0 ZXggaW4gX2xvY2tfZGRjKCkgLyBfdW5sb2NrX2RkYygpLCBpdCBjYW4gY2F1c2UKPiAgICAgZGVh ZGxvY2tzIGJlY2F1c2UgKGEpIGR1cmluZyBzd2l0Y2ggKHdpdGggdmdhc3JfbXV0ZXggYWxyZWFk eSBoZWxkKSwKPiAgICAgR1BVIGlzIHdva2VuIGFuZCBwcm9iZXMgaXRzIG91dHB1dHMsIHRyaWVz IHRvIHJlLWFjcXVpcmUgdmdhc3JfbXV0ZXgKPiAgICAgdG8gbG9jayBEREMgbGluZXM7IChiKSBM aWtld2lzZSBkdXJpbmcgc3dpdGNoLCBHUFUgaXMgc3VzcGVuZGVkIGFuZAo+ICAgICBjYWxscyBj YW5jZWxfZGVsYXllZF93b3JrX3N5bmMoKSB0byBzdG9wIG91dHB1dCBwb2xsaW5nLCBpZiBwb2xs Cj4gICAgIHRhc2sgaXMgcnVubmluZyBhdCB0aGlzIG1vbWVudCB3ZSBtYXkgd2FpdCBmb3JldmVy IGZvciBpdCB0byBmaW5pc2guCj4gCj4gICAgIEluc3RlYWQsIGxvY2sgZGRjX2xvY2sgd2hlbiB1 bnJlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyIGJlY2F1c2UgdGhlCj4gICAgIG9ubHkgcmVhc29uIHdo eSB3ZSdkIHdhbnQgdG8gbG9jayB2Z2Fzcl9tdXRleCBpbiBfbG9ja19kZGMoKSAvCj4gICAgIF91 bmxvY2tfZGRjKCkgaXMgdG8gYmxvY2sgdGhlIGhhbmRsZXIgZnJvbSBkaXNhcHBlYXJpbmcgd2hp bGUgRERDCj4gICAgIGxpbmVzIGFyZSBzd2l0Y2hlZC4KClNob3VsZG4ndCB3ZSBhbHNvIHRha2Ug dGhlIG5ldyBsb29rIGluIHJlZ2lzdGVyX2hhbmRsZXIsIGZvciBjb25zaXN0ZW5jeT8KSSBrbm93 IHRoYXQgaWYgeW91IGxvb2sgdGhlIG11eCBwcm92aWRlciB0b28gbGF0ZSBpdCdzIGZhaXJseSBo b3BlbGVzcyAuLi4KCkFsc28gd2hpbGUgcmVhZGluZyB0aGUgcGF0Y2ggSSByZWFsaXplZCB0aGF0 IHRoZSBuZXcgbG9jayByZWFsbHkgcHJvdGVjdHMKaHcgc3RhdGUgKGluc3RlYWQgb2Ygb3VyIHNv ZnR3YXJlLXNpZGUgdHJhY2tpbmcgYW5kIGRyaXZlciByZXN1bWUvc3VzcGVuZApjb2RlKS4gQW5k IGF0IGxlYXN0IG15c2VsZiBJIGhhdmUgbm8gaWRlYSB3aGF0IHZnYXNyIG1lYW5zLCBzbyB3aGF0 IGFib3V0CnJlbmFtaW5nIGl0IHRvIGh3X211dGV4PyBXZSBoYXZlIHRoaXMgcGF0dGVybiBvZiBs b3ctbGV2ZWwgbG9ja3MgdG8gYXZvaWQKY29uY3VycmVudCBodyBhY2Nlc3MgaW4gYSBsb3Qgb2Yg cGxhY2VzIGxpa2UgaTJjLCBkcF9hdXgsIGFuZCBpdCdzIHZlcnkKb2Z0ZW4gY2FsbGVkIGh3X2xv Y2sgb3Igc2ltaWxhci4KCk90aGVyd2lzZSBwYXRjaCBsb29rcyBnb29kLgoKV3J0IHRoZSBvdmVy YWxsIHBhdGNoIHNlcmllcywgY2FuIHlvdSBwbHMgaGFnZ2xlIGRyaXZlci1tYWludGFpbmVycyAo Z211eCwKcmFkZW9uLCBub3V2ZWF1KSBmb3IgYWNrcy9yZXZpZXdzPyBzY3JpcHRzL2dldF9tYWlu dGFpbmVycy5wbCBzaG91bGQgaGVscC4KQWxzbywgdGhlIHJldmlzZWQgZG9jYm9vayBwYXRjaCBz ZWVtcyB0byBiZSBtaXNzaW5nIGZyb20gdGhpcyBpdGVyYXRpb24sCnBsZWFzZSBmb2xsb3cgdXAg d2l0aCB0aGF0IG9uZS4KClRoYW5rcywgRGFuaWVsCgo+ICAgICBBbHNvIGxvY2sgZGRjX2xvY2sg aW4gc3RhZ2UyIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdoZXJlIHJlYWRpbmcKPiAgICAgdGhl IEVESUQgYW5kIHN3aXRjaGluZyBoYXBwZW5zIHNpbXVsdGFuZW91c2x5LiBMaWtld2lzZSBvbiBN SUdEIC8KPiAgICAgTURJUyBjb21tYW5kcyBhbmQgb24gcnVudGltZSBzdXNwZW5kLgo+IAo+ICAg ICBSZXRhaW4gc2VtYW50aWNzIG9mIC0+c3dpdGNodG8gaGFuZGxlciBjYWxsYmFjayB0byBzd2l0 Y2ggYWxsIHBpbnMsCj4gICAgIGluY2x1ZGluZyBEREMuIENoYW5nZSBzZW1hbnRpY3Mgb2YgLT5z d2l0Y2hfZGRjIGhhbmRsZXIgY2FsbGJhY2sgdG8KPiAgICAgcmV0dXJuIHByZXZpb3VzIEREQyBv d25lci4gT3JpZ2luYWwgdmVyc2lvbiB0cmllZCB0byBkZXRlcm1pbmUKPiAgICAgcHJldmlvdXMg RERDIG93bmVyIHdpdGggZmluZF9hY3RpdmVfY2xpZW50KCkgYnV0IHRoaXMgZmFpbHMgaWYgdGhl Cj4gICAgIGluYWN0aXZlIGNsaWVudCByZWdpc3RlcnMgYmVmb3JlIHRoZSBhY3RpdmUgY2xpZW50 Lgo+IAo+IHYyLjE6IE92ZXJoYXVsIGxvY2tpbmcsIHNxdWFzaCBjb21taXRzCj4gICAgIChyZXF1 ZXN0ZWQgYnkgRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4pCj4gCj4gdjIu MjogUmVhZGFiaWxpdHkgaW1wcm92ZW1lbnRzCj4gICAgIChyZXF1ZXN0ZWQgYnkgVGhpZXJyeSBS ZWRpbmcgPHRoaWVycnkucmVkaW5nQGdtYWlsLmNvbT4pCj4gCj4gdjIuMzogT3ZlcmhhdWwgbG9j a2luZyBvbmNlIG1vcmUKPiAKPiB2Mi40OiBSZXRhaW4gc2VtYW50aWNzIG9mIC0+c3dpdGNodG8g aGFuZGxlciBjYWxsYmFjayB0byBzd2l0Y2ggYWxsIHBpbnMKPiAgICAgKHJlcXVlc3RlZCBieSBE YW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPikKPiAKPiBCdWd6aWxsYTogaHR0 cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD04ODg2MQo+IEJ1Z3ppbGxh OiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD02MTExNQo+IFRl c3RlZC1ieTogUGllcnJlIE1vcmVhdSA8cGllcnJlLm1vcnJvd0BmcmVlLmZyPgo+ICAgICBbTUJQ ICA1LDMgMjAwOSAgbnZpZGlhIE1DUDc5ICsgRzk2ICAgICAgICBwcmUtcmV0aW5hICAxNSJdCj4g VGVzdGVkLWJ5OiBXaWxsaWFtIEJyb3duIDx3aWxsaWFtQGJsYWNraGF0cy5uZXQuYXU+Cj4gICAg IFtNQlAgIDgsMiAyMDExICBpbnRlbCBTTkIgKyBhbWQgdHVya3MgICAgIHByZS1yZXRpbmEgIDE1 Il0KPiBUZXN0ZWQtYnk6IEx1a2FzIFd1bm5lciA8bHVrYXNAd3VubmVyLmRlPgo+ICAgICBbTUJQ ICA5LDEgMjAxMiAgaW50ZWwgSVZCICsgbnZpZGlhIEdLMTA3ICBwcmUtcmV0aW5hICAxNSJdCj4g Cj4gQ2M6IFNldGggRm9yc2hlZSA8c2V0aC5mb3JzaGVlQGNhbm9uaWNhbC5jb20+Cj4gQ2M6IERh dmUgQWlybGllIDxhaXJsaWVkQGdtYWlsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBMdWthcyBXdW5u ZXIgPGx1a2FzQHd1bm5lci5kZT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hl cm9vLmMgfCA5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIGlu Y2x1ZGUvbGludXgvdmdhX3N3aXRjaGVyb28uaCAgIHwgIDkgKysrKwo+ICAyIGZpbGVzIGNoYW5n ZWQsIDEwNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dp dGNoZXJvby5jCj4gaW5kZXggYWEwNzdhYS4uOWI2OTQ2ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dp dGNoZXJvby5jCj4gQEAgLTczLDkgKzczLDE5IEBACj4gICAqIHRoZXJlIGNhbiB0aHVzIGJlIHVw IHRvIHRocmVlIGNsaWVudHM6IFR3byB2Z2EgY2xpZW50cyAoR1BVcykgYW5kIG9uZSBhdWRpbwo+ ICAgKiBjbGllbnQgKG9uIHRoZSBkaXNjcmV0ZSBHUFUpLiBUaGUgY29kZSBpcyBtb3N0bHkgcHJl cGFyZWQgdG8gc3VwcG9ydAo+ICAgKiBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiB0d28gR1BVcyBz aG91bGQgdGhleSBiZWNvbWUgYXZhaWxhYmxlLgo+ICsgKgo+ICAgKiBUaGUgR1BVIHRvIHdoaWNo IHRoZSBvdXRwdXRzIGFyZSBjdXJyZW50bHkgc3dpdGNoZWQgaXMgY2FsbGVkIHRoZQo+ICAgKiBh Y3RpdmUgY2xpZW50IGluIHZnYV9zd2l0Y2hlcm9vIHBhcmxhbmNlLiBUaGUgR1BVIG5vdCBpbiB1 c2UgaXMgdGhlCj4gLSAqIGluYWN0aXZlIGNsaWVudC4KPiArICogaW5hY3RpdmUgY2xpZW50LiBX aGVuIHRoZSBpbmFjdGl2ZSBjbGllbnQncyBEUk0gZHJpdmVyIGlzIGxvYWRlZCwKPiArICogaXQg d2lsbCBiZSB1bmFibGUgdG8gcHJvYmUgdGhlIHBhbmVsJ3MgRURJRCBhbmQgaGVuY2UgZGVwZW5k cyBvbgo+ICsgKiBWQklPUyB0byBwcm92aWRlIGl0cyBkaXNwbGF5IG1vZGVzLiBJZiB0aGUgVkJJ T1MgbW9kZXMgYXJlIGJvZ3VzIG9yCj4gKyAqIGlmIHRoZXJlIGlzIG5vIFZCSU9TIGF0IGFsbCAo d2hpY2ggaXMgY29tbW9uIG9uIHRoZSBNYWNCb29rIFBybyksCj4gKyAqIGEgY2xpZW50IG1heSBh bHRlcm5hdGl2ZWx5IHJlcXVlc3QgdGhhdCB0aGUgRERDIGxpbmVzIGFyZSB0ZW1wb3JhcmlseQo+ ICsgKiBzd2l0Y2hlZCB0byBpdCwgcHJvdmlkZWQgdGhhdCB0aGUgaGFuZGxlciBzdXBwb3J0cyB0 aGlzLiBTd2l0Y2hpbmcKPiArICogb25seSB0aGUgRERDIGxpbmVzIGFuZCBub3QgdGhlIGVudGly ZSBvdXRwdXQgYXZvaWRzIHVubmVjZXNzYXJ5Cj4gKyAqIGZsaWNrZXJpbmcuIE9uIG1hY2hpbmVz IHdoaWNoIGFyZSBhYmxlIHRvIG11eCBleHRlcm5hbCBjb25uZWN0b3JzLAo+ICsgKiBWQklPUyBj YW5ub3Qga25vdyBvZiBhdHRhY2hlZCBkaXNwbGF5cyBzbyBzd2l0Y2hpbmcgdGhlIEREQyBsaW5l cwo+ICsgKiBpcyB0aGUgb25seSBvcHRpb24gdG8gcmV0cmlldmUgdGhlIGRpc3BsYXlzJyBFRElE Lgo+ICAgKi8KPiAgCj4gIC8qKgo+IEBAIC0xMjUsNiArMTM1LDggQEAgc3RhdGljIERFRklORV9N VVRFWCh2Z2Fzcl9tdXRleCk7Cj4gICAqIAkoY291bnRpbmcgb25seSB2Z2EgY2xpZW50cywgbm90 IGF1ZGlvIGNsaWVudHMpCj4gICAqIEBjbGllbnRzOiBsaXN0IG9mIHJlZ2lzdGVyZWQgY2xpZW50 cwo+ICAgKiBAaGFuZGxlcjogcmVnaXN0ZXJlZCBoYW5kbGVyCj4gKyAqIEBkZGNfbG9jazogcHJv dGVjdHMgYWNjZXNzIHRvIEREQyBsaW5lcyB3aGlsZSB0aGV5IGFyZSB0ZW1wb3JhcmlseSBzd2l0 Y2hlZAo+ICsgKiBAb2xkX2RkY19vd25lcjogY2xpZW50IHRvIHdoaWNoIEREQyBsaW5lcyB3aWxs IGJlIHN3aXRjaGVkIGJhY2sgb24gdW5sb2NrCj4gICAqCj4gICAqIHZnYV9zd2l0Y2hlcm9vIHBy aXZhdGUgZGF0YS4gQ3VycmVudGx5IG9ubHkgb25lIHZnYV9zd2l0Y2hlcm9vIGluc3RhbmNlCj4g ICAqIHBlciBzeXN0ZW0gaXMgc3VwcG9ydGVkLgo+IEBAIC0xNDEsNiArMTUzLDggQEAgc3RydWN0 IHZnYXNyX3ByaXYgewo+ICAJc3RydWN0IGxpc3RfaGVhZCBjbGllbnRzOwo+ICAKPiAgCXN0cnVj dCB2Z2Ffc3dpdGNoZXJvb19oYW5kbGVyICpoYW5kbGVyOwo+ICsJc3RydWN0IG11dGV4IGRkY19s b2NrOwo+ICsJaW50IG9sZF9kZGNfb3duZXI7Cj4gIH07Cj4gIAo+ICAjZGVmaW5lIElEX0JJVF9B VURJTwkJMHgxMDAKPiBAQCAtMTU1LDYgKzE2OSw3IEBAIHN0YXRpYyB2b2lkIHZnYV9zd2l0Y2hl cm9vX2RlYnVnZnNfZmluaShzdHJ1Y3Qgdmdhc3JfcHJpdiAqcHJpdik7Cj4gIC8qIG9ubHkgb25l IHN3aXRjaGVyb28gcGVyIHN5c3RlbSAqLwo+ICBzdGF0aWMgc3RydWN0IHZnYXNyX3ByaXYgdmdh c3JfcHJpdiA9IHsKPiAgCS5jbGllbnRzID0gTElTVF9IRUFEX0lOSVQodmdhc3JfcHJpdi5jbGll bnRzKSwKPiArCS5kZGNfbG9jayA9IF9fTVVURVhfSU5JVElBTElaRVIodmdhc3JfcHJpdi5kZGNf bG9jayksCj4gIH07Cj4gIAo+ICBzdGF0aWMgYm9vbCB2Z2Ffc3dpdGNoZXJvb19yZWFkeSh2b2lk KQo+IEBAIC0yMjEsMTIgKzIzNiwxNCBAQCBFWFBPUlRfU1lNQk9MKHZnYV9zd2l0Y2hlcm9vX3Jl Z2lzdGVyX2hhbmRsZXIpOwo+ICB2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfaGFuZGxl cih2b2lkKQo+ICB7Cj4gIAltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7Cj4gKwltdXRleF9sb2Nr KCZ2Z2Fzcl9wcml2LmRkY19sb2NrKTsKPiAgCXZnYXNyX3ByaXYuaGFuZGxlciA9IE5VTEw7Cj4g IAlpZiAodmdhc3JfcHJpdi5hY3RpdmUpIHsKPiAgCQlwcl9pbmZvKCJkaXNhYmxlZFxuIik7Cj4g IAkJdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKCZ2Z2Fzcl9wcml2KTsKPiAgCQl2Z2Fzcl9w cml2LmFjdGl2ZSA9IGZhbHNlOwo+ICAJfQo+ICsJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9wcml2LmRk Y19sb2NrKTsKPiAgCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOwo+ICB9Cj4gIEVYUE9SVF9T WU1CT0wodmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9oYW5kbGVyKTsKPiBAQCAtNDEyLDYgKzQy OSw3NiBAQCB2b2lkIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQoc3RydWN0IHBjaV9kZXYg KnBkZXYsCj4gIEVYUE9SVF9TWU1CT0wodmdhX3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldCk7Cj4g IAo+ICAvKioKPiArICogdmdhX3N3aXRjaGVyb29fbG9ja19kZGMoKSAtIHRlbXBvcmFyaWx5IHN3 aXRjaCBEREMgbGluZXMgdG8gYSBnaXZlbiBjbGllbnQKPiArICogQHBkZXY6IGNsaWVudCBwY2kg ZGV2aWNlCj4gKyAqCj4gKyAqIFRlbXBvcmFyaWx5IHN3aXRjaCBEREMgbGluZXMgdG8gdGhlIGNs aWVudCBpZGVudGlmaWVkIGJ5IEBwZGV2Cj4gKyAqIChidXQgbGVhdmUgdGhlIG91dHB1dHMgb3Ro ZXJ3aXNlIHN3aXRjaGVkIHRvIHdoZXJlIHRoZXkgYXJlKS4KPiArICogVGhpcyBhbGxvd3MgdGhl IGluYWN0aXZlIGNsaWVudCB0byBwcm9iZSBFRElELiBUaGUgRERDIGxpbmVzIG11c3QKPiArICog YWZ0ZXJ3YXJkcyBiZSBzd2l0Y2hlZCBiYWNrIGJ5IGNhbGxpbmcgdmdhX3N3aXRjaGVyb29fdW5s b2NrX2RkYygpLAo+ICsgKiBldmVuIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4K PiArICoKPiArICogUmV0dXJuOiBQcmV2aW91cyBEREMgb3duZXIgb24gc3VjY2VzcyBvciBhIG5l Z2F0aXZlIGludCBvbiBlcnJvci4KPiArICogU3BlY2lmaWNhbGx5LCAtRU5PREVWIGlmIG5vIGhh bmRsZXIgaGFzIHJlZ2lzdGVyZWQgb3IgaWYgdGhlIGhhbmRsZXIKPiArICogZG9lcyBub3Qgc3Vw cG9ydCBzd2l0Y2hpbmcgdGhlIEREQyBsaW5lcy4gQWxzbywgYSBuZWdhdGl2ZSB2YWx1ZQo+ICsg KiByZXR1cm5lZCBieSB0aGUgaGFuZGxlciBpcyBwcm9wYWdhdGVkIGJhY2sgdG8gdGhlIGNhbGxl ci4KPiArICogVGhlIHJldHVybiB2YWx1ZSBoYXMgbWVyZWx5IGFuIGluZm9ybWF0aW9uYWwgcHVy cG9zZSBmb3IgYW55IGNhbGxlcgo+ICsgKiB3aGljaCBtaWdodCBiZSBpbnRlcmVzdGVkIGluIGl0 LiBJdCBpcyBhY2NlcHRhYmxlIHRvIGlnbm9yZSB0aGUgcmV0dXJuCj4gKyAqIHZhbHVlIGFuZCBz aW1wbHkgcmVseSBvbiB0aGUgcmVzdWx0IG9mIHRoZSBzdWJzZXF1ZW50IEVESUQgcHJvYmUsCj4g KyAqIHdoaWNoIHdpbGwgYmUgTlVMTCBpZiBEREMgc3dpdGNoaW5nIGZhaWxlZC4KPiArICovCj4g K2ludCB2Z2Ffc3dpdGNoZXJvb19sb2NrX2RkYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiArewo+ ICsJZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygm dmdhc3JfcHJpdi5kZGNfbG9jayk7Cj4gKwlpZiAoIXZnYXNyX3ByaXYuaGFuZGxlciB8fCAhdmdh c3JfcHJpdi5oYW5kbGVyLT5zd2l0Y2hfZGRjKSB7Cj4gKwkJdmdhc3JfcHJpdi5vbGRfZGRjX293 bmVyID0gLUVOT0RFVjsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlpZCA9IHZn YXNyX3ByaXYuaGFuZGxlci0+Z2V0X2NsaWVudF9pZChwZGV2KTsKPiArCXZnYXNyX3ByaXYub2xk X2RkY19vd25lciA9IHZnYXNyX3ByaXYuaGFuZGxlci0+c3dpdGNoX2RkYyhpZCk7Cj4gKwlyZXR1 cm4gdmdhc3JfcHJpdi5vbGRfZGRjX293bmVyOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wodmdhX3N3 aXRjaGVyb29fbG9ja19kZGMpOwo+ICsKPiArLyoqCj4gKyAqIHZnYV9zd2l0Y2hlcm9vX3VubG9j a19kZGMoKSAtIHN3aXRjaCBEREMgbGluZXMgYmFjayB0byBwcmV2aW91cyBvd25lcgo+ICsgKiBA cGRldjogY2xpZW50IHBjaSBkZXZpY2UKPiArICoKPiArICogU3dpdGNoIEREQyBsaW5lcyBiYWNr IHRvIHRoZSBwcmV2aW91cyBvd25lciBhZnRlciBjYWxsaW5nCj4gKyAqIHZnYV9zd2l0Y2hlcm9v X2xvY2tfZGRjKCkuIFRoaXMgbXVzdCBiZSBjYWxsZWQgZXZlbiBpZgo+ICsgKiB2Z2Ffc3dpdGNo ZXJvb19sb2NrX2RkYygpIHJldHVybmVkIGFuIGVycm9yLgo+ICsgKgo+ICsgKiBSZXR1cm46IFBy ZXZpb3VzIEREQyBvd25lciBvbiBzdWNjZXNzIChpLmUuIHRoZSBjbGllbnQgaWRlbnRpZmllciBv ZiBAcGRldikKPiArICogb3IgYSBuZWdhdGl2ZSBpbnQgb24gZXJyb3IuCj4gKyAqIFNwZWNpZmlj YWxseSwgLUVOT0RFViBpZiBubyBoYW5kbGVyIGhhcyByZWdpc3RlcmVkIG9yIGlmIHRoZSBoYW5k bGVyCj4gKyAqIGRvZXMgbm90IHN1cHBvcnQgc3dpdGNoaW5nIHRoZSBEREMgbGluZXMuIEFsc28s IGEgbmVnYXRpdmUgdmFsdWUKPiArICogcmV0dXJuZWQgYnkgdGhlIGhhbmRsZXIgaXMgcHJvcGFn YXRlZCBiYWNrIHRvIHRoZSBjYWxsZXIuCj4gKyAqIEZpbmFsbHksIGludm9raW5nIHRoaXMgZnVu Y3Rpb24gd2l0aG91dCBjYWxsaW5nIHZnYV9zd2l0Y2hlcm9vX2xvY2tfZGRjKCkKPiArICogZmly c3QgaXMgbm90IGFsbG93ZWQgYW5kIHdpbGwgcmVzdWx0IGluIC1FSU5WQUwuCj4gKyAqLwo+ICtp bnQgdmdhX3N3aXRjaGVyb29fdW5sb2NrX2RkYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiArewo+ ICsJZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQ7Cj4gKwlpbnQgcmV0ID0gdmdhc3Jf cHJpdi5vbGRfZGRjX293bmVyOwo+ICsKPiArCWlmIChXQVJOX09OX09OQ0UoIW11dGV4X2lzX2xv Y2tlZCgmdmdhc3JfcHJpdi5kZGNfbG9jaykpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CWlmICh2Z2Fzcl9wcml2Lm9sZF9kZGNfb3duZXIgPj0gMCkgewo+ICsJCWlkID0gdmdhc3JfcHJp di5oYW5kbGVyLT5nZXRfY2xpZW50X2lkKHBkZXYpOwo+ICsJCWlmICh2Z2Fzcl9wcml2Lm9sZF9k ZGNfb3duZXIgIT0gaWQpCj4gKwkJCXJldCA9IHZnYXNyX3ByaXYuaGFuZGxlci0+c3dpdGNoX2Rk YygKPiArCQkJCQkJICAgICB2Z2Fzcl9wcml2Lm9sZF9kZGNfb3duZXIpOwo+ICsJfQo+ICsJbXV0 ZXhfdW5sb2NrKCZ2Z2Fzcl9wcml2LmRkY19sb2NrKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb191bmxvY2tfZGRjKTsKPiArCj4gKy8qKgo+ICAg KiBET0M6IE1hbnVhbCBzd2l0Y2hpbmcgYW5kIG1hbnVhbCBwb3dlciBjb250cm9sCj4gICAqCj4g ICAqIEluIHRoaXMgbW9kZSBvZiB1c2UsIHRoZSBmaWxlIC9zeXMva2VybmVsL2RlYnVnL3ZnYXN3 aXRjaGVyb28vc3dpdGNoCj4gQEAgLTU0OCw3ICs2MzUsOSBAQCBzdGF0aWMgaW50IHZnYV9zd2l0 Y2h0b19zdGFnZTIoc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqbmV3X2NsaWVudCkKPiAg CQljb25zb2xlX3VubG9jaygpOwo+ICAJfQo+ICAKPiArCW11dGV4X2xvY2soJnZnYXNyX3ByaXYu ZGRjX2xvY2spOwo+ICAJcmV0ID0gdmdhc3JfcHJpdi5oYW5kbGVyLT5zd2l0Y2h0byhuZXdfY2xp ZW50LT5pZCk7Cj4gKwltdXRleF91bmxvY2soJnZnYXNyX3ByaXYuZGRjX2xvY2spOwo+ICAJaWYg KHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiBAQCAtNjYzLDcgKzc1Miw5IEBAIHZnYV9zd2l0 Y2hlcm9vX2RlYnVnZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2Vy ICp1YnVmLAo+ICAJdmdhc3JfcHJpdi5kZWxheWVkX3N3aXRjaF9hY3RpdmUgPSBmYWxzZTsKPiAg Cj4gIAlpZiAoanVzdF9tdXgpIHsKPiArCQltdXRleF9sb2NrKCZ2Z2Fzcl9wcml2LmRkY19sb2Nr KTsKPiAgCQlyZXQgPSB2Z2Fzcl9wcml2LmhhbmRsZXItPnN3aXRjaHRvKGNsaWVudF9pZCk7Cj4g KwkJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9wcml2LmRkY19sb2NrKTsKPiAgCQlnb3RvIG91dDsKPiAg CX0KPiAgCj4gQEAgLTg3NSw4ICs5NjYsMTEgQEAgc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19y dW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICAJaWYgKHJldCkKPiAgCQlyZXR1 cm4gcmV0Owo+ICAJbXV0ZXhfbG9jaygmdmdhc3JfbXV0ZXgpOwo+IC0JaWYgKHZnYXNyX3ByaXYu aGFuZGxlci0+c3dpdGNodG8pCj4gKwlpZiAodmdhc3JfcHJpdi5oYW5kbGVyLT5zd2l0Y2h0bykg ewo+ICsJCW11dGV4X2xvY2soJnZnYXNyX3ByaXYuZGRjX2xvY2spOwo+ICAJCXZnYXNyX3ByaXYu aGFuZGxlci0+c3dpdGNodG8oVkdBX1NXSVRDSEVST09fSUdEKTsKPiArCQltdXRleF91bmxvY2so JnZnYXNyX3ByaXYuZGRjX2xvY2spOwo+ICsJfQo+ICAJdmdhX3N3aXRjaGVyb29fcG93ZXJfc3dp dGNoKHBkZXYsIFZHQV9TV0lUQ0hFUk9PX09GRik7Cj4gIAltdXRleF91bmxvY2soJnZnYXNyX211 dGV4KTsKPiAgCXJldHVybiAwOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZnYV9zd2l0 Y2hlcm9vLmggYi9pbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmgKPiBpbmRleCBiMmEzZGRh Li42ZWRhYWNjIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvdmdhX3N3aXRjaGVyb28uaAo+ ICsrKyBiL2luY2x1ZGUvbGludXgvdmdhX3N3aXRjaGVyb28uaAo+IEBAIC04Miw2ICs4Miw5IEBA IGVudW0gdmdhX3N3aXRjaGVyb29fY2xpZW50X2lkIHsKPiAgICogCU1hbmRhdG9yeS4gRm9yIG11 eGxlc3MgbWFjaGluZXMgdGhpcyBzaG91bGQgYmUgYSBuby1vcC4gUmV0dXJuaW5nIDAKPiAgICog CWRlbm90ZXMgc3VjY2VzcywgYW55dGhpbmcgZWxzZSBmYWlsdXJlIChpbiB3aGljaCBjYXNlIHRo ZSBzd2l0Y2ggaXMKPiAgICogCWFib3J0ZWQpCj4gKyAqIEBzd2l0Y2hfZGRjOiBzd2l0Y2ggRERD IGxpbmVzIHRvIGdpdmVuIGNsaWVudC4KPiArICogCU9wdGlvbmFsLiBTaG91bGQgcmV0dXJuIHRo ZSBwcmV2aW91cyBEREMgb3duZXIgb24gc3VjY2VzcyBvciBhCj4gKyAqIAluZWdhdGl2ZSBpbnQg b24gZmFpbHVyZQo+ICAgKiBAcG93ZXJfc3RhdGU6IGN1dCBvciByZWluc3RhdGUgcG93ZXIgb2Yg Z2l2ZW4gY2xpZW50Lgo+ICAgKiAJT3B0aW9uYWwuIFRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3Jl ZAo+ICAgKiBAZ2V0X2NsaWVudF9pZDogZGV0ZXJtaW5lIGlmIGdpdmVuIHBjaSBkZXZpY2UgaXMg aW50ZWdyYXRlZCBvciBkaXNjcmV0ZSBHUFUuCj4gQEAgLTkzLDYgKzk2LDcgQEAgZW51bSB2Z2Ff c3dpdGNoZXJvb19jbGllbnRfaWQgewo+ICBzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciB7 Cj4gIAlpbnQgKCppbml0KSh2b2lkKTsKPiAgCWludCAoKnN3aXRjaHRvKShlbnVtIHZnYV9zd2l0 Y2hlcm9vX2NsaWVudF9pZCBpZCk7Cj4gKwlpbnQgKCpzd2l0Y2hfZGRjKShlbnVtIHZnYV9zd2l0 Y2hlcm9vX2NsaWVudF9pZCBpZCk7Cj4gIAlpbnQgKCpwb3dlcl9zdGF0ZSkoZW51bSB2Z2Ffc3dp dGNoZXJvb19jbGllbnRfaWQgaWQsCj4gIAkJCSAgIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUg c3RhdGUpOwo+ICAJZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgKCpnZXRfY2xpZW50X2lk KShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gQEAgLTEzMiw2ICsxMzYsOSBAQCBpbnQgdmdhX3N3 aXRjaGVyb29fcmVnaXN0ZXJfYXVkaW9fY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAo+ICB2 b2lkIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQoc3RydWN0IHBjaV9kZXYgKmRldiwKPiAg CQkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pOwo+ICAKPiAraW50IHZnYV9zd2l0Y2hlcm9vX2xv Y2tfZGRjKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiAraW50IHZnYV9zd2l0Y2hlcm9vX3VubG9j a19kZGMoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ICsKPiAgaW50IHZnYV9zd2l0Y2hlcm9vX3Jl Z2lzdGVyX2hhbmRsZXIoc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2hhbmRsZXIgKmhhbmRsZXIpOwo+ ICB2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfaGFuZGxlcih2b2lkKTsKPiAgCj4gQEAg LTE1MCw2ICsxNTcsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmdhX3N3aXRjaGVyb29fdW5yZWdp c3Rlcl9jbGllbnQoc3RydWN0IHBjaV9kZXYgKmRldikge30KPiAgc3RhdGljIGlubGluZSBpbnQg dmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsCj4gIAkJ Y29uc3Qgc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9vcHMgKm9wcywgYm9vbCBkcml2ZXJf cG93ZXJfY29udHJvbCkgeyByZXR1cm4gMDsgfQo+ICBzdGF0aWMgaW5saW5lIHZvaWQgdmdhX3N3 aXRjaGVyb29fY2xpZW50X2ZiX3NldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgZmJfaW5m byAqaW5mbykge30KPiArc3RhdGljIGlubGluZSBpbnQgdmdhX3N3aXRjaGVyb29fbG9ja19kZGMo c3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KPiArc3RhdGljIGlubGlu ZSBpbnQgdmdhX3N3aXRjaGVyb29fdW5sb2NrX2RkYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyBy ZXR1cm4gLUVOT0RFVjsgfQo+ICBzdGF0aWMgaW5saW5lIGludCB2Z2Ffc3dpdGNoZXJvb19yZWdp c3Rlcl9oYW5kbGVyKHN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19oYW5kbGVyICpoYW5kbGVyKSB7IHJl dHVybiAwOyB9Cj4gIHN0YXRpYyBpbmxpbmUgaW50IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2F1 ZGlvX2NsaWVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPiAgCWNvbnN0IHN0cnVjdCB2Z2Ffc3dp dGNoZXJvb19jbGllbnRfb3BzICpvcHMsCj4gLS0gCj4gMS44LjUuMiAoQXBwbGUgR2l0LTQ4KQo+ IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJp LWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgot LSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0 cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK