From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933438AbdEOIjz (ORCPT ); Mon, 15 May 2017 04:39:55 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:16795 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933310AbdEOIju (ORCPT ); Mon, 15 May 2017 04:39:50 -0400 MIME-version: 1.0 Content-type: text/plain; charset=utf-8 X-AuditID: cbfec7f2-f797e6d000004438-f0-59196949549d Subject: Re: [PATCH v3 4/6] drm: Use new mode_valid() helpers in connector probe helper To: Jose Abreu , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Carlos Palminha , Alexey Brodkin , =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= , Daniel Vetter , Dave Airlie , Archit Taneja From: Andrzej Hajda Message-id: Date: Mon, 15 May 2017 10:39:35 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 In-reply-to: <46c300b3827190dbb066f1af7b9d32088f8b5542.1494492646.git.joabreu@synopsys.com> Content-transfer-encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrGKsWRmVeSWpSXmKPExsWy7djP87qemZKRBs2nhS16z51kslj39TaT RVPHW1aLWfseslosfHiX2eLK1/dsFvf+fGC1uLxrDpvF938LmRw4PS739TJ57P22gMVj+7cH rB7zTgZ63O8+zuSxZf9nRo/Pm+QC2KO4bFJSczLLUov07RK4Mm4c/8lcsFKj4ujHD2wNjH/l uxg5OSQETCRuNPcyQdhiEhfurWfrYuTiEBJYyijxvvEPM4TzmVHi5oXDQA4HWMfr/1EQ8WWM Eh0LGsC6eQUEJX5MvscCYjMLaEq8+DKJBaLoGaPEqXdfwIqEBSIlTj1fzQxiiwhkSvx//Jsd pIhZYAaTxM2ug+wgCTag7r+bb7JBTLWT6JvcDWazCKhKbHu+hBHEFhWIkLg+ZwuYzSkQK/F7 /1EmiM3yEgevPAfbLCFwil1iQ/MGVoizZSU2HWCG+NNFYtfqDihbWOLV8S3sELaMRGfHQSaI 3m5GiU/9J9ghnCmMEv8+zIDqsJY4fPwiK8Q2PolJ26ZDw4VXoqNNCKLEQ+LDyb+sELajxO8b H6BBcYdR4k37TcYJjPKzkIJsFlKQzULyxAJG5lWMIqmlxbnpqcXGesWJucWleel6yfm5mxiB qef0v+OfdjB+PWF1iFGAg1GJhzfhskSkEGtiWXFl7iFGCQ5mJRHeBVGSkUK8KYmVValF+fFF pTmpxYcYpTlYlMR5uU5dixASSE8sSc1OTS1ILYLJMnFwSjUwrnq1qqRA9vyKoM9yy0OMT/0U qtk/56XKpqWb5xzaxJ+56OrOf5wynHqzVoXdzTKKeFNY/uOw3nuFZ3PXya+cNfeWbkW/ou69 lRlGbzJ1heum8pyyD+vlm/B0+5rUGy2b+J57ZqTHP1hU+Xblhus8E29rHz/gMPlDvMZvnmmu Xy97X4zYPGOuiK4SS3FGoqEWc1FxIgAiUr+YOQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrEIsWRmVeSWpSXmKPExsVy+t/xa7r3MiUjDXY1iVn0njvJZLHu620m i6aOt6wWs/Y9ZLVY+PAus8WVr+/ZLO79+cBqcXnXHDaL7/8WMjlwelzu62Xy2PttAYvH9m8P WD3mnQz0uN99nMljy/7PjB6fN8kFsEe52WSkJqakFimk5iXnp2TmpdsqhYa46VooKeQl5qba KkXo+oYEKSmUJeaUAnlGBmjAwTnAPVhJ3y7BLePG8Z/MBSs1Ko5+/MDWwPhXvouRg0NCwETi 9f+oLkZOIFNM4sK99WxdjFwcQgJLGCW6/8xmBknwCghK/Jh8jwWknllAXWLKlFyImmeMElue TGICqREWiJQ49Xw1WL2IQKZE05fLrCC2kMAdRokdf8AamAVmMUls2fcWrIFNQFPi7+abbBAL 7CT6JneD2SwCqhLbni9hBLFFBSIkHnbuYgexOQViJU5v3MoCYjMLyEscvPKcZQKjwCwk981C uG8WkqoFjMyrGEVSS4tz03OLDfWKE3OLS/PS9ZLzczcxAuNv27Gfm3cwXtoYfIhRgINRiYd3 x1WJSCHWxLLiytxDjBIczEoivL8zJCOFeFMSK6tSi/Lji0pzUosPMZoC3TqRWUo0OR+YGvJK 4g1NDM0tDY2MLSzMjYyUxHlLPlwJFxJITyxJzU5NLUgtgulj4uCUamDUOOjQ9ahKgfEgT2jt pm0tbgeZZ/25cmP6xHP7nms2lD+qObpjw8qLU9d1Fr3+FjvpT9uC0A7zqN3RnE7WvI+TJh0S mMH16svM68+m7E18fYCrUf/25ERvhXNf9QMuqVnEBi6Me3z93Ta750IenrO+Pv3I+9Rn6SQb k82VQhe1lboNxZXDEhqmKrEUZyQaajEXFScCAJY4ISLVAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170515083936eucas1p17968ba867f3fded8b85d5c85c2ce40d5 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRvsgrw=?= =?UTF-8?B?7ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRtTYW1z?= =?UTF-8?B?dW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170511090650epcas5p4f40af09dff02831285d0bcef6e12451c X-RootMTR: 20170511090650epcas5p4f40af09dff02831285d0bcef6e12451c References: <46c300b3827190dbb066f1af7b9d32088f8b5542.1494492646.git.joabreu@synopsys.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11.05.2017 11:06, Jose Abreu wrote: > This changes the connector probe helper function to use the new > encoder->mode_valid(), bridge->mode_valid() and crtc->mode_valid() > helper callbacks to validate the modes. > > The new callbacks are optional so the behaviour remains the same > if they are not implemented. If they are, then the code loops > through all the connector's encodersXbridgesXcrtcs and calls the > callback. > > If at least a valid encoderXbridgeXcrtc combination is found which > accepts the mode then the function returns MODE_OK. > > Signed-off-by: Jose Abreu > Cc: Carlos Palminha > Cc: Alexey Brodkin > Cc: Ville Syrjälä > Cc: Daniel Vetter > Cc: Dave Airlie > Cc: Andrzej Hajda > Cc: Archit Taneja > --- > > Changes v2->v3: > - Call also bridge->mode_valid (Daniel) > Changes v1->v2: > - Use new helpers suggested by Ville > - Change documentation (Daniel) > > drivers/gpu/drm/drm_probe_helper.c | 65 ++++++++++++++++++++++++++++++++++++-- > 1 file changed, 62 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c > index f01abdc..84d660e 100644 > --- a/drivers/gpu/drm/drm_probe_helper.c > +++ b/drivers/gpu/drm/drm_probe_helper.c > @@ -83,6 +83,61 @@ > return MODE_OK; > } > > +static enum drm_mode_status > +drm_mode_validate_connector(struct drm_connector *connector, > + struct drm_display_mode *mode) > +{ > + struct drm_device *dev = connector->dev; > + uint32_t *ids = connector->encoder_ids; > + enum drm_mode_status ret = MODE_OK; > + unsigned int i; > + > + /* Step 1: Validate against connector */ > + ret = drm_connector_mode_valid(connector, mode); > + if (ret != MODE_OK) > + return ret; > + > + /* Step 2: Validate against encoders and crtcs */ > + for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { > + struct drm_encoder *encoder = drm_encoder_find(dev, ids[i]); > + struct drm_crtc *crtc; > + > + if (!encoder) > + continue; > + > + ret = drm_encoder_mode_valid(encoder, mode); > + if (ret != MODE_OK) { > + /* No point in continuing for crtc check as this encoder > + * will not accept the mode anyway. If all encoders > + * reject the mode then, at exit, ret will not be > + * MODE_OK. */ > + continue; > + } > + > + ret = drm_bridge_mode_valid(encoder->bridge, mode); > + if (ret != MODE_OK) { > + /* There is also no point in continuing for crtc check > + * here. */ > + continue; > + } Maybe it is a bikeshedding, but wouldn't be better to call drm_bridge_mode_valid from drm_encoder_mode_valid, in general call all bridge related stuff from corresponding encoder stuff? This is more question about role of encoder->bridge, should it be treated as encoder's extension, or as 1st class citizen in drm? Another concern is about order of calls, it is from sink to source, to keep it consistent bridge should be called before encoder, am I right? Beside this: Reviewed-by: Andrzej Hajda -- Regards Andrzej > + > + drm_for_each_crtc(crtc, dev) { > + if (!drm_encoder_crtc_ok(encoder, crtc)) > + continue; > + > + ret = drm_crtc_mode_valid(crtc, mode); > + if (ret == MODE_OK) { > + /* If we get to this point there is at least > + * one combination of encoder+crtc that works > + * for this mode. Lets return now. */ > + return ret; > + } > + } > + } > + > + return ret; > +} > + > static int drm_helper_probe_add_cmdline_mode(struct drm_connector *connector) > { > struct drm_cmdline_mode *cmdline_mode; > @@ -322,7 +377,11 @@ void drm_kms_helper_poll_enable(struct drm_device *dev) > * - drm_mode_validate_flag() checks the modes against basic connector > * capabilities (interlace_allowed,doublescan_allowed,stereo_allowed) > * - the optional &drm_connector_helper_funcs.mode_valid helper can perform > - * driver and/or hardware specific checks > + * driver and/or sink specific checks > + * - the optional &drm_crtc_helper_funcs.mode_valid, > + * &drm_bridge_funcs.mode_valid and &drm_encoder_helper_funcs.mode_valid > + * helpers can perform driver and/or source specific checks which are also > + * enforced by the modeset/atomic helpers > * > * 5. Any mode whose status is not OK is pruned from the connector's modes list, > * accompanied by a debug message indicating the reason for the mode's > @@ -466,8 +525,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, > if (mode->status == MODE_OK) > mode->status = drm_mode_validate_flag(mode, mode_flags); > > - if (mode->status == MODE_OK && connector_funcs->mode_valid) > - mode->status = connector_funcs->mode_valid(connector, > + if (mode->status == MODE_OK) > + mode->status = drm_mode_validate_connector(connector, > mode); > } > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v3 4/6] drm: Use new mode_valid() helpers in connector probe helper Date: Mon, 15 May 2017 10:39:35 +0200 Message-ID: References: <46c300b3827190dbb066f1af7b9d32088f8b5542.1494492646.git.joabreu@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout3.w1.samsung.com (mailout3.w1.samsung.com [210.118.77.13]) by gabe.freedesktop.org (Postfix) with ESMTPS id 026EC6E034 for ; Mon, 15 May 2017 08:39:41 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OPZ00AXDK22LG70@mailout3.w1.samsung.com> for dri-devel@lists.freedesktop.org; Mon, 15 May 2017 09:39:38 +0100 (BST) In-reply-to: <46c300b3827190dbb066f1af7b9d32088f8b5542.1494492646.git.joabreu@synopsys.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jose Abreu , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Daniel Vetter , Alexey Brodkin , Carlos Palminha List-Id: dri-devel@lists.freedesktop.org T24gMTEuMDUuMjAxNyAxMTowNiwgSm9zZSBBYnJldSB3cm90ZToKPiBUaGlzIGNoYW5nZXMgdGhl IGNvbm5lY3RvciBwcm9iZSBoZWxwZXIgZnVuY3Rpb24gdG8gdXNlIHRoZSBuZXcKPiBlbmNvZGVy LT5tb2RlX3ZhbGlkKCksIGJyaWRnZS0+bW9kZV92YWxpZCgpIGFuZCBjcnRjLT5tb2RlX3ZhbGlk KCkKPiBoZWxwZXIgY2FsbGJhY2tzIHRvIHZhbGlkYXRlIHRoZSBtb2Rlcy4KPgo+IFRoZSBuZXcg Y2FsbGJhY2tzIGFyZSBvcHRpb25hbCBzbyB0aGUgYmVoYXZpb3VyIHJlbWFpbnMgdGhlIHNhbWUK PiBpZiB0aGV5IGFyZSBub3QgaW1wbGVtZW50ZWQuIElmIHRoZXkgYXJlLCB0aGVuIHRoZSBjb2Rl IGxvb3BzCj4gdGhyb3VnaCBhbGwgdGhlIGNvbm5lY3RvcidzIGVuY29kZXJzWGJyaWRnZXNYY3J0 Y3MgYW5kIGNhbGxzIHRoZQo+IGNhbGxiYWNrLgo+Cj4gSWYgYXQgbGVhc3QgYSB2YWxpZCBlbmNv ZGVyWGJyaWRnZVhjcnRjIGNvbWJpbmF0aW9uIGlzIGZvdW5kIHdoaWNoCj4gYWNjZXB0cyB0aGUg bW9kZSB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIE1PREVfT0suCj4KPiBTaWduZWQtb2ZmLWJ5 OiBKb3NlIEFicmV1IDxqb2FicmV1QHN5bm9wc3lzLmNvbT4KPiBDYzogQ2FybG9zIFBhbG1pbmhh IDxwYWxtaW5oYUBzeW5vcHN5cy5jb20+Cj4gQ2M6IEFsZXhleSBCcm9ka2luIDxhYnJvZGtpbkBz eW5vcHN5cy5jb20+Cj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+Cj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4g Q2M6IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgo+IENjOiBBbmRyemVqIEhhamRhIDxh LmhhamRhQHNhbXN1bmcuY29tPgo+IENjOiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJv cmEub3JnPgo+IC0tLQo+Cj4gQ2hhbmdlcyB2Mi0+djM6Cj4gCS0gQ2FsbCBhbHNvIGJyaWRnZS0+ bW9kZV92YWxpZCAoRGFuaWVsKQo+IENoYW5nZXMgdjEtPnYyOgo+IAktIFVzZSBuZXcgaGVscGVy cyBzdWdnZXN0ZWQgYnkgVmlsbGUKPiAJLSBDaGFuZ2UgZG9jdW1lbnRhdGlvbiAoRGFuaWVsKQo+ Cj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMgfCA2NSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLQo+ICAxIGZpbGUgY2hhbmdlZCwgNjIgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJt X3Byb2JlX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYwo+IGlu ZGV4IGYwMWFiZGMuLjg0ZDY2MGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9w cm9iZV9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMK PiBAQCAtODMsNiArODMsNjEgQEAKPiAgCXJldHVybiBNT0RFX09LOwo+ICB9Cj4gIAo+ICtzdGF0 aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKPiArZHJtX21vZGVfdmFsaWRhdGVfY29ubmVjdG9yKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rv ci0+ZGV2Owo+ICsJdWludDMyX3QgKmlkcyA9IGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHM7Cj4gKwll bnVtIGRybV9tb2RlX3N0YXR1cyByZXQgPSBNT0RFX09LOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4g Kwo+ICsJLyogU3RlcCAxOiBWYWxpZGF0ZSBhZ2FpbnN0IGNvbm5lY3RvciAqLwo+ICsJcmV0ID0g ZHJtX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKGNvbm5lY3RvciwgbW9kZSk7Cj4gKwlpZiAocmV0ICE9 IE1PREVfT0spCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBTdGVwIDI6IFZhbGlkYXRlIGFn YWluc3QgZW5jb2RlcnMgYW5kIGNydGNzICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5F Q1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7Cj4gKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy ID0gZHJtX2VuY29kZXJfZmluZChkZXYsIGlkc1tpXSk7Cj4gKwkJc3RydWN0IGRybV9jcnRjICpj cnRjOwo+ICsKPiArCQlpZiAoIWVuY29kZXIpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlyZXQg PSBkcm1fZW5jb2Rlcl9tb2RlX3ZhbGlkKGVuY29kZXIsIG1vZGUpOwo+ICsJCWlmIChyZXQgIT0g TU9ERV9PSykgewo+ICsJCQkvKiBObyBwb2ludCBpbiBjb250aW51aW5nIGZvciBjcnRjIGNoZWNr IGFzIHRoaXMgZW5jb2Rlcgo+ICsJCQkgKiB3aWxsIG5vdCBhY2NlcHQgdGhlIG1vZGUgYW55d2F5 LiBJZiBhbGwgZW5jb2RlcnMKPiArCQkJICogcmVqZWN0IHRoZSBtb2RlIHRoZW4sIGF0IGV4aXQs IHJldCB3aWxsIG5vdCBiZQo+ICsJCQkgKiBNT0RFX09LLiAqLwo+ICsJCQljb250aW51ZTsKPiAr CQl9Cj4gKwo+ICsJCXJldCA9IGRybV9icmlkZ2VfbW9kZV92YWxpZChlbmNvZGVyLT5icmlkZ2Us IG1vZGUpOwo+ICsJCWlmIChyZXQgIT0gTU9ERV9PSykgewo+ICsJCQkvKiBUaGVyZSBpcyBhbHNv IG5vIHBvaW50IGluIGNvbnRpbnVpbmcgZm9yIGNydGMgY2hlY2sKPiArCQkJICogaGVyZS4gKi8K PiArCQkJY29udGludWU7Cj4gKwkJfQoKTWF5YmUgaXQgaXMgYSBiaWtlc2hlZGRpbmcsIGJ1dCB3 b3VsZG4ndCBiZSBiZXR0ZXIgdG8gY2FsbApkcm1fYnJpZGdlX21vZGVfdmFsaWQgZnJvbSBkcm1f ZW5jb2Rlcl9tb2RlX3ZhbGlkLCBpbiBnZW5lcmFsIGNhbGwgYWxsCmJyaWRnZSByZWxhdGVkIHN0 dWZmIGZyb20gY29ycmVzcG9uZGluZyBlbmNvZGVyIHN0dWZmPwpUaGlzIGlzIG1vcmUgcXVlc3Rp b24gYWJvdXQgcm9sZSBvZiBlbmNvZGVyLT5icmlkZ2UsIHNob3VsZCBpdCBiZQp0cmVhdGVkIGFz IGVuY29kZXIncyBleHRlbnNpb24sIG9yIGFzIDFzdCBjbGFzcyBjaXRpemVuIGluIGRybT8KCkFu b3RoZXIgY29uY2VybiBpcyBhYm91dCBvcmRlciBvZiBjYWxscywgaXQgaXMgZnJvbSBzaW5rIHRv IHNvdXJjZSwgdG8Ka2VlcCBpdCBjb25zaXN0ZW50IGJyaWRnZSBzaG91bGQgYmUgY2FsbGVkIGJl Zm9yZSBlbmNvZGVyLCBhbSBJIHJpZ2h0PwpCZXNpZGUgdGhpczoKUmV2aWV3ZWQtYnk6IEFuZHJ6 ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+CgogLS0KUmVnYXJkcwpBbmRyemVqCgo+ICsK PiArCQlkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkZXYpIHsKPiArCQkJaWYgKCFkcm1fZW5jb2Rl cl9jcnRjX29rKGVuY29kZXIsIGNydGMpKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlyZXQg PSBkcm1fY3J0Y19tb2RlX3ZhbGlkKGNydGMsIG1vZGUpOwo+ICsJCQlpZiAocmV0ID09IE1PREVf T0spIHsKPiArCQkJCS8qIElmIHdlIGdldCB0byB0aGlzIHBvaW50IHRoZXJlIGlzIGF0IGxlYXN0 Cj4gKwkJCQkgKiBvbmUgY29tYmluYXRpb24gb2YgZW5jb2RlcitjcnRjIHRoYXQgd29ya3MKPiAr CQkJCSAqIGZvciB0aGlzIG1vZGUuIExldHMgcmV0dXJuIG5vdy4gKi8KPiArCQkJCXJldHVybiBy ZXQ7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAg c3RhdGljIGludCBkcm1faGVscGVyX3Byb2JlX2FkZF9jbWRsaW5lX21vZGUoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPiAgewo+ICAJc3RydWN0IGRybV9jbWRsaW5lX21vZGUgKmNt ZGxpbmVfbW9kZTsKPiBAQCAtMzIyLDcgKzM3NywxMSBAQCB2b2lkIGRybV9rbXNfaGVscGVyX3Bv bGxfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gICAqICAgIC0gZHJtX21vZGVfdmFs aWRhdGVfZmxhZygpIGNoZWNrcyB0aGUgbW9kZXMgYWdhaW5zdCBiYXNpYyBjb25uZWN0b3IKPiAg ICogICAgICBjYXBhYmlsaXRpZXMgKGludGVybGFjZV9hbGxvd2VkLGRvdWJsZXNjYW5fYWxsb3dl ZCxzdGVyZW9fYWxsb3dlZCkKPiAgICogICAgLSB0aGUgb3B0aW9uYWwgJmRybV9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzLm1vZGVfdmFsaWQgaGVscGVyIGNhbiBwZXJmb3JtCj4gLSAqICAgICAgZHJp dmVyIGFuZC9vciBoYXJkd2FyZSBzcGVjaWZpYyBjaGVja3MKPiArICogICAgICBkcml2ZXIgYW5k L29yIHNpbmsgc3BlY2lmaWMgY2hlY2tzCj4gKyAqICAgIC0gdGhlIG9wdGlvbmFsICZkcm1fY3J0 Y19oZWxwZXJfZnVuY3MubW9kZV92YWxpZCwKPiArICogICAgICAmZHJtX2JyaWRnZV9mdW5jcy5t b2RlX3ZhbGlkIGFuZCAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLm1vZGVfdmFsaWQKPiArICog ICAgICBoZWxwZXJzIGNhbiBwZXJmb3JtIGRyaXZlciBhbmQvb3Igc291cmNlIHNwZWNpZmljIGNo ZWNrcyB3aGljaCBhcmUgYWxzbwo+ICsgKiAgICAgIGVuZm9yY2VkIGJ5IHRoZSBtb2Rlc2V0L2F0 b21pYyBoZWxwZXJzCj4gICAqCj4gICAqIDUuIEFueSBtb2RlIHdob3NlIHN0YXR1cyBpcyBub3Qg T0sgaXMgcHJ1bmVkIGZyb20gdGhlIGNvbm5lY3RvcidzIG1vZGVzIGxpc3QsCj4gICAqICAgIGFj Y29tcGFuaWVkIGJ5IGEgZGVidWcgbWVzc2FnZSBpbmRpY2F0aW5nIHRoZSByZWFzb24gZm9yIHRo ZSBtb2RlJ3MKPiBAQCAtNDY2LDggKzUyNSw4IEBAIGludCBkcm1faGVscGVyX3Byb2JlX3Npbmds ZV9jb25uZWN0b3JfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQlp ZiAobW9kZS0+c3RhdHVzID09IE1PREVfT0spCj4gIAkJCW1vZGUtPnN0YXR1cyA9IGRybV9tb2Rl X3ZhbGlkYXRlX2ZsYWcobW9kZSwgbW9kZV9mbGFncyk7Cj4gIAo+IC0JCWlmIChtb2RlLT5zdGF0 dXMgPT0gTU9ERV9PSyAmJiBjb25uZWN0b3JfZnVuY3MtPm1vZGVfdmFsaWQpCj4gLQkJCW1vZGUt PnN0YXR1cyA9IGNvbm5lY3Rvcl9mdW5jcy0+bW9kZV92YWxpZChjb25uZWN0b3IsCj4gKwkJaWYg KG1vZGUtPnN0YXR1cyA9PSBNT0RFX09LKQo+ICsJCQltb2RlLT5zdGF0dXMgPSBkcm1fbW9kZV92 YWxpZGF0ZV9jb25uZWN0b3IoY29ubmVjdG9yLAo+ICAJCQkJCQkJCSAgIG1vZGUpOwo+ICAJfQo+ ICAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK