From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 1/2] drm/i915: Extend GET_APERTURE ioctl to report available map space Date: Wed, 08 Jul 2015 14:13:43 +0100 Message-ID: <559D2207.1060404@linux.intel.com> References: <1436338285-23044-1-git-send-email-ankitprasad.r.sharma@intel.com> <1436338285-23044-2-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 07AEF6EB1E for ; Wed, 8 Jul 2015 06:14:06 -0700 (PDT) In-Reply-To: <1436338285-23044-2-git-send-email-ankitprasad.r.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ankitprasad.r.sharma@intel.com, intel-gfx@lists.freedesktop.org Cc: akash.goel@intel.com, shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMDcvMDgvMjAxNSAwNzo1MSBBTSwgYW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwu Y29tIHdyb3RlOgo+IEZyb206IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpIGF0IGludGVsLmNv bT4KPgo+IFdoZW4gY29uc3RydWN0aW5nIGEgYmF0Y2hidWZmZXIsIGl0IGlzIHNvbWV0aW1lcyBj cnVjaWFsIHRvIGtub3cgdGhlCj4gbGFyZ2VzdCBob2xlIGludG8gd2hpY2ggd2UgY2FuIGZpdCBh IGZlbmNlYWJsZSBidWZmZXIgKGZvciBleGFtcGxlIHdoZW4KPiBoYW5kbGluZyB2ZXJ5IGxhcmdl IG9iamVjdHMgb24gZ2VuMiBhbmQgZ2VuMykuIFRoaXMgZGVwZW5kcyBvbiB0aGUKPiBmcmFnbWVu dGF0aW9uIG9mIHBpbm5lZCBidWZmZXJzIGluc2lkZSB0aGUgYXBlcnR1cmUsIGEgcXVlc3Rpb24g b25seSB0aGUKPiBrZXJuZWwgY2FuIGVhc2lseSBhbnN3ZXIuCj4KPiBUaGlzIHBhdGNoIGV4dGVu ZHMgdGhlIGN1cnJlbnQgRFJNX0k5MTVfR0VNX0dFVF9BUEVSVFVSRSBpb2N0bCB0bwo+IGluY2x1 ZGUgYSBjb3VwbGUgb2YgbmV3IGZpZWxkcyBpbiBpdHMgcmVwbHkgdG8gdXNlcnNwYWNlIC0gdGhl IHRvdGFsCj4gYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgbWFwcGFibGUgcmVnaW9u IG9mIHRoZSBhcGVydHVyZSBhbmQKPiBhbHNvIHRoZSBzaW5nbGUgbGFyZ2VzdCBibG9jayBhdmFp bGFibGUuCgpTaW5jZSB3aGF0ZXZlciB0aGlzIHJldHVybnMgaXMgYSB0cmFuc2llbnQgbnVtYmVy IGlzIHRoaXMgcmVhbGx5IHRoYXQgCnVzZWZ1bD8gVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgdGhh dCBieSB0aGUgdGltZSBjYWxsZXIgdHJpZXMgdG8gYWN0IG9uIAppdCBpdCB3aWxsIHN0aWxsIGJl IHZhbGlkLgoKPiBUaGlzIGlzIG5vdCBxdWl0ZSB3aGF0IHVzZXJzcGFjZSB3YW50cyB0byBhbnN3 ZXIgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIKPiB0aGlzIGJhdGNoIHdpbGwgZml0IGFzIGZlbmNl cyBhcmUgYWxzbyByZXF1aXJlZCB0byBtZWV0IHNldmVyZSBhbGlnbm1lbnQKPiBjb25zdHJhaW50 cyB3aXRoaW4gdGhlIGJhdGNoLiBGb3IgdGhpcyBwdXJwb3NlLCBhIHRoaXJkIGNvbnNlcnZhdGl2 ZQo+IGVzdGltYXRlIG9mIGxhcmdlc3QgZmVuY2UgYXZhaWxhYmxlIGlzIGFsc28gcHJvdmlkZWQu IEZvciB3aGVuIHVzZXJzcGFjZQo+IG5lZWRzIG1vcmUgdGhhbiBvbmUgYmF0Y2gsIHdlIGFsc28g cHJvdmlkZSB0aGUgY3VsbXVsYXRpdmUgc3BhY2UKPiBhdmFpbGFibGUgZm9yIGZlbmNlcyBzdWNo IHRoYXQgaXQgaGFzIHNvbWUgYWRkaXRpb25hbCBndWlkYW5jZSB0byBob3cKPiBtdWNoIHNwYWNl IGl0IGNvdWxkIGFsbG9jYXRlIHRvIGZlbmNlcy4gQ29uc2VydmF0aXNtIHN0aWxsIHdpbnMuCj4K PiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgZGVidWdmcyBmaWxlIGZvciBjb252ZW5pZW50IHRlc3Rp bmcgYW5kIHJlcG9ydGluZy4KPgo+IHYyOiBUaGUgZmlyc3Qgb2JqZWN0IGNhbm5vdCBlbmQgYXQg b2Zmc2V0IDAsIHNvIHdlIGNhbiB1c2UgbGFzdD09MCB0bwo+IGRldGVjdCB0aGUgZW1wdHkgbGlz dC4KPgo+IHYzOiBFeHBhbmQgYWxsIHZhbHVlcyB0byA2NGJpdCwganVzdCBpbiBjYXNlLgo+ICAg ICAgUmVwb3J0IHRvdGFsIG1hcHBhYmxlIGFwZXJ0dXJlIHNpemUgZm9yIHVzZXJzcGFjZSB0aGF0 IGNhbm5vdCBlYXNpbHkKPiAgICAgIGRldGVybWluZSBpdCBieSBpbnNwZWN0aW5nIHRoZSBQQ0kg ZGV2aWNlLgo+Cj4gdjQ6IChSb2RyaWdvKSBGaXhlZCByZWJhc2UgY29uZmxpY3RzLgo+Cj4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpcyBhdCBjaHJpcy13aWxzb24uY28udWs+Cj4g U2lnbmVkLW9mZi1ieTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmkgYXQgaW50ZWwuY29tPgo+ IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgfCAgMjcgKysrKysr KysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICB8IDExNiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KPiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9k cm0uaCAgICAgICAgIHwgIDI1ICsrKysrKysrCj4gICAzIGZpbGVzIGNoYW5nZWQsIDE2NCBpbnNl cnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMKPiBpbmRleCAzMWQ4NzY4Li40OWVjNDM4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k ZWJ1Z2ZzLmMKPiBAQCAtNTEyLDYgKzUxMiwzMiBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVj dF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCogZGF0YSkKPiAgIAlyZXR1cm4gMDsKPiAg IH0KPgo+ICtzdGF0aWMgaW50IGk5MTVfZ2VtX2FwZXJ0dXJlX2luZm8oc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IG0t PnByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF9hcGVydHVyZSBhcmc7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXJldCA9IGk5MTVfZ2VtX2dldF9hcGVydHVyZV9pb2N0bChub2RlLT5t aW5vci0+ZGV2LCAmYXJnLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAr Cj4gKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBzaXplIG9mIHRoZSBHVFQ6ICVsbHUgYnl0ZXNcbiIs Cj4gKwkJICAgYXJnLmFwZXJfc2l6ZSk7Cj4gKwlzZXFfcHJpbnRmKG0sICJBdmFpbGFibGUgc3Bh Y2UgaW4gdGhlIEdUVDogJWxsdSBieXRlc1xuIiwKPiArCQkgICBhcmcuYXBlcl9hdmFpbGFibGVf c2l6ZSk7Cj4gKwlzZXFfcHJpbnRmKG0sICJBdmFpbGFibGUgc3BhY2UgaW4gdGhlIG1hcHBhYmxl IGFwZXJ0dXJlOiAlbGx1IGJ5dGVzXG4iLAo+ICsJCSAgIGFyZy5tYXBfYXZhaWxhYmxlX3NpemUp Owo+ICsJc2VxX3ByaW50ZihtLCAiU2luZ2xlIGxhcmdlc3Qgc3BhY2UgaW4gdGhlIG1hcHBhYmxl IGFwZXJ0dXJlOiAlbGx1IGJ5dGVzXG4iLAo+ICsJCSAgIGFyZy5tYXBfbGFyZ2VzdF9zaXplKTsK PiArCXNlcV9wcmludGYobSwgIkF2YWlsYWJsZSBzcGFjZSBmb3IgZmVuY2VzOiAlbGx1IGJ5dGVz XG4iLAo+ICsJCSAgIGFyZy5mZW5jZV9hdmFpbGFibGVfc2l6ZSk7Cj4gKwlzZXFfcHJpbnRmKG0s ICJTaW5nbGUgbGFyZ2VzdCBmZW5jZSBhdmFpbGFibGU6ICVsbHUgYnl0ZXNcbiIsCj4gKwkJICAg YXJnLmZlbmNlX2xhcmdlc3Rfc2l6ZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gICBz dGF0aWMgaW50IGk5MTVfZ2VtX2d0dF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0 YSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IG0tPnByaXZhdGU7Cj4g QEAgLTUwMzAsNiArNTA1Niw3IEBAIHN0YXRpYyBpbnQgaTkxNV9kZWJ1Z2ZzX2NyZWF0ZShzdHJ1 Y3QgZGVudHJ5ICpyb290LAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW5mb19saXN0IGk5 MTVfZGVidWdmc19saXN0W10gPSB7Cj4gICAJeyJpOTE1X2NhcGFiaWxpdGllcyIsIGk5MTVfY2Fw YWJpbGl0aWVzLCAwfSwKPiAgIAl7Imk5MTVfZ2VtX29iamVjdHMiLCBpOTE1X2dlbV9vYmplY3Rf aW5mbywgMH0sCj4gKwl7Imk5MTVfZ2VtX2FwZXJ0dXJlIiwgaTkxNV9nZW1fYXBlcnR1cmVfaW5m bywgMH0sCj4gICAJeyJpOTE1X2dlbV9ndHQiLCBpOTE1X2dlbV9ndHRfaW5mbywgMH0sCj4gICAJ eyJpOTE1X2dlbV9waW5uZWQiLCBpOTE1X2dlbV9ndHRfaW5mbywgMCwgKHZvaWQgKikgUElOTkVE X0xJU1R9LAo+ICAgCXsiaTkxNV9nZW1fYWN0aXZlIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5m bywgMCwgKHZvaWQgKikgQUNUSVZFX0xJU1R9LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGlu ZGV4IGEyYTRhMjcuLmNjZmM4ZDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAt MzIsNiArMzIsNyBAQAo+ICAgI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+ICAgI2luY2x1ZGUgImk5 MTVfdHJhY2UuaCIKPiAgICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiArI2luY2x1ZGUgPGxpbnV4 L2xpc3Rfc29ydC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+Cj4gICAjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KPiBAQCAtMTQzLDYg KzE0NCw1NSBAQCBpbnQgaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPgo+ICtzdGF0aWMgaW5saW5lIGJvb2wK PiAraTkxNV9nZW1fb2JqZWN0X2lzX2luYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4gK3sKPiArCXJldHVybiBpOTE1X2dlbV9vYmpfYm91bmRfYW55KG9iaikgJiYgIW9i ai0+YWN0aXZlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG9ial9yYW5rX2J5X2dndHQodm9pZCAq cHJpdiwKPiArCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKkEsCj4gKwkJCSAgICBzdHJ1Y3QgbGlz dF9oZWFkICpCKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYSA9IGxpc3Rf ZW50cnkoQSx0eXBlb2YoKmEpLCBvYmpfZXhlY19saW5rKTsKPiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpiID0gbGlzdF9lbnRyeShCLHR5cGVvZigqYiksIG9ial9leGVjX2xpbmspOwoK Tml0cGljayAtIHNwYWNlIGFmdGVyIGNvbW1hLgoKPiArCj4gKwlyZXR1cm4gaTkxNV9nZW1fb2Jq X2dndHRfb2Zmc2V0KGEpIC0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGIpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdTMyIF9fZmVuY2Vfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHUzMiBzdGFydCwgdTMyIGVuZCkKPiArewo+ICsJdTMyIHNpemUgPSBlbmQgLSBzdGFydDsK PiArCXUzMiBmZW5jZV9zaXplOwo+ICsKPiArCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2Vu IDwgNCkgewo+ICsJCXUzMiBmZW5jZV9tYXg7Cj4gKwkJdTMyIGZlbmNlX25leHQ7Cj4gKwo+ICsJ CWlmIChJU19HRU4zKGRldl9wcml2KSkgewo+ICsJCQlmZW5jZV9tYXggPSBJODMwX0ZFTkNFX01B WF9TSVpFX1ZBTCA8PCAyMDsKPiArCQkJZmVuY2VfbmV4dCA9IDEwMjQqMTAyNDsKPiArCQl9IGVs c2Ugewo+ICsJCQlmZW5jZV9tYXggPSBJODMwX0ZFTkNFX01BWF9TSVpFX1ZBTCA8PCAxOTsKPiAr CQkJZmVuY2VfbmV4dCA9IDUxMioxMDI0Owo+ICsJCX0KPiArCj4gKwkJZmVuY2VfbWF4ID0gbWlu KGZlbmNlX21heCwgc2l6ZSk7Cj4gKwkJZmVuY2Vfc2l6ZSA9IDA7Cj4gKwkJd2hpbGUgKGZlbmNl X25leHQgPD0gZmVuY2VfbWF4KSB7Cj4gKwkJCXUzMiBiYXNlID0gQUxJR04oc3RhcnQsIGZlbmNl X25leHQpOwo+ICsJCQlpZiAoYmFzZSArIGZlbmNlX25leHQgPiBlbmQpCj4gKwkJCQlicmVhazsK PiArCj4gKwkJCWZlbmNlX3NpemUgPSBmZW5jZV9uZXh0Owo+ICsJCQlmZW5jZV9uZXh0IDw8PSAx Owo+ICsJCX0KCkkgZG9uJ3Qga25vdyBhIGxvdCBhYm91dCBmZW5jZSBhbGlnbm1lbnQgYW5kIHNp emUgcmVzdHJpY3Rpb25zIGJ1dCBzaW5jZSAKdGhpcyBsb29wIGlzIHJlbGF0aXZlbHkgY29tcGxl eCBjb3VsZCB1c2UgYSBjb21tZW50IG9uIHdoYXQgaXQgaXMgZG9pbmcuCgo+ICsJfSBlbHNlCj4g KwkJZmVuY2Vfc2l6ZSA9IHNpemU7CgpJIHRoaW5rIGNvZGluZyBzdHlsZSBpcyBmb3IgYWxsIGlm L2Vsc2UgYnJhbmNoZXMgdG8gaGF2ZSBicmFjZXMgaWYgb25lIApoYXMgLSBmZWVsIGZyZWUgdG8g Y29ycmVjdCBtZSBpZiBJIGFtIHdyb25nLgoKPiArCj4gKwlyZXR1cm4gZmVuY2Vfc2l6ZTsKPiAr fQo+ICsKPiAgIGludAo+ICAgaTkxNV9nZW1fZ2V0X2FwZXJ0dXJlX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxl KQo+IEBAIC0xNTAsMTcgKzIwMCw3NSBAQCBpOTE1X2dlbV9nZXRfYXBlcnR1cmVfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9n ZW1fZ2V0X2FwZXJ0dXJlICphcmdzID0gZGF0YTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOwo+IC0Jc2l6ZV90IHBpbm5lZDsKPiArCXN0cnVjdCBsaXN0X2hlYWQgbWFwX2xp c3Q7Cj4gKwljb25zdCB1MzIgbWFwX2xpbWl0ID0gZGV2X3ByaXYtPmd0dC5tYXBwYWJsZV9lbmQ7 CgptYXBwYWJsZV9lbmQgaXMgdTY0IHNvIGdjYyBzaG91bGQgY29tcGxhaW4gaGVyZS4KCj4gKwlz aXplX3QgcGlubmVkLCBtYXBfc3BhY2UsIG1hcF9sYXJnZXN0LCBmZW5jZV9zcGFjZSwgZmVuY2Vf bGFyZ2VzdDsKPiArCXUzMiBsYXN0LCBzaXplOwoKQW5kIHNpbmNlIHRoZSBvbmdvaW5nIHB1c2gg dG8gc3RhbmRhcmRpemUgYWxsIEdUVCBzaXplIHZhcmlhYmxlcyB0byB1NjQgCkkgdGhpbmsgeW91 J2wgaGF2ZSB0byBjaGFuZ2UgdGhlIGFib3ZlIGFzIHdlbGwuCgo+ICsKPiArCUlOSVRfTElTVF9I RUFEKCZtYXBfbGlzdCk7Cj4KPiAgIAlwaW5uZWQgPSAwOwo+ICsJbWFwX3NwYWNlID0gbWFwX2xh cmdlc3QgPSAwOwo+ICsJZmVuY2Vfc3BhY2UgPSBmZW5jZV9sYXJnZXN0ID0gMDsKPiArCj4gICAJ bXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShv YmosICZkZXZfcHJpdi0+bW0uYm91bmRfbGlzdCwgZ2xvYmFsX2xpc3QpCj4gLQkJaWYgKGk5MTVf Z2VtX29ial9pc19waW5uZWQob2JqKSkKPiAtCQkJcGlubmVkICs9IGk5MTVfZ2VtX29ial9nZ3R0 X3NpemUob2JqKTsKClVuZm9ydHVuYXRlbHkgeW91IHdpbGwgaGF2ZSB0byByZWJhc2UgdGhpcyBh Z2FpbiBzaW5jZSBzb21lb25lIG1hbmFnZWQgCnRvIGNoYW5nZSBpdCBpbiB0aGUgbWVhbnRpbWUu IE9vb3BzIGl0IHdhcyBtZSAtIHNvcnJ5ISA6KQoKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkob2Jq LCAmZGV2X3ByaXYtPm1tLmJvdW5kX2xpc3QsIGdsb2JhbF9saXN0KSB7Cj4gKwkJc3RydWN0IGk5 MTVfdm1hICp2bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopOwoKVGhlIGlzc3VlIHdpdGgg dGhpcyBpcyBpdCBpZ25vcmVzIHJvdGF0ZWQgYW5kIHBhcnRpYWwgVk1BIHR5cGVzIHNvIHdpbGwg CmdpdmUgd3JvbmcgbnVtYmVycy4gUmViYXNpbmcgc2hvdWxkIHRha2UgY2FyZSBvZiBpdC4KCj4g KwkJaWYgKHZtYSA9PSBOVUxMIHx8ICF2bWEtPnBpbl9jb3VudCkKPiArCQkJY29udGludWU7Cj4g Kwo+ICsJCXBpbm5lZCArPSB2bWEtPm5vZGUuc2l6ZTsKPiArCj4gKwkJaWYgKHZtYS0+bm9kZS5z dGFydCA8IG1hcF9saW1pdCkKPiArCQkJbGlzdF9hZGQoJm9iai0+b2JqX2V4ZWNfbGluaywgJm1h cF9saXN0KTsKPiArCX0KPiArCj4gKwlsYXN0ID0gMDsKPiArCWxpc3Rfc29ydChOVUxMLCAmbWFw X2xpc3QsIG9ial9yYW5rX2J5X2dndHQpOwoKSSBzdXBwb3NlIHRoZSBwcm9ibGVtcyByZWFsbHkg c3RhcnQgd2l0aCB0aGUgY29tcGFyZSBmdW5jdGlvbiBoZXJlLiAKU2luY2UgeW91IHN0b3JlIG9i amVjdHMgaW4gdGhlIGxpc3QgYW5kIG5vdCBWTUFzLCBjb21wYXJlIGNhbid0IGtub3cgCndoaWNo IGFyZSB0aGUgY29ycmVjdCBWTUFzIHRvIHVzZS4KCkFyZSB0aGVyZSBhbnkgZnJlZSBsaXN0X2hl YWRzIGluIHRoZSBWTUEgeW91IGNvdWxkIHVzZT8gdm1hLT5leGVjX2xpc3QgCmxvb2tzIGxpa2Ug aXQgY291bGQgYmUgdXNlZC4gKFBsZWFzZSB2ZXJpZnkgOikKClRoYXQgd291bGQgbWFrZSBtYXBf bGlzdCBzdG9yZSBWTUFzIGFuZCBjb21wYXJlIGZ1bmN0aW9uIGNhbiBiZSBjaGFuZ2UgCnRvIHVz ZSB2bWEtPm5vZGUuc3RhcnQgdGhlbiAoYW5kIHdvcmsgd2l0aCBub3JtYWwvcm90YXRlZC9wYXJ0 aWFsIHZpZXdzKS4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK