From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luis R. Rodriguez" Subject: Re: [PATCH 4/4] drm/i915: Move ioremap_wc tracking onto VMA Date: Wed, 20 Apr 2016 11:10:54 +0200 Message-ID: <20160420091054.GL1990@wotan.suse.de> References: <20160419123028.GI1990@wotan.suse.de> <1461069238-31539-1-git-send-email-chris@chris-wilson.co.uk> <1461069238-31539-4-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1461069238-31539-4-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: David Airlie , netdev@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Ingo Molnar , "Peter Zijlstra (Intel)" , mcgrof@kernel.org, dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org, Daniel Vetter , Dan Williams , Yishai Hadas , David Hildenbrand List-Id: linux-rdma@vger.kernel.org T24gVHVlLCBBcHIgMTksIDIwMTYgYXQgMDE6MzM6NThQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDZjZTJjMzFiOWE4MS4uOWVmNDcz MjllOGFlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTMzNDYsNiArMzM0Niwx NSBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmluaXNoX2d0dChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWluKTsKPiAgfQo+ ICAKPiArc3RhdGljIHZvaWQgX19pOTE1X3ZtYV9pb3VubWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KQo+ICt7Cj4gKwlpZiAodm1hLT5pb21hcCA9PSBOVUxMKQo+ICsJCXJldHVybjsKPiArCj4gKwlp b19tYXBwaW5nX3VubWFwKHZtYS0+aW9tYXApOwoKVGhlIE5VTEwgY2hlY2sgY291bGQganVzdCBi ZSBkb25lIGJ5IGlvX21hcHBpbmdfdW5tYXAoKSB0aGVuIHlvdQpjYW4gYXZvaWQgdGhpcyBpbiBv dGhlciBkcml2ZXJzIHRvby4KCj4gKwl2bWEtPmlvbWFwID0gTlVMTDsKCllvdSBhZGRlZCBhY2Nv dW50aW5nIGhlcmUsIGJ5IHNpbXBsZSBpbnQgYW5kIGluYyAvIGRlYydpbmcgaXQuCkkgY2Fubm90 IGNvbmZpcm0gaWYgaXQgaXMgY29ycmVjdGx5IGF2b2lkaW5nIHJhY2VzLCBjYW4geW91CmNvbmZp cm0/CgpBbHNvIHlvdSBhZGRlZCBhY2NvdW50aW5nIGZvciB0aGUgY3VzdG9tIHZtYSBwaW5uaW5n IHRoaW5nIGFuZCBkbwpHRU1fQlVHX09OKHZtYS0+cGluX2NvdW50ID09IDApOyB3aGVuIHlvdSB1 bnBpbiBvbmUgaW5zdGFuY2UgYnV0ICp5b3UgZG8gbm90KgpkbyBzb21ldGhpbmcgbGlrZSBHRU1f QlVHX09OKHZtYS0+cGluX2NvdW50ICE9IDApOyB3aGVuIHlvdSBkbyB0aGUgZmluYWwgZnVsbApp b3VubWFwLiBUaGF0IHNlZW1zIHJhdGhlciBzbG9wcHkuCgppb21hcHBpbmcgc3R1ZmYgaGFzIGl0 cyBvd24gY3VzdG9tIGRhdGEgc3RydWN0dXJlLCB3aHkgbm90IGp1c3QgdXNlIHRoYXQgZGF0YQpz dHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgc3RydWN0IGk5MTVfdm1hIGFuZCBnZW5lcmFsaXplIHRo aXMgPyBEcml2ZXJzIGNhbgpiZSBidWdneSBhbmQgYmVzdCBpZiB3ZSBhdm9pZCBjdXN0b20gZHJp dmVyIGFjY291bnRpbmcgYW5kIGp1c3QgZG8gaXQgaW4gYSBuZWF0CmdlbmVyaWMgZmFzaGlvbi4K ClRoZW4gb3RoZXIgZHJpdmVycyBjb3VsZCB1c2UgdGhpcyB0b28uCgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZmJkZXYuYwo+IGluZGV4IDc5YWMyMDJmMzg3MC4uOTNmNTRhMTAwNDJmIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCj4gQEAgLTI0NCwyMiArMjQ1LDIzIEBAIHN0YXRp YyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiAgCWlu Zm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fQ0FOX0ZPUkNFX09VVFBVVDsKPiAg CWluZm8tPmZib3BzID0gJmludGVsZmJfb3BzOwo+ICAKPiArCXZtYSA9IGk5MTVfZ2VtX29ial90 b19nZ3R0KG9iaik7Cj4gKwo+ICAJLyogc2V0dXAgYXBlcnR1cmUgYmFzZS9zaXplIGZvciB2ZXNh ZmIgdGFrZW92ZXIgKi8KPiAgCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UgPSBkZXYt Pm1vZGVfY29uZmlnLmZiX2Jhc2U7Cj4gIAlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5zaXpl ID0gZ2d0dC0+bWFwcGFibGVfZW5kOwo+ICAKPiAtCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZGV2 LT5tb2RlX2NvbmZpZy5mYl9iYXNlICsgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaik7Cj4g LQlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOwo+ICsJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBk ZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgKyB2bWEtPm5vZGUuc3RhcnQ7Cj4gKwlpbmZvLT5maXgu c21lbV9sZW4gPSB2bWEtPm5vZGUuc2l6ZTsKPiAgCj4gLQlpbmZvLT5zY3JlZW5fYmFzZSA9Cj4g LQkJaW9yZW1hcF93YyhnZ3R0LT5tYXBwYWJsZV9iYXNlICsgaTkxNV9nZW1fb2JqX2dndHRfb2Zm c2V0KG9iaiksCj4gLQkJCSAgIHNpemUpOwo+IC0JaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewo+ ICsJdmFkZHIgPSBpOTE1X3ZtYV9waW5faW9tYXAodm1hKTsKPiArCWlmIChJU19FUlIodmFkZHIp KSB7Cj4gIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVtYXAgZnJhbWVidWZmZXIgaW50byB2aXJ0 dWFsIG1lbW9yeVxuIik7Cj4gLQkJcmV0ID0gLUVOT1NQQzsKPiArCQlyZXQgPSBQVFJfRVJSKHZh ZGRyKTsKPiAgCQlnb3RvIG91dF9kZXN0cm95X2ZiaTsKPiAgCX0KPiAtCWluZm8tPnNjcmVlbl9z aXplID0gc2l6ZTsKPiArCWluZm8tPnNjcmVlbl9iYXNlID0gdmFkZHI7Cj4gKwlpbmZvLT5zY3Jl ZW5fc2l6ZSA9IHZtYS0+bm9kZS5zaXplOwoKc29tZSBmcmFtZWJ1ZmZlciBkcml2ZXJzIHRlbmQg dG8gdXNlIGEgZ2VuZXJpYyBzdGFydCBhZGRyZXNzIG9mCmlpbmZvLT5maXguc21lbV9zdGFydCBh bmQgYSBsZW5ndGggb2YgaW5mby0+Zml4LnNtZW1fbGVuLCB0aGlzCmRyaXZlciBzZXRzIHRoZSBz bWVtX3N0YXJ0IGFib3ZlLCBidXQgaXRzIGRpZmZlcmVudCB0aGFuIHdoYXQKZ2V0cyBpb3JlbWFw IGZvciBhIHN0YXJ0IGFkZHJlc3M6CgorICAgICAgICAgICAgICAgcHRyID0gaW9fbWFwcGluZ19t YXBfd2MoaTkxNV92bV90b19nZ3R0KHZtYS0+dm0pLT5tYXBwYWJsZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZtYS0+bm9kZS5zdGFydCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZtYS0+bm9kZS5zaXplKTsKCmZpeC5zbWVtX3N0YXJ0 IGlzIDoKCgo+ICsJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jh c2UgKyB2bWEtPm5vZGUuc3RhcnQ7CgpUaGUgc21lbV9sZW4gbWF0Y2hlcyB0aG91Z2guIENhbiB5 b3UgY2xhcmlmeSBpZiBpdHMgY29ycmVjdCBmb3IKdGhlIGlvX21hcHBpbmdfbWFwX3djKCkgc2hv dWxkIG5vdCBiZSB1c2luZyBpbmZvLT5maXguc21lbV9zdGFydAood2hpY2ggaXMgZGV2LT5tb2Rl X2NvbmZpZy5mYl9iYXNlICsgdm1hLT5ub2RlLnN0YXJ0KT8KClJlYXNvbiBJIGFzayBpcyBzaW5j ZSBJIG5vdGljZWQgYSB3aGlsZSBhZ28gYSBsb3Qgb2YgZHJpdmVycwp3ZXJlIHVzaW5nIGluZm8t PmZpeC5zbWVtX3N0YXJ0IGFuZCBpbmZvLT5maXguc21lbV9sZW4gY29uc2lzdGVudGx5CmZvciB0 aGVpciBpb3JlbWFwJ2QgYXJlYXMgaXQgbWlnaHQgbWFrZSBzZW5zZSBpbnN0ZWFkIHRvIGxldCB0 aGUKaW50ZXJuYWwgZnJhbWVidWZmZXIgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkpIG9wdGlvbmFs bHkgbWFuYWdlIHRoZQppb3JlbWFwX3djKCkgZm9yIGRyaXZlcnMsIGdpdmVuIHRoYXQgdGhpcyBp cyBwcmV0dHkgZ2VuZXJpYyBzdHVmZi4KCiAgTHVpcwpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932846AbcDTJLJ (ORCPT ); Wed, 20 Apr 2016 05:11:09 -0400 Received: from mx2.suse.de ([195.135.220.15]:50425 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752918AbcDTJLD (ORCPT ); Wed, 20 Apr 2016 05:11:03 -0400 Date: Wed, 20 Apr 2016 11:10:54 +0200 From: "Luis R. Rodriguez" To: Chris Wilson Cc: mcgrof@kernel.org, intel-gfx@lists.freedesktop.org, Tvrtko Ursulin , Daniel Vetter , Jani Nikula , David Airlie , Yishai Hadas , Dan Williams , Ingo Molnar , "Peter Zijlstra (Intel)" , David Hildenbrand , dri-devel@lists.freedesktop.org, netdev@vger.kernel.org, linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 4/4] drm/i915: Move ioremap_wc tracking onto VMA Message-ID: <20160420091054.GL1990@wotan.suse.de> References: <20160419123028.GI1990@wotan.suse.de> <1461069238-31539-1-git-send-email-chris@chris-wilson.co.uk> <1461069238-31539-4-git-send-email-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1461069238-31539-4-git-send-email-chris@chris-wilson.co.uk> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Apr 19, 2016 at 01:33:58PM +0100, Chris Wilson wrote: > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 6ce2c31b9a81..9ef47329e8ae 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -3346,6 +3346,15 @@ static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj) > old_write_domain); > } > > +static void __i915_vma_iounmap(struct i915_vma *vma) > +{ > + if (vma->iomap == NULL) > + return; > + > + io_mapping_unmap(vma->iomap); The NULL check could just be done by io_mapping_unmap() then you can avoid this in other drivers too. > + vma->iomap = NULL; You added accounting here, by simple int and inc / dec'ing it. I cannot confirm if it is correctly avoiding races, can you confirm? Also you added accounting for the custom vma pinning thing and do GEM_BUG_ON(vma->pin_count == 0); when you unpin one instance but *you do not* do something like GEM_BUG_ON(vma->pin_count != 0); when you do the final full iounmap. That seems rather sloppy. iomapping stuff has its own custom data structure, why not just use that data structure instead of the struct i915_vma and generalize this ? Drivers can be buggy and best if we avoid custom driver accounting and just do it in a neat generic fashion. Then other drivers could use this too. > diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c > index 79ac202f3870..93f54a10042f 100644 > --- a/drivers/gpu/drm/i915/intel_fbdev.c > +++ b/drivers/gpu/drm/i915/intel_fbdev.c > @@ -244,22 +245,23 @@ static int intelfb_create(struct drm_fb_helper *helper, > info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT; > info->fbops = &intelfb_ops; > > + vma = i915_gem_obj_to_ggtt(obj); > + > /* setup aperture base/size for vesafb takeover */ > info->apertures->ranges[0].base = dev->mode_config.fb_base; > info->apertures->ranges[0].size = ggtt->mappable_end; > > - info->fix.smem_start = dev->mode_config.fb_base + i915_gem_obj_ggtt_offset(obj); > - info->fix.smem_len = size; > + info->fix.smem_start = dev->mode_config.fb_base + vma->node.start; > + info->fix.smem_len = vma->node.size; > > - info->screen_base = > - ioremap_wc(ggtt->mappable_base + i915_gem_obj_ggtt_offset(obj), > - size); > - if (!info->screen_base) { > + vaddr = i915_vma_pin_iomap(vma); > + if (IS_ERR(vaddr)) { > DRM_ERROR("Failed to remap framebuffer into virtual memory\n"); > - ret = -ENOSPC; > + ret = PTR_ERR(vaddr); > goto out_destroy_fbi; > } > - info->screen_size = size; > + info->screen_base = vaddr; > + info->screen_size = vma->node.size; some framebuffer drivers tend to use a generic start address of iinfo->fix.smem_start and a length of info->fix.smem_len, this driver sets the smem_start above, but its different than what gets ioremap for a start address: + ptr = io_mapping_map_wc(i915_vm_to_ggtt(vma->vm)->mappable, + vma->node.start, + vma->node.size); fix.smem_start is : > + info->fix.smem_start = dev->mode_config.fb_base + vma->node.start; The smem_len matches though. Can you clarify if its correct for the io_mapping_map_wc() should not be using info->fix.smem_start (which is dev->mode_config.fb_base + vma->node.start)? Reason I ask is since I noticed a while ago a lot of drivers were using info->fix.smem_start and info->fix.smem_len consistently for their ioremap'd areas it might make sense instead to let the internal framebuffer (register_framebuffer()) optionally manage the ioremap_wc() for drivers, given that this is pretty generic stuff. Luis From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luis R. Rodriguez" Subject: Re: [PATCH 4/4] drm/i915: Move ioremap_wc tracking onto VMA Date: Wed, 20 Apr 2016 11:10:54 +0200 Message-ID: <20160420091054.GL1990@wotan.suse.de> References: <20160419123028.GI1990@wotan.suse.de> <1461069238-31539-1-git-send-email-chris@chris-wilson.co.uk> <1461069238-31539-4-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: David Airlie , netdev@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Ingo Molnar , "Peter Zijlstra \(Intel\)" , mcgrof@kernel.org, dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org, Daniel Vetter , Dan Williams , Yishai Hadas , David Hildenbrand To: Chris Wilson Return-path: Content-Disposition: inline In-Reply-To: <1461069238-31539-4-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" List-Id: netdev.vger.kernel.org T24gVHVlLCBBcHIgMTksIDIwMTYgYXQgMDE6MzM6NThQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDZjZTJjMzFiOWE4MS4uOWVmNDcz MjllOGFlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTMzNDYsNiArMzM0Niwx NSBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmluaXNoX2d0dChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWluKTsKPiAgfQo+ ICAKPiArc3RhdGljIHZvaWQgX19pOTE1X3ZtYV9pb3VubWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KQo+ICt7Cj4gKwlpZiAodm1hLT5pb21hcCA9PSBOVUxMKQo+ICsJCXJldHVybjsKPiArCj4gKwlp b19tYXBwaW5nX3VubWFwKHZtYS0+aW9tYXApOwoKVGhlIE5VTEwgY2hlY2sgY291bGQganVzdCBi ZSBkb25lIGJ5IGlvX21hcHBpbmdfdW5tYXAoKSB0aGVuIHlvdQpjYW4gYXZvaWQgdGhpcyBpbiBv dGhlciBkcml2ZXJzIHRvby4KCj4gKwl2bWEtPmlvbWFwID0gTlVMTDsKCllvdSBhZGRlZCBhY2Nv dW50aW5nIGhlcmUsIGJ5IHNpbXBsZSBpbnQgYW5kIGluYyAvIGRlYydpbmcgaXQuCkkgY2Fubm90 IGNvbmZpcm0gaWYgaXQgaXMgY29ycmVjdGx5IGF2b2lkaW5nIHJhY2VzLCBjYW4geW91CmNvbmZp cm0/CgpBbHNvIHlvdSBhZGRlZCBhY2NvdW50aW5nIGZvciB0aGUgY3VzdG9tIHZtYSBwaW5uaW5n IHRoaW5nIGFuZCBkbwpHRU1fQlVHX09OKHZtYS0+cGluX2NvdW50ID09IDApOyB3aGVuIHlvdSB1 bnBpbiBvbmUgaW5zdGFuY2UgYnV0ICp5b3UgZG8gbm90KgpkbyBzb21ldGhpbmcgbGlrZSBHRU1f QlVHX09OKHZtYS0+cGluX2NvdW50ICE9IDApOyB3aGVuIHlvdSBkbyB0aGUgZmluYWwgZnVsbApp b3VubWFwLiBUaGF0IHNlZW1zIHJhdGhlciBzbG9wcHkuCgppb21hcHBpbmcgc3R1ZmYgaGFzIGl0 cyBvd24gY3VzdG9tIGRhdGEgc3RydWN0dXJlLCB3aHkgbm90IGp1c3QgdXNlIHRoYXQgZGF0YQpz dHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgc3RydWN0IGk5MTVfdm1hIGFuZCBnZW5lcmFsaXplIHRo aXMgPyBEcml2ZXJzIGNhbgpiZSBidWdneSBhbmQgYmVzdCBpZiB3ZSBhdm9pZCBjdXN0b20gZHJp dmVyIGFjY291bnRpbmcgYW5kIGp1c3QgZG8gaXQgaW4gYSBuZWF0CmdlbmVyaWMgZmFzaGlvbi4K ClRoZW4gb3RoZXIgZHJpdmVycyBjb3VsZCB1c2UgdGhpcyB0b28uCgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZmJkZXYuYwo+IGluZGV4IDc5YWMyMDJmMzg3MC4uOTNmNTRhMTAwNDJmIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCj4gQEAgLTI0NCwyMiArMjQ1LDIzIEBAIHN0YXRp YyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiAgCWlu Zm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fQ0FOX0ZPUkNFX09VVFBVVDsKPiAg CWluZm8tPmZib3BzID0gJmludGVsZmJfb3BzOwo+ICAKPiArCXZtYSA9IGk5MTVfZ2VtX29ial90 b19nZ3R0KG9iaik7Cj4gKwo+ICAJLyogc2V0dXAgYXBlcnR1cmUgYmFzZS9zaXplIGZvciB2ZXNh ZmIgdGFrZW92ZXIgKi8KPiAgCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UgPSBkZXYt Pm1vZGVfY29uZmlnLmZiX2Jhc2U7Cj4gIAlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5zaXpl ID0gZ2d0dC0+bWFwcGFibGVfZW5kOwo+ICAKPiAtCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZGV2 LT5tb2RlX2NvbmZpZy5mYl9iYXNlICsgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaik7Cj4g LQlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOwo+ICsJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBk ZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgKyB2bWEtPm5vZGUuc3RhcnQ7Cj4gKwlpbmZvLT5maXgu c21lbV9sZW4gPSB2bWEtPm5vZGUuc2l6ZTsKPiAgCj4gLQlpbmZvLT5zY3JlZW5fYmFzZSA9Cj4g LQkJaW9yZW1hcF93YyhnZ3R0LT5tYXBwYWJsZV9iYXNlICsgaTkxNV9nZW1fb2JqX2dndHRfb2Zm c2V0KG9iaiksCj4gLQkJCSAgIHNpemUpOwo+IC0JaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewo+ ICsJdmFkZHIgPSBpOTE1X3ZtYV9waW5faW9tYXAodm1hKTsKPiArCWlmIChJU19FUlIodmFkZHIp KSB7Cj4gIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVtYXAgZnJhbWVidWZmZXIgaW50byB2aXJ0 dWFsIG1lbW9yeVxuIik7Cj4gLQkJcmV0ID0gLUVOT1NQQzsKPiArCQlyZXQgPSBQVFJfRVJSKHZh ZGRyKTsKPiAgCQlnb3RvIG91dF9kZXN0cm95X2ZiaTsKPiAgCX0KPiAtCWluZm8tPnNjcmVlbl9z aXplID0gc2l6ZTsKPiArCWluZm8tPnNjcmVlbl9iYXNlID0gdmFkZHI7Cj4gKwlpbmZvLT5zY3Jl ZW5fc2l6ZSA9IHZtYS0+bm9kZS5zaXplOwoKc29tZSBmcmFtZWJ1ZmZlciBkcml2ZXJzIHRlbmQg dG8gdXNlIGEgZ2VuZXJpYyBzdGFydCBhZGRyZXNzIG9mCmlpbmZvLT5maXguc21lbV9zdGFydCBh bmQgYSBsZW5ndGggb2YgaW5mby0+Zml4LnNtZW1fbGVuLCB0aGlzCmRyaXZlciBzZXRzIHRoZSBz bWVtX3N0YXJ0IGFib3ZlLCBidXQgaXRzIGRpZmZlcmVudCB0aGFuIHdoYXQKZ2V0cyBpb3JlbWFw IGZvciBhIHN0YXJ0IGFkZHJlc3M6CgorICAgICAgICAgICAgICAgcHRyID0gaW9fbWFwcGluZ19t YXBfd2MoaTkxNV92bV90b19nZ3R0KHZtYS0+dm0pLT5tYXBwYWJsZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZtYS0+bm9kZS5zdGFydCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZtYS0+bm9kZS5zaXplKTsKCmZpeC5zbWVtX3N0YXJ0 IGlzIDoKCgo+ICsJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jh c2UgKyB2bWEtPm5vZGUuc3RhcnQ7CgpUaGUgc21lbV9sZW4gbWF0Y2hlcyB0aG91Z2guIENhbiB5 b3UgY2xhcmlmeSBpZiBpdHMgY29ycmVjdCBmb3IKdGhlIGlvX21hcHBpbmdfbWFwX3djKCkgc2hv dWxkIG5vdCBiZSB1c2luZyBpbmZvLT5maXguc21lbV9zdGFydAood2hpY2ggaXMgZGV2LT5tb2Rl X2NvbmZpZy5mYl9iYXNlICsgdm1hLT5ub2RlLnN0YXJ0KT8KClJlYXNvbiBJIGFzayBpcyBzaW5j ZSBJIG5vdGljZWQgYSB3aGlsZSBhZ28gYSBsb3Qgb2YgZHJpdmVycwp3ZXJlIHVzaW5nIGluZm8t PmZpeC5zbWVtX3N0YXJ0IGFuZCBpbmZvLT5maXguc21lbV9sZW4gY29uc2lzdGVudGx5CmZvciB0 aGVpciBpb3JlbWFwJ2QgYXJlYXMgaXQgbWlnaHQgbWFrZSBzZW5zZSBpbnN0ZWFkIHRvIGxldCB0 aGUKaW50ZXJuYWwgZnJhbWVidWZmZXIgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkpIG9wdGlvbmFs bHkgbWFuYWdlIHRoZQppb3JlbWFwX3djKCkgZm9yIGRyaXZlcnMsIGdpdmVuIHRoYXQgdGhpcyBp cyBwcmV0dHkgZ2VuZXJpYyBzdHVmZi4KCiAgTHVpcwpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK