From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v2 4/5] drm/i915/guc: rework guc_add_workqueue_item() Date: Fri, 6 May 2016 09:55:49 +0100 Message-ID: <572C5C15.5060702@linux.intel.com> References: <1461780195-17434-1-git-send-email-david.s.gordon@intel.com> <1461780195-17434-4-git-send-email-david.s.gordon@intel.com> <57238158.6090903@linux.intel.com> <572B933C.7080701@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 033F26E136 for ; Fri, 6 May 2016 08:55:51 +0000 (UTC) In-Reply-To: <572B933C.7080701@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA1LzA1LzE2IDE5OjM4LCBEYXZlIEdvcmRvbiB3cm90ZToKPiBPbiAyOS8wNC8yMDE2IDE2 OjQ0LCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4KPj4gT24gMjcvMDQvMTYgMTk6MDMsIERhdmUg R29yZG9uIHdyb3RlOgo+Pj4gTW9zdGx5IGxpdHRsZSBvcHRpbWlzYXRpb25zOyBmb3IgaW5zdGFu Y2UsIGlmIHRoZSBkcml2ZXIgaXMgY29ycmVjdGx5Cj4+PiBmb2xsb3dpbmcgdGhlIHN1Ym1pc3Np b24gcHJvdG9jb2wsIHRoZSAib3V0IG9mIHNwYWNlIiBjb25kaXRpb24gaXMKPj4+IGltcG9zc2li bGUsIHNvIHRoZSBwcmV2aW91cyBydW50aW1lIFdBUk5fT04oKSBpcyBwcm9tb3RlZCB0byBhCj4+ PiBHRU1fQlVHX09OKCkgZm9yIGEgbW9yZSBkcmFtYXRpYyBlZmZlY3QgaW4gZGV2ZWxvcG1lbnQg YW5kIGxlc3MgaW1wYWN0Cj4+PiBpbiBlbmQtdXNlciBzeXN0ZW1zLgo+Pj4KPj4+IFNpbWlsYXJs eSB3ZSBjYW4gcmVwbGFjZSBvdGhlciBXQVJOX09OKCkgY29uZGl0aW9ucyB0aGF0IGRvbid0IHJl bGF0ZSB0bwo+Pj4gdGhlIGhhcmR3YXJlIHN0YXRlIHdpdGggZWl0aGVyIEJVSUxEX0JVR19PTigp IGZvciBjb21waWxlLXRpbWUtCj4+PiBkZXRlY3RhYmxlIGlzc3Vlcywgb3IgR0VNX0JVR19PTigp IGZvciBsb2dpY2FsICJjYW4ndCBoYXBwZW4iIGVycm9ycy4KPj4+Cj4+PiBXaXRoIHRob3NlIGNo YW5nZXMsIHdlIGNhbiBjb252ZXJ0IGl0IHRvIHZvaWQsIGFzIHN1Z2dlc3RlZCBieSBDaHJpcwo+ Pj4gV2lsc29uLCBhbmQgdXBkYXRlIHRoZSBjYWxsaW5nIGNvZGUgYXBwcm9wcmlhdGVseS4KPj4+ Cj4+PiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29t Pgo+Pj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+Pj4KPj4+ IC0tLQo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgfCA2 OQo+Pj4gKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCj4+PiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oICAgICAgICAgICB8ICAyICstCj4+PiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Y19md2lmLmggICAgICB8ICAzICstCj4+PiAgIDMgZmlsZXMgY2hhbmdl ZCwgMzcgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+Pj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPj4+IGluZGV4IDY2MjZlZmYuLjRk MmVhODQgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJt aXNzaW9uLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Np b24uYwo+Pj4gQEAgLTQ3MCwyMyArNDcwLDI4IEBAIGludCBpOTE1X2d1Y193cV9jaGVja19zcGFj ZShzdHJ1Y3QKPj4+IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+Pj4gICAgICAgcmV0 dXJuIC1FQUdBSU47Cj4+PiAgIH0KPj4+Cj4+PiAtc3RhdGljIGludCBndWNfYWRkX3dvcmtxdWV1 ZV9pdGVtKHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmdjLAo+Pj4gLSAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4+PiArc3RhdGljIHZvaWQgZ3VjX2Fk ZF93b3JrcXVldWVfaXRlbShzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpnYywKPj4+ICsgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSkKPj4+ICAgewo+Pj4g KyAgICAvKiB3cWlfbGVuIGlzIGluIERXb3JkcywgYW5kIGRvZXMgbm90IGluY2x1ZGUgdGhlIG9u ZS13b3JkCj4+PiBoZWFkZXIgKi8KPj4+ICsgICAgY29uc3Qgc2l6ZV90IHdxaV9zaXplID0gc2l6 ZW9mKHN0cnVjdCBndWNfd3FfaXRlbSk7Cj4+Cj4+IEFnYWluLCB1MzIgaXMgY29ycmVjdCBJIHRo aW5rLgo+IE5vcGUsIGl0J3MgYSBzaXplb2YoKSwgYnV0IHRoZSBjb21waWxlciB3aWxsIGNoZWNr IHRoYXQgaXQgZml0cyBpbiB1MzIKPiB3aGVuIHdlIGNvbnZlcnQgaXQgdG8gRFdvcmRzIGJlbG93 LgoKSSBhbHJlYWR5IHdyb3RlIGluIHRoaXMgc2FtZSB0aHJlYWQgZmV3IGRheXMgYWdvIHRoaXMg d2FzIG15IG92ZXJzaWdodC4KCj4+Cj4+PiArICAgIGNvbnN0IHUzMiB3cWlfbGVuID0gd3FpX3Np emUvc2l6ZW9mKHUzMikgLSAxOwo+Pj4gICAgICAgc3RydWN0IGd1Y19wcm9jZXNzX2Rlc2MgKmRl c2M7Cj4+PiAgICAgICBzdHJ1Y3QgZ3VjX3dxX2l0ZW0gKndxaTsKPj4+ICAgICAgIHZvaWQgKmJh c2U7Cj4+PiAtICAgIHUzMiB0YWlsLCB3cV9sZW4sIHdxX29mZiwgc3BhY2U7Cj4+PiArICAgIHUz MiBzcGFjZSwgdGFpbCwgd3Ffb2ZmLCB3cV9wYWdlOwo+Pj4KPj4+ICAgICAgIGRlc2MgPSBnYy0+ Y2xpZW50X2Jhc2UgKyBnYy0+cHJvY19kZXNjX29mZnNldDsKPj4+ICsKPj4+ICsgICAgLyogU3Bh Y2Ugd2FzIGNoZWNrZWQgZWFybGllciwgaW4gaTkxNV9ndWNfd3FfY2hlY2tfc3BhY2UoKSBhYm92 ZSAqLwo+Pgo+PiBJdCBtYXkgYmUgYWJvdmUgaW4gdGhlIGZpbGUsIGJ1dCB0aGUgdHdvIGRvIG5v dCBjYWxsIG9uZSBhbm90aGVyIHNvIEkKPj4gcmVjb21tZW5kIHNheWluZyBleGFjdGx5IHdobyBj YWxsZWQgaXQuCj4gSSBkb24ndCByZWFsbHkgbWluZCB3aG8gY2FsbGVkIGl0LCBhcyBsb25nIGFz IGl0IHdhcyBjYWxsZWQgc29tZXRpbWUKPiBlYXJsaWVyIGluIHRoZSByZXF1ZXN0IHN1Ym1pc3Np b24gcHJvdG9jb2wgLS0gdGhlIGNhbGxzaXRlIG1heSBnZXQgbW92ZWQKPiBhcm91bmQgYSBiaXQu IFVzZSBjc2NvcGUoMSkgb3IgeW91ciBmYXZvdXJpdGUgSURFIHRvIGZpbmQgaXQuCgpTbyB3aGF0 IGRvZXMgdGhpcyBjb21tZW50IHN1cHBvc2VkIHRvIHRlbGwgdGhlIHJlYWRlcj8gCmd1Y19hZGRf d29ya3F1ZXVlX2l0ZW0gZG9lcyBub3QgY2FsbCBpOTE1X2d1Y193cV9jaGVja19zcGFjZSBzbyAi YWJvdmUiIAp3aGF0PyBBYm92ZSBpbiB0aGUgZmlsZT8gT3IgbWF5YmUgKmVhcmxpZXIqIGluIHRo ZSBjYWxsIHNlcXVlbmNlIG9mIAp3aGF0PyBNaWdodCBhcyB3ZWxsIHB1dCBhbiB1c2VmdWwgY29t bWVudCBpbiB3aGVuIHlvdSBhcmUgYWRkaW5nIG9uZS4KCj4+Cj4+PiAgICAgICBzcGFjZSA9IENJ UkNfU1BBQ0UoZ2MtPndxX3RhaWwsIGRlc2MtPmhlYWQsIGdjLT53cV9zaXplKTsKPj4+IC0gICAg aWYgKFdBUk5fT04oc3BhY2UgPCBzaXplb2Yoc3RydWN0IGd1Y193cV9pdGVtKSkpCj4+PiAtICAg ICAgICByZXR1cm4gLUVOT1NQQzsgLyogc2hvdWxkbid0IGhhcHBlbiAqLwo+Pj4gKyAgICBHRU1f QlVHX09OKHNwYWNlIDwgd3FpX3NpemUpOwo+Pgo+PiBJdCBpcyBpbXBvc3NpYmxlIHRvIGhpdCB0 aGlzIG9ubHkgYmVjYXVzZSBvZiB0aGUgc3RydWN0X211dGV4IGd1YXJkaW5nCj4+IHRoZSB3aG9s ZSB0aW1lIHdpbmRvdyBmcm9tIHJlcXVlc3QgY3JlYXRpb24gdG8gc3VibWlzc2lvbi4gSWYgaW4g dGhlCj4+IGZ1dHVyZSwgbmVhciBvciBmYXIsIHRoYXQgZ2V0cyBmaXhlZCwgdGhlbiB0aGlzIHdp bGwgbmVlZCByZXdvcmtpbmcuCj4+Cj4+IEkgZG9uJ3QgaGF2ZSBhbnkgYmV0dGVyIGlkZWFzIHRo b3VnaC4KPj4KPj4gQnV0IGEgV0FSTl9PTiBhbmQgcmV0dXJuIHdvdWxkIGJlIGFsbW9zdCBhcyBn b29kLiBFdmVyeXRoaW5nIGlzIGJldHRlcgo+PiB0aGFuIGEgZGVhZCBtYWNoaW5lIG9uZSBjYW4n dCBzc2ggaW50by4uLgo+Pgo+PiBTbyBJIGFwcGVhbCB0byBtYWtlIHRoaXMgYSBXQVJOX09OIGFu ZCByZXR1cm4uIE5vdGhpbmcgYmFkIHdvdWxkCj4+IGhhcHBlbiBhcGFydCBmcm9tIHNvZnR3YXJl IHRoaW5raW5nIEdQVSBoYXMgaHVuZy4KPiBJZiB0aGUgZHJpdmVyIHZpb2xhdGVzIHRoZSBzZXF1 ZW5jaW5nIG9mIGNoZWNrK3N1Ym1pdCB0aGVuIGl0IGRvZXMKPiBpbmRlZWQgcmVxdWlyZSByZXdv cmtpbmcgLS0gdGhhdCB3b3VsZCBiZSBhIGJ1Zy4gSGVuY2UgKEdFTV8pQlVHX09OKCkuCgpUaGlz IGFsc28gd2FzIGNsYXJpZmllZCBpbiB0aGlzIHNhbWUgdGhyZWFkIGZldyBkYXlzIGFnbyBhbmQg SSBjb25jZWRlZCAKdGhlIHBvaW50LgoKPj4KPj4+Cj4+PiAtICAgIC8qIHBvc3RpbmNyZW1lbnQg V1EgdGFpbCBmb3IgbmV4dCB0aW1lICovCj4+PiAtICAgIHdxX29mZiA9IGdjLT53cV90YWlsOwo+ Pj4gLSAgICBnYy0+d3FfdGFpbCArPSBzaXplb2Yoc3RydWN0IGd1Y193cV9pdGVtKTsKPj4+IC0g ICAgZ2MtPndxX3RhaWwgJj0gZ2MtPndxX3NpemUgLSAxOwo+Pj4gKyAgICAvKiBUaGUgR3VDIGZp cm13YXJlIHdhbnRzIHRoZSB0YWlsIGluZGV4IGluIFFXb3Jkcywgbm90IGJ5dGVzICovCj4+PiAr ICAgIHRhaWwgPSBycS0+dGFpbDsKPj4KPj4gVXNlZCB0byBiZSBzYW1wbGVkIGZyb20gcnEtPnJp bmdidWYtPnRhaWwgLSBhcmUgdGhvc2UgdGhlIHNhbWU/Cj4gSXQgc2hvdWxkIGFsd2F5cyBoYXZl IGJlZW4gcnEtPnRhaWw7IHRoZXkncmUgdGhlIHNhbWUgYXQgcHJlc2VudCBiZWNhdXNlCj4gaXQg d2FzIGNvcGllZCBmcm9tIHJpbmdidWZmZXIgYXMgcGFydCBvZiB0aGUgc3VibWlzc2lvbiBwcm9j ZXNzLCBidXQgaXQKPiBtaWdodCBub3QgYmUgdGhlIHNhbWUgd2l0aCB0aGUgc2NoZWR1bGVyICYg cHJlZW1wdGlvbi4gU28gbGV0J3MgZ2V0IGl0Cj4gcmlnaHQgYmVmb3JlIGl0IGJlY29tZXMgYSBt eXN0ZXJpb3VzIGJ1Zy4KPj4KPj4+ICsgICAgR0VNX0JVR19PTih0YWlsICYgNyk7Cj4+PiArICAg IHRhaWwgPj49IDM7Cj4+PiArICAgIEdFTV9CVUdfT04odGFpbCA+IFdRX1JJTkdfVEFJTF9NQVgp Owo+Pj4KPj4+ICAgICAgIC8qIEZvciBub3cgd29ya3F1ZXVlIGl0ZW0gaXMgNCBEV3M7IHdvcmtx dWV1ZSBidWZmZXIgaXMgMgo+Pj4gcGFnZXMuIFNvIHdlCj4+PiAgICAgICAgKiBzaG91bGQgbm90 IGhhdmUgdGhlIGNhc2Ugd2hlcmUgc3RydWN0dXJlIHdxaSBpcyBhY3Jvc3MgcGFnZSwKPj4+IG5l aXRoZXIKPj4+IEBAIC00OTUsMTkgKzUwMCwyMyBAQCBzdGF0aWMgaW50IGd1Y19hZGRfd29ya3F1 ZXVlX2l0ZW0oc3RydWN0Cj4+PiBpOTE1X2d1Y19jbGllbnQgKmdjLAo+Pj4gICAgICAgICogWFhY OiBpZiBub3QgdGhlIGNhc2UsIHdlIG5lZWQgc2F2ZSBkYXRhIHRvIGEgdGVtcCB3cWkgYW5kCj4+ PiBjb3B5IGl0IHRvCj4+PiAgICAgICAgKiB3b3JrcXVldWUgYnVmZmVyIGR3IGJ5IGR3Lgo+Pj4g ICAgICAgICovCj4+PiAtICAgIFdBUk5fT04oc2l6ZW9mKHN0cnVjdCBndWNfd3FfaXRlbSkgIT0g MTYpOwo+Pj4gLSAgICBXQVJOX09OKHdxX29mZiAmIDMpOwo+Pj4gKyAgICBCVUlMRF9CVUdfT04o d3FpX3NpemUgIT0gMTYpOwo+Pj4KPj4+IC0gICAgLyogd3Egc3RhcnRzIGZyb20gdGhlIHBhZ2Ug YWZ0ZXIgZG9vcmJlbGwgLyBwcm9jZXNzX2Rlc2MgKi8KPj4+IC0gICAgYmFzZSA9IGttYXBfYXRv bWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShnYy0+Y2xpZW50X29iaiwKPj4+IC0gICAgICAg ICAgICAod3Ffb2ZmICsgR1VDX0RCX1NJWkUpID4+IFBBR0VfU0hJRlQpKTsKPj4+ICsgICAgLyog cG9zdGluY3JlbWVudCBXUSB0YWlsIGZvciBuZXh0IHRpbWUgKi8KPj4+ICsgICAgd3Ffb2ZmID0g Z2MtPndxX3RhaWw7Cj4+PiArICAgIGdjLT53cV90YWlsICs9IHdxaV9zaXplOwo+Pj4gKyAgICBn Yy0+d3FfdGFpbCAmPSBnYy0+d3Ffc2l6ZSAtIDE7Cj4+PiArICAgIEdFTV9CVUdfT04od3Ffb2Zm ICYgKHdxaV9zaXplIC0gMSkpOwo+Pgo+PiBVc2UgdG8gYmUgd3Ffb2ZmICYgMywgbm93IGlzIHdx X29mZiAmIDE1LCB3aGljaCBvbmUgaXMgY29ycmVjdD8KPiBUaGUgbmV3IG9uZSA6KSBJIG1hZGUg aXQgbW9yZSBzdHJpbmdlbnQsIHNvIHdlIGNoZWNrIGZvciBjb3JyZWN0Cj4gYWxpZ25tZW50IG9m IHdxX3RhaWwgdG8gc2l6ZW9mKHF1ZXVlIGl0ZW0pLCBub3QganVzdCBEV29yZC4KCldvcnRoIG1l bnRpb25pbmcgaW4gdGhlIGNvbW1pdCBtZXNzYWdlPyBTaW5jZSBpdCBiZWdpbnMgd2l0aCAiTW9z dGx5IApsaXR0bGUgb3B0aW1pc2F0aW9uczsiIHJlYWRlcnMvcmV2aWV3ZXJzIGV4cGVjdCB0byBz ZWUgbm8gZnVuY3Rpb25hbCAKY2hhbmdlcyB0aGVuLgoKPj4KPj4+ICsKPj4+ICsgICAgLyogV1Eg c3RhcnRzIGZyb20gdGhlIHBhZ2UgYWZ0ZXIgZG9vcmJlbGwgLyBwcm9jZXNzX2Rlc2MgKi8KPj4+ ICsgICAgd3FfcGFnZSA9ICh3cV9vZmYgKyBHVUNfREJfU0laRSkgPj4gUEFHRV9TSElGVDsKPj4+ ICAgICAgIHdxX29mZiAmPSBQQUdFX1NJWkUgLSAxOwo+Pj4gKyAgICBiYXNlID0ga21hcF9hdG9t aWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGdjLT5jbGllbnRfb2JqLAo+Pj4gd3FfcGFnZSkp Owo+Pj4gICAgICAgd3FpID0gKHN0cnVjdCBndWNfd3FfaXRlbSAqKSgoY2hhciAqKWJhc2UgKyB3 cV9vZmYpOwo+Pj4KPj4+IC0gICAgLyogbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlIGhlYWRlciAq Lwo+Pj4gLSAgICB3cV9sZW4gPSBzaXplb2Yoc3RydWN0IGd1Y193cV9pdGVtKSAvIHNpemVvZih1 MzIpIC0gMTsKPj4+ICsgICAgLyogTm93IGZpbGwgaW4gdGhlIDQtd29yZCB3b3JrIHF1ZXVlIGl0 ZW0gKi8KPj4+ICAgICAgIHdxaS0+aGVhZGVyID0gV1FfVFlQRV9JTk9SREVSIHwKPj4+IC0gICAg ICAgICAgICAod3FfbGVuIDw8IFdRX0xFTl9TSElGVCkgfAo+Pj4gKyAgICAgICAgICAgICh3cWlf bGVuIDw8IFdRX0xFTl9TSElGVCkgfAo+Pj4gICAgICAgICAgICAgICAocnEtPmVuZ2luZS0+Z3Vj X2lkIDw8IFdRX1RBUkdFVF9TSElGVCkgfAo+Pj4gICAgICAgICAgICAgICBXUV9OT19XQ0ZMVVNI X1dBSVQ7Cj4+Pgo+Pj4gQEAgLTUxNSwxNCArNTI0LDEwIEBAIHN0YXRpYyBpbnQgZ3VjX2FkZF93 b3JrcXVldWVfaXRlbShzdHJ1Y3QKPj4+IGk5MTVfZ3VjX2NsaWVudCAqZ2MsCj4+PiAgICAgICB3 cWktPmNvbnRleHRfZGVzYyA9ICh1MzIpaW50ZWxfbHJfY29udGV4dF9kZXNjcmlwdG9yKHJxLT5j dHgsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJxLT5lbmdpbmUpOwo+ Pj4KPj4+IC0gICAgLyogVGhlIEd1QyBmaXJtd2FyZSB3YW50cyB0aGUgdGFpbCBpbmRleCBpbiBR V29yZHMsIG5vdCBieXRlcyAqLwo+Pj4gLSAgICB0YWlsID0gcnEtPnJpbmdidWYtPnRhaWwgPj4g MzsKPj4+ICAgICAgIHdxaS0+cmluZ190YWlsID0gdGFpbCA8PCBXUV9SSU5HX1RBSUxfU0hJRlQ7 Cj4+PiAtICAgIHdxaS0+ZmVuY2VfaWQgPSAwOyAvKlhYWDogd2hhdCBmZW5jZSB0byBiZSBoZXJl ICovCj4+PiArICAgIHdxaS0+ZmVuY2VfaWQgPSBycS0+c2Vxbm87Cj4+Cj4+IE5vdCBtZW50aW9u ZWQgaW4gdGhlIGNvbW1pdD8KPiBOb3QgYWN0dWFsbHkgdXNlZCBlaXRoZXIsIGJ1dCBJIGV4cGVj dCBpdCB3YXMgcHJvdmlkZWQgZm9yIGEgV2luZG93cwo+IGZlbmNlIElELCBzbyBvdXIgZXF1aXZh bGVudCBpcyBhIHNlcW5vLgo+IEl0IG1heSBzaG93IHVwIGluIGEgR3VDIGxvZywgaW4gd2hpY2gg Y2FzZSBzZXFubyBwcm92aWRlcyBtb3JlIGhlbHBmdWwKPiBpbmZvcm1hdGlvbi4KCkJlc3QgdG8g bWVudGlvbiBpdCBpbiB0aGUgY29tbWl0IGltaG8sIGFnYWluLCBub3QgdG8gY29uZnVzZSAKcmVh ZGVycy9yZXZpZXdlcnMuCgo+Pgo+Pj4KPj4+ICAgICAgIGt1bm1hcF9hdG9taWMoYmFzZSk7Cj4+ PiAtCj4+PiAtICAgIHJldHVybiAwOwo+Pj4gICB9Cj4+Pgo+Pj4gICAvKioKPj4+IEBAIC01Mzcs MjYgKzU0MiwyMCBAQCBpbnQgaTkxNV9ndWNfc3VibWl0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdAo+Pj4gKnJxKQo+Pj4gICAgICAgdW5zaWduZWQgaW50IGVuZ2luZV9pZCA9IHJxLT5lbmdp bmUtPmd1Y19pZDsKPj4+ICAgICAgIHN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZycS0+aTkxNS0+ Z3VjOwo+Pj4gICAgICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50ID0gZ3VjLT5leGVj YnVmX2NsaWVudDsKPj4+IC0gICAgaW50IHFfcmV0LCBiX3JldDsKPj4+ICsgICAgaW50IGJfcmV0 Owo+Pgo+PiBXaGF0IGlzIGJfcmV0IG91dCBvZiBpbnRlcmVzdCwgZG9vcipCKmVsbCByZXR1cm4g Y29kZSA/Cj4+Cj4gWWVzLCBvcmlnaW5hbGx5IHFfcmV0ICYgYl9yZXQsIGZvciByZXR1cm4gZnJv bSBRdWV1aW5nIGFuZCBCZWxscmluZ2luZywKPiByZXNwZWN0aXZlbHkuIFF1ZXVpbmcgY2FuIG5v IGxvbmdlciByZXR1cm4gYW4gZXJyb3IsIGJ1dCByaW5naW5nIHRoZQo+IGRvb3JiZWxsIGNhbiwg ZXZlbiBpZiBvbmx5IGluIHRoZSBldmVudCBvZiBoYXJkd2FyZSBub3QgYmVoYXZpbmcgYXMKPiBz cGVjaWZpZWQuCj4+Pgo+Pj4gLSAgICBxX3JldCA9IGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0oY2xp ZW50LCBycSk7Cj4+PiAtICAgIGlmIChxX3JldCA9PSAwKQo+Pj4gLSAgICAgICAgYl9yZXQgPSBn dWNfcmluZ19kb29yYmVsbChjbGllbnQpOwo+Pj4gKyAgICBndWNfYWRkX3dvcmtxdWV1ZV9pdGVt KGNsaWVudCwgcnEpOwo+Pj4gKyAgICBiX3JldCA9IGd1Y19yaW5nX2Rvb3JiZWxsKGNsaWVudCk7 Cj4+Pgo+Pj4gICAgICAgY2xpZW50LT5zdWJtaXNzaW9uc1tlbmdpbmVfaWRdICs9IDE7Cj4+PiAt ICAgIGlmIChxX3JldCkgewo+Pj4gLSAgICAgICAgY2xpZW50LT5xX2ZhaWwgKz0gMTsKPj4+IC0g ICAgICAgIGNsaWVudC0+cmV0Y29kZSA9IHFfcmV0Owo+Pj4gLSAgICB9IGVsc2UgaWYgKGJfcmV0 KSB7Cj4+PiArICAgIGNsaWVudC0+cmV0Y29kZSA9IGJfcmV0Owo+Pgo+PiBJIHdhbnRlZCB0byBh c2sgZm9yIHdoYXQgaXMgdGhpcyBmb3IgYnV0IHRoZW4gZm91bmQgaXQgaXMgZm9yIGRlYnVnZnMu Cj4+Cj4+PiArICAgIGlmIChiX3JldCkKPj4+ICAgICAgICAgICBjbGllbnQtPmJfZmFpbCArPSAx Owo+Pj4gLSAgICAgICAgY2xpZW50LT5yZXRjb2RlID0gcV9yZXQgPSBiX3JldDsKPj4+IC0gICAg fSBlbHNlIHsKPj4+IC0gICAgICAgIGNsaWVudC0+cmV0Y29kZSA9IDA7Cj4+PiAtICAgIH0KPj4+ ICsKPj4+ICAgICAgIGd1Yy0+c3VibWlzc2lvbnNbZW5naW5lX2lkXSArPSAxOwo+Pj4gICAgICAg Z3VjLT5sYXN0X3NlcW5vW2VuZ2luZV9pZF0gPSBycS0+c2Vxbm87Cj4+Pgo+Pj4gLSAgICByZXR1 cm4gcV9yZXQ7Cj4+PiArICAgIHJldHVybiBiX3JldDsKPj4KPj4gQ291bGQgYWxzbyBraWxsIHRo ZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG9uZSwgdGhlIG9ubHkgY2FsbGVyLAo+PiBpbnRlbF9s b2dpY2FsX3JpbmdfYWR2YW5jZV9hbmRfc3VibWl0IGRvZXMgbm90IHVzZSBpdC4gVGhhdCBmdW5j dGlvbgo+PiBpdHNlbGYgZG9lcyBub3QgbG9vayBsaWtlIGl0IG5lZWRzIGEgcmV0dXJuIHZhbHVl IGF0IHRoZSBtb21lbnQuIDopCj4gVGhhdCdzIHJlYWxseSBvbmx5IGJlY2F1c2Ugd2UgZG9uJ3Qg aGF2ZSBhbiBleGl0IHN0cmF0ZWd5IGZvciBzdWJtaXNzaW9uCj4gZmFpbHVyZS4gSSB3b3VsZCBy YXRoZXIgc2VlIGFsbCBwYXJ0cyBvZiB0aGUgc3VibWlzc2lvbiBwcm9jZXNzIGFibGUgdG8KPiBy ZXR1cm4gZXJyb3JzIChlLmcuIGhhcmR3YXJlIG5vdCByZXNwb25kaW5nKSBhbmQgbGV0IHRoZSB0 b3AtbGV2ZWwgY29kZQo+IGltcGxlbWVudCBzb21lIHNvcnQgb2YgcmVjb3Zlcnkgc3RyYXRlZ3ku IEFueXdheSwgSSdtIGxlYXZpbmcgdGhpcyBoZXJlCj4gdW50aWwgc29tZW9uZSBjaGFuZ2VzIHRo ZSBjYWxsIHNpZ25hdHVyZSB0byB2b2lkLgo+Pgo+Pj4gICB9Cj4+Pgo+Pj4gICAvKgo+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+PiBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+PiBpbmRleCA0MzZmMmQ2Li4xMGUxZDVlIDEwMDY0 NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+PiBAQCAtNzQsNyArNzQsNyBAQCBzdHJ1 Y3QgaTkxNV9ndWNfY2xpZW50IHsKPj4+ICAgICAgIC8qIEd1QyBzdWJtaXNzaW9uIHN0YXRpc3Rp Y3MgJiBzdGF0dXMgKi8KPj4+ICAgICAgIHVpbnQ2NF90IHN1Ym1pc3Npb25zW0dVQ19NQVhfRU5H SU5FU19OVU1dOwo+Pj4gICAgICAgdWludDMyX3Qgbm9fd3Ffc3BhY2U7ICAgICAgICAvKiBTcGFj ZSBwcmUtY2hlY2sgZmFpbGVkICovCj4+PiAtICAgIHVpbnQzMl90IHFfZmFpbDsgICAgICAgIC8q IEZhaWxlZCB0byBxdWV1ZSAoTUJaKSAgICAqLwo+Pj4gKyAgICB1aW50MzJfdCBxX2ZhaWw7ICAg ICAgICAvKiBObyBsb25nZXIgdXNlZCAgICAgICAgKi8KPj4KPj4gR2V0IHJpZCBvZiBpdCB0aGVu Pwo+IE5vLCBpdCBrZWVwcyB0aGluZ3MgYWxpZ25lZC4gSXQgY2FuIGJlIHJldXNlZCBmb3IgdGhl IG5leHQgdGhpbmcgd2UgbmVlZAo+IHRvIGFkZC4KCkFGQUlSIHUzMnMgbmVlZCB0byBiZSA0LWJ5 dGUgYWxpZ25lZCBvbiB4ODZfNjQgc28gSSBkb24ndCBnZXQgaXQgYnV0IAp3aGF0ZXZlci4KClJl Z2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==