From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from perceval.ideasonboard.com ([213.167.242.64]:40854 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726843AbeG3RUA (ORCPT ); Mon, 30 Jul 2018 13:20:00 -0400 From: Laurent Pinchart To: Souptick Joarder Cc: airlied@linux.ie, Daniel Vetter , Vaishali Thakkar , Ajit Linux , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Linux Kernel Mailing List Subject: Re: [PATCH] drm/rcar-du: Convert drm_atomic_helper_suspend/resume() Date: Mon, 30 Jul 2018 18:45:03 +0300 Message-ID: <1691790.jmkE8kBUkl@avalon> In-Reply-To: References: <20180728154007.GA28426@jordon-HP-15-Notebook-PC> <2566982.Bc5DNITNHH@avalon> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Hi Souptick, On Monday, 30 July 2018 18:13:13 EEST Souptick Joarder wrote: > On Mon, Jul 30, 2018 at 7:54 PM, Laurent Pinchart wrote: > > On Monday, 30 July 2018 16:58:09 EEST Souptick Joarder wrote: > >> On Sun, Jul 29, 2018 at 1:50 AM, Laurent Pinchart wrote: > >>> On Saturday, 28 July 2018 21:50:58 EEST Souptick Joarder wrote: > >>>> On Sat, Jul 28, 2018 at 11:20 PM, Vaishali Thakkar wrote: > >>>>> On Sat, Jul 28, 2018 at 9:10 PM, Souptick Joarder wrote: > >>>>>> convert drm_atomic_helper_suspend/resume() to use > >>>>>> drm_mode_config_helper_suspend/resume(). > >>>>> > >>>>> Hi Souptick, > >>>>> > >>>>> Thanks for your patch. > >>>>> > >>>>>> Signed-off-by: Souptick Joarder > >>>>>> Signed-off-by: Ajit Negi > >>>>>> --- > >>>>>> > >>>>>> drivers/gpu/drm/rcar-du/rcar_du_drv.c | 21 ++------------------- > >>>>>> 1 file changed, 2 insertions(+), 19 deletions(-) > >>>>>> > >>>>>> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c > >>>>>> b/drivers/gpu/drm/rcar-du/rcar_du_drv.c index 02aee6c..288220f > >>>>>> 100644 > >>>>>> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c > >>>>>> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c > >>>>>> @@ -357,32 +357,15 @@ static void rcar_du_lastclose(struct > >>>>>> drm_device *dev) > >>>>>> > >>>>>> static int rcar_du_pm_suspend(struct device *dev) > >>>>>> { > >>>>>> > >>>>>> struct rcar_du_device *rcdu = dev_get_drvdata(dev); > >>>>>> > >>>>>> - struct drm_atomic_state *state; > >>>>>> > >>>>>> - drm_kms_helper_poll_disable(rcdu->ddev); > >>>>>> - drm_fbdev_cma_set_suspend_unlocked(rcdu->fbdev, true); > >>>>>> - > >>>>>> - state = drm_atomic_helper_suspend(rcdu->ddev); > >>>>>> - if (IS_ERR(state)) { > >>>>>> - drm_fbdev_cma_set_suspend_unlocked(rcdu->fbdev, > >>>>>> false); > >>>>> > >>>>> I don't think we can use drm_mode_config_helper_(suspend/resume) > >>>>> API here as this file uses CMA functions. > >>>> > >>>> drm_fbdev_cma_set_suspend_unlocked() is wrapper function which > >>>> invokes drm_fb_helper_set_suspend_unlocked(). > >>>> > >>>> Where the new API drm_mode_config_helper_suspend/resume() directly > >>>> invokes drm_fb_helper_set_suspend_unlocked(). So it is safe to replace > >>>> exiting code with API drm_mode_config_helper_suspend/resume(). > >>> > >>> I agree that they're functionally equivalent for now, but what if > >>> drm_fbdev_cma_set_suspend_unlocked() gets extended later ? This change > >>> risks introducing a breakage that could could unnoticed at that point. > >> > >> No, any extention of drm_fbdev_cma_set_suspend_unlocked() will not have > >> any impact on driver because with this patch we will be retaining the > >> original suspend/resume logic of the rcar-du driver and further this > >> driver is not going to use drm_fbdev_cma_set_suspend_unlocked(). > > > > My point is that if the fb cma helpers gets later extended with a feature > > that need special handling and suspend/resume time, with the > > drm_fbdev_cma_set_suspend_unlocked() function properly updated to take > > that feature into account, driver using those helpers but converted to > > drm_atomic_helper_suspend/resume() will break. > > > >>> At the very > >>> least you should add a comment in drm_fbdev_cma_set_suspend_unlocked() > >>> to explain that any extension of the function should also address all > >>> drivers using drm_mode_config_helper_suspend() and > >>> drm_mode_config_helper_resume(). > >> > >> The consumers of drm_fbdev_cma_set_suspend_unlocked() are - > >> drivers/gpu/drm/arm/hdlcd_drv.c > >> drivers/gpu/drm/drm_fb_cma_helper.c > >> > >> and both will be converted to use API > >> drm_mode_config_helper_suspend/resume(). As there will be no more > >> consumer of drm_fbdev_cma_set_suspend_unlocked() , we can remove this > >> wrapper API forever :) > > > > OK, if you remove the function completely then anyone wanting to extend > > the fbdev cma helpers in the way described above will notice that > > something will need to be done, so it's fine. Please thus make sure that > > you go all the way to removing that function. > > Sure, once both the drivers are converted to use > drm_mode_config_helper_suspend/resume() > and goes into linus's tree, then we can remove it. Could we get the two driver changes and the function removal merged all together ? > But will wait for some more feedback before concluding on this. > > Dave/ Daniel, Would you like to add any feedback ? > > >>>>> And from git grep it seems that there are very few drivers using it > >>>>> at the moment, so not sure if introducing new API functions similar to > >>>>> drm_mode_config will make sense or not. > >>>> > >>>> https://www.kernel.org/doc/html/latest/gpu/todo.html > >>>> > >>>> It was picked up from TODO list after discussing with Daniel. > >>>> > >>>>>> - drm_kms_helper_poll_enable(rcdu->ddev); > >>>>>> - return PTR_ERR(state); > >>>>>> - } > >>>>>> - > >>>>>> - rcdu->suspend_state = state; > >>> > >>> Additionally, I think you can remove the suspend_state field from the > >>> rcdu structure. > >> > >> Sure, I will remove it in v2. > >> > >>>>>> - return 0; > >>>>>> + return drm_mode_config_helper_suspend(rcdu->ddev); > >>>>>> } > >>>>>> > >>>>>> static int rcar_du_pm_resume(struct device *dev) > >>>>>> { > >>>>>> struct rcar_du_device *rcdu = dev_get_drvdata(dev); > >>>>>> > >>>>>> - drm_atomic_helper_resume(rcdu->ddev, rcdu->suspend_state); > >>>>>> - drm_fbdev_cma_set_suspend_unlocked(rcdu->fbdev, false); > >>>>>> - drm_kms_helper_poll_enable(rcdu->ddev); > >>>>>> - > >>>>>> - return 0; > >>>>>> + return drm_mode_config_helper_resume(rcdu->ddev); > >>>>>> } > >>>>>> #endif -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH] drm/rcar-du: Convert drm_atomic_helper_suspend/resume() Date: Mon, 30 Jul 2018 18:45:03 +0300 Message-ID: <1691790.jmkE8kBUkl@avalon> References: <20180728154007.GA28426@jordon-HP-15-Notebook-PC> <2566982.Bc5DNITNHH@avalon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7362F6E249 for ; Mon, 30 Jul 2018 15:44:26 +0000 (UTC) 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: Souptick Joarder Cc: Ajit Linux , airlied@linux.ie, Linux Kernel Mailing List , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Vaishali Thakkar List-Id: dri-devel@lists.freedesktop.org SGkgU291cHRpY2ssCgpPbiBNb25kYXksIDMwIEp1bHkgMjAxOCAxODoxMzoxMyBFRVNUIFNvdXB0 aWNrIEpvYXJkZXIgd3JvdGU6Cj4gT24gTW9uLCBKdWwgMzAsIDIwMTggYXQgNzo1NCBQTSwgTGF1 cmVudCBQaW5jaGFydCB3cm90ZToKPiA+IE9uIE1vbmRheSwgMzAgSnVseSAyMDE4IDE2OjU4OjA5 IEVFU1QgU291cHRpY2sgSm9hcmRlciB3cm90ZToKPiA+PiBPbiBTdW4sIEp1bCAyOSwgMjAxOCBh dCAxOjUwIEFNLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4+PiBPbiBTYXR1cmRheSwgMjgg SnVseSAyMDE4IDIxOjUwOjU4IEVFU1QgU291cHRpY2sgSm9hcmRlciB3cm90ZToKPiA+Pj4+IE9u IFNhdCwgSnVsIDI4LCAyMDE4IGF0IDExOjIwIFBNLCBWYWlzaGFsaSBUaGFra2FyIHdyb3RlOgo+ ID4+Pj4+IE9uIFNhdCwgSnVsIDI4LCAyMDE4IGF0IDk6MTAgUE0sIFNvdXB0aWNrIEpvYXJkZXIg d3JvdGU6Cj4gPj4+Pj4+IGNvbnZlcnQgZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZC9yZXN1bWUo KSB0byB1c2UKPiA+Pj4+Pj4gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9zdXNwZW5kL3Jlc3VtZSgp Lgo+ID4+Pj4+IAo+ID4+Pj4+IEhpIFNvdXB0aWNrLAo+ID4+Pj4+IAo+ID4+Pj4+IFRoYW5rcyBm b3IgeW91ciBwYXRjaC4KPiA+Pj4+PiAKPiA+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogU291cHRpY2sg Sm9hcmRlciA8anJkci5saW51eEBnbWFpbC5jb20+Cj4gPj4+Pj4+IFNpZ25lZC1vZmYtYnk6IEFq aXQgTmVnaSA8YWppdG4ubGludXhAZ21haWwuY29tPgo+ID4+Pj4+PiAtLS0KPiA+Pj4+Pj4gCj4g Pj4+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Rydi5jIHwgMjEgKystLS0t LS0tLS0tLS0tLS0tLS0tCj4gPj4+Pj4+ICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCsp LCAxOSBkZWxldGlvbnMoLSkKPiA+Pj4+Pj4gCj4gPj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Rydi5jCj4gPj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJt L3JjYXItZHUvcmNhcl9kdV9kcnYuYyBpbmRleCAwMmFlZTZjLi4yODgyMjBmCj4gPj4+Pj4+IDEw MDY0NAo+ID4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Rydi5j Cj4gPj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfZHJ2LmMKPiA+ Pj4+Pj4gQEAgLTM1NywzMiArMzU3LDE1IEBAIHN0YXRpYyB2b2lkIHJjYXJfZHVfbGFzdGNsb3Nl KHN0cnVjdAo+ID4+Pj4+PiBkcm1fZGV2aWNlICpkZXYpCj4gPj4+Pj4+IAo+ID4+Pj4+PiAgc3Rh dGljIGludCByY2FyX2R1X3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4+Pj4+PiAg ewo+ID4+Pj4+PiAgCj4gPj4+Pj4+ICAgICAgICAgc3RydWN0IHJjYXJfZHVfZGV2aWNlICpyY2R1 ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPj4+Pj4+IAo+ID4+Pj4+PiAtICAgICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKPiA+Pj4+Pj4gCj4gPj4+Pj4+IC0gICAgICAgZHJt X2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKHJjZHUtPmRkZXYpOwo+ID4+Pj4+PiAtICAgICAgIGRy bV9mYmRldl9jbWFfc2V0X3N1c3BlbmRfdW5sb2NrZWQocmNkdS0+ZmJkZXYsIHRydWUpOwo+ID4+ Pj4+PiAtCj4gPj4+Pj4+IC0gICAgICAgc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9zdXNwZW5k KHJjZHUtPmRkZXYpOwo+ID4+Pj4+PiAtICAgICAgIGlmIChJU19FUlIoc3RhdGUpKSB7Cj4gPj4+ Pj4+IC0gICAgICAgICAgICAgICBkcm1fZmJkZXZfY21hX3NldF9zdXNwZW5kX3VubG9ja2VkKHJj ZHUtPmZiZGV2LAo+ID4+Pj4+PiBmYWxzZSk7Cj4gPj4+Pj4gCj4gPj4+Pj4gSSBkb24ndCB0aGlu ayB3ZSBjYW4gdXNlIGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfKHN1c3BlbmQvcmVzdW1lKQo+ID4+ Pj4+IEFQSSBoZXJlIGFzIHRoaXMgZmlsZSB1c2VzIENNQSBmdW5jdGlvbnMuCj4gPj4+PiAKPiA+ Pj4+IGRybV9mYmRldl9jbWFfc2V0X3N1c3BlbmRfdW5sb2NrZWQoKSBpcyB3cmFwcGVyIGZ1bmN0 aW9uIHdoaWNoCj4gPj4+PiBpbnZva2VzIGRybV9mYl9oZWxwZXJfc2V0X3N1c3BlbmRfdW5sb2Nr ZWQoKS4KPiA+Pj4+IAo+ID4+Pj4gV2hlcmUgdGhlIG5ldyBBUEkgZHJtX21vZGVfY29uZmlnX2hl bHBlcl9zdXNwZW5kL3Jlc3VtZSgpIGRpcmVjdGx5Cj4gPj4+PiBpbnZva2VzIGRybV9mYl9oZWxw ZXJfc2V0X3N1c3BlbmRfdW5sb2NrZWQoKS4gU28gaXQgaXMgc2FmZSB0byByZXBsYWNlCj4gPj4+ PiBleGl0aW5nIGNvZGUgd2l0aCBBUEkgZHJtX21vZGVfY29uZmlnX2hlbHBlcl9zdXNwZW5kL3Jl c3VtZSgpLgo+ID4+PiAKPiA+Pj4gSSBhZ3JlZSB0aGF0IHRoZXkncmUgZnVuY3Rpb25hbGx5IGVx dWl2YWxlbnQgZm9yIG5vdywgYnV0IHdoYXQgaWYKPiA+Pj4gZHJtX2ZiZGV2X2NtYV9zZXRfc3Vz cGVuZF91bmxvY2tlZCgpIGdldHMgZXh0ZW5kZWQgbGF0ZXIgPyBUaGlzIGNoYW5nZQo+ID4+PiBy aXNrcyBpbnRyb2R1Y2luZyBhIGJyZWFrYWdlIHRoYXQgY291bGQgY291bGQgdW5ub3RpY2VkIGF0 IHRoYXQgcG9pbnQuCj4gPj4gCj4gPj4gTm8sIGFueSBleHRlbnRpb24gb2YgZHJtX2ZiZGV2X2Nt YV9zZXRfc3VzcGVuZF91bmxvY2tlZCgpIHdpbGwgbm90IGhhdmUKPiA+PiBhbnkgaW1wYWN0IG9u IGRyaXZlciBiZWNhdXNlIHdpdGggdGhpcyBwYXRjaCB3ZSB3aWxsIGJlIHJldGFpbmluZyB0aGUK PiA+PiBvcmlnaW5hbCBzdXNwZW5kL3Jlc3VtZSBsb2dpYyBvZiB0aGUgcmNhci1kdSBkcml2ZXIg YW5kIGZ1cnRoZXIgdGhpcwo+ID4+IGRyaXZlciBpcyBub3QgZ29pbmcgdG8gdXNlIGRybV9mYmRl dl9jbWFfc2V0X3N1c3BlbmRfdW5sb2NrZWQoKS4KPiA+IAo+ID4gTXkgcG9pbnQgaXMgdGhhdCBp ZiB0aGUgZmIgY21hIGhlbHBlcnMgZ2V0cyBsYXRlciBleHRlbmRlZCB3aXRoIGEgZmVhdHVyZQo+ ID4gdGhhdCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgYW5kIHN1c3BlbmQvcmVzdW1lIHRpbWUsIHdp dGggdGhlCj4gPiBkcm1fZmJkZXZfY21hX3NldF9zdXNwZW5kX3VubG9ja2VkKCkgZnVuY3Rpb24g cHJvcGVybHkgdXBkYXRlZCB0byB0YWtlCj4gPiB0aGF0IGZlYXR1cmUgaW50byBhY2NvdW50LCBk cml2ZXIgdXNpbmcgdGhvc2UgaGVscGVycyBidXQgY29udmVydGVkIHRvCj4gPiBkcm1fYXRvbWlj X2hlbHBlcl9zdXNwZW5kL3Jlc3VtZSgpIHdpbGwgYnJlYWsuCj4gPiAKPiA+Pj4gQXQgdGhlIHZl cnkKPiA+Pj4gbGVhc3QgeW91IHNob3VsZCBhZGQgYSBjb21tZW50IGluIGRybV9mYmRldl9jbWFf c2V0X3N1c3BlbmRfdW5sb2NrZWQoKQo+ID4+PiB0byBleHBsYWluIHRoYXQgYW55IGV4dGVuc2lv biBvZiB0aGUgZnVuY3Rpb24gc2hvdWxkIGFsc28gYWRkcmVzcyBhbGwKPiA+Pj4gZHJpdmVycyB1 c2luZyBkcm1fbW9kZV9jb25maWdfaGVscGVyX3N1c3BlbmQoKSBhbmQKPiA+Pj4gZHJtX21vZGVf Y29uZmlnX2hlbHBlcl9yZXN1bWUoKS4KPiA+PiAKPiA+PiBUaGUgY29uc3VtZXJzIG9mIGRybV9m YmRldl9jbWFfc2V0X3N1c3BlbmRfdW5sb2NrZWQoKSBhcmUgLQo+ID4+IGRyaXZlcnMvZ3B1L2Ry bS9hcm0vaGRsY2RfZHJ2LmMKPiA+PiBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2NtYV9oZWxwZXIu Ywo+ID4+IAo+ID4+IGFuZCBib3RoIHdpbGwgYmUgY29udmVydGVkIHRvIHVzZSBBUEkKPiA+PiBk cm1fbW9kZV9jb25maWdfaGVscGVyX3N1c3BlbmQvcmVzdW1lKCkuIEFzIHRoZXJlIHdpbGwgYmUg bm8gbW9yZQo+ID4+IGNvbnN1bWVyIG9mIGRybV9mYmRldl9jbWFfc2V0X3N1c3BlbmRfdW5sb2Nr ZWQoKSAsIHdlIGNhbiByZW1vdmUgdGhpcwo+ID4+IHdyYXBwZXIgQVBJIGZvcmV2ZXIgOikKPiA+ IAo+ID4gT0ssIGlmIHlvdSByZW1vdmUgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlbHkgdGhlbiBhbnlv bmUgd2FudGluZyB0byBleHRlbmQKPiA+IHRoZSBmYmRldiBjbWEgaGVscGVycyBpbiB0aGUgd2F5 IGRlc2NyaWJlZCBhYm92ZSB3aWxsIG5vdGljZSB0aGF0Cj4gPiBzb21ldGhpbmcgd2lsbCBuZWVk IHRvIGJlIGRvbmUsIHNvIGl0J3MgZmluZS4gUGxlYXNlIHRodXMgbWFrZSBzdXJlIHRoYXQKPiA+ IHlvdSBnbyBhbGwgdGhlIHdheSB0byByZW1vdmluZyB0aGF0IGZ1bmN0aW9uLgo+IAo+IFN1cmUs IG9uY2UgYm90aCB0aGUgZHJpdmVycyBhcmUgY29udmVydGVkIHRvIHVzZQo+IGRybV9tb2RlX2Nv bmZpZ19oZWxwZXJfc3VzcGVuZC9yZXN1bWUoKQo+IGFuZCBnb2VzIGludG8gbGludXMncyB0cmVl LCB0aGVuIHdlIGNhbiByZW1vdmUgaXQuCgpDb3VsZCB3ZSBnZXQgdGhlIHR3byBkcml2ZXIgY2hh bmdlcyBhbmQgdGhlIGZ1bmN0aW9uIHJlbW92YWwgbWVyZ2VkIGFsbCAKdG9nZXRoZXIgPwoKPiBC dXQgd2lsbCB3YWl0IGZvciBzb21lIG1vcmUgZmVlZGJhY2sgYmVmb3JlIGNvbmNsdWRpbmcgb24g dGhpcy4KPiAKPiBEYXZlLyBEYW5pZWwsIFdvdWxkIHlvdSBsaWtlIHRvIGFkZCBhbnkgZmVlZGJh Y2sgPwo+IAo+ID4+Pj4+IEFuZCBmcm9tIGdpdCBncmVwIGl0IHNlZW1zIHRoYXQgdGhlcmUgYXJl IHZlcnkgZmV3IGRyaXZlcnMgdXNpbmcgaXQKPiA+Pj4+PiBhdCB0aGUgbW9tZW50LCBzbyBub3Qg c3VyZSBpZiBpbnRyb2R1Y2luZyBuZXcgQVBJIGZ1bmN0aW9ucyBzaW1pbGFyIHRvCj4gPj4+Pj4g ZHJtX21vZGVfY29uZmlnIHdpbGwgbWFrZSBzZW5zZSBvciBub3QuCj4gPj4+PiAKPiA+Pj4+IGh0 dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L2dwdS90b2RvLmh0bWwKPiA+Pj4+ IAo+ID4+Pj4gSXQgd2FzIHBpY2tlZCB1cCBmcm9tIFRPRE8gbGlzdCBhZnRlciBkaXNjdXNzaW5n IHdpdGggRGFuaWVsLgo+ID4+Pj4gCj4gPj4+Pj4+IC0gICAgICAgICAgICAgICBkcm1fa21zX2hl bHBlcl9wb2xsX2VuYWJsZShyY2R1LT5kZGV2KTsKPiA+Pj4+Pj4gLSAgICAgICAgICAgICAgIHJl dHVybiBQVFJfRVJSKHN0YXRlKTsKPiA+Pj4+Pj4gLSAgICAgICB9Cj4gPj4+Pj4+IC0KPiA+Pj4+ Pj4gLSAgICAgICByY2R1LT5zdXNwZW5kX3N0YXRlID0gc3RhdGU7Cj4gPj4+IAo+ID4+PiBBZGRp dGlvbmFsbHksIEkgdGhpbmsgeW91IGNhbiByZW1vdmUgdGhlIHN1c3BlbmRfc3RhdGUgZmllbGQg ZnJvbSB0aGUKPiA+Pj4gcmNkdSBzdHJ1Y3R1cmUuCj4gPj4gCj4gPj4gU3VyZSwgSSB3aWxsIHJl bW92ZSBpdCBpbiB2Mi4KPiA+PiAKPiA+Pj4+Pj4gLSAgICAgICByZXR1cm4gMDsKPiA+Pj4+Pj4g KyAgICAgICByZXR1cm4gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9zdXNwZW5kKHJjZHUtPmRkZXYp Owo+ID4+Pj4+PiAgfQo+ID4+Pj4+PiAgCj4gPj4+Pj4+ICBzdGF0aWMgaW50IHJjYXJfZHVfcG1f cmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+Pj4+Pj4gIHsKPiA+Pj4+Pj4gICAgICAgICBz dHJ1Y3QgcmNhcl9kdV9kZXZpY2UgKnJjZHUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+Pj4+ Pj4gCj4gPj4+Pj4+IC0gICAgICAgZHJtX2F0b21pY19oZWxwZXJfcmVzdW1lKHJjZHUtPmRkZXYs IHJjZHUtPnN1c3BlbmRfc3RhdGUpOwo+ID4+Pj4+PiAtICAgICAgIGRybV9mYmRldl9jbWFfc2V0 X3N1c3BlbmRfdW5sb2NrZWQocmNkdS0+ZmJkZXYsIGZhbHNlKTsKPiA+Pj4+Pj4gLSAgICAgICBk cm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShyY2R1LT5kZGV2KTsKPiA+Pj4+Pj4gLQo+ID4+Pj4+ PiAtICAgICAgIHJldHVybiAwOwo+ID4+Pj4+PiArICAgICAgIHJldHVybiBkcm1fbW9kZV9jb25m aWdfaGVscGVyX3Jlc3VtZShyY2R1LT5kZGV2KTsKPiA+Pj4+Pj4gIH0KPiA+Pj4+Pj4gICNlbmRp ZgoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=