From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932741AbeCMXYX (ORCPT ); Tue, 13 Mar 2018 19:24:23 -0400 Received: from mail-qt0-f196.google.com ([209.85.216.196]:37663 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752757AbeCMXYW (ORCPT ); Tue, 13 Mar 2018 19:24:22 -0400 X-Google-Smtp-Source: AG47ELvTsbJCIX5uPhVWUEmYGWtwqmfNp39vs43oyYM0iRxaUMTnK6SG5QbKXRHVofd2JGpoFP6PEg== Message-ID: <1520983460.24712.3.camel@redhat.com> Subject: Re: [PATCH v3 1/5] drm/i915: Move DP modeset retry work into intel_dp From: Lyude Paul Reply-To: lyude@redhat.com To: Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Manasi Navare , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , linux-kernel@vger.kernel.org Date: Tue, 13 Mar 2018 19:24:20 -0400 In-Reply-To: <20180312210102.GR5453@intel.com> References: <20180308232421.14049-1-lyude@redhat.com> <20180309213232.19855-1-lyude@redhat.com> <20180312210102.GR5453@intel.com> Organization: Red Hat Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.26.5 (3.26.5-1.fc27) Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2018-03-12 at 23:01 +0200, Ville Syrjälä wrote: > On Fri, Mar 09, 2018 at 04:32:27PM -0500, Lyude Paul wrote: > > While having the modeset_retry_work in intel_connector makes sense with > > SST, this paradigm doesn't make a whole ton of sense when it comes to > > MST since we have to deal with multiple connectors. In most cases, it's > > more useful to just use the intel_dp struct since it indicates whether > > or not we're dealing with an MST device, along with being able to easily > > trace the intel_dp struct back to it's respective connector (if there is > > any). So, move the modeset_retry_work function out of the > > intel_connector struct and into intel_dp. > > > > Signed-off-by: Lyude Paul > > Reviewed-by: Manasi Navare > > Cc: Manasi Navare > > Cc: Ville Syrjälä > > > > V2: > > - Remove accidental duplicate modeset_retry_work in intel_connector > > V3: > > - Also check against eDP in intel_hpd_poll_fini() - mdnavare > > Signed-off-by: Lyude Paul > > --- > > drivers/gpu/drm/i915/intel_display.c | 25 +++++++++++++++++++++++- > > - > > drivers/gpu/drm/i915/intel_dp.c | 10 ++++------ > > drivers/gpu/drm/i915/intel_dp_link_training.c | 2 +- > > drivers/gpu/drm/i915/intel_drv.h | 6 +++--- > > 4 files changed, 31 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_display.c > > b/drivers/gpu/drm/i915/intel_display.c > > index f424fff477f6..3b7fa430a84a 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -15394,16 +15394,37 @@ static void intel_hpd_poll_fini(struct drm_device > > *dev) > > { > > struct intel_connector *connector; > > struct drm_connector_list_iter conn_iter; > > + struct work_struct *work; > > + int conn_type; > > > > /* Kill all the work that may have been queued by hpd. */ > > drm_connector_list_iter_begin(dev, &conn_iter); > > for_each_intel_connector_iter(connector, &conn_iter) { > > - if (connector->modeset_retry_work.func) > > - cancel_work_sync(&connector->modeset_retry_work); > > if (connector->hdcp_shim) { > > cancel_delayed_work_sync(&connector- > > >hdcp_check_work); > > cancel_work_sync(&connector->hdcp_prop_work); > > } > > + > > + conn_type = connector->base.connector_type; > > + if (conn_type != DRM_MODE_CONNECTOR_eDP && > > + conn_type != DRM_MODE_CONNECTOR_DisplayPort) > > + continue; > > + > > + if (connector->mst_port) { > > + work = &connector->mst_port->modeset_retry_work; > > + } else { > > + struct intel_encoder *intel_encoder = > > + connector->encoder; > > + struct intel_dp *intel_dp; > > + > > + if (!intel_encoder) > > + continue; > > + > > + intel_dp = enc_to_intel_dp(&intel_encoder->base); > > + work = &intel_dp->modeset_retry_work; > > + } > > + > > + cancel_work_sync(work); > > Why are we even walking the connectors for this? Can't we just > walk the encoders instead? We could walk the encoders for this, but seeing as we're already walking the connectors for the HDCP prop doesn't it make more sense to just stick our code there? or is there a simpler solution for this I'm missing > > > } > > drm_connector_list_iter_end(&conn_iter); > > } > > diff --git a/drivers/gpu/drm/i915/intel_dp.c > > b/drivers/gpu/drm/i915/intel_dp.c > > index 4dd1b2287dd6..5abf0c95725a 100644 > > --- a/drivers/gpu/drm/i915/intel_dp.c > > +++ b/drivers/gpu/drm/i915/intel_dp.c > > @@ -6261,12 +6261,10 @@ static bool intel_edp_init_connector(struct intel_dp > > *intel_dp, > > > > static void intel_dp_modeset_retry_work_fn(struct work_struct *work) > > { > > - struct intel_connector *intel_connector; > > - struct drm_connector *connector; > > + struct intel_dp *intel_dp = container_of(work, typeof(*intel_dp), > > + modeset_retry_work); > > + struct drm_connector *connector = &intel_dp->attached_connector- > > >base; > > > > - intel_connector = container_of(work, typeof(*intel_connector), > > - modeset_retry_work); > > - connector = &intel_connector->base; > > DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", connector->base.id, > > connector->name); > > > > @@ -6295,7 +6293,7 @@ intel_dp_init_connector(struct intel_digital_port > > *intel_dig_port, > > int type; > > > > /* Initialize the work for modeset in case of link train failure */ > > - INIT_WORK(&intel_connector->modeset_retry_work, > > + INIT_WORK(&intel_dp->modeset_retry_work, > > intel_dp_modeset_retry_work_fn); > > > > if (WARN(intel_dig_port->max_lanes < 1, > > diff --git a/drivers/gpu/drm/i915/intel_dp_link_training.c > > b/drivers/gpu/drm/i915/intel_dp_link_training.c > > index f59b59bb0a21..2cfa58ce1f95 100644 > > --- a/drivers/gpu/drm/i915/intel_dp_link_training.c > > +++ b/drivers/gpu/drm/i915/intel_dp_link_training.c > > @@ -340,7 +340,7 @@ intel_dp_start_link_train(struct intel_dp *intel_dp) > > intel_dp- > > >link_rate, > > intel_dp- > > >lane_count)) > > /* Schedule a Hotplug Uevent to userspace to start > > modeset */ > > - schedule_work(&intel_connector- > > >modeset_retry_work); > > + schedule_work(&intel_dp->modeset_retry_work); > > } else { > > DRM_ERROR("[CONNECTOR:%d:%s] Link Training failed at link > > rate = %d, lane count = %d", > > intel_connector->base.base.id, > > diff --git a/drivers/gpu/drm/i915/intel_drv.h > > b/drivers/gpu/drm/i915/intel_drv.h > > index 83e5ca889d9c..3f19dc80997f 100644 > > --- a/drivers/gpu/drm/i915/intel_drv.h > > +++ b/drivers/gpu/drm/i915/intel_drv.h > > @@ -406,9 +406,6 @@ struct intel_connector { > > > > struct intel_dp *mst_port; > > > > - /* Work struct to schedule a uevent on link train failure */ > > - struct work_struct modeset_retry_work; > > - > > const struct intel_hdcp_shim *hdcp_shim; > > struct mutex hdcp_mutex; > > uint64_t hdcp_value; /* protected by hdcp_mutex */ > > @@ -1135,6 +1132,9 @@ struct intel_dp { > > > > /* Displayport compliance testing */ > > struct intel_dp_compliance compliance; > > + > > + /* Work struct to schedule a uevent on link train failure */ > > + struct work_struct modeset_retry_work; > > }; > > > > struct intel_lspcon { > > -- > > 2.14.3 > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v3 1/5] drm/i915: Move DP modeset retry work into intel_dp Date: Tue, 13 Mar 2018 19:24:20 -0400 Message-ID: <1520983460.24712.3.camel@redhat.com> References: <20180308232421.14049-1-lyude@redhat.com> <20180309213232.19855-1-lyude@redhat.com> <20180312210102.GR5453@intel.com> Reply-To: lyude@redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180312210102.GR5453@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= Cc: David Airlie , intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rodrigo Vivi List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCAyMDE4LTAzLTEyIGF0IDIzOjAxICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6 Cj4gT24gRnJpLCBNYXIgMDksIDIwMTggYXQgMDQ6MzI6MjdQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3 cm90ZToKPiA+IFdoaWxlIGhhdmluZyB0aGUgbW9kZXNldF9yZXRyeV93b3JrIGluIGludGVsX2Nv bm5lY3RvciBtYWtlcyBzZW5zZSB3aXRoCj4gPiBTU1QsIHRoaXMgcGFyYWRpZ20gZG9lc24ndCBt YWtlIGEgd2hvbGUgdG9uIG9mIHNlbnNlIHdoZW4gaXQgY29tZXMgdG8KPiA+IE1TVCBzaW5jZSB3 ZSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aXBsZSBjb25uZWN0b3JzLiBJbiBtb3N0IGNhc2VzLCBp dCdzCj4gPiBtb3JlIHVzZWZ1bCB0byBqdXN0IHVzZSB0aGUgaW50ZWxfZHAgc3RydWN0IHNpbmNl IGl0IGluZGljYXRlcyB3aGV0aGVyCj4gPiBvciBub3Qgd2UncmUgZGVhbGluZyB3aXRoIGFuIE1T VCBkZXZpY2UsIGFsb25nIHdpdGggYmVpbmcgYWJsZSB0byBlYXNpbHkKPiA+IHRyYWNlIHRoZSBp bnRlbF9kcCBzdHJ1Y3QgYmFjayB0byBpdCdzIHJlc3BlY3RpdmUgY29ubmVjdG9yIChpZiB0aGVy ZSBpcwo+ID4gYW55KS4gU28sIG1vdmUgdGhlIG1vZGVzZXRfcmV0cnlfd29yayBmdW5jdGlvbiBv dXQgb2YgdGhlCj4gPiBpbnRlbF9jb25uZWN0b3Igc3RydWN0IGFuZCBpbnRvIGludGVsX2RwLgo+ ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgo+ID4g UmV2aWV3ZWQtYnk6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4g PiBDYzogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4KPiA+IENjOiBW aWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gCj4gPiBW MjoKPiA+ICAtIFJlbW92ZSBhY2NpZGVudGFsIGR1cGxpY2F0ZSBtb2Rlc2V0X3JldHJ5X3dvcmsg aW4gaW50ZWxfY29ubmVjdG9yCj4gPiBWMzoKPiA+ICAtIEFsc28gY2hlY2sgYWdhaW5zdCBlRFAg aW4gaW50ZWxfaHBkX3BvbGxfZmluaSgpIC0gbWRuYXZhcmUKPiA+IFNpZ25lZC1vZmYtYnk6IEx5 dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgICAgICAgfCAyNSArKysrKysrKysrKysrKysrKysrKysr Ky0KPiA+IC0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jICAgICAgICAgICAg ICAgfCAxMCArKysrLS0tLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlu a190cmFpbmluZy5jIHwgIDIgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aCAgICAgICAgICAgICAgfCAgNiArKystLS0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDMxIGluc2Vy dGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+ID4gaW5kZXggZjQyNGZmZjQ3N2Y2Li4zYjdmYTQzMGE4NGEgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTE1Mzk0LDE2ICsx NTM5NCwzNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9ocGRfcG9sbF9maW5pKHN0cnVjdCBkcm1fZGV2 aWNlCj4gPiAqZGV2KQo+ID4gIHsKPiA+ICAJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVj dG9yOwo+ID4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOwo+ID4g KwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcms7Cj4gPiArCWludCBjb25uX3R5cGU7Cj4gPiAgCj4g PiAgCS8qIEtpbGwgYWxsIHRoZSB3b3JrIHRoYXQgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYnkgaHBk LiAqLwo+ID4gIAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdpbihkZXYsICZjb25uX2l0ZXIp Owo+ID4gIAlmb3JfZWFjaF9pbnRlbF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0 ZXIpIHsKPiA+IC0JCWlmIChjb25uZWN0b3ItPm1vZGVzZXRfcmV0cnlfd29yay5mdW5jKQo+ID4g LQkJCWNhbmNlbF93b3JrX3N5bmMoJmNvbm5lY3Rvci0+bW9kZXNldF9yZXRyeV93b3JrKTsKPiA+ ICAJCWlmIChjb25uZWN0b3ItPmhkY3Bfc2hpbSkgewo+ID4gIAkJCWNhbmNlbF9kZWxheWVkX3dv cmtfc3luYygmY29ubmVjdG9yLQo+ID4gPmhkY3BfY2hlY2tfd29yayk7Cj4gPiAgCQkJY2FuY2Vs X3dvcmtfc3luYygmY29ubmVjdG9yLT5oZGNwX3Byb3Bfd29yayk7Cj4gPiAgCQl9Cj4gPiArCj4g PiArCQljb25uX3R5cGUgPSBjb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGU7Cj4gPiArCQlp ZiAoY29ubl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAgJiYKPiA+ICsJCSAgICBjb25u X3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KQo+ID4gKwkJCWNvbnRpbnVl Owo+ID4gKwo+ID4gKwkJaWYgKGNvbm5lY3Rvci0+bXN0X3BvcnQpIHsKPiA+ICsJCQl3b3JrID0g JmNvbm5lY3Rvci0+bXN0X3BvcnQtPm1vZGVzZXRfcmV0cnlfd29yazsKPiA+ICsJCX0gZWxzZSB7 Cj4gPiArCQkJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPQo+ID4gKwkJCQlj b25uZWN0b3ItPmVuY29kZXI7Cj4gPiArCQkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcDsKPiA+ ICsKPiA+ICsJCQlpZiAoIWludGVsX2VuY29kZXIpCj4gPiArCQkJCWNvbnRpbnVlOwo+ID4gKwo+ ID4gKwkJCWludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKCZpbnRlbF9lbmNvZGVyLT5iYXNlKTsK PiA+ICsJCQl3b3JrID0gJmludGVsX2RwLT5tb2Rlc2V0X3JldHJ5X3dvcms7Cj4gPiArCQl9Cj4g PiArCj4gPiArCQljYW5jZWxfd29ya19zeW5jKHdvcmspOwo+IAo+IFdoeSBhcmUgd2UgZXZlbiB3 YWxraW5nIHRoZSBjb25uZWN0b3JzIGZvciB0aGlzPyBDYW4ndCB3ZSBqdXN0Cj4gd2FsayB0aGUg ZW5jb2RlcnMgaW5zdGVhZD8KV2UgY291bGQgd2FsayB0aGUgZW5jb2RlcnMgZm9yIHRoaXMsIGJ1 dCBzZWVpbmcgYXMgd2UncmUgYWxyZWFkeSB3YWxraW5nIHRoZQpjb25uZWN0b3JzIGZvciB0aGUg SERDUCBwcm9wIGRvZXNuJ3QgaXQgbWFrZSBtb3JlIHNlbnNlIHRvIGp1c3Qgc3RpY2sgb3VyIGNv ZGUKdGhlcmU/IG9yIGlzIHRoZXJlIGEgc2ltcGxlciBzb2x1dGlvbiBmb3IgdGhpcyBJJ20gbWlz c2luZwo+IAo+ID4gIAl9Cj4gPiAgCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9p dGVyKTsKPiA+ICB9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiBpbmRleCA0ZGQx YjIyODdkZDYuLjVhYmYwYzk1NzI1YSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMK PiA+IEBAIC02MjYxLDEyICs2MjYxLDEwIEBAIHN0YXRpYyBib29sIGludGVsX2VkcF9pbml0X2Nv bm5lY3RvcihzdHJ1Y3QgaW50ZWxfZHAKPiA+ICppbnRlbF9kcCwKPiA+ICAKPiA+ICBzdGF0aWMg dm9pZCBpbnRlbF9kcF9tb2Rlc2V0X3JldHJ5X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQo+ID4gIHsKPiA+IC0Jc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9y Owo+ID4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gKwlzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqaW50ZWxfZHApLAo+ ID4gKwkJCQkJCSBtb2Rlc2V0X3JldHJ5X3dvcmspOwo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gJmludGVsX2RwLT5hdHRhY2hlZF9jb25uZWN0b3ItCj4gPiA+YmFzZTsK PiA+ICAKPiA+IC0JaW50ZWxfY29ubmVjdG9yID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigq aW50ZWxfY29ubmVjdG9yKSwKPiA+IC0JCQkJICAgICAgIG1vZGVzZXRfcmV0cnlfd29yayk7Cj4g PiAtCWNvbm5lY3RvciA9ICZpbnRlbF9jb25uZWN0b3ItPmJhc2U7Cj4gPiAgCURSTV9ERUJVR19L TVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLCBjb25uZWN0b3ItPmJhc2UuaWQsCj4gPiAgCQkgICAg ICBjb25uZWN0b3ItPm5hbWUpOwo+ID4gIAo+ID4gQEAgLTYyOTUsNyArNjI5Myw3IEBAIGludGVs X2RwX2luaXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQKPiA+ICppbnRlbF9k aWdfcG9ydCwKPiA+ICAJaW50IHR5cGU7Cj4gPiAgCj4gPiAgCS8qIEluaXRpYWxpemUgdGhlIHdv cmsgZm9yIG1vZGVzZXQgaW4gY2FzZSBvZiBsaW5rIHRyYWluIGZhaWx1cmUgKi8KPiA+IC0JSU5J VF9XT1JLKCZpbnRlbF9jb25uZWN0b3ItPm1vZGVzZXRfcmV0cnlfd29yaywKPiA+ICsJSU5JVF9X T1JLKCZpbnRlbF9kcC0+bW9kZXNldF9yZXRyeV93b3JrLAo+ID4gIAkJICBpbnRlbF9kcF9tb2Rl c2V0X3JldHJ5X3dvcmtfZm4pOwo+ID4gIAo+ID4gIAlpZiAoV0FSTihpbnRlbF9kaWdfcG9ydC0+ bWF4X2xhbmVzIDwgMSwKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcF9saW5rX3RyYWluaW5nLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBf bGlua190cmFpbmluZy5jCj4gPiBpbmRleCBmNTliNTliYjBhMjEuLjJjZmE1OGNlMWY5NSAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5pbmcu Ywo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5j Cj4gPiBAQCAtMzQwLDcgKzM0MCw3IEBAIGludGVsX2RwX3N0YXJ0X2xpbmtfdHJhaW4oc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKPiA+ICAJCQkJCQkJICAgICBpbnRlbF9kcC0KPiA+ID5saW5r X3JhdGUsCj4gPiAgCQkJCQkJCSAgICAgaW50ZWxfZHAtCj4gPiA+bGFuZV9jb3VudCkpCj4gPiAg CQkJLyogU2NoZWR1bGUgYSBIb3RwbHVnIFVldmVudCB0byB1c2Vyc3BhY2UgdG8gc3RhcnQKPiA+ IG1vZGVzZXQgKi8KPiA+IC0JCQlzY2hlZHVsZV93b3JrKCZpbnRlbF9jb25uZWN0b3ItCj4gPiA+ bW9kZXNldF9yZXRyeV93b3JrKTsKPiA+ICsJCQlzY2hlZHVsZV93b3JrKCZpbnRlbF9kcC0+bW9k ZXNldF9yZXRyeV93b3JrKTsKPiA+ICAJfSBlbHNlIHsKPiA+ICAJCURSTV9FUlJPUigiW0NPTk5F Q1RPUjolZDolc10gTGluayBUcmFpbmluZyBmYWlsZWQgYXQgbGluawo+ID4gcmF0ZSA9ICVkLCBs YW5lIGNvdW50ID0gJWQiLAo+ID4gIAkJCSAgaW50ZWxfY29ubmVjdG9yLT5iYXNlLmJhc2UuaWQs Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IGluZGV4IDgzZTVjYTg4OWQ5Yy4u M2YxOWRjODA5OTdmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiBAQCAt NDA2LDkgKzQwNiw2IEBAIHN0cnVjdCBpbnRlbF9jb25uZWN0b3Igewo+ID4gIAo+ID4gIAlzdHJ1 Y3QgaW50ZWxfZHAgKm1zdF9wb3J0Owo+ID4gIAo+ID4gLQkvKiBXb3JrIHN0cnVjdCB0byBzY2hl ZHVsZSBhIHVldmVudCBvbiBsaW5rIHRyYWluIGZhaWx1cmUgKi8KPiA+IC0Jc3RydWN0IHdvcmtf c3RydWN0IG1vZGVzZXRfcmV0cnlfd29yazsKPiA+IC0KPiA+ICAJY29uc3Qgc3RydWN0IGludGVs X2hkY3Bfc2hpbSAqaGRjcF9zaGltOwo+ID4gIAlzdHJ1Y3QgbXV0ZXggaGRjcF9tdXRleDsKPiA+ ICAJdWludDY0X3QgaGRjcF92YWx1ZTsgLyogcHJvdGVjdGVkIGJ5IGhkY3BfbXV0ZXggKi8KPiA+ IEBAIC0xMTM1LDYgKzExMzIsOSBAQCBzdHJ1Y3QgaW50ZWxfZHAgewo+ID4gIAo+ID4gIAkvKiBE aXNwbGF5cG9ydCBjb21wbGlhbmNlIHRlc3RpbmcgKi8KPiA+ICAJc3RydWN0IGludGVsX2RwX2Nv bXBsaWFuY2UgY29tcGxpYW5jZTsKPiA+ICsKPiA+ICsJLyogV29yayBzdHJ1Y3QgdG8gc2NoZWR1 bGUgYSB1ZXZlbnQgb24gbGluayB0cmFpbiBmYWlsdXJlICovCj4gPiArCXN0cnVjdCB3b3JrX3N0 cnVjdCBtb2Rlc2V0X3JldHJ5X3dvcms7Cj4gPiAgfTsKPiA+ICAKPiA+ICBzdHJ1Y3QgaW50ZWxf bHNwY29uIHsKPiA+IC0tIAo+ID4gMi4xNC4zCj4gCj4gCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=