From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 1/3] drm/i915: set proper N/M in modeset Date: Fri, 5 Aug 2016 08:56:33 +0300 Message-ID: <20160805055633.GM4329@intel.com> References: <1470297484-82178-1-git-send-email-libin.yang@linux.intel.com> <20160804085257.GA4329@intel.com> <96A12704CE18D347B625EE2D4A099D19119F943F@SHSMSX103.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 9A69D6EADC for ; Fri, 5 Aug 2016 05:56:37 +0000 (UTC) Content-Disposition: inline In-Reply-To: <96A12704CE18D347B625EE2D4A099D19119F943F@SHSMSX103.ccr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Yang, Libin" Cc: "tiwai@suse.de" , "Vetter, Daniel" , "libin.yang@linux.intel.com" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBBdWcgMDUsIDIwMTYgYXQgMDU6Mzk6MTlBTSArMDAwMCwgWWFuZywgTGliaW4gd3Jv dGU6Cj4gSGkgVmlsbGUsCj4gCj4gU29ycnkgZm9yIGRlbGF5IHJlcGx5LiBQbGVhc2Ugc2VlIG15 IGNvbW1lbnRzIGJlbG93Lgo+IAo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZy b206IFZpbGxlIFN5cmrDpGzDpCBbbWFpbHRvOnZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t XQo+ID4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCA0LCAyMDE2IDQ6NTMgUE0KPiA+IFRvOiBsaWJp bi55YW5nQGxpbnV4LmludGVsLmNvbQo+ID4gQ2M6IGludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmc7IGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbTsgVmV0dGVyLCBEYW5pZWwKPiA+IDxk YW5pZWwudmV0dGVyQGludGVsLmNvbT47IHRpd2FpQHN1c2UuZGU7IFlhbmcsIExpYmluIDxsaWJp bi55YW5nQGludGVsLmNvbT4KPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMS8zXSBkcm0vaTkx NTogc2V0IHByb3BlciBOL00gaW4gbW9kZXNldAo+ID4gCj4gPiBPbiBUaHUsIEF1ZyAwNCwgMjAx NiBhdCAwMzo1ODowMlBNICswODAwLCBsaWJpbi55YW5nQGxpbnV4LmludGVsLmNvbSB3cm90ZToK PiA+ID4gRnJvbTogTGliaW4gWWFuZyA8bGliaW4ueWFuZ0BsaW51eC5pbnRlbC5jb20+Cj4gPiA+ Cj4gPiA+IFdoZW4gbW9kZXNldCBvY2N1cnMgYW5kIHRoZSBMU19DTEsgaXMgc2V0IHRvIHNvbWUg c3BlY2lhbCB2YWx1ZXMgaW4gRFAKPiA+ID4gbW9kZSwgdGhlIE4vTSBuZWVkIHRvIGJlIHNldCBt YW51YWxseSBpZiBhdWRpbyBpcyBwbGF5aW5nLiBPdGhlcndpc2UKPiA+ID4gdGhlIGZpcnN0IHNl dmVyYWwgc2Vjb25kcyBtYXkgYmUgc2lsZW50IGluIGF1ZGlvIHBsYXliYWNrLgo+ID4gPgo+ID4g PiBUaGUgcmVsYXRpb25zaGlwIG9mIE1hdWQgYW5kIE5hdWQgaXMgZXhwcmVzc2VkIGluIHRoZSBm b2xsb3dpbmcKPiA+ID4gZXF1YXRpb246Cj4gPiA+IE1hdWQvTmF1ZCA9IDUxMiAqIGZzIC8gZl9M U19DbGsKPiA+ID4KPiA+ID4gUGxlYXNlIHJlZmVyIFZFU0EgRGlzcGxheVBvcnQgU3RhbmRhcmQg c3BlYyBmb3IgZGV0YWlscy4KPiA+IAo+ID4gUGxlYXMgaW5jbHVkZSBhIHNtYWxsIGNoYW5nZWxv ZyBoZXJlIHNvIHRoYXQgSSBrbm93IHdoYXQgaGFzIGNoYW5nZWQgd2l0aAo+ID4gZWFjaCByZXZp c2lvbiBvZiB0aGUgcGF0Y2guIEVnOgo+ID4gCj4gPiB2MjogYmxhaAo+ID4gdjM6IHdoYXRldmVy Cj4gPiAKPiA+ID4KPiA+ID4gU2lnbmVkLW9mZi1ieTogTGliaW4gWWFuZyA8bGliaW4ueWFuZ0Bs aW51eC5pbnRlbC5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaCAgICB8ICAgNiArKwo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVk aW8uYyB8IDEzMwo+ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4g PiA+ICAyIGZpbGVzIGNoYW5nZWQsIDEyMyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkK PiA+ID4KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK PiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGluZGV4IDhiZmRlNzUuLjJm OWQwMGUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK PiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gPiBAQCAtNzM1 MSw2ICs3MzUxLDEyIEBAIGVudW0gewo+ID4gPiAgI2RlZmluZSBfSFNXX0FVRF9DT05GSUdfQgkJ MHg2NTEwMAo+ID4gPiAgI2RlZmluZSBIU1dfQVVEX0NGRyhwaXBlKQkJX01NSU9fUElQRShwaXBl LAo+ID4gX0hTV19BVURfQ09ORklHX0EsIF9IU1dfQVVEX0NPTkZJR19CKQo+ID4gPgo+ID4gPiAr I2RlZmluZSBfSFNXX0FVRF9NX0NUU19FTkFCTEVfQQkJMHg2NTAyOAo+ID4gPiArI2RlZmluZSBf SFNXX0FVRF9NX0NUU19FTkFCTEVfQgkJMHg2NTEyOAo+ID4gPiArI2RlZmluZSBIU1dfQVVEX01f Q1RTX0VOQUJMRShwaXBlKQkJX01NSU9fUElQRShwaXBlLAo+ID4gX0hTV19BVURfTV9DVFNfRU5B QkxFX0EsIF9IU1dfQVVEX01fQ1RTX0VOQUJMRV9CKQo+ID4gPiArI2RlZmluZSAgIEFVRF9NX0NU U19NX1ZBTFVFX0lOREVYCSgxIDw8IDIxKQo+ID4gPiArI2RlZmluZSAgIEFVRF9NX0NUU19NX1BS T0dfRU5BQkxFCSgxIDw8IDIwKQo+ID4gCj4gPiBQbGVhc2UgdHJ5IHRvIGtlZXAgdGhlIHJlZ2lz dGVyIGRlZmluZXMgaW4gb3JkZXIgYnkgdGhlIHJlZ2lzdGVyIG9mZnNldC4KPiA+IEllLiB0aGVz ZSByZWdpc3RlcnMgc2hvdWxkIGJlIHBsYWNlZCBqdXN0IGFmdGVyIEhTV19BVURfTUlTQ19DVFJM Lgo+ID4gCj4gPiA+ICsKPiA+ID4gICNkZWZpbmUgX0hTV19BVURfTUlTQ19DVFJMX0EJCTB4NjUw MTAKPiA+ID4gICNkZWZpbmUgX0hTV19BVURfTUlTQ19DVFJMX0IJCTB4NjUxMTAKPiA+ID4gICNk ZWZpbmUgSFNXX0FVRF9NSVNDX0NUUkwocGlwZSkJCV9NTUlPX1BJUEUocGlwZSwKPiA+IF9IU1df QVVEX01JU0NfQ1RSTF9BLCBfSFNXX0FVRF9NSVNDX0NUUkxfQikKPiA+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F1ZGlvLmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9hdWRpby5jCj4gPiA+IGluZGV4IDY3MDBhN2IuLjA0ZTczNTggMTAwNjQ0 Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F1ZGlvLmMKPiA+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVkaW8uYwo+ID4gPiBAQCAtOTgsNiArOTgs MzUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gPiA+ICAJeyAxOTIwMDAsIFRNRFNfMjk3TSwg MjA0ODAsIDI0NzUwMCB9LCAgfTsKPiA+ID4KPiA+ID4gKyNkZWZpbmUgTENfNTQwTSA1NDAwMDAK PiA+ID4gKyNkZWZpbmUgTENfMjcwTSAyNzAwMDAKPiA+ID4gKyNkZWZpbmUgTENfMTYyTSAxNjIw MDAKPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ID4gPiArCWludCBzYW1wbGVfcmF0ZTsK PiA+ID4gKwlpbnQgY2xvY2s7Cj4gPiA+ICsJdTE2IG47Cj4gPiA+ICsJdTE2IG07Cj4gPiA+ICt9 IGF1ZF9ubVtdID0gewo+ID4gPiArCXsxOTIwMDAsIExDXzU0ME0sIDU2MjUsIDEwMjR9LAo+ID4g ICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgXgo+ID4gCj4gPiBTdHlsZSBuaXQ6 IHBsZWFzZSBhZGQgc3BhY2VzIGhlcmUKPiA+IAo+ID4gPiArCXs5NjAwMCwgTENfNTQwTSwgNTYy NSwgNTEyfSwKPiA+ID4gKwl7ODgyMDAsIExDXzU0ME0sIDkzNzUsIDc4NH0sCj4gPiA+ICsJezQ4 MDAwLCBMQ181NDBNLCA1NjI1LCAyNTZ9LAo+ID4gPiArCXs0NDEwMCwgTENfNTQwTSwgOTM3NSwg MzkyfSwKPiA+ID4gKwl7MzIwMDAsIExDXzU0ME0sIDE2ODc1LCA1MTJ9LAo+ID4gPiArCXsxOTIw MDAsIExDXzI3ME0sIDU2MjUsIDIwNDh9LAo+ID4gPiArCXs5NjAwMCwgTENfMjcwTSwgNTYyNSwg MTAyNH0sCj4gPiA+ICsJezg4MjAwLCBMQ18yNzBNLCA5Mzc1LCAxNTY4fSwKPiA+ID4gKwl7NDgw MDAsIExDXzI3ME0sIDU2MjUsIDUxMn0sCj4gPiA+ICsJezQ0MTAwLCBMQ18yNzBNLCA5Mzc1LCA3 ODR9LAo+ID4gPiArCXszMjAwMCwgTENfMjcwTSwgMTY4NzUsIDEwMjR9LAo+ID4gPiArCXsxOTIw MDAsIExDXzE2Mk0sIDMzNzUsIDIwNDh9LAo+ID4gPiArCXs5NjAwMCwgTENfMTYyTSwgMzM3NSwg MTAyNH0sCj4gPiA+ICsJezg4MjAwLCBMQ18xNjJNLCA1NjI1LCAxNTY4fSwKPiA+ID4gKwl7NDgw MDAsIExDXzE2Mk0sIDMzNzUsIDUxMn0sCj4gPiA+ICsJezQ0MTAwLCBMQ18xNjJNLCA1NjI1LCA3 ODR9LAo+ID4gPiArCXszMjAwMCwgTENfMTYyTSwgMTAxMjUsIDEwMjR9LAo+ID4gCj4gPiBUaGUg bnVtYmVycyBsb29rcyBnb29kLiBCdXQgbG9va3MgbGlrZSB5b3UgZm9yZ290IGFib3V0IDE3Ni40 IGtIej8KPiA+IAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiAgLyogZ2V0IEFVRF9DT05GSUdfUElY RUxfQ0xPQ0tfSERNSV8qIHZhbHVlIGZvciBtb2RlICovICBzdGF0aWMgdTMyCj4gPiA+IGF1ZGlv X2NvbmZpZ19oZG1pX3BpeGVsX2Nsb2NrKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlCj4g PiA+ICphZGp1c3RlZF9tb2RlKSAgeyBAQCAtMTIxLDIwICsxNTAsNTAgQEAgc3RhdGljIHUzMgo+ ID4gPiBhdWRpb19jb25maWdfaGRtaV9waXhlbF9jbG9jayhjb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWQKPiA+ID4gIAlyZXR1cm4gaGRtaV9hdWRpb19jbG9ja1tpXS5jb25m aWc7Cj4gPiA+ICB9Cj4gPiA+Cj4gPiA+IC1zdGF0aWMgaW50IGF1ZGlvX2NvbmZpZ19nZXRfbihj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiA+ID4gaW50IHJhdGUpCj4gPiA+ ICtzdGF0aWMgaW50IGF1ZGlvX2NvbmZpZ19nZXRfbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywK PiA+ID4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t b2RlLAo+ID4gPiArCQkJICAgICAgaW50IHJhdGUpCj4gPiA+ICB7Cj4gPiA+ICAJaW50IGk7Cj4g PiA+Cj4gPiA+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXVkX25jdHMpOyBpKyspIHsK PiA+ID4gLQkJaWYgKChyYXRlID09IGF1ZF9uY3RzW2ldLnNhbXBsZV9yYXRlKSAmJgo+ID4gPiAt CQkJKG1vZGUtPmNsb2NrID09IGF1ZF9uY3RzW2ldLmNsb2NrKSkgewo+ID4gPiAtCQkJcmV0dXJu IGF1ZF9uY3RzW2ldLm47Cj4gPiA+ICsJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Yy0+Y29u ZmlnLCBJTlRFTF9PVVRQVVRfSERNSSkpIHsKPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoYXVkX25jdHMpOyBpKyspIHsKPiA+ID4gKwkJCWlmICgocmF0ZSA9PSBhdWRfbmN0c1tp XS5zYW1wbGVfcmF0ZSkgJiYKPiA+ID4gKwkJCQkoYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgPT0gYXVk X25jdHNbaV0uY2xvY2spKSB7Cj4gPiAKPiA+IEluZGVudCBmYWlsLCBhbmQgYSBiaXQgdG9vIG1h bnkgcGFyZW5zIGZvciBteSB0YXN0ZS4gU2hvdWxkIGxvb2sgbGlrZToKPiA+IAo+ID4gCQlpZiAo cmF0ZSA9PSBhdWRfbmN0c1tpXS5zYW1wbGVfcmF0ZSAmJgo+ID4gCQkgICAgYWRqdXN0ZWRfbW9k ZS0+Y2xvY2sgPT0gYXVkX25jdHNbaV0uY2xvY2spIHsKPiA+IAo+ID4gCj4gPiA+ICsJCQkJcmV0 dXJuIGF1ZF9uY3RzW2ldLm47Cj4gPiA+ICsJCQl9Cj4gPiA+ICAJCX0KPiA+ID4gIAl9Cj4gPiA+ ICsKPiA+ID4gKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVMX09V VFBVVF9EUCkpIHsKPiA+IAo+ID4gaW50ZWxfaGFzX2RwX2VuY29kZXIoKSB3aWxsIG1ha2UgdGhp cyB3b3JrIGZvciBNU1QgYXMgd2VsbC4KPiA+IAo+ID4gIkluIE1TVCBtb2RlLCB0aGUgU2luayBk ZXZpY2UgbXVzdCBpZ25vcmUgdGhlIE1hdWQgYW5kIE12aWQgdmFsdWVzIHNlbnQgYnkKPiA+IGFu IE1TVCBTb3VyY2UgZGV2aWNlIHVubGVzcyB0aGUgTVNUIFNpbmsgZGV2aWNlIGlzIGRpcmVjdGx5 IGNvbm5lY3RlZCB0byB0aGUKPiA+IE1TVCBTb3VyY2UgZGV2aWNlIHZpYSBhIHNpbmdsZSBsaW5r IGFzIHRoZSBTb3VyY2UgZGV2aWNlIGdlbmVyYXRlcyB0aG9zZSB2YWx1ZXMKPiA+IGJhc2VkIG9u IHRoZSBMU19DbGsgb2YgdGhlIGxpbmsgaXQgaXMgZHJpdmluZy4gQW4gTVNUIFNpbmsgZGV2aWNl IG11c3QgYmUgYWJsZSB0bwo+ID4gcmVnZW5lcmF0ZSBhIHN0cmVhbSBjbG9jayB3aXRob3V0IGRl cGVuZGluZyBvbiBNdmlkIGFuZCBNdmlkIHRpbWUgc3RhbXAKPiA+IHZhbHVlcyBiZWNhdXNlIHRo ZSBNU1QgU2luayBkZXZpY2UgbWlnaHQgYmUgcGx1Z2dlZCBpbnRvIGFuIE1TVCBCcmFuY2gKPiA+ IGRldmljZSwgbm90IGFuIE1TVCBTb3VyY2UgZGV2aWNlLiIKPiA+IAo+ID4gU28gaWYgSSdtIHJl YWRpbmcgdGhhdCByaWdodCwgYW4gTVNUIHNpbmsgY2FuIHN0aWxsIHVzZSB0aGUgTS9OIHZhbHVl cyBpZiBpdCdzCj4gPiBkaXJlY2x0eSBob29rZWQgdXAgdG8gYSBNU1Qgc291cmNlLiBIZW5jZSB3 ZSBwcm9iYWJseSB3YW50IHRvIGZpbGwgb3V0IHRoZQo+ID4gTS9OIGV2ZW4gZm9yIE1TVC4KPiAK PiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoaXMgaXMgdGhlIHJlcXVpcmVtZW50IGZvciBzaW5rIGRl dmljZS4KPiBOb24tbXN0IGFuZCBNU1QsIHNvdXJjZSB3aWxsIHNlbmQgdGhlIE4vTSB2YWx1ZSwg YW5kIGlmIGl0IGlzCj4gTm9uLW1zdC9zaW5nbGUgbGluaywgc2luayBkZXZpY2Ugc2hvdWxkIHVz ZSB0aGVzZSBkYXRhIHRvIGdlbmVyYXRlCj4gdGhlIGNsb2NrLiBJZiBpdCBpcyBpbiBNU1QsIHNp bmsgZGV2aWNlIHNob3VsZCBpZ25vcmUgdGhlIGRhdGEgYW5kIHJlZ2VuZXJhdGUKPiB0aGUgY2xv Y2sgd2l0aG91dCBkZXBlbmRpbmcgb24gTi9NIHZhbHVlLgo+IAo+IFNvIHRoaXMgY29kZSBzaG91 bGQgT0sgYmUgZm9yIGJvdGggbm9uLW1zdCBhbmQgTVNULiBJZiBub3QsIEkgdGhpbmsgd2UKPiBj YW4gbWFrZSBhIHNlcGFyYXRlIHBhdGNoIGZvciBEUCBNU1QuCgpJdCdzIG9ubHkgT0sgZm9yIFNT VC4gV2UgY291bGQgb2YgY291cnNlIGRlbGF5IGRlYWxpbmcgd2l0aCBNU1QsIGJ1dAp0aGF0IHNl ZW1zIGxpa2UgdW5uZWNlc3NhcnkgY2h1cm4uIFlvdSdyZSB0b3VjaGluZyBhbGwgdGhlc2UgcGxh Y2VzIGluCnRoaXMgcGF0Y2gsIHNvIG1pZ2h0IGFzIHdlbGwgdXNlIGludGVsX2RwX2VuY29kZXIo KSBmcm9tIHRoZSBzdGFydC4gSXQKd2lsbCBtYWtlIHRoZSBNU1QgcGF0Y2ggc21hbGxlciB0b28s IHdoaWNoIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8KcmV2aWV3LgoKPiAKPiA+IAo+ID4gPiArCQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdWRfbm0pOyBpKyspIHsKPiA+ID4gKwkJCWlmICgo cmF0ZSA9PSBhdWRfbm1baV0uc2FtcGxlX3JhdGUpICYmCj4gPiA+ICsJCQkJKGNydGMtPmNvbmZp Zy0+cG9ydF9jbG9jayA9PSBhdWRfbm1baV0uY2xvY2spKQo+ID4gewo+ID4gCj4gPiBpbmRlbnQg KyBwYXJlbnMKPiA+IAo+ID4gPiArCQkJCXJldHVybiBhdWRfbm1baV0ubjsKPiA+ID4gKwkJCX0K PiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiArc3RhdGljIGludCBhdWRpb19jb25maWdfZ2V0X20oc3RydWN0IGludGVsX2NydGMgKmNy dGMsIGludCByYXRlKSB7Cj4gPiA+ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoaW50ZWxf Y3J0Y19oYXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVMX09VVFBVVF9EUCkpIHsKPiA+IAo+ID4g aW50ZWxfaGFzX2RwX2VuY29kZXIoKQo+ID4gCj4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGF1ZF9ubSk7IGkrKykgewo+ID4gPiArCQkJaWYgKChyYXRlID09IGF1ZF9ubVtpXS5z YW1wbGVfcmF0ZSkgJiYKPiA+ID4gKwkJCQkoY3J0Yy0+Y29uZmlnLT5wb3J0X2Nsb2NrID09IGF1 ZF9ubVtpXS5jbG9jaykpCj4gPiB7Cj4gPiAKPiA+IGluZGVudCArIHBhcmVucwo+ID4gCj4gPiA+ ICsJCQkJcmV0dXJuIGF1ZF9ubVtpXS5tOwo+ID4gPiArCQkJfQo+ID4gPiArCQl9Cj4gPiA+ICsJ fQo+ID4gPiArCj4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+ICB9Cj4gPiA+Cj4gPiA+IC1zdGF0aWMg dWludDMyX3QgYXVkaW9fY29uZmlnX3NldHVwX25fcmVnKGludCBuLCB1aW50MzJfdCB2YWwpCj4g PiA+ICtzdGF0aWMgdWludDMyX3QgYXVkaW9fY29uZmlnX3NldHVwX25fcmVnKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjLAo+ID4gPiArCQkJCQkgaW50IG4sIHVpbnQzMl90IHZhbCkKPiA+ID4gIHsK PiA+ID4gIAlpbnQgbl9sb3csIG5fdXA7Cj4gPiA+ICAJdWludDMyX3QgdG1wID0gdmFsOwo+ID4g PiBAQCAtMTQ1LDE3ICsyMDQsMzkgQEAgc3RhdGljIHVpbnQzMl90IGF1ZGlvX2NvbmZpZ19zZXR1 cF9uX3JlZyhpbnQgbiwKPiA+IHVpbnQzMl90IHZhbCkKPiA+ID4gIAl0bXAgfD0gKChuX3VwIDw8 IEFVRF9DT05GSUdfVVBQRVJfTl9TSElGVCkgfAo+ID4gPiAgCQkJKG5fbG93IDw8IEFVRF9DT05G SUdfTE9XRVJfTl9TSElGVCkgfAo+ID4gPiAgCQkJQVVEX0NPTkZJR19OX1BST0dfRU5BQkxFKTsK PiA+ID4gKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVMX09VVFBV VF9EUCkpCj4gPiAKPiA+IGludGVsX2hhc19kcF9lbmNvZGVyKCkKPiA+IAo+ID4gPiArCQl0bXAg fD0gQVVEX0NPTkZJR19OX1ZBTFVFX0lOREVYOwo+ID4gPiArCXJldHVybiB0bXA7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB1aW50MzJfdCBhdWRpb19jb25maWdfc2V0dXBfbV9yZWco c3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiA+ICsJCQkJCSBpbnQgbSwgdWludDMyX3QgdmFs KQo+ID4gPiArewo+ID4gPiArCXVpbnQzMl90IHRtcCA9IHZhbDsKPiA+ID4gKwo+ID4gPiArCWlm ICghaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVMX09VVFBVVF9EUCkpCj4g PiA+ICsJCXJldHVybiAwOwo+ID4gCj4gPiBUaGUgY2FsbGVyIGFscmVhZHkgY2hlY2tlZCB0aGF0 Lgo+ID4gCj4gPiA+ICsKPiA+ID4gKwl0bXAgfD0gbTsKPiA+ID4gKwl0bXAgfD0gQVVEX01fQ1RT X01fVkFMVUVfSU5ERVg7Cj4gPiA+ICsJdG1wIHw9IEFVRF9NX0NUU19NX1BST0dfRU5BQkxFOwo+ ID4gPiArCj4gPiA+ICAJcmV0dXJuIHRtcDsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gIC8qIGNoZWNr IHdoZXRoZXIgTi9DVFMvTSBuZWVkIGJlIHNldCBtYW51YWxseSAqLyAgc3RhdGljIGJvb2wKPiA+ ID4gYXVkaW9fcmF0ZV9uZWVkX3Byb2coc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiA+IC0J CQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ID4gPiArCQkJCSBjb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQo+ID4gKmFkanVzdGVkX21vZGUpCj4gPiA+ICB7Cj4g PiA+IC0JaWYgKCgobW9kZS0+Y2xvY2sgPT0gVE1EU18yOTdNKSB8fAo+ID4gPiAtCQkgKG1vZGUt PmNsb2NrID09IFRNRFNfMjk2TSkpICYmCj4gPiA+ICsJaWYgKCgoYWRqdXN0ZWRfbW9kZS0+Y2xv Y2sgPT0gVE1EU18yOTdNKSB8fAo+ID4gPiArCQkgKGFkanVzdGVkX21vZGUtPmNsb2NrID09IFRN RFNfMjk2TSkpICYmCj4gPiA+ICAJCWludGVsX2NydGNfaGFzX3R5cGUoY3J0Yy0+Y29uZmlnLCBJ TlRFTF9PVVRQVVRfSERNSSkpCj4gPiA+ICAJCXJldHVybiB0cnVlOwo+ID4gPiArCWVsc2UgaWYg KCgoY3J0Yy0+Y29uZmlnLT5wb3J0X2Nsb2NrID09IExDXzU0ME0pIHx8Cj4gPiA+ICsJCSAgKGNy dGMtPmNvbmZpZy0+cG9ydF9jbG9jayA9PSBMQ18yNzBNKSB8fAo+ID4gPiArCQkgIChjcnRjLT5j b25maWctPnBvcnRfY2xvY2sgPT0gTENfMTYyTSkpICYmCj4gPiA+ICsJCSAgaW50ZWxfY3J0Y19o YXNfdHlwZShjcnRjLT5jb25maWcsIElOVEVMX09VVFBVVF9EUCkpCj4gPiAKPiA+IGludGVsX2hh c19kcF9lbmNvZGVyKCkKPiA+IAo+ID4gPiArCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gIAllbHNlCj4g PiA+ICAJCXJldHVybiBmYWxzZTsKPiA+ID4gIH0KPiA+ID4gQEAgLTI4Nyw3ICszNjgsNyBAQCBz dGF0aWMgdm9pZCBoc3dfYXVkaW9fY29kZWNfZW5hYmxlKHN0cnVjdAo+ID4gZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAo+ID4gPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2Rp Z19wb3J0ID0KPiA+ID4gIAkJZW5jX3RvX2RpZ19wb3J0KCZlbmNvZGVyLT5iYXNlKTsKPiA+ID4g IAllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19wb3J0LT5wb3J0Owo+ID4gPiAtCXVpbnQzMl90 IHRtcDsKPiA+ID4gKwl1aW50MzJfdCB0bXAsIG07Cj4gPiA+ICAJaW50IGxlbiwgaTsKPiA+ID4g IAlpbnQgbiwgcmF0ZTsKPiA+ID4KPiA+ID4gQEAgLTM0MywxNSArNDI0LDI1IEBAIHN0YXRpYyB2 b2lkIGhzd19hdWRpb19jb2RlY19lbmFibGUoc3RydWN0Cj4gPiBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gPiA+ICAJCQlEUk1fRVJST1IoImludmFsaWQgcG9ydDogJWRcbiIsIHBvcnQpOwo+ ID4gPiAgCQkJcmF0ZSA9IDA7Cj4gPiA+ICAJCX0KPiA+ID4gLQkJbiA9IGF1ZGlvX2NvbmZpZ19n ZXRfbihhZGp1c3RlZF9tb2RlLCByYXRlKTsKPiA+ID4gKwkJbiA9IGF1ZGlvX2NvbmZpZ19nZXRf bihpbnRlbF9jcnRjLCBhZGp1c3RlZF9tb2RlLCByYXRlKTsKPiA+ID4gIAkJaWYgKG4gIT0gMCkK PiA+ID4gLQkJCXRtcCA9IGF1ZGlvX2NvbmZpZ19zZXR1cF9uX3JlZyhuLCB0bXApOwo+ID4gPiAr CQkJdG1wID0gYXVkaW9fY29uZmlnX3NldHVwX25fcmVnKGludGVsX2NydGMsIG4sIHRtcCk7Cj4g PiA+ICAJCWVsc2UKPiA+ID4gIAkJCURSTV9ERUJVR19LTVMoIm5vIHN1aXRhYmxlIE4gdmFsdWUg aXMgZm91bmRcbiIpOwo+ID4gPiAgCX0KPiA+ID4KPiA+ID4gIAlJOTE1X1dSSVRFKEhTV19BVURf Q0ZHKHBpcGUpLCB0bXApOwo+ID4gPgo+ID4gPiArCS8qIHNldHVwIG0gdmFsdWUgZm9yIERQICov Cj4gPiA+ICsJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoaW50ZWxfY3J0Yy0+Y29uZmlnLCBJTlRF TF9PVVRQVVRfRFApKSB7Cj4gPiAKPiA+IGludGVsX2hhc19kcF9lbmNvZGVyKCkKPiA+IAo+ID4g PiArCQltID0gYXVkaW9fY29uZmlnX2dldF9tKGludGVsX2NydGMsIHJhdGUpOwo+ID4gPiArCQlp ZiAobSAhPSAwKSB7Cj4gPiA+ICsJCQl0bXAgPSBJOTE1X1JFQUQoSFNXX0FVRF9NX0NUU19FTkFC TEUocGlwZSkpOwo+ID4gPiArCQkJdG1wID0gYXVkaW9fY29uZmlnX3NldHVwX21fcmVnKGludGVs X2NydGMsIG0sIHRtcCk7Cj4gPiA+ICsJCQlJOTE1X1dSSVRFKEhTV19BVURfTV9DVFNfRU5BQkxF KHBpcGUpLCB0bXApOwo+ID4gCj4gPiBXZSBzaG91bGQgcHJvZ3JhbSB0aGlzIHJlZ2lzdGVyIGV2 ZW4gZm9yIEhETUksIHNvIHRoYXQgd2UgZG9uJ3QgbGVhayBpbnZhbGlkCj4gPiByZWdpc3RlciB2 YWx1ZXMgZWcuIHdoZW4gY2hhbmdpbmcgZnJvbSBEUC0+SERNSS4KPiAKPiBIRE1JIGRvZXNuJ3Qg bmVlZCBzZXQgdGhlc2UgdmFsdWVzIGJhc2VkIG9uIG91ciB0ZXN0LiBJdCBzZWVtcyBzaWxpY29u IGNhbgo+IGhhbmRsZSBzbW9vdGhseSBmb3IgSERNSS4KClllcywgYnV0IHdlIG5lZSB0byBtYWtl IHN1cmUgd2UgY2xlYXIgd2hhdGV2ZXIgd2UgcHJvZ3JhbW1lZCBpbiBmb3IgRFAKcHJldmlvdXNs eS4KCj4gCj4gPiAKPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiAgCW11dGV4X3Vu bG9jaygmZGV2X3ByaXYtPmF2X211dGV4KTsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gQEAgLTYzNyw3 ICs3MjgsNyBAQCBzdGF0aWMgaW50Cj4gPiBpOTE1X2F1ZGlvX2NvbXBvbmVudF9zeW5jX2F1ZGlv X3JhdGUoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiAgCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlOwo+ID4gPiAgCXN0cnVjdCBpOTE1X2F1ZGlvX2NvbXBvbmVudCAqYWNvbXAgPSBkZXZf cHJpdi0+YXVkaW9fY29tcG9uZW50Owo+ID4gPiAgCWVudW0gcGlwZSBwaXBlID0gSU5WQUxJRF9Q SVBFOwo+ID4gPiAtCXUzMiB0bXA7Cj4gPiA+ICsJdTMyIHRtcCwgbTsKPiA+ID4gIAlpbnQgbjsK PiA+ID4gIAlpbnQgZXJyID0gMDsKPiA+ID4KPiA+ID4gQEAgLTY1Myw3ICs3NDQsOCBAQCBzdGF0 aWMgaW50Cj4gPiBpOTE1X2F1ZGlvX2NvbXBvbmVudF9zeW5jX2F1ZGlvX3JhdGUoc3RydWN0IGRl dmljZSAqZGV2LAo+ID4gPiAgCWludGVsX2VuY29kZXIgPSBkZXZfcHJpdi0+ZGlnX3BvcnRfbWFw W3BvcnRdOwo+ID4gPiAgCS8qIGludGVsX2VuY29kZXIgbWlnaHQgYmUgTlVMTCBmb3IgRFAgTVNU ICovCj4gPiA+ICAJaWYgKCFpbnRlbF9lbmNvZGVyIHx8ICFpbnRlbF9lbmNvZGVyLT5iYXNlLmNy dGMgfHwKPiA+ID4gLQkgICAgaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfSERN SSkgewo+ID4gPiArCSAgICAoKGludGVsX2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0hE TUkpICYmCj4gPiA+ICsJICAgICAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRf RFApKSkgewo+ID4gCj4gPiBIbW0uIFNob3VsZCBwcm9iYWJsdCBtb3ZlIHRoaXMgc3R1ZmYgbGF0 ZXIgc28gdGhhdCB3ZSBjYW4gdXNlIGNoZWNrCj4gPiBjcnRjLT5jb25maWctPm91dHB1dF90eXBl cyBpbnN0ZWFkLiBCdXQgSSBndWVzcyB0aGF0J3MgbW9yZQo+ID4gYXBwcm9wcmlhdGVseSBsZWZ0 IHRvIGFueSBNU1QgcGF0Y2guCj4gCj4gVGhlIHNhbWUgcmVhc29uIGFzIGludGVsX2hhc19kcF9l bmNvZGVyKCkuIEFuZCBpZiBpdCBpcyB3cm9uZwo+IGZvciBEUCBNU1QsIGxldCdzIGhhdmUgYSBz ZXBhcmF0ZSBwYXRjaCB3aGVuIHdlIHN1cHBvcnQgRFAgTVNULgo+IEF0IHRoYXQgdGltZSwgd2Ug Y2FuIGRvIGEgZnVsbCB0ZXN0IG9uIERQIE1TVC4KClllYWggdGhpcyBwYXJ0IHdlIGNhbiBsZWF2 ZSBmb3IgdGhlIE1TVCBwYXRjaCBhcyBpdCdsbCBpbnZvbHZlIGEgYml0Cm1vcmUgdGhhbiBqdXN0 IGFkZGluZyBhbm90aGVyIGNoZWNrIHRvIHRoZSBpZiBzdGF0ZW1lbnQuCgo+IAo+IFJlZ2FyZHMs Cj4gTGliaW4KPiAKPiA+IAo+ID4gPiAgCQlEUk1fREVCVUdfS01TKCJubyB2YWxpZCBwb3J0ICVj XG4iLCBwb3J0X25hbWUocG9ydCkpOwo+ID4gPiAgCQllcnIgPSAtRU5PREVWOwo+ID4gPiAgCQln b3RvIHVubG9jazsKPiA+ID4gQEAgLTY4MSw3ICs3NzMsNyBAQCBzdGF0aWMgaW50Cj4gPiBpOTE1 X2F1ZGlvX2NvbXBvbmVudF9zeW5jX2F1ZGlvX3JhdGUoc3RydWN0IGRldmljZSAqZGV2LAo+ID4g PiAgCQlnb3RvIHVubG9jazsKPiA+ID4gIAl9Cj4gPiA+Cj4gPiA+IC0JbiA9IGF1ZGlvX2NvbmZp Z19nZXRfbihtb2RlLCByYXRlKTsKPiA+ID4gKwluID0gYXVkaW9fY29uZmlnX2dldF9uKGNydGMs IG1vZGUsIHJhdGUpOwo+ID4gPiAgCWlmIChuID09IDApIHsKPiA+ID4gIAkJRFJNX0RFQlVHX0tN UygiVXNpbmcgYXV0b21hdGljIG1vZGUgZm9yIE4gdmFsdWUgb24KPiA+IHBvcnQgJWNcbiIsCj4g PiA+ICAJCQkJCSAgcG9ydF9uYW1lKHBvcnQpKTsKPiA+ID4gQEAgLTY5Myw4ICs3ODUsMTcgQEAg c3RhdGljIGludAo+ID4gPiBpOTE1X2F1ZGlvX2NvbXBvbmVudF9zeW5jX2F1ZGlvX3JhdGUoc3Ry dWN0IGRldmljZSAqZGV2LAo+ID4gPgo+ID4gPiAgCS8qIDMuIHNldCB0aGUgTi9DVFMvTSAqLwo+ ID4gPiAgCXRtcCA9IEk5MTVfUkVBRChIU1dfQVVEX0NGRyhwaXBlKSk7Cj4gPiA+IC0JdG1wID0g YXVkaW9fY29uZmlnX3NldHVwX25fcmVnKG4sIHRtcCk7Cj4gPiA+ICsJdG1wID0gYXVkaW9fY29u ZmlnX3NldHVwX25fcmVnKGNydGMsIG4sIHRtcCk7Cj4gPiA+ICAJSTkxNV9XUklURShIU1dfQVVE X0NGRyhwaXBlKSwgdG1wKTsKPiA+ID4gKwkvKiBzZXR1cCBtIHZhbHVlIGZvciBEUCAqLwo+ID4g PiArCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGMtPmNvbmZpZywgSU5URUxfT1VUUFVUX0RQ KSkgewo+ID4gCj4gPiBpbnRlbF9oYXNfZHBfZW5jb2RlcigpCj4gPiAKPiA+ID4gKwkJbSA9IGF1 ZGlvX2NvbmZpZ19nZXRfbShjcnRjLCByYXRlKTsKPiA+ID4gKwkJaWYgKG0gPT0gMCkKPiA+ID4g KwkJCWdvdG8gdW5sb2NrOwo+ID4gPiArCQl0bXAgPSBJOTE1X1JFQUQoSFNXX0FVRF9NX0NUU19F TkFCTEUocGlwZSkpOwo+ID4gPiArCQl0bXAgPSBhdWRpb19jb25maWdfc2V0dXBfbV9yZWcoY3J0 YywgbSwgdG1wKTsKPiA+ID4gKwkJSTkxNV9XUklURShIU1dfQVVEX01fQ1RTX0VOQUJMRShwaXBl KSwgdG1wKTsKPiA+ID4gKwl9Cj4gPiA+Cj4gPiA+ICAgdW5sb2NrOgo+ID4gPiAgCW11dGV4X3Vu bG9jaygmZGV2X3ByaXYtPmF2X211dGV4KTsKPiA+ID4gLS0KPiA+ID4gMS45LjEKPiA+IAo+ID4g LS0KPiA+IFZpbGxlIFN5cmrDpGzDpAo+ID4gSW50ZWwgT1RDCgotLSAKVmlsbGUgU3lyasOkbMOk CkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK