From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A04ADC5DF62 for ; Wed, 6 Nov 2019 03:47:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5424C20663 for ; Wed, 6 Nov 2019 03:47:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="YHFILQCp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731223AbfKFDrL (ORCPT ); Tue, 5 Nov 2019 22:47:11 -0500 Received: from mail-io1-f67.google.com ([209.85.166.67]:39629 "EHLO mail-io1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726368AbfKFDrK (ORCPT ); Tue, 5 Nov 2019 22:47:10 -0500 Received: by mail-io1-f67.google.com with SMTP id k1so13589442ioj.6 for ; Tue, 05 Nov 2019 19:47:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Z2H/vfY+M3FOVI8nyc1KajqzdWqSXMeNKABjk0rdQL0=; b=YHFILQCp/WqkCCA/t3E5TZqDHrrZL0ezjrzpHcw8xJd/nT4G4Cov+gxz6SmCFE/cij 9BNwJ62Azjuuo+MFxfXeBcRjneHg1rluxOFicfqjSD/DLMv1RCTlh2Qyg/nkHkYT5V9n Qjdyn0JZaL4uG6byGwnWrnkNocwPBsZrIuBSs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Z2H/vfY+M3FOVI8nyc1KajqzdWqSXMeNKABjk0rdQL0=; b=NnkuqdWMslmPX6qRiCVcR9dc7nv0J7J6CJlFe/pNOeAq4o/ypSv+NRPecSF67pRl1X e/Ls6joSIf/bKFheg5i4tb1IgG1f7EQfeWRwWkJEJPYF7oMZBd0E4tU5bt6VZl1YMvoM QwJHT/mAepcXklG8/XIUZFIjgFc6qLgP7W+2s6zlU17zrUTOh7PquemFyoqyqzGKb7jF MSeXn0X78kPeZCWEyCuPQnAawMTvzs/cpFsyKVUQl9RTYRqQQ1nWL3Z4wFJdgH6jTufN 1zgajv5BwlwcBV4CJC8Y6kLO7QAzJ50sxVaD7rwwwwuPy9BwlX/Jj/fIVLN6hngO/72v DmvQ== X-Gm-Message-State: APjAAAV6Q12mHaggc1xUq5t0xHxQx1BqnSKKnBXg41armjtAMgw2AFbd O19qQEsxlX85ee36UcMEnrwlo1JmB5+DynQi/gt+mg== X-Google-Smtp-Source: APXvYqzM4v8A7/KdBti0Vuh47ZVMEZFBED5Uz6EFt/lWzRoGkj9v0kX9qfllxewVAnd9O0epfOmwy6yqBkGg6SO1Zv4= X-Received: by 2002:a02:742a:: with SMTP id o42mr25123417jac.24.1573012029823; Tue, 05 Nov 2019 19:47:09 -0800 (PST) MIME-Version: 1.0 References: <20191104173737.142558-1-robdclark@gmail.com> In-Reply-To: <20191104173737.142558-1-robdclark@gmail.com> From: Rob Clark Date: Tue, 5 Nov 2019 19:46:59 -0800 Message-ID: Subject: Re: [PATCH 1/2 v2] drm/atomic: fix self-refresh helpers crtc state dereference To: Rob Clark Cc: dri-devel , Sean Paul , Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , open list Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Nov 4, 2019 at 9:39 AM Rob Clark wrote: > > From: Rob Clark > > drm_self_refresh_helper_update_avg_times() was incorrectly accessing the > new incoming state after drm_atomic_helper_commit_hw_done(). But this > state might have already been superceeded by an !nonblock atomic update > resulting in dereferencing an already free'd crtc_state. > > TODO I *think* this will more or less do the right thing.. althought I'm > not 100% sure if, for example, we enter psr in a nonblock commit, and > then leave psr in a !nonblock commit that overtakes the completion of > the nonblock commit. Not sure if this sort of scenario can happen in > practice. But not crashing is better than crashing, so I guess we > should either take this patch or rever the self-refresh helpers until > Sean can figure out a better solution. btw, I think we can drop this TODO para from the commit msg.. but would be nice to get this (1/2) landed in v5.4-fixes as it fixes an actual regressions.. patch 2/2 probably shouldn't be for v5.4, since according to kbuild robot it is turning up some other problems.. but I still think it is probably a good idea BR, -R > > Fixes: d4da4e33341c ("drm: Measure Self Refresh Entry/Exit times to avoid thrashing") > Cc: Sean Paul > Signed-off-by: Rob Clark > --- > drivers/gpu/drm/drm_atomic_helper.c | 14 +++++++++++++- > drivers/gpu/drm/drm_self_refresh_helper.c | 15 +++++++++------ > include/drm/drm_self_refresh_helper.h | 3 ++- > 3 files changed, 24 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 3ef2ac52ce94..648494c813e5 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -1581,8 +1581,11 @@ static void commit_tail(struct drm_atomic_state *old_state) > { > struct drm_device *dev = old_state->dev; > const struct drm_mode_config_helper_funcs *funcs; > + struct drm_crtc_state *new_crtc_state; > + struct drm_crtc *crtc; > ktime_t start; > s64 commit_time_ms; > + unsigned i, new_self_refresh_mask = 0; > > funcs = dev->mode_config.helper_private; > > @@ -1602,6 +1605,14 @@ static void commit_tail(struct drm_atomic_state *old_state) > > drm_atomic_helper_wait_for_dependencies(old_state); > > + /* > + * We cannot safely access new_crtc_state after drm_atomic_helper_commit_hw_done() > + * so figure out which crtc's have self-refresh active beforehand: > + */ > + for_each_new_crtc_in_state(old_state, crtc, new_crtc_state, i) > + if (new_crtc_state->self_refresh_active) > + new_self_refresh_mask |= BIT(i); > + > if (funcs && funcs->atomic_commit_tail) > funcs->atomic_commit_tail(old_state); > else > @@ -1610,7 +1621,8 @@ static void commit_tail(struct drm_atomic_state *old_state) > commit_time_ms = ktime_ms_delta(ktime_get(), start); > if (commit_time_ms > 0) > drm_self_refresh_helper_update_avg_times(old_state, > - (unsigned long)commit_time_ms); > + (unsigned long)commit_time_ms, > + new_self_refresh_mask); > > drm_atomic_helper_commit_cleanup_done(old_state); > > diff --git a/drivers/gpu/drm/drm_self_refresh_helper.c b/drivers/gpu/drm/drm_self_refresh_helper.c > index 68f4765a5896..011b8d5f7dd6 100644 > --- a/drivers/gpu/drm/drm_self_refresh_helper.c > +++ b/drivers/gpu/drm/drm_self_refresh_helper.c > @@ -133,6 +133,8 @@ static void drm_self_refresh_helper_entry_work(struct work_struct *work) > * drm_self_refresh_helper_update_avg_times - Updates a crtc's SR time averages > * @state: the state which has just been applied to hardware > * @commit_time_ms: the amount of time in ms that this commit took to complete > + * @new_self_refresh_mask: bitmask of crtc's that have self_refresh_active in > + * new state > * > * Called after &drm_mode_config_funcs.atomic_commit_tail, this function will > * update the average entry/exit self refresh times on self refresh transitions. > @@ -140,22 +142,23 @@ static void drm_self_refresh_helper_entry_work(struct work_struct *work) > * entering self refresh mode after activity. > */ > void drm_self_refresh_helper_update_avg_times(struct drm_atomic_state *state, > - unsigned int commit_time_ms) > + unsigned int commit_time_ms, > + unsigned int new_self_refresh_mask) > { > struct drm_crtc *crtc; > - struct drm_crtc_state *old_crtc_state, *new_crtc_state; > + struct drm_crtc_state *old_crtc_state; > int i; > > - for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, > - new_crtc_state, i) { > + for_each_old_crtc_in_state(state, crtc, old_crtc_state, i) { > + bool new_self_refresh_active = new_self_refresh_mask & BIT(i); > struct drm_self_refresh_data *sr_data = crtc->self_refresh_data; > struct ewma_psr_time *time; > > if (old_crtc_state->self_refresh_active == > - new_crtc_state->self_refresh_active) > + new_self_refresh_active) > continue; > > - if (new_crtc_state->self_refresh_active) > + if (new_self_refresh_active) > time = &sr_data->entry_avg_ms; > else > time = &sr_data->exit_avg_ms; > diff --git a/include/drm/drm_self_refresh_helper.h b/include/drm/drm_self_refresh_helper.h > index 5b79d253fb46..b2c08b328aa1 100644 > --- a/include/drm/drm_self_refresh_helper.h > +++ b/include/drm/drm_self_refresh_helper.h > @@ -13,7 +13,8 @@ struct drm_crtc; > > void drm_self_refresh_helper_alter_state(struct drm_atomic_state *state); > void drm_self_refresh_helper_update_avg_times(struct drm_atomic_state *state, > - unsigned int commit_time_ms); > + unsigned int commit_time_ms, > + unsigned int new_self_refresh_mask); > > int drm_self_refresh_helper_init(struct drm_crtc *crtc); > void drm_self_refresh_helper_cleanup(struct drm_crtc *crtc); > -- > 2.23.0 > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 318ACC5DF62 for ; Wed, 6 Nov 2019 07:33:46 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8E8182173E for ; Wed, 6 Nov 2019 07:33:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8E8182173E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1A8896EC23; Wed, 6 Nov 2019 07:33:35 +0000 (UTC) Received: from mail-io1-xd44.google.com (mail-io1-xd44.google.com [IPv6:2607:f8b0:4864:20::d44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9B6026EBDD for ; Wed, 6 Nov 2019 03:47:10 +0000 (UTC) Received: by mail-io1-xd44.google.com with SMTP id s17so25381368iol.12 for ; Tue, 05 Nov 2019 19:47:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Z2H/vfY+M3FOVI8nyc1KajqzdWqSXMeNKABjk0rdQL0=; b=tdiwXPLn/B6IKGUjO1oX1Z+rIKEI46hL4OHjU8Tx1BBcNgj4bCSOEETdPcxNto3T2/ SsS/lkmdBd+qAoPQJFUfEXU+qPMiZA3SqYA0ce/dWkss9ns3fAIqMAd9G3im2EHpmeRd HxL8ZL0+/Y2M10XP2zm7bxmofhLQunm6bFiXKYyRpQr6HAc4SKLzt8FuuJMSwZq8CUYD oaV8ikKXUMG9cIQN6Eof+Pvx8Lx6GP6znN0/I+6AYfPUCo4Hc9bXy55K/bBwq68WH9XN xCAuiEHxB0K3ZGVzm3tkwSPI+NJysVzMA5E1WMqTLyKraGynbB//tz4KQ0yp95WgsTXc mOgw== X-Gm-Message-State: APjAAAU2qaA5fUqXDMa/PtrpHQ2Tmq5Tl0lmq1KPM/oH971Dej8xuAJ4 OisXIC1fnGxbN4oD5IPmLSvGljckNMK5YEOJPuU3iw== X-Google-Smtp-Source: APXvYqzM4v8A7/KdBti0Vuh47ZVMEZFBED5Uz6EFt/lWzRoGkj9v0kX9qfllxewVAnd9O0epfOmwy6yqBkGg6SO1Zv4= X-Received: by 2002:a02:742a:: with SMTP id o42mr25123417jac.24.1573012029823; Tue, 05 Nov 2019 19:47:09 -0800 (PST) MIME-Version: 1.0 References: <20191104173737.142558-1-robdclark@gmail.com> In-Reply-To: <20191104173737.142558-1-robdclark@gmail.com> From: Rob Clark Date: Tue, 5 Nov 2019 19:46:59 -0800 Message-ID: Subject: Re: [PATCH 1/2 v2] drm/atomic: fix self-refresh helpers crtc state dereference To: Rob Clark X-Mailman-Approved-At: Wed, 06 Nov 2019 07:33:32 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Z2H/vfY+M3FOVI8nyc1KajqzdWqSXMeNKABjk0rdQL0=; b=YHFILQCp/WqkCCA/t3E5TZqDHrrZL0ezjrzpHcw8xJd/nT4G4Cov+gxz6SmCFE/cij 9BNwJ62Azjuuo+MFxfXeBcRjneHg1rluxOFicfqjSD/DLMv1RCTlh2Qyg/nkHkYT5V9n Qjdyn0JZaL4uG6byGwnWrnkNocwPBsZrIuBSs= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Airlie , open list , Sean Paul , dri-devel , Sean Paul Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191106034659.LsFdTsGMhaSNADqNpqJoD1mGV13kol4mvi6ldv_LkUE@z> T24gTW9uLCBOb3YgNCwgMjAxOSBhdCA5OjM5IEFNIFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWls LmNvbT4gd3JvdGU6Cj4KPiBGcm9tOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BjaHJvbWl1bS5vcmc+ Cj4KPiBkcm1fc2VsZl9yZWZyZXNoX2hlbHBlcl91cGRhdGVfYXZnX3RpbWVzKCkgd2FzIGluY29y cmVjdGx5IGFjY2Vzc2luZyB0aGUKPiBuZXcgaW5jb21pbmcgc3RhdGUgYWZ0ZXIgZHJtX2F0b21p Y19oZWxwZXJfY29tbWl0X2h3X2RvbmUoKS4gIEJ1dCB0aGlzCj4gc3RhdGUgbWlnaHQgaGF2ZSBh bHJlYWR5IGJlZW4gc3VwZXJjZWVkZWQgYnkgYW4gIW5vbmJsb2NrIGF0b21pYyB1cGRhdGUKPiBy ZXN1bHRpbmcgaW4gZGVyZWZlcmVuY2luZyBhbiBhbHJlYWR5IGZyZWUnZCBjcnRjX3N0YXRlLgo+ Cj4gVE9ETyBJICp0aGluayogdGhpcyB3aWxsIG1vcmUgb3IgbGVzcyBkbyB0aGUgcmlnaHQgdGhp bmcuLiBhbHRob3VnaHQgSSdtCj4gbm90IDEwMCUgc3VyZSBpZiwgZm9yIGV4YW1wbGUsIHdlIGVu dGVyIHBzciBpbiBhIG5vbmJsb2NrIGNvbW1pdCwgYW5kCj4gdGhlbiBsZWF2ZSBwc3IgaW4gYSAh bm9uYmxvY2sgY29tbWl0IHRoYXQgb3ZlcnRha2VzIHRoZSBjb21wbGV0aW9uIG9mCj4gdGhlIG5v bmJsb2NrIGNvbW1pdC4gIE5vdCBzdXJlIGlmIHRoaXMgc29ydCBvZiBzY2VuYXJpbyBjYW4gaGFw cGVuIGluCj4gcHJhY3RpY2UuICBCdXQgbm90IGNyYXNoaW5nIGlzIGJldHRlciB0aGFuIGNyYXNo aW5nLCBzbyBJIGd1ZXNzIHdlCj4gc2hvdWxkIGVpdGhlciB0YWtlIHRoaXMgcGF0Y2ggb3IgcmV2 ZXIgdGhlIHNlbGYtcmVmcmVzaCBoZWxwZXJzIHVudGlsCj4gU2VhbiBjYW4gZmlndXJlIG91dCBh IGJldHRlciBzb2x1dGlvbi4KCmJ0dywgSSB0aGluayB3ZSBjYW4gZHJvcCB0aGlzIFRPRE8gcGFy YSBmcm9tIHRoZSBjb21taXQgbXNnLi4gYnV0CndvdWxkIGJlIG5pY2UgdG8gZ2V0IHRoaXMgKDEv MikgbGFuZGVkIGluIHY1LjQtZml4ZXMgYXMgaXQgZml4ZXMgYW4KYWN0dWFsIHJlZ3Jlc3Npb25z Li4KCnBhdGNoIDIvMiBwcm9iYWJseSBzaG91bGRuJ3QgYmUgZm9yIHY1LjQsIHNpbmNlIGFjY29y ZGluZyB0byBrYnVpbGQKcm9ib3QgaXQgaXMgdHVybmluZyB1cCBzb21lIG90aGVyIHByb2JsZW1z Li4gYnV0IEkgc3RpbGwgdGhpbmsgaXQgaXMKcHJvYmFibHkgYSBnb29kIGlkZWEKCkJSLAotUgoK Pgo+IEZpeGVzOiBkNGRhNGUzMzM0MWMgKCJkcm06IE1lYXN1cmUgU2VsZiBSZWZyZXNoIEVudHJ5 L0V4aXQgdGltZXMgdG8gYXZvaWQgdGhyYXNoaW5nIikKPiBDYzogU2VhbiBQYXVsIDxzZWFucGF1 bEBjaHJvbWl1bS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogUm9iIENsYXJrIDxyb2JkY2xhcmtAY2hy b21pdW0ub3JnPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyAg ICAgICB8IDE0ICsrKysrKysrKysrKystCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fc2VsZl9yZWZy ZXNoX2hlbHBlci5jIHwgMTUgKysrKysrKysrLS0tLS0tCj4gIGluY2x1ZGUvZHJtL2RybV9zZWxm X3JlZnJlc2hfaGVscGVyLmggICAgIHwgIDMgKystCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjQgaW5z ZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pY19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBl ci5jCj4gaW5kZXggM2VmMmFjNTJjZTk0Li42NDg0OTRjODEzZTUgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pY19oZWxwZXIuYwo+IEBAIC0xNTgxLDggKzE1ODEsMTEgQEAgc3RhdGljIHZvaWQg Y29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiAgewo+ICAg ICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9sZF9zdGF0ZS0+ZGV2Owo+ICAgICAgICAg Y29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfZnVuY3MgKmZ1bmNzOwo+ICsgICAg ICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZTsKPiArICAgICAgIHN0cnVj dCBkcm1fY3J0YyAqY3J0YzsKPiAgICAgICAgIGt0aW1lX3Qgc3RhcnQ7Cj4gICAgICAgICBzNjQg Y29tbWl0X3RpbWVfbXM7Cj4gKyAgICAgICB1bnNpZ25lZCBpLCBuZXdfc2VsZl9yZWZyZXNoX21h c2sgPSAwOwo+Cj4gICAgICAgICBmdW5jcyA9IGRldi0+bW9kZV9jb25maWcuaGVscGVyX3ByaXZh dGU7Cj4KPiBAQCAtMTYwMiw2ICsxNjA1LDE0IEBAIHN0YXRpYyB2b2lkIGNvbW1pdF90YWlsKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4KPiAgICAgICAgIGRybV9hdG9taWNf aGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhvbGRfc3RhdGUpOwo+Cj4gKyAgICAgICAvKgo+ ICsgICAgICAgICogV2UgY2Fubm90IHNhZmVseSBhY2Nlc3MgbmV3X2NydGNfc3RhdGUgYWZ0ZXIg ZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X2h3X2RvbmUoKQo+ICsgICAgICAgICogc28gZmlndXJl IG91dCB3aGljaCBjcnRjJ3MgaGF2ZSBzZWxmLXJlZnJlc2ggYWN0aXZlIGJlZm9yZWhhbmQ6Cj4g KyAgICAgICAgKi8KPiArICAgICAgIGZvcl9lYWNoX25ld19jcnRjX2luX3N0YXRlKG9sZF9zdGF0 ZSwgY3J0YywgbmV3X2NydGNfc3RhdGUsIGkpCj4gKyAgICAgICAgICAgICAgIGlmIChuZXdfY3J0 Y19zdGF0ZS0+c2VsZl9yZWZyZXNoX2FjdGl2ZSkKPiArICAgICAgICAgICAgICAgICAgICAgICBu ZXdfc2VsZl9yZWZyZXNoX21hc2sgfD0gQklUKGkpOwo+ICsKPiAgICAgICAgIGlmIChmdW5jcyAm JiBmdW5jcy0+YXRvbWljX2NvbW1pdF90YWlsKQo+ICAgICAgICAgICAgICAgICBmdW5jcy0+YXRv bWljX2NvbW1pdF90YWlsKG9sZF9zdGF0ZSk7Cj4gICAgICAgICBlbHNlCj4gQEAgLTE2MTAsNyAr MTYyMSw4IEBAIHN0YXRpYyB2b2lkIGNvbW1pdF90YWlsKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpvbGRfc3RhdGUpCj4gICAgICAgICBjb21taXRfdGltZV9tcyA9IGt0aW1lX21zX2RlbHRhKGt0 aW1lX2dldCgpLCBzdGFydCk7Cj4gICAgICAgICBpZiAoY29tbWl0X3RpbWVfbXMgPiAwKQo+ICAg ICAgICAgICAgICAgICBkcm1fc2VsZl9yZWZyZXNoX2hlbHBlcl91cGRhdGVfYXZnX3RpbWVzKG9s ZF9zdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHVuc2lnbmVkIGxvbmcpY29tbWl0X3RpbWVfbXMpOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyljb21taXRfdGltZV9t cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3 X3NlbGZfcmVmcmVzaF9tYXNrKTsKPgo+ICAgICAgICAgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0 X2NsZWFudXBfZG9uZShvbGRfc3RhdGUpOwo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fc2VsZl9yZWZyZXNoX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zZWxmX3Jl ZnJlc2hfaGVscGVyLmMKPiBpbmRleCA2OGY0NzY1YTU4OTYuLjAxMWI4ZDVmN2RkNiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3NlbGZfcmVmcmVzaF9oZWxwZXIuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fc2VsZl9yZWZyZXNoX2hlbHBlci5jCj4gQEAgLTEzMyw2ICsx MzMsOCBAQCBzdGF0aWMgdm9pZCBkcm1fc2VsZl9yZWZyZXNoX2hlbHBlcl9lbnRyeV93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgICogZHJtX3NlbGZfcmVmcmVzaF9oZWxwZXJfdXBk YXRlX2F2Z190aW1lcyAtIFVwZGF0ZXMgYSBjcnRjJ3MgU1IgdGltZSBhdmVyYWdlcwo+ICAgKiBA c3RhdGU6IHRoZSBzdGF0ZSB3aGljaCBoYXMganVzdCBiZWVuIGFwcGxpZWQgdG8gaGFyZHdhcmUK PiAgICogQGNvbW1pdF90aW1lX21zOiB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbXMgdGhhdCB0aGlz IGNvbW1pdCB0b29rIHRvIGNvbXBsZXRlCj4gKyAqIEBuZXdfc2VsZl9yZWZyZXNoX21hc2s6IGJp dG1hc2sgb2YgY3J0YydzIHRoYXQgaGF2ZSBzZWxmX3JlZnJlc2hfYWN0aXZlIGluCj4gKyAqICAg IG5ldyBzdGF0ZQo+ICAgKgo+ICAgKiBDYWxsZWQgYWZ0ZXIgJmRybV9tb2RlX2NvbmZpZ19mdW5j cy5hdG9taWNfY29tbWl0X3RhaWwsIHRoaXMgZnVuY3Rpb24gd2lsbAo+ICAgKiB1cGRhdGUgdGhl IGF2ZXJhZ2UgZW50cnkvZXhpdCBzZWxmIHJlZnJlc2ggdGltZXMgb24gc2VsZiByZWZyZXNoIHRy YW5zaXRpb25zLgo+IEBAIC0xNDAsMjIgKzE0MiwyMyBAQCBzdGF0aWMgdm9pZCBkcm1fc2VsZl9y ZWZyZXNoX2hlbHBlcl9lbnRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgICog ZW50ZXJpbmcgc2VsZiByZWZyZXNoIG1vZGUgYWZ0ZXIgYWN0aXZpdHkuCj4gICAqLwo+ICB2b2lk IGRybV9zZWxmX3JlZnJlc2hfaGVscGVyX3VwZGF0ZV9hdmdfdGltZXMoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgY29tbWl0X3RpbWVfbXMpCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb21taXRfdGltZV9tcywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IG5ld19zZWxmX3JlZnJlc2hfbWFzaykKPiAgewo+ICAgICAgICAgc3RydWN0IGRybV9jcnRj ICpjcnRjOwo+IC0gICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwg Km5ld19jcnRjX3N0YXRlOwo+ICsgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0 Y19zdGF0ZTsKPiAgICAgICAgIGludCBpOwo+Cj4gLSAgICAgICBmb3JfZWFjaF9vbGRuZXdfY3J0 Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3J0Y19zdGF0ZSwgaSkgewo+ICsgICAgICAgZm9y X2VhY2hfb2xkX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLCBpKSB7 Cj4gKyAgICAgICAgICAgICAgIGJvb2wgbmV3X3NlbGZfcmVmcmVzaF9hY3RpdmUgPSBuZXdfc2Vs Zl9yZWZyZXNoX21hc2sgJiBCSVQoaSk7Cj4gICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fc2Vs Zl9yZWZyZXNoX2RhdGEgKnNyX2RhdGEgPSBjcnRjLT5zZWxmX3JlZnJlc2hfZGF0YTsKPiAgICAg ICAgICAgICAgICAgc3RydWN0IGV3bWFfcHNyX3RpbWUgKnRpbWU7Cj4KPiAgICAgICAgICAgICAg ICAgaWYgKG9sZF9jcnRjX3N0YXRlLT5zZWxmX3JlZnJlc2hfYWN0aXZlID09Cj4gLSAgICAgICAg ICAgICAgICAgICBuZXdfY3J0Y19zdGF0ZS0+c2VsZl9yZWZyZXNoX2FjdGl2ZSkKPiArICAgICAg ICAgICAgICAgICAgIG5ld19zZWxmX3JlZnJlc2hfYWN0aXZlKQo+ICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+Cj4gLSAgICAgICAgICAgICAgIGlmIChuZXdfY3J0Y19zdGF0ZS0+ c2VsZl9yZWZyZXNoX2FjdGl2ZSkKPiArICAgICAgICAgICAgICAgaWYgKG5ld19zZWxmX3JlZnJl c2hfYWN0aXZlKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgPSAmc3JfZGF0YS0+ZW50 cnlfYXZnX21zOwo+ICAgICAgICAgICAgICAgICBlbHNlCj4gICAgICAgICAgICAgICAgICAgICAg ICAgdGltZSA9ICZzcl9kYXRhLT5leGl0X2F2Z19tczsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZHJtX3NlbGZfcmVmcmVzaF9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9zZWxmX3JlZnJl c2hfaGVscGVyLmgKPiBpbmRleCA1Yjc5ZDI1M2ZiNDYuLmIyYzA4YjMyOGFhMSAxMDA2NDQKPiAt LS0gYS9pbmNsdWRlL2RybS9kcm1fc2VsZl9yZWZyZXNoX2hlbHBlci5oCj4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX3NlbGZfcmVmcmVzaF9oZWxwZXIuaAo+IEBAIC0xMyw3ICsxMyw4IEBAIHN0cnVj dCBkcm1fY3J0YzsKPgo+ICB2b2lkIGRybV9zZWxmX3JlZnJlc2hfaGVscGVyX2FsdGVyX3N0YXRl KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gIHZvaWQgZHJtX3NlbGZfcmVmcmVz aF9oZWxwZXJfdXBkYXRlX2F2Z190aW1lcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBjb21taXRfdGltZV9tcyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb21taXRfdGltZV9tcywKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ld19zZWxmX3Jl ZnJlc2hfbWFzayk7Cj4KPiAgaW50IGRybV9zZWxmX3JlZnJlc2hfaGVscGVyX2luaXQoc3RydWN0 IGRybV9jcnRjICpjcnRjKTsKPiAgdm9pZCBkcm1fc2VsZl9yZWZyZXNoX2hlbHBlcl9jbGVhbnVw KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gLS0KPiAyLjIzLjAKPgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=