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 EE644C43331 for ; Sat, 9 Nov 2019 12:12:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C094B21924 for ; Sat, 9 Nov 2019 12:12:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726530AbfKIMM2 (ORCPT ); Sat, 9 Nov 2019 07:12:28 -0500 Received: from mout.kundenserver.de ([212.227.126.187]:33603 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726281AbfKIMM1 (ORCPT ); Sat, 9 Nov 2019 07:12:27 -0500 Received: from mail-qv1-f41.google.com ([209.85.219.41]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.129]) with ESMTPSA (Nemesis) id 1MNtGq-1iIUSX1xEG-00OFPX for ; Sat, 09 Nov 2019 13:12:25 +0100 Received: by mail-qv1-f41.google.com with SMTP id g12so3253957qvy.12 for ; Sat, 09 Nov 2019 04:12:25 -0800 (PST) X-Gm-Message-State: APjAAAXPx/AuybLb2gJmXlxJ/fqKVkxfJrtTcD3WYi6+KfAhJd3MUqfs bW3ivuBq2o9f5uwgmajz9gp2fwQ2ZvgRElUrmxY= X-Google-Smtp-Source: APXvYqwrFNWF6Dpd4vh4zt7FVLqZIoiTzNk6q+TuwKkce6U0Xebk5BkpHFMk7HkcxM1TafkZVAgFj3m4JatiBrbujwQ= X-Received: by 2002:a0c:fde8:: with SMTP id m8mr15109594qvu.4.1573301544256; Sat, 09 Nov 2019 04:12:24 -0800 (PST) MIME-Version: 1.0 References: <20191108213257.3097633-1-arnd@arndb.de> <20191108213257.3097633-16-arnd@arndb.de> <3a0cfce79620152facfe31b442a735db1dcda436.camel@pengutronix.de> In-Reply-To: <3a0cfce79620152facfe31b442a735db1dcda436.camel@pengutronix.de> From: Arnd Bergmann Date: Sat, 9 Nov 2019 13:12:07 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 15/16] drm/etnaviv: use ktime_t for timeouts To: Lucas Stach Cc: y2038 Mailman List , David Airlie , Daniel Vetter , =?UTF-8?Q?Guido_G=C3=BCnther?= , "linux-kernel@vger.kernel.org" , dri-devel , The etnaviv authors , Russell King , Sam Ravnborg , =?UTF-8?Q?Christian_K=C3=B6nig?= , Emil Velikov Content-Type: text/plain; charset="UTF-8" X-Provags-ID: V03:K1:HOEFJ5qxD2Bh82m6q0PDxcve+Hvh/8jUZBKyoReDNwvBGBDrz99 2EjiksTy3mDcEmJJXn4nICaERyP7uwuaZBIGT3KeIlisL7RT6AiMMCQV3hA+dhT5qILnzat 43b3gHzhQ24q7mOi7rDQibrplGzhYvTUd4q5dCiMXit5xuy0YDS5m7KpiMcwX87i+kmxY/y Gz/LZfbfrpv9tDT/QCCgg== X-UI-Out-Filterresults: notjunk:1;V03:K0:GqzViut1/R0=:bP6MC3QMhn0kWCtzDfRKnB lQj2ox0RcEQ42PoMxPC4eytmwT2CFX87Kg9ZSWc3CZ6lqyBhU/zVgZY6O93+QCgQxMo4kQRbv hru3pMIiXUT0GS0SKcV/qwWEYWWuZR6SDdqVnhwUtjZ38s7KHOWKYX5lSS6eRK1BQUKq/JDeO 41bGET69+QaL37vBjtLKtYU59bL8wCVI8OdM0THry9SnR524pQmxQa4gBcQEnCPo1ggjhFKux 1p1uEjIggesxT69jmOJeFF4fXxEVB116DiwD5b4SXVz4tr2dk9ZldSkbpo9UKfFtVlO3ue6LD IkGpV9dVbueikjobbG0RyW1Drm46pDCmAf8ivw0rcJgYNKMU7m6J0tPzAOzwyNmY3Y5LW0pOM uTSEGDgReoXb9+X1n7Ki8+6Ow/HA0pJJf6Amwt0pH1Kg2bS+3+sKzIDauDTzngN6lL/EBHVaT 1A7e+8qgjFC3cRYVsS2/UExgbzOdbQn4ozHmZ2Xa2ULGvpvyHDhQap4DtvEhH+GizehCbk/yZ +35NfwtLadOvKiihCjb3esLIG2Fh7IcYvZGTH2s+gyRsOmDI9HKMRpMmTZWQMwBarFNCag0Ao WwPPXu1hP32yul9qGMdrhPncWLClmSo/XNsGwN4xYPsyvusaTRoLbAEiktbFZ5lF1k9gFtjaf 6fHG+Ei+PFLqLU70+DYYb+JW0lPa5H8HVwyU8DgIYJ8VmBZG1XjNuYFu8oBRvZOm9+gD4j5cc dFrH1LS6RB/usMv2UBDJGpFfBHV+360xaPM/dJGOG/Vab4QrGOhTSpICagasz5hPG2gqZyEK8 P/t24X9u52KL4WrutwkwvcawOWZqIOeUfCS0VoFTu6O1B/FKeKe7sCM8mRl/XtnDEDvHEwZag prqLWKe1lRfClZ8A0ToA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Nov 9, 2019 at 12:03 AM Lucas Stach wrote: > > Am Freitag, den 08.11.2019, 22:32 +0100 schrieb Arnd Bergmann: > > struct timespec is being removed from the kernel because it often leads > > to code that is not y2038-safe. > > > > In the etnaviv driver, monotonic timestamps are used, which do not suffer > > from overflow, but using ktime_t still leads to better code overall. > > > > The conversion is straightforward for the most part, except for > > etnaviv_timeout_to_jiffies(), which needs to handle arguments larger > > than MAX_JIFFY_OFFSET on 32-bit architectures. > > > > Signed-off-by: Arnd Bergmann > > @@ -368,7 +366,7 @@ static int etnaviv_ioctl_wait_fence(struct drm_device *dev, void *data, > > return -ENXIO; > > > > if (args->flags & ETNA_WAIT_NONBLOCK) > > - timeout = NULL; > > + timeout = ktime_set(0, 0); > > This is a change in behavior, as far as I can see. After this change > the called internal function is not able to differentiate between a > NONBLOCK call and a blocking call with 0 timeout. The difference being > that on a busy object the NONBLOCK call will return -EBUSY, while a > blocking call will return -ETIMEDOUT. Ah, good point. I created this patch a long time ago (cherry-picked it out of an older branch I had done), so I don't remember how I concluded this was a safe conversion, of if I missed that difference originally. > But then CLOCK_MONOTONIC starts at 0 and should not never wrap, right? Yes, that is correct. > If that's the case then we should never encounter a genuine 0 timeout > and this change would be okay. That's quite likely, I'd say any program passing {0,0} as a timeout without ETNA_WAIT_NONBLOCK is already broken, but if we leave it like that, it would be best to describe the reasoning in the changelog. Should I change the changelog, or change the patch to restore the current behavior instead? I guess I could fold the change below into my patch to make it transparent to the application again. Arnd diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c index 1250c5e06329..162cedfb7f72 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c @@ -354,6 +354,7 @@ static int etnaviv_ioctl_wait_fence(struct drm_device *dev, void *data, ktime_t timeout = ktime_set(args->timeout.tv_sec, args->timeout.tv_nsec); struct etnaviv_gpu *gpu; + int ret; if (args->flags & ~(ETNA_WAIT_NONBLOCK)) return -EINVAL; @@ -365,8 +366,12 @@ static int etnaviv_ioctl_wait_fence(struct drm_device *dev, void *data, if (!gpu) return -ENXIO; - if (args->flags & ETNA_WAIT_NONBLOCK) - timeout = ktime_set(0, 0); + if (args->flags & ETNA_WAIT_NONBLOCK) { + ret = etnaviv_gpu_wait_fence_interruptible(gpu, args->fence, + ktime_set(0, 0)); + + return (ret == -ETIMEDOUT) ? -EBUSY : ret; + } return etnaviv_gpu_wait_fence_interruptible(gpu, args->fence, timeout); @@ -421,10 +426,13 @@ static int etnaviv_ioctl_gem_wait(struct drm_device *dev, void *data, if (!obj) return -ENOENT; - if (args->flags & ETNA_WAIT_NONBLOCK) - timeout = ktime_set(0, 0); - - ret = etnaviv_gem_wait_bo(gpu, obj, timeout); + if (args->flags & ETNA_WAIT_NONBLOCK) { + ret = etnaviv_gem_wait_bo(gpu, obj, ktime_set(0, 0)); + if (ret == -ETIMEDOUT) + ret = -EBUSY; + } else { + ret = etnaviv_gem_wait_bo(gpu, obj, timeout); + } drm_gem_object_put_unlocked(obj); diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index e42b1c4d902c..fa6986c5a5fe 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -1135,6 +1135,7 @@ int etnaviv_gpu_wait_fence_interruptible(struct etnaviv_gpu *gpu, u32 id, ktime_t timeout) { struct dma_fence *fence; + unsigned long remaining; int ret; /* @@ -1151,12 +1152,12 @@ int etnaviv_gpu_wait_fence_interruptible(struct etnaviv_gpu *gpu, if (!fence) return 0; - if (!timeout) { - /* No timeout was requested: just test for completion */ - ret = dma_fence_is_signaled(fence) ? 0 : -EBUSY; + if (!timeout || + (remaining = etnaviv_timeout_to_jiffies(timeout)) == 0) { + /* No timeout was requested, or timeout is already expired, + * just test for completion */ + ret = dma_fence_is_signaled(fence) ? 0 : -ETIMEDOUT; } else { - unsigned long remaining = etnaviv_timeout_to_jiffies(timeout); - ret = dma_fence_wait_timeout(fence, true, remaining); if (ret == 0) ret = -ETIMEDOUT; @@ -1185,7 +1186,7 @@ int etnaviv_gpu_wait_obj_inactive(struct etnaviv_gpu *gpu, long ret; if (!timeout) - return !is_active(etnaviv_obj) ? 0 : -EBUSY; + return !is_active(etnaviv_obj) ? 0 : -ETIMEDOUT; remaining = etnaviv_timeout_to_jiffies(timeout); From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnd Bergmann Subject: Re: [PATCH 15/16] drm/etnaviv: use ktime_t for timeouts Date: Sat, 9 Nov 2019 13:12:07 +0100 Message-ID: References: <20191108213257.3097633-1-arnd@arndb.de> <20191108213257.3097633-16-arnd@arndb.de> <3a0cfce79620152facfe31b442a735db1dcda436.camel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <3a0cfce79620152facfe31b442a735db1dcda436.camel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lucas Stach Cc: y2038 Mailman List , =?UTF-8?Q?Guido_G=C3=BCnther?= , "linux-kernel@vger.kernel.org" , dri-devel , The etnaviv authors , David Airlie , Russell King , Sam Ravnborg , =?UTF-8?Q?Christian_K=C3=B6nig?= , Emil Velikov List-Id: dri-devel@lists.freedesktop.org T24gU2F0LCBOb3YgOSwgMjAxOSBhdCAxMjowMyBBTSBMdWNhcyBTdGFjaCA8bC5zdGFjaEBwZW5n dXRyb25peC5kZT4gd3JvdGU6Cj4KPiBBbSBGcmVpdGFnLCBkZW4gMDguMTEuMjAxOSwgMjI6MzIg KzAxMDAgc2NocmllYiBBcm5kIEJlcmdtYW5uOgo+ID4gc3RydWN0IHRpbWVzcGVjIGlzIGJlaW5n IHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIGJlY2F1c2UgaXQgb2Z0ZW4gbGVhZHMKPiA+IHRvIGNv ZGUgdGhhdCBpcyBub3QgeTIwMzgtc2FmZS4KPiA+Cj4gPiBJbiB0aGUgZXRuYXZpdiBkcml2ZXIs IG1vbm90b25pYyB0aW1lc3RhbXBzIGFyZSB1c2VkLCB3aGljaCBkbyBub3Qgc3VmZmVyCj4gPiBm cm9tIG92ZXJmbG93LCBidXQgdXNpbmcga3RpbWVfdCBzdGlsbCBsZWFkcyB0byBiZXR0ZXIgY29k ZSBvdmVyYWxsLgo+ID4KPiA+IFRoZSBjb252ZXJzaW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZCBmb3Ig dGhlIG1vc3QgcGFydCwgZXhjZXB0IGZvcgo+ID4gZXRuYXZpdl90aW1lb3V0X3RvX2ppZmZpZXMo KSwgd2hpY2ggbmVlZHMgdG8gaGFuZGxlIGFyZ3VtZW50cyBsYXJnZXIKPiA+IHRoYW4gTUFYX0pJ RkZZX09GRlNFVCBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5 OiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgoKPiA+IEBAIC0zNjgsNyArMzY2LDcgQEAg c3RhdGljIGludCBldG5hdml2X2lvY3RsX3dhaXRfZmVuY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKPiA+ICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKPiA+Cj4gPiAg ICAgICBpZiAoYXJncy0+ZmxhZ3MgJiBFVE5BX1dBSVRfTk9OQkxPQ0spCj4gPiAtICAgICAgICAg ICAgIHRpbWVvdXQgPSBOVUxMOwo+ID4gKyAgICAgICAgICAgICB0aW1lb3V0ID0ga3RpbWVfc2V0 KDAsIDApOwo+Cj4gVGhpcyBpcyBhIGNoYW5nZSBpbiBiZWhhdmlvciwgYXMgZmFyIGFzIEkgY2Fu IHNlZS4gQWZ0ZXIgdGhpcyBjaGFuZ2UKPiB0aGUgY2FsbGVkIGludGVybmFsIGZ1bmN0aW9uIGlz IG5vdCBhYmxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhCj4gTk9OQkxPQ0sgY2FsbCBhbmQg YSBibG9ja2luZyBjYWxsIHdpdGggMCB0aW1lb3V0LiBUaGUgZGlmZmVyZW5jZSBiZWluZwo+IHRo YXQgb24gYSBidXN5IG9iamVjdCB0aGUgTk9OQkxPQ0sgY2FsbCB3aWxsIHJldHVybiAtRUJVU1ks IHdoaWxlIGEKPiBibG9ja2luZyBjYWxsIHdpbGwgcmV0dXJuIC1FVElNRURPVVQuCgpBaCwgZ29v ZCBwb2ludC4gSSBjcmVhdGVkIHRoaXMgcGF0Y2ggYSBsb25nIHRpbWUgYWdvIChjaGVycnktcGlj a2VkIGl0IG91dApvZiBhbiBvbGRlciBicmFuY2ggSSBoYWQgZG9uZSksIHNvIEkgZG9uJ3QgcmVt ZW1iZXIgaG93IEkgY29uY2x1ZGVkIHRoaXMKd2FzIGEgc2FmZSBjb252ZXJzaW9uLCBvZiBpZiBJ IG1pc3NlZCB0aGF0IGRpZmZlcmVuY2Ugb3JpZ2luYWxseS4KCj4gQnV0IHRoZW4gQ0xPQ0tfTU9O T1RPTklDIHN0YXJ0cyBhdCAwIGFuZCBzaG91bGQgbm90IG5ldmVyIHdyYXAsIHJpZ2h0PwoKWWVz LCB0aGF0IGlzIGNvcnJlY3QuCgo+IElmIHRoYXQncyB0aGUgY2FzZSB0aGVuIHdlIHNob3VsZCBu ZXZlciBlbmNvdW50ZXIgYSBnZW51aW5lIDAgdGltZW91dAo+IGFuZCB0aGlzIGNoYW5nZSB3b3Vs ZCBiZSBva2F5LgoKVGhhdCdzIHF1aXRlIGxpa2VseSwgSSdkIHNheSBhbnkgcHJvZ3JhbSBwYXNz aW5nIHswLDB9IGFzIGEgdGltZW91dCB3aXRob3V0CkVUTkFfV0FJVF9OT05CTE9DSyBpcyBhbHJl YWR5IGJyb2tlbiwgYnV0IGlmIHdlIGxlYXZlIGl0IGxpa2UgdGhhdCwKaXQgd291bGQgYmUgYmVz dCB0byBkZXNjcmliZSB0aGUgcmVhc29uaW5nIGluIHRoZSBjaGFuZ2Vsb2cuCgpTaG91bGQgSSBj aGFuZ2UgdGhlIGNoYW5nZWxvZywgb3IgY2hhbmdlIHRoZSBwYXRjaCB0byByZXN0b3JlIHRoZQpj dXJyZW50IGJlaGF2aW9yIGluc3RlYWQ/CgpJIGd1ZXNzIEkgY291bGQgZm9sZCB0aGUgY2hhbmdl IGJlbG93IGludG8gbXkgcGF0Y2ggdG8gbWFrZSBpdCB0cmFuc3BhcmVudAp0byB0aGUgYXBwbGlj YXRpb24gYWdhaW4uCgogICAgICBBcm5kCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9kcnYuYwpiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2 LmMKaW5kZXggMTI1MGM1ZTA2MzI5Li4xNjJjZWRmYjdmNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2 aXYvZXRuYXZpdl9kcnYuYwpAQCAtMzU0LDYgKzM1NCw3IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9p b2N0bF93YWl0X2ZlbmNlKHN0cnVjdApkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAgICAg ICAga3RpbWVfdCB0aW1lb3V0ID0ga3RpbWVfc2V0KGFyZ3MtPnRpbWVvdXQudHZfc2VjLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT50aW1lb3V0LnR2X25zZWMpOwog ICAgICAgIHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1OworICAgICAgIGludCByZXQ7CgogICAgICAg IGlmIChhcmdzLT5mbGFncyAmIH4oRVROQV9XQUlUX05PTkJMT0NLKSkKICAgICAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOwpAQCAtMzY1LDggKzM2NiwxMiBAQCBzdGF0aWMgaW50IGV0bmF2aXZf aW9jdGxfd2FpdF9mZW5jZShzdHJ1Y3QKZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogICAg ICAgIGlmICghZ3B1KQogICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKCi0gICAgICAgaWYg KGFyZ3MtPmZsYWdzICYgRVROQV9XQUlUX05PTkJMT0NLKQotICAgICAgICAgICAgICAgdGltZW91 dCA9IGt0aW1lX3NldCgwLCAwKTsKKyAgICAgICBpZiAoYXJncy0+ZmxhZ3MgJiBFVE5BX1dBSVRf Tk9OQkxPQ0spIHsKKyAgICAgICAgICAgICAgIHJldCA9IGV0bmF2aXZfZ3B1X3dhaXRfZmVuY2Vf aW50ZXJydXB0aWJsZShncHUsIGFyZ3MtPmZlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt0aW1lX3NldCgwLCAwKSk7CisKKyAg ICAgICAgICAgICAgIHJldHVybiAocmV0ID09IC1FVElNRURPVVQpID8gLUVCVVNZIDogcmV0Owor ICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV0bmF2aXZfZ3B1X3dhaXRfZmVuY2VfaW50ZXJydXB0 aWJsZShncHUsIGFyZ3MtPmZlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC00MjEsMTAgKzQyNiwxMyBAQCBzdGF0aWMg aW50IGV0bmF2aXZfaW9jdGxfZ2VtX3dhaXQoc3RydWN0CmRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKICAgICAgICBpZiAoIW9iaikKICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwoK LSAgICAgICBpZiAoYXJncy0+ZmxhZ3MgJiBFVE5BX1dBSVRfTk9OQkxPQ0spCi0gICAgICAgICAg ICAgICB0aW1lb3V0ID0ga3RpbWVfc2V0KDAsIDApOwotCi0gICAgICAgcmV0ID0gZXRuYXZpdl9n ZW1fd2FpdF9ibyhncHUsIG9iaiwgdGltZW91dCk7CisgICAgICAgaWYgKGFyZ3MtPmZsYWdzICYg RVROQV9XQUlUX05PTkJMT0NLKSB7CisgICAgICAgICAgICAgICByZXQgPSBldG5hdml2X2dlbV93 YWl0X2JvKGdwdSwgb2JqLCBrdGltZV9zZXQoMCwgMCkpOworICAgICAgICAgICAgICAgaWYgKHJl dCA9PSAtRVRJTUVET1VUKQorICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Cisg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIHJldCA9IGV0bmF2aXZfZ2VtX3dhaXRfYm8o Z3B1LCBvYmosIHRpbWVvdXQpOworICAgICAgIH0KCiAgICAgICAgZHJtX2dlbV9vYmplY3RfcHV0 X3VubG9ja2VkKG9iaik7CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRu YXZpdl9ncHUuYwpiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ3B1LmMKaW5kZXgg ZTQyYjFjNGQ5MDJjLi5mYTY5ODZjNWE1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9l dG5hdml2L2V0bmF2aXZfZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZp dl9ncHUuYwpAQCAtMTEzNSw2ICsxMTM1LDcgQEAgaW50IGV0bmF2aXZfZ3B1X3dhaXRfZmVuY2Vf aW50ZXJydXB0aWJsZShzdHJ1Y3QKZXRuYXZpdl9ncHUgKmdwdSwKICAgICAgICB1MzIgaWQsIGt0 aW1lX3QgdGltZW91dCkKIHsKICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKyAgICAg ICB1bnNpZ25lZCBsb25nIHJlbWFpbmluZzsKICAgICAgICBpbnQgcmV0OwoKICAgICAgICAvKgpA QCAtMTE1MSwxMiArMTE1MiwxMiBAQCBpbnQKZXRuYXZpdl9ncHVfd2FpdF9mZW5jZV9pbnRlcnJ1 cHRpYmxlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAogICAgICAgIGlmICghZmVuY2UpCiAgICAg ICAgICAgICAgICByZXR1cm4gMDsKCi0gICAgICAgaWYgKCF0aW1lb3V0KSB7Ci0gICAgICAgICAg ICAgICAvKiBObyB0aW1lb3V0IHdhcyByZXF1ZXN0ZWQ6IGp1c3QgdGVzdCBmb3IgY29tcGxldGlv biAqLwotICAgICAgICAgICAgICAgcmV0ID0gZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSA/ IDAgOiAtRUJVU1k7CisgICAgICAgaWYgKCF0aW1lb3V0IHx8CisgICAgICAgICAgIChyZW1haW5p bmcgPSBldG5hdml2X3RpbWVvdXRfdG9famlmZmllcyh0aW1lb3V0KSkgPT0gMCkgeworICAgICAg ICAgICAgICAgLyogTm8gdGltZW91dCB3YXMgcmVxdWVzdGVkLCBvciB0aW1lb3V0IGlzIGFscmVh ZHkgZXhwaXJlZCwKKyAgICAgICAgICAgICAgICAqIGp1c3QgdGVzdCBmb3IgY29tcGxldGlvbiAq LworICAgICAgICAgICAgICAgcmV0ID0gZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSA/IDAg OiAtRVRJTUVET1VUOwogICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIHJlbWFpbmluZyA9IGV0bmF2aXZfdGltZW91dF90b19qaWZmaWVzKHRpbWVvdXQpOwotCiAg ICAgICAgICAgICAgICByZXQgPSBkbWFfZmVuY2Vfd2FpdF90aW1lb3V0KGZlbmNlLCB0cnVlLCBy ZW1haW5pbmcpOwogICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKQogICAgICAgICAgICAgICAg ICAgICAgICByZXQgPSAtRVRJTUVET1VUOwpAQCAtMTE4NSw3ICsxMTg2LDcgQEAgaW50IGV0bmF2 aXZfZ3B1X3dhaXRfb2JqX2luYWN0aXZlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAogICAgICAg IGxvbmcgcmV0OwoKICAgICAgICBpZiAoIXRpbWVvdXQpCi0gICAgICAgICAgICAgICByZXR1cm4g IWlzX2FjdGl2ZShldG5hdml2X29iaikgPyAwIDogLUVCVVNZOworICAgICAgICAgICAgICAgcmV0 dXJuICFpc19hY3RpdmUoZXRuYXZpdl9vYmopID8gMCA6IC1FVElNRURPVVQ7CgogICAgICAgIHJl bWFpbmluZyA9IGV0bmF2aXZfdGltZW91dF90b19qaWZmaWVzKHRpbWVvdXQpOwpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=