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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7DD83C77B7E for ; Sun, 28 May 2023 08:25:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229609AbjE1IZb (ORCPT ); Sun, 28 May 2023 04:25:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44058 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229437AbjE1IZ3 (ORCPT ); Sun, 28 May 2023 04:25:29 -0400 Received: from bg4.exmail.qq.com (bg4.exmail.qq.com [43.155.67.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EFAB899; Sun, 28 May 2023 01:25:26 -0700 (PDT) X-QQ-mid: bizesmtp70t1685262312tra33cp0 Received: from linux-lab-host.localdomain ( [119.123.130.80]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 28 May 2023 16:25:10 +0800 (CST) X-QQ-SSF: 01200000000000D0V000000A0000000 X-QQ-FEAT: An8j/rhzjdGajJeEXw9TkdV6lrxosyLeWWZ9VDBE9LOjDBmydLX7wTGYZYvYx IwKElaEyNjmHyGHMKJab2Zt1BbXL2L2S9MY/mJeCcgY6mTf99g5K/h0OG/BKKizV3mavnde ya71KdKJ28Ku7Hfo4T20IWMGVjd6BtGAvJaYTaAXwJofSuE9Ux/o2inHP7SnyfazeXi+gDz VXqA7WmMfOdIlmM4yJeiy00K8pHgkMZ47UZcDbcTcelWgpAkerI87FRFSqmLXkrUAeublyI uxdnjZsrucnpXKh79cSi7lK503yfp97zHAoNLr5w4dBiLEfibrDqfmByEJqB/fjADX4NueH x2UMgq1b2R0TKKJT/AHXoqMQnWCFw== X-QQ-GoodBg: 0 X-BIZMAIL-ID: 107622595535614610 From: Zhangjin Wu To: arnd@arndb.de, thomas@t-8ch.de, w@1wt.eu Cc: falcon@tinylab.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-riscv@lists.infradead.org, palmer@dabbelt.com, paul.walmsley@sifive.com Subject: Re: [PATCH 09/13] tools/nolibc: sys_poll: riscv: use __NR_ppoll_time64 for rv32 Date: Sun, 28 May 2023 16:25:09 +0800 Message-Id: <20230528082509.293250-1-falcon@tinylab.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <83ab9f47-e1ed-463c-a717-26aad6bf2b71@app.fastmail.com> References: <83ab9f47-e1ed-463c-a717-26aad6bf2b71@app.fastmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:tinylab.org:qybglogicsvrsz:qybglogicsvrsz3a-3 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Arnd, Thomas, Willy > On Fri, May 26, 2023, at 09:15, Thomas Wei=C3=9Fschuh wrote: > > On 2023-05-25 01:57:24+0800, Zhangjin Wu wrote: > >> > >> +/* needed by time64 syscalls */ > >> +struct timespec64 { > >> + time64_t tv_sec; /* seconds */ > >> + long tv_nsec; /* nanoseconds */ > >> +}; > > > > A question to you and Willy, as it's also done the same for other types: > > > > What is the advantage of custom definitions over using the one from the > > kernel (maybe via a typedef). > > > > From linux/time_types.h: > > > > struct __kernel_timespec { > > __kernel_time64_t tv_set; > > long long tv_nsec; > > }; > > I agree the __kernel_* types are what we should be using when > interacting with system calls directly, that is definitely what > they are intended for. > > I would go further here and completely drop support for 32-bit > time_t/off_t and derived types in nolibc. Unfortunately, the > kernel's include/uapi/linux/time.h header still defines the > old types, this is one of the last remnants the time32 syscalls > definitions in the kernel headers, and this already conflicts > with the glibc and musl definitions, so anything that includes > this header is broken on real systems. I think it makes most > sense for nolibc to just use the linux/time_types.h header > instead and use something like > > #define timespec __kernel_timespec > #define itimerspec __kernel_itimerspec > typedef __kernel_time64_t time_t; > /* timeval is only provided for users, not compatible with syscalls */ > struct timeval { __kernel_time64_t tv_sec; __s64 tv_nsec; }; > > so we can drop all the fallbacks for old 32-bit targets. This > also allows running with CONFIG_COMPAT_32BIT_TIME disabled. Just a status update ... I'm working on the pure time64 and 64bit off_t syscalls support, it almost worked (tested on rv32/64, arm32/64), thanks very much for your suggestions. It includes: * Based on linux/types.h and * Use 64bit off_t * Use 64bit time_t * the new std.h looks like this typedef uint32_t __kernel_dev_t; typedef __kernel_dev_t dev_t; typedef __kernel_ulong_t ino_t; typedef __kernel_mode_t mode_t; typedef __kernel_pid_t pid_t; typedef __kernel_uid32_t uid_t; typedef __kernel_gid32_t gid_t; typedef __kernel_loff_t off_t; typedef __kernel_time64_t time_t; typedef uint32_t nlink_t; typedef uint64_t blksize_t; typedef uint64_t blkcnt_t; * Use __kernel_timespec as timespec * Use 64bit time_t based struct timeval * Disable gettimeofday syscall completely for 32bit platforms * And disable the gettimeofday_bad1/2 test case too * Remove the oldselect and newslect path completely * The new types.h looks this: /* always use time64 structs in user-space even on 32bit platforms */ #define timespec __kernel_timespec #define itimerspec __kernel_itimerspec /* timeval is only provided for users, not compatible with syscalls */ struct __timeval64 { __kernel_time64_t tv_sec; /* seconds */ __s64 tv_usec; /* microseconds */ }; /* override the 32bit version of struct timeval in linux/time.h */ #define timeval __timeval64 /* itimerval is only provided for users, not compatible with syscalls */ struct __itimerval64 { struct __timeval64 it_interval; /* timer interval */ struct __timeval64 it_value; /* current value */ }; /* override the 32bit version of struct itimerval in linux/time.h */ #define itimerval __itimerval64 * Use __NR_*time64 for all 32bit platforms * Use __NR_pselect6/ppoll/clock_gettime only for 64bit platforms * New sizeof tests added to verify off_t, time_t, timespec, itimerspec... CASE_TEST(sizeof_time_t); EXPECT_EQ(1, 8, sizeof(time_t)); break; CASE_TEST(sizeof_timespec); EXPECT_EQ(1, 16, sizeof(struct timespec)); break; #ifdef NOLIBC CASE_TEST(sizeof_itimerspec); EXPECT_EQ(1, 32, sizeof(struct itimerspec)); break; #endif CASE_TEST(sizeof_timeval); EXPECT_EQ(1, 16, sizeof(struct timeval)); break; CASE_TEST(sizeof_itimerval); EXPECT_EQ(1, 32, sizeof(struct itimerval)); break; CASE_TEST(sizeof_off_t); EXPECT_EQ(1, 8, sizeof(off_t)); break; @Arnd, the above timeval/itimerval definitions are used to override the ones from linux/time.h to avoid such error: error: redefinition of ‘struct timeval’ nolibc/sysroot/riscv/include/types.h:225:8: error: redefinition of ‘struct timeval’ 225 | struct timeval { | ^~~~~~~ In file included from nolibc/sysroot/riscv/include/types.h:11, from nolibc/sysroot/riscv/include/nolibc.h:98, from nolibc/sysroot/riscv/include/errno.h:26, from nolibc/sysroot/riscv/include/stdio.h:14, from tools/testing/selftests/nolibc/nolibc-test.c:12: nolibc/sysroot/riscv/include/linux/time.h:16:8: note: originally defined here 16 | struct timeval { @Arnd, As you commented in another reply, is it time for us to update include/uapi/linux/time.h together and let it provide time64 timeval/itimerval instead of the old ones? perhaps some libc's are still using them. Or perhaps we can add a switch like __ARCH_WANT_TIME32_SYSCALLS, add a __ARCH_WANT_TIME32_STRUCTS and simply bind it with __ARCH_WANT_TIME32_SYSCALLS? About the above ugly override code, What's your suggestion in v2? ;-) Best regards, Zhangjin > > Arnd 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 50F93C77B7E for ; Sun, 28 May 2023 08:25:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tEv5AsP4bRLzRvFwFrGFP6TM2hwHFBwF3Tzf52YAsq0=; b=J/bfQlA9be8z3V DJW1tT0YCy26DHUDdc2uhQZ1vazB8OvkxhL00fLO7uPS75DjUNuHXWs6RB55DyNgFeEWMf67Ld2pV AVsdTExXTI0zURkkBXeGTwE+nhJwAPM+v98KiFvwEhjx+1BvnYYvRO7rvooAvQaNzxYtcX8u3WNeb p4OhuWx/FijwOkrq+NppSBFZ+lDttMLojG0m/i70X/i0JUaLbDA8QFZfgZSOPPaX/KscWCvhzVc9S BrKiTz9yo8deDXgUFiEzx+vHdVLCY2GBFVXhSLtFesXNwlj3mRqA4WPu09+IHzpdb4R/JC1Y4gc0S xFN/ZY1JIjPOBgNGZ8dQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q3Bih-007BOH-0o; Sun, 28 May 2023 08:25:43 +0000 Received: from bg4.exmail.qq.com ([43.155.65.254]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q3Bic-007BM2-2D for linux-riscv@lists.infradead.org; Sun, 28 May 2023 08:25:41 +0000 X-QQ-mid: bizesmtp70t1685262312tra33cp0 Received: from linux-lab-host.localdomain ( [119.123.130.80]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 28 May 2023 16:25:10 +0800 (CST) X-QQ-SSF: 01200000000000D0V000000A0000000 X-QQ-FEAT: An8j/rhzjdGajJeEXw9TkdV6lrxosyLeWWZ9VDBE9LOjDBmydLX7wTGYZYvYx IwKElaEyNjmHyGHMKJab2Zt1BbXL2L2S9MY/mJeCcgY6mTf99g5K/h0OG/BKKizV3mavnde ya71KdKJ28Ku7Hfo4T20IWMGVjd6BtGAvJaYTaAXwJofSuE9Ux/o2inHP7SnyfazeXi+gDz VXqA7WmMfOdIlmM4yJeiy00K8pHgkMZ47UZcDbcTcelWgpAkerI87FRFSqmLXkrUAeublyI uxdnjZsrucnpXKh79cSi7lK503yfp97zHAoNLr5w4dBiLEfibrDqfmByEJqB/fjADX4NueH x2UMgq1b2R0TKKJT/AHXoqMQnWCFw== X-QQ-GoodBg: 0 X-BIZMAIL-ID: 107622595535614610 From: Zhangjin Wu To: arnd@arndb.de, thomas@t-8ch.de, w@1wt.eu Cc: falcon@tinylab.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-riscv@lists.infradead.org, palmer@dabbelt.com, paul.walmsley@sifive.com Subject: Re: [PATCH 09/13] tools/nolibc: sys_poll: riscv: use __NR_ppoll_time64 for rv32 Date: Sun, 28 May 2023 16:25:09 +0800 Message-Id: <20230528082509.293250-1-falcon@tinylab.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <83ab9f47-e1ed-463c-a717-26aad6bf2b71@app.fastmail.com> References: <83ab9f47-e1ed-463c-a717-26aad6bf2b71@app.fastmail.com> MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:tinylab.org:qybglogicsvrsz:qybglogicsvrsz3a-3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230528_012539_045653_5A1F34FF X-CRM114-Status: GOOD ( 26.39 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org SGksIEFybmQsIFRob21hcywgV2lsbHkKCj4gT24gRnJpLCBNYXkgMjYsIDIwMjMsIGF0IDA5OjE1 LCBUaG9tYXMgV2VpPUMzPTlGc2NodWggd3JvdGU6Cj4gPiBPbiAyMDIzLTA1LTI1IDAxOjU3OjI0 KzA4MDAsIFpoYW5namluIFd1IHdyb3RlOgo+ID4+IAo+ID4+ICsvKiBuZWVkZWQgYnkgdGltZTY0 IHN5c2NhbGxzICovCj4gPj4gK3N0cnVjdCB0aW1lc3BlYzY0IHsKPiA+PiArCXRpbWU2NF90CXR2 X3NlYzsJCS8qIHNlY29uZHMgKi8KPiA+PiArCWxvbmcJCXR2X25zZWM7CS8qIG5hbm9zZWNvbmRz ICovCj4gPj4gK307Cj4gPgo+ID4gQSBxdWVzdGlvbiB0byB5b3UgYW5kIFdpbGx5LCBhcyBpdCdz IGFsc28gZG9uZSB0aGUgc2FtZSBmb3Igb3RoZXIgdHlwZXM6Cj4gPgo+ID4gV2hhdCBpcyB0aGUg YWR2YW50YWdlIG9mIGN1c3RvbSBkZWZpbml0aW9ucyBvdmVyIHVzaW5nIHRoZSBvbmUgZnJvbSB0 aGUKPiA+IGtlcm5lbCAobWF5YmUgdmlhIGEgdHlwZWRlZikuCj4gPgo+ID4gRnJvbSBsaW51eC90 aW1lX3R5cGVzLmg6Cj4gPgo+ID4gc3RydWN0IF9fa2VybmVsX3RpbWVzcGVjIHsKPiA+IAlfX2tl cm5lbF90aW1lNjRfdCB0dl9zZXQ7Cj4gPiAJbG9uZyBsb25nIHR2X25zZWM7Cj4gPiB9Owo+IAo+ IEkgYWdyZWUgdGhlIF9fa2VybmVsXyogdHlwZXMgYXJlIHdoYXQgd2Ugc2hvdWxkIGJlIHVzaW5n IHdoZW4KPiBpbnRlcmFjdGluZyB3aXRoIHN5c3RlbSBjYWxscyBkaXJlY3RseSwgdGhhdCBpcyBk ZWZpbml0ZWx5IHdoYXQKPiB0aGV5IGFyZSBpbnRlbmRlZCBmb3IuCj4gCj4gSSB3b3VsZCBnbyBm dXJ0aGVyIGhlcmUgYW5kIGNvbXBsZXRlbHkgZHJvcCBzdXBwb3J0IGZvciAzMi1iaXQKPiB0aW1l X3Qvb2ZmX3QgYW5kIGRlcml2ZWQgdHlwZXMgaW4gbm9saWJjLiBVbmZvcnR1bmF0ZWx5LCB0aGUK PiBrZXJuZWwncyBpbmNsdWRlL3VhcGkvbGludXgvdGltZS5oIGhlYWRlciBzdGlsbCBkZWZpbmVz IHRoZQo+IG9sZCB0eXBlcywgdGhpcyBpcyBvbmUgb2YgdGhlIGxhc3QgcmVtbmFudHMgdGhlIHRp bWUzMiBzeXNjYWxscwo+IGRlZmluaXRpb25zIGluIHRoZSBrZXJuZWwgaGVhZGVycywgYW5kIHRo aXMgYWxyZWFkeSBjb25mbGljdHMKPiB3aXRoIHRoZSBnbGliYyBhbmQgbXVzbCBkZWZpbml0aW9u cywgc28gYW55dGhpbmcgdGhhdCBpbmNsdWRlcwo+IHRoaXMgaGVhZGVyIGlzIGJyb2tlbiBvbiBy ZWFsIHN5c3RlbXMuIEkgdGhpbmsgaXQgbWFrZXMgbW9zdAo+IHNlbnNlIGZvciBub2xpYmMgdG8g anVzdCB1c2UgdGhlIGxpbnV4L3RpbWVfdHlwZXMuaCBoZWFkZXIKPiBpbnN0ZWFkIGFuZCB1c2Ug c29tZXRoaW5nIGxpa2UKPiAKPiAjZGVmaW5lIHRpbWVzcGVjICAgX19rZXJuZWxfdGltZXNwZWMK PiAjZGVmaW5lIGl0aW1lcnNwZWMgX19rZXJuZWxfaXRpbWVyc3BlYwo+IHR5cGVkZWYgX19rZXJu ZWxfdGltZTY0X3QgdGltZV90Owo+IC8qIHRpbWV2YWwgaXMgb25seSBwcm92aWRlZCBmb3IgdXNl cnMsIG5vdCBjb21wYXRpYmxlIHdpdGggc3lzY2FsbHMgKi8KPiBzdHJ1Y3QgdGltZXZhbCB7IF9f a2VybmVsX3RpbWU2NF90IHR2X3NlYzsgX19zNjQgdHZfbnNlYzsgfTsKPiAKPiBzbyB3ZSBjYW4g ZHJvcCBhbGwgdGhlIGZhbGxiYWNrcyBmb3Igb2xkIDMyLWJpdCB0YXJnZXRzLiBUaGlzCj4gYWxz byBhbGxvd3MgcnVubmluZyB3aXRoIENPTkZJR19DT01QQVRfMzJCSVRfVElNRSBkaXNhYmxlZC4K Ckp1c3QgYSBzdGF0dXMgdXBkYXRlIC4uLgoKSSdtIHdvcmtpbmcgb24gdGhlIHB1cmUgdGltZTY0 IGFuZCA2NGJpdCBvZmZfdCBzeXNjYWxscyBzdXBwb3J0LCBpdCBhbG1vc3QKd29ya2VkICh0ZXN0 ZWQgb24gcnYzMi82NCwgYXJtMzIvNjQpLCB0aGFua3MgdmVyeSBtdWNoIGZvciB5b3VyIHN1Z2dl c3Rpb25zLgoKSXQgaW5jbHVkZXM6CgoqIEJhc2VkIG9uIGxpbnV4L3R5cGVzLmggYW5kCiAgICAq IFVzZSA2NGJpdCBvZmZfdAogICAgKiBVc2UgNjRiaXQgdGltZV90CiAgICAqIHRoZSBuZXcgc3Rk LmggbG9va3MgbGlrZSB0aGlzCgogICAgdHlwZWRlZiB1aW50MzJfdCBfX2tlcm5lbF9kZXZfdDsK ICAgIAogICAgdHlwZWRlZiBfX2tlcm5lbF9kZXZfdCAgICAgICAgICBkZXZfdDsKICAgIHR5cGVk ZWYgX19rZXJuZWxfdWxvbmdfdCAgICAgICAgaW5vX3Q7CiAgICB0eXBlZGVmIF9fa2VybmVsX21v ZGVfdCAgICAgICAgIG1vZGVfdDsKICAgIHR5cGVkZWYgX19rZXJuZWxfcGlkX3QgICAgICAgICAg cGlkX3Q7CiAgICB0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QgICAgICAgIHVpZF90OwogICAgdHlw ZWRlZiBfX2tlcm5lbF9naWQzMl90ICAgICAgICBnaWRfdDsKICAgIHR5cGVkZWYgX19rZXJuZWxf bG9mZl90ICAgICAgICAgb2ZmX3Q7CiAgICB0eXBlZGVmIF9fa2VybmVsX3RpbWU2NF90ICAgICAg IHRpbWVfdDsKICAgIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgbmxpbmtfdDsKICAg IHR5cGVkZWYgdWludDY0X3QgICAgICAgICAgICAgICAgYmxrc2l6ZV90OwogICAgdHlwZWRlZiB1 aW50NjRfdCAgICAgICAgICAgICAgICBibGtjbnRfdDsKCiogVXNlIF9fa2VybmVsX3RpbWVzcGVj IGFzIHRpbWVzcGVjCiogVXNlIDY0Yml0IHRpbWVfdCBiYXNlZCBzdHJ1Y3QgdGltZXZhbAogICAg KiBEaXNhYmxlIGdldHRpbWVvZmRheSBzeXNjYWxsIGNvbXBsZXRlbHkgZm9yIDMyYml0IHBsYXRm b3JtcwogICAgICAgICogQW5kIGRpc2FibGUgdGhlIGdldHRpbWVvZmRheV9iYWQxLzIgdGVzdCBj YXNlIHRvbwogICAgKiBSZW1vdmUgdGhlIG9sZHNlbGVjdCBhbmQgbmV3c2xlY3QgcGF0aCBjb21w bGV0ZWx5CiAgICAqIFRoZSBuZXcgdHlwZXMuaCBsb29rcyB0aGlzOgoKICAgIC8qIGFsd2F5cyB1 c2UgdGltZTY0IHN0cnVjdHMgaW4gdXNlci1zcGFjZSBldmVuIG9uIDMyYml0IHBsYXRmb3JtcyAq LwogICAgI2RlZmluZSB0aW1lc3BlYyBfX2tlcm5lbF90aW1lc3BlYwogICAgI2RlZmluZSBpdGlt ZXJzcGVjIF9fa2VybmVsX2l0aW1lcnNwZWMKCiAgICAvKiB0aW1ldmFsIGlzIG9ubHkgcHJvdmlk ZWQgZm9yIHVzZXJzLCBub3QgY29tcGF0aWJsZSB3aXRoIHN5c2NhbGxzICovCiAgICBzdHJ1Y3Qg X190aW1ldmFsNjQgewogICAgCV9fa2VybmVsX3RpbWU2NF90IHR2X3NlYzsJLyogc2Vjb25kcyAq LwogICAgCV9fczY0IHR2X3VzZWM7CQkJLyogbWljcm9zZWNvbmRzICovCiAgICB9OwogICAgLyog b3ZlcnJpZGUgdGhlIDMyYml0IHZlcnNpb24gb2Ygc3RydWN0IHRpbWV2YWwgaW4gbGludXgvdGlt ZS5oICovCiAgICAjZGVmaW5lIHRpbWV2YWwgX190aW1ldmFsNjQKCiAgICAvKiBpdGltZXJ2YWwg aXMgb25seSBwcm92aWRlZCBmb3IgdXNlcnMsIG5vdCBjb21wYXRpYmxlIHdpdGggc3lzY2FsbHMg Ki8KICAgIHN0cnVjdCBfX2l0aW1lcnZhbDY0IHsKICAgIAlzdHJ1Y3QgX190aW1ldmFsNjQgaXRf aW50ZXJ2YWw7CS8qIHRpbWVyIGludGVydmFsICovCiAgICAJc3RydWN0IF9fdGltZXZhbDY0IGl0 X3ZhbHVlOwkvKiBjdXJyZW50IHZhbHVlICovCiAgICB9OwogICAgLyogb3ZlcnJpZGUgdGhlIDMy Yml0IHZlcnNpb24gb2Ygc3RydWN0IGl0aW1lcnZhbCBpbiBsaW51eC90aW1lLmggKi8KICAgICNk ZWZpbmUgaXRpbWVydmFsIF9faXRpbWVydmFsNjQKCiogVXNlIF9fTlJfKnRpbWU2NCBmb3IgYWxs IDMyYml0IHBsYXRmb3JtcwoqIFVzZSBfX05SX3BzZWxlY3Q2L3Bwb2xsL2Nsb2NrX2dldHRpbWUg b25seSBmb3IgNjRiaXQgcGxhdGZvcm1zCiogTmV3IHNpemVvZiB0ZXN0cyBhZGRlZCB0byB2ZXJp Znkgb2ZmX3QsIHRpbWVfdCwgdGltZXNwZWMsIGl0aW1lcnNwZWMuLi4KCiAgIAlDQVNFX1RFU1Qo c2l6ZW9mX3RpbWVfdCk7ICAgICAgICAgICBFWFBFQ1RfRVEoMSwgOCwgICBzaXplb2YodGltZV90 KSk7IGJyZWFrOwogICAgCUNBU0VfVEVTVChzaXplb2ZfdGltZXNwZWMpOyAgICAgICAgIEVYUEVD VF9FUSgxLCAxNiwgIHNpemVvZihzdHJ1Y3QgdGltZXNwZWMpKTsgYnJlYWs7CiAgICAjaWZkZWYg Tk9MSUJDCiAgICAJQ0FTRV9URVNUKHNpemVvZl9pdGltZXJzcGVjKTsgICAgICAgRVhQRUNUX0VR KDEsIDMyLCAgc2l6ZW9mKHN0cnVjdCBpdGltZXJzcGVjKSk7IGJyZWFrOwogICAgI2VuZGlmCiAg ICAJQ0FTRV9URVNUKHNpemVvZl90aW1ldmFsKTsgICAgICAgICAgRVhQRUNUX0VRKDEsIDE2LCAg c2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7IGJyZWFrOwogICAgCUNBU0VfVEVTVChzaXplb2ZfaXRp bWVydmFsKTsgICAgICAgIEVYUEVDVF9FUSgxLCAzMiwgIHNpemVvZihzdHJ1Y3QgaXRpbWVydmFs KSk7IGJyZWFrOwogICAgCUNBU0VfVEVTVChzaXplb2Zfb2ZmX3QpOyAgICAgICAgICAgIEVYUEVD VF9FUSgxLCA4LCAgIHNpemVvZihvZmZfdCkpOyBicmVhazsKCgpAQXJuZCwgdGhlIGFib3ZlIHRp bWV2YWwvaXRpbWVydmFsIGRlZmluaXRpb25zIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBvbmVz CmZyb20gbGludXgvdGltZS5oIHRvIGF2b2lkIHN1Y2ggZXJyb3I6CgogICAgZXJyb3I6IHJlZGVm aW5pdGlvbiBvZiDigJhzdHJ1Y3QgdGltZXZhbOKAmQoKICAgIG5vbGliYy9zeXNyb290L3Jpc2N2 L2luY2x1ZGUvdHlwZXMuaDoyMjU6ODogZXJyb3I6IHJlZGVmaW5pdGlvbiBvZiDigJhzdHJ1Y3Qg dGltZXZhbOKAmQogICAgICAyMjUgfCBzdHJ1Y3QgdGltZXZhbCB7CiAgICAgICAgICB8ICAgICAg ICBefn5+fn5+CiAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gbm9saWJjL3N5c3Jvb3QvcmlzY3Yv aW5jbHVkZS90eXBlcy5oOjExLAogICAgICAgICAgICAgICAgICAgICBmcm9tIG5vbGliYy9zeXNy b290L3Jpc2N2L2luY2x1ZGUvbm9saWJjLmg6OTgsCiAgICAgICAgICAgICAgICAgICAgIGZyb20g bm9saWJjL3N5c3Jvb3QvcmlzY3YvaW5jbHVkZS9lcnJuby5oOjI2LAogICAgICAgICAgICAgICAg ICAgICBmcm9tIG5vbGliYy9zeXNyb290L3Jpc2N2L2luY2x1ZGUvc3RkaW8uaDoxNCwKICAgICAg ICAgICAgICAgICAgICAgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ub2xpYmMvbm9saWJj LXRlc3QuYzoxMjoKICAgIG5vbGliYy9zeXNyb290L3Jpc2N2L2luY2x1ZGUvbGludXgvdGltZS5o OjE2Ojg6IG5vdGU6IG9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlCiAgICAgICAxNiB8IHN0cnVjdCB0 aW1ldmFsIHsKCkBBcm5kLCBBcyB5b3UgY29tbWVudGVkIGluIGFub3RoZXIgcmVwbHksIGlzIGl0 IHRpbWUgZm9yIHVzIHRvIHVwZGF0ZQppbmNsdWRlL3VhcGkvbGludXgvdGltZS5oIHRvZ2V0aGVy IGFuZCBsZXQgaXQgcHJvdmlkZSB0aW1lNjQgdGltZXZhbC9pdGltZXJ2YWwKaW5zdGVhZCBvZiB0 aGUgb2xkIG9uZXM/IHBlcmhhcHMgc29tZSBsaWJjJ3MgYXJlIHN0aWxsIHVzaW5nIHRoZW0uCgpP ciBwZXJoYXBzIHdlIGNhbiBhZGQgYSBzd2l0Y2ggbGlrZSBfX0FSQ0hfV0FOVF9USU1FMzJfU1lT Q0FMTFMsIGFkZCBhCl9fQVJDSF9XQU5UX1RJTUUzMl9TVFJVQ1RTIGFuZCBzaW1wbHkgYmluZCBp dCB3aXRoIF9fQVJDSF9XQU5UX1RJTUUzMl9TWVNDQUxMUz8KCkFib3V0IHRoZSBhYm92ZSB1Z2x5 IG92ZXJyaWRlIGNvZGUsIFdoYXQncyB5b3VyIHN1Z2dlc3Rpb24gaW4gdjI/IDstKQoKQmVzdCBy ZWdhcmRzLApaaGFuZ2ppbgoKPiAKPiAgICAgIEFybmQKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1y aXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtcmlzY3YK