From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C57628F78 for ; Tue, 22 Aug 2023 12:16:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1E82CC433C7; Tue, 22 Aug 2023 12:16:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692706599; bh=6XMjf+C4m4wP8MbAFKnHL/NuZkI92jUFLqpHVKBmErg=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=aImy2TutP43Bd0VZsbv36ecP7vPoIYe/Up6bTk3xvsLNnw6MhFkK8QT8tomBzAkD+ QSsgU55g0hRPyMPRbCpMAFycSI1VgggT2PGIMd4Qk1KUMWNSxAdjwCfibFTkvK2VYP 3g7WQ1YZ+Cr+1nhhOGdhCyTVVyVmsDrnNF+HbuPoNOEXJDaxD0ZxILyOTi97PRuClK ac+gEpcE6k6MXMbpV3iIf365AOQentqEYTibsSUZl0NxytERLQjqJoHn4UIqqTaru7 US9U+0DqhkXjEUuf4AsqXrSEooXxf5DrwynUPliIgGCHrE7ttIf4+QBnBIB3Bkfs2H HA8yC+eEdou+Q== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qYQJI-0071Mo-JJ; Tue, 22 Aug 2023 13:16:36 +0100 Date: Tue, 22 Aug 2023 13:16:36 +0100 Message-ID: <86il97ff17.wl-maz@kernel.org> From: Marc Zyngier To: Ganapatrao Kulkarni Cc: linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, eauger@redhat.com, miguel.luis@oracle.com, darren@os.amperecomputing.com, scott@os.amperecomputing.com, Christoffer Dall Subject: Re: [PATCH 2/2] KVM: arm64: timers: Adjust CVAL of a ptimer across guest entry and exits In-Reply-To: <0c5fb304-8c69-80c3-6f1e-487828554244@os.amperecomputing.com> References: <20230817060314.535987-1-gankulkarni@os.amperecomputing.com> <20230817060314.535987-3-gankulkarni@os.amperecomputing.com> <87bkf6oyyt.wl-maz@kernel.org> <0c5fb304-8c69-80c3-6f1e-487828554244@os.amperecomputing.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: gankulkarni@os.amperecomputing.com, linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, eauger@redhat.com, miguel.luis@oracle.com, darren@os.amperecomputing.com, scott@os.amperecomputing.com, Christoffer.Dall@arm.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false On Thu, 17 Aug 2023 10:27:55 +0100, Ganapatrao Kulkarni wrote: >=20 >=20 > Hi Marc, >=20 > On 17-08-2023 01:57 pm, Marc Zyngier wrote: > > [Fixing Christoffer's email address] >=20 > Thanks. > >=20 > > On Thu, 17 Aug 2023 07:03:14 +0100, > > Ganapatrao Kulkarni wrote: > >>=20 > >> As per FEAT_ECV, when HCR_EL2.{E2H, TGE} =3D=3D {1, 1}, Enhanced Count= er > >> Virtualization functionality is disabled and CNTPOFF_EL2 value is trea= ted > >> as zero. On VHE host, E2H and TGE are set, hence it is required > >> to adjust CVAL by incrementing it by CNTPOFF_EL2 after guest > >> exit to avoid false physical timer interrupts and also > >> decrement/restore CVAL before the guest entry. > >=20 > > No, this is wrong. Neither E2H nor TGE have any impact on writing to > > CNTPOFF_EL2, nor does it have an impact on CNTP_CVAL_EL0. Just read > > the pseudocode to convince yourself. > >=20 > > CNTPOFF_EL2 is applied at exactly two points: when SW is reading > > CNTPCT_EL0 from EL1 while {E2H,TGE}=3D=3D{1, 0} and when the HW is > > comparing CNTPCT_EL0 with the CNTP_CVAL_EL0. In both cases the offset > > is subtracted from the counter. And that's the point where the running > > EL matters. Which means that CNTPOFF_EL2 behaves exactly like > > CNTVOFF_EL2. No ifs, no buts. >=20 > As per ARM ARM (ARM DDI 0487J.a page D11-5989) > "When FEAT_ECV is implemented, the CNTPOFF_EL2 register allows an > offset to be applied to the physical counter, as viewed from EL1 and > EL0, and to the EL1 physical timer. The functionality of this 64-bit > register is affected by CNTHCTL_EL2.ECV." >=20 > As per ARM ARM (ARM DDI 0487J.a page D19-7857) > "When HCR_EL2.{E2H, TGE} =3D=3D {1, 1} or SCR_EL3.{NS, EEL2} =3D=3D {0, 0= }, then > Enhanced Counter Virtualization functionality is disabled." >=20 > "The EL1 physical timer interrupt is triggered when ((PCount<63:0> - > CNTPOFF_EL2<63:0>) - PCVal<63:0>) is greater than or equal to 0." >=20 > As per ARM ARM (ARM DDI 0487J.a page D19-7938) > "When EL2 is implemented and enabled in the current Security state, > the physical counter uses a fixed physical offset of *zero* if any of > the following are true: > =E2=80=A2 CNTHCTL_EL2.ECV is 0. > =E2=80=A2 SCR_EL3.ECVEn is 0. > =E2=80=A2 HCR_EL2.{E2H, TGE} is {1, 1}." >=20 > In VHE host hypervisor, E2H=3DTGE=3D1 hence ECV is disabled and Ptimer > interrupt is triggered based on PCount<63:0> - PCVal<63:0> >=20 > Since cval is set by Guest as per offsetted PCounter value and pCount > is not subtracted by CNTPOFF when in VHE-L0, results in cval becoming > much lesser than physical counter(bumped up since CNTPOFF is zero) and > timer interrupt trigger condition is met falsely. >=20 > There is no issue/impact on cval due to ECV, however it can be/is > manipulated to handle this on and off of CNTPOFF/ECV. >=20 > IIUC, CNTPOFF and CNTVOFF are not same as per specification. I owe you an apology. You are correct, and I was totally wrong. I'm truly amazed how wrong we got this part of the architecture, but it is way too late for any change, and we'll have to live with it. Now, to the actual patch: I think the way you offset CVAL isn't great. You should never have to change it on entry, and you should instead read the correct value from memory. Then, save/restore of CVAL must be amended to always apply the offset. Can you give the hack below a go on your HW? Thanks, M. diff --git a/arch/arm64/kvm/arch_timer.c b/arch/arm64/kvm/arch_timer.c index ea46b4e1e7a8..bb80fdd84676 100644 --- a/arch/arm64/kvm/arch_timer.c +++ b/arch/arm64/kvm/arch_timer.c @@ -55,11 +55,6 @@ static struct irq_ops arch_timer_irq_ops =3D { .get_input_level =3D kvm_arch_timer_get_input_level, }; =20 -static bool has_cntpoff(void) -{ - return (has_vhe() && cpus_have_final_cap(ARM64_HAS_ECV_CNTPOFF)); -} - static int nr_timers(struct kvm_vcpu *vcpu) { if (!vcpu_has_nv2(vcpu)) @@ -180,7 +175,7 @@ u64 kvm_phys_timer_read(void) return timecounter->cc->read(timecounter->cc); } =20 -static void get_timer_map(struct kvm_vcpu *vcpu, struct timer_map *map) +void get_timer_map(struct kvm_vcpu *vcpu, struct timer_map *map) { if (vcpu_has_nv2(vcpu)) { if (is_hyp_ctxt(vcpu)) { @@ -569,8 +564,7 @@ static void timer_save_state(struct arch_timer_context = *ctx) timer_set_ctl(ctx, read_sysreg_el0(SYS_CNTP_CTL)); cval =3D read_sysreg_el0(SYS_CNTP_CVAL); =20 - if (!has_cntpoff()) - cval -=3D timer_get_offset(ctx); + cval -=3D timer_get_offset(ctx); =20 timer_set_cval(ctx, cval); =20 @@ -657,8 +651,7 @@ static void timer_restore_state(struct arch_timer_conte= xt *ctx) cval =3D timer_get_cval(ctx); offset =3D timer_get_offset(ctx); set_cntpoff(offset); - if (!has_cntpoff()) - cval +=3D offset; + cval +=3D offset; write_sysreg_el0(cval, SYS_CNTP_CVAL); isb(); write_sysreg_el0(timer_get_ctl(ctx), SYS_CNTP_CTL); diff --git a/arch/arm64/kvm/hyp/vhe/switch.c b/arch/arm64/kvm/hyp/vhe/switc= h.c index 9611b4eaf661..6e3d3e16563f 100644 --- a/arch/arm64/kvm/hyp/vhe/switch.c +++ b/arch/arm64/kvm/hyp/vhe/switch.c @@ -90,6 +90,20 @@ static void __activate_traps(struct kvm_vcpu *vcpu) =20 ___activate_traps(vcpu, hcr); =20 + if (has_cntpoff()) { + struct timer_map map; + + get_timer_map(vcpu, &map); + + if (map.direct_ptimer =3D=3D vcpu_ptimer(vcpu)) + val =3D __vcpu_sys_reg(vcpu, CNTP_CVAL_EL0); + else + val =3D __vcpu_sys_reg(vcpu, CNTHP_CVAL_EL2); + + isb(); + write_sysreg_s(val, SYS_CNTP_CVAL_EL0); + } + val =3D read_sysreg(cpacr_el1); val |=3D CPACR_ELx_TTA; val &=3D ~(CPACR_EL1_ZEN_EL0EN | CPACR_EL1_ZEN_EL1EN | @@ -131,6 +145,23 @@ static void __deactivate_traps(struct kvm_vcpu *vcpu) =20 write_sysreg(HCR_HOST_VHE_FLAGS, hcr_el2); =20 + if (has_cntpoff()) { + struct timer_map map; + u64 val, offset; + + get_timer_map(vcpu, &map); + + val =3D read_sysreg_s(SYS_CNTP_CVAL_EL0); + if (map.direct_ptimer =3D=3D vcpu_ptimer(vcpu)) + __vcpu_sys_reg(vcpu, CNTP_CVAL_EL0) =3D val; + else + __vcpu_sys_reg(vcpu, CNTHP_CVAL_EL2) =3D val; + + offset =3D read_sysreg_s(SYS_CNTPOFF_EL2); + write_sysreg_s(val + offset, SYS_CNTP_CVAL_EL0); + isb(); + } + /* * ARM errata 1165522 and 1530923 require the actual execution of the * above before we can switch to the EL2/EL0 translation regime used by diff --git a/include/kvm/arm_arch_timer.h b/include/kvm/arm_arch_timer.h index ea77a569a907..86a73ad1446a 100644 --- a/include/kvm/arm_arch_timer.h +++ b/include/kvm/arm_arch_timer.h @@ -82,6 +82,8 @@ struct timer_map { struct arch_timer_context *emul_ptimer; }; =20 +void get_timer_map(struct kvm_vcpu *vcpu, struct timer_map *map); + struct arch_timer_cpu { struct arch_timer_context timers[NR_KVM_TIMERS]; =20 @@ -149,4 +151,9 @@ void kvm_timer_cpu_down(void); /* CNTKCTL_EL1 valid bits as of DDI0476J.a */ #define CNTKCTL_VALID_BITS (BIT(17) | GENMASK_ULL(9, 0)) =20 +static inline bool has_cntpoff(void) +{ + return (has_vhe() && cpus_have_final_cap(ARM64_HAS_ECV_CNTPOFF)); +} + #endif --=20 Without deviation from the norm, progress is not possible. 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 1724AEE49A4 for ; Tue, 22 Aug 2023 12:17:12 +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: Subject:Cc:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IMUtDnoW1UhK+lPhHc7cARTjFI2KhZ3Jz5WHBLLIxcM=; b=JKJz4xrhNlO7RN y9n32/oiJFPVH5JVVjY+nMkLfxpx9G6hOwjVssG+wtqM3eMjoTV//jYh0LSFpPvfgmz88xiAvlIAy RNQtsQzgEQ42NNIgCMJ4eGBISQJ0H1dn5IxpG4kTzizEQBfnsfLLNBLln+t52aavwzpi3C1MYRUGX rikd0cU/ATKtZoGVSJj5BcPa8UAn+OoSAhfPPGBVD2BfAfRuDlmYtN4vf6/MUdxyR2iqoHdvHu3FA dbsiixibZNI9jJGpVZAl8E80POqed6jqI2N/Tk1YOLFHvPeqOBp/oB8mA+yERX5G2GXfyd6ib5D4r 7JI+0KJw2b0roESlUOoA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qYQJP-00Ft2n-1d; Tue, 22 Aug 2023 12:16:43 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qYQJM-00Ft2D-1r for linux-arm-kernel@lists.infradead.org; Tue, 22 Aug 2023 12:16:42 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id F33496419A; Tue, 22 Aug 2023 12:16:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1E82CC433C7; Tue, 22 Aug 2023 12:16:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692706599; bh=6XMjf+C4m4wP8MbAFKnHL/NuZkI92jUFLqpHVKBmErg=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=aImy2TutP43Bd0VZsbv36ecP7vPoIYe/Up6bTk3xvsLNnw6MhFkK8QT8tomBzAkD+ QSsgU55g0hRPyMPRbCpMAFycSI1VgggT2PGIMd4Qk1KUMWNSxAdjwCfibFTkvK2VYP 3g7WQ1YZ+Cr+1nhhOGdhCyTVVyVmsDrnNF+HbuPoNOEXJDaxD0ZxILyOTi97PRuClK ac+gEpcE6k6MXMbpV3iIf365AOQentqEYTibsSUZl0NxytERLQjqJoHn4UIqqTaru7 US9U+0DqhkXjEUuf4AsqXrSEooXxf5DrwynUPliIgGCHrE7ttIf4+QBnBIB3Bkfs2H HA8yC+eEdou+Q== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qYQJI-0071Mo-JJ; Tue, 22 Aug 2023 13:16:36 +0100 Date: Tue, 22 Aug 2023 13:16:36 +0100 Message-ID: <86il97ff17.wl-maz@kernel.org> From: Marc Zyngier To: Ganapatrao Kulkarni Cc: linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, eauger@redhat.com, miguel.luis@oracle.com, darren@os.amperecomputing.com, scott@os.amperecomputing.com, Christoffer Dall Subject: Re: [PATCH 2/2] KVM: arm64: timers: Adjust CVAL of a ptimer across guest entry and exits In-Reply-To: <0c5fb304-8c69-80c3-6f1e-487828554244@os.amperecomputing.com> References: <20230817060314.535987-1-gankulkarni@os.amperecomputing.com> <20230817060314.535987-3-gankulkarni@os.amperecomputing.com> <87bkf6oyyt.wl-maz@kernel.org> <0c5fb304-8c69-80c3-6f1e-487828554244@os.amperecomputing.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: gankulkarni@os.amperecomputing.com, linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, eauger@redhat.com, miguel.luis@oracle.com, darren@os.amperecomputing.com, scott@os.amperecomputing.com, Christoffer.Dall@arm.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230822_051640_701930_152AF094 X-CRM114-Status: GOOD ( 38.37 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVGh1LCAxNyBBdWcgMjAyMyAxMDoyNzo1NSArMDEwMCwKR2FuYXBhdHJhbyBLdWxrYXJuaSA8 Z2Fua3Vsa2FybmlAb3MuYW1wZXJlY29tcHV0aW5nLmNvbT4gd3JvdGU6Cj4gCj4gCj4gSGkgTWFy YywKPiAKPiBPbiAxNy0wOC0yMDIzIDAxOjU3IHBtLCBNYXJjIFp5bmdpZXIgd3JvdGU6Cj4gPiBb Rml4aW5nIENocmlzdG9mZmVyJ3MgZW1haWwgYWRkcmVzc10KPiAKPiBUaGFua3MuCj4gPiAKPiA+ IE9uIFRodSwgMTcgQXVnIDIwMjMgMDc6MDM6MTQgKzAxMDAsCj4gPiBHYW5hcGF0cmFvIEt1bGth cm5pIDxnYW5rdWxrYXJuaUBvcy5hbXBlcmVjb21wdXRpbmcuY29tPiB3cm90ZToKPiA+PiAKPiA+ PiBBcyBwZXIgRkVBVF9FQ1YsIHdoZW4gSENSX0VMMi57RTJILCBUR0V9ID09IHsxLCAxfSwgRW5o YW5jZWQgQ291bnRlcgo+ID4+IFZpcnR1YWxpemF0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJs ZWQgYW5kIENOVFBPRkZfRUwyIHZhbHVlIGlzIHRyZWF0ZWQKPiA+PiBhcyB6ZXJvLiBPbiBWSEUg aG9zdCwgRTJIIGFuZCBUR0UgYXJlIHNldCwgaGVuY2UgaXQgaXMgcmVxdWlyZWQKPiA+PiB0byBh ZGp1c3QgQ1ZBTCBieSBpbmNyZW1lbnRpbmcgaXQgYnkgQ05UUE9GRl9FTDIgYWZ0ZXIgZ3Vlc3QK PiA+PiBleGl0IHRvIGF2b2lkIGZhbHNlIHBoeXNpY2FsIHRpbWVyIGludGVycnVwdHMgYW5kIGFs c28KPiA+PiBkZWNyZW1lbnQvcmVzdG9yZSBDVkFMIGJlZm9yZSB0aGUgZ3Vlc3QgZW50cnkuCj4g PiAKPiA+IE5vLCB0aGlzIGlzIHdyb25nLiBOZWl0aGVyIEUySCBub3IgVEdFIGhhdmUgYW55IGlt cGFjdCBvbiB3cml0aW5nIHRvCj4gPiBDTlRQT0ZGX0VMMiwgbm9yIGRvZXMgaXQgaGF2ZSBhbiBp bXBhY3Qgb24gQ05UUF9DVkFMX0VMMC4gSnVzdCByZWFkCj4gPiB0aGUgcHNldWRvY29kZSB0byBj b252aW5jZSB5b3Vyc2VsZi4KPiA+IAo+ID4gQ05UUE9GRl9FTDIgaXMgYXBwbGllZCBhdCBleGFj dGx5IHR3byBwb2ludHM6IHdoZW4gU1cgaXMgcmVhZGluZwo+ID4gQ05UUENUX0VMMCBmcm9tIEVM MSB3aGlsZSB7RTJILFRHRX09PXsxLCAwfSBhbmQgd2hlbiB0aGUgSFcgaXMKPiA+IGNvbXBhcmlu ZyBDTlRQQ1RfRUwwIHdpdGggdGhlIENOVFBfQ1ZBTF9FTDAuIEluIGJvdGggY2FzZXMgdGhlIG9m ZnNldAo+ID4gaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBjb3VudGVyLiBBbmQgdGhhdCdzIHRoZSBw b2ludCB3aGVyZSB0aGUgcnVubmluZwo+ID4gRUwgbWF0dGVycy4gV2hpY2ggbWVhbnMgdGhhdCBD TlRQT0ZGX0VMMiBiZWhhdmVzIGV4YWN0bHkgbGlrZQo+ID4gQ05UVk9GRl9FTDIuIE5vIGlmcywg bm8gYnV0cy4KPiAKPiBBcyBwZXIgQVJNIEFSTSAoQVJNIERESSAwNDg3Si5hIHBhZ2UgRDExLTU5 ODkpCj4gIldoZW4gRkVBVF9FQ1YgaXMgaW1wbGVtZW50ZWQsIHRoZSBDTlRQT0ZGX0VMMiByZWdp c3RlciBhbGxvd3MgYW4KPiBvZmZzZXQgdG8gYmUgYXBwbGllZCB0byB0aGUgcGh5c2ljYWwgY291 bnRlciwgYXMgdmlld2VkIGZyb20gRUwxIGFuZAo+IEVMMCwgYW5kIHRvIHRoZSBFTDEgcGh5c2lj YWwgdGltZXIuIFRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgNjQtYml0Cj4gcmVnaXN0ZXIgaXMg YWZmZWN0ZWQgYnkgQ05USENUTF9FTDIuRUNWLiIKPiAKPiBBcyBwZXIgQVJNIEFSTSAoQVJNIERE SSAwNDg3Si5hIHBhZ2UgRDE5LTc4NTcpCj4gIldoZW4gSENSX0VMMi57RTJILCBUR0V9ID09IHsx LCAxfSBvciBTQ1JfRUwzLntOUywgRUVMMn0gPT0gezAsIDB9LCB0aGVuCj4gRW5oYW5jZWQgQ291 bnRlciBWaXJ0dWFsaXphdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLiIKPiAKPiAiVGhl IEVMMSBwaHlzaWNhbCB0aW1lciBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkIHdoZW4gKChQQ291bnQ8 NjM6MD4gLQo+IENOVFBPRkZfRUwyPDYzOjA+KSAtIFBDVmFsPDYzOjA+KSBpcyBncmVhdGVyIHRo YW4gb3IgZXF1YWwgdG8gMC4iCj4gCj4gQXMgcGVyIEFSTSBBUk0gKEFSTSBEREkgMDQ4N0ouYSBw YWdlIEQxOS03OTM4KQo+ICJXaGVuIEVMMiBpcyBpbXBsZW1lbnRlZCBhbmQgZW5hYmxlZCBpbiB0 aGUgY3VycmVudCBTZWN1cml0eSBzdGF0ZSwKPiB0aGUgcGh5c2ljYWwgY291bnRlciB1c2VzIGEg Zml4ZWQgcGh5c2ljYWwgb2Zmc2V0IG9mICp6ZXJvKiBpZiBhbnkgb2YKPiB0aGUgZm9sbG93aW5n IGFyZSB0cnVlOgo+IOKAoiBDTlRIQ1RMX0VMMi5FQ1YgaXMgMC4KPiDigKIgU0NSX0VMMy5FQ1ZF biBpcyAwLgo+IOKAoiBIQ1JfRUwyLntFMkgsIFRHRX0gaXMgezEsIDF9LiIKPiAKPiBJbiBWSEUg aG9zdCBoeXBlcnZpc29yLCBFMkg9VEdFPTEgaGVuY2UgRUNWIGlzIGRpc2FibGVkIGFuZCBQdGlt ZXIKPiBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkIGJhc2VkIG9uIFBDb3VudDw2MzowPiAtIFBDVmFs PDYzOjA+Cj4gCj4gU2luY2UgY3ZhbCBpcyBzZXQgYnkgR3Vlc3QgYXMgcGVyIG9mZnNldHRlZCBQ Q291bnRlciB2YWx1ZSBhbmQgcENvdW50Cj4gaXMgbm90IHN1YnRyYWN0ZWQgYnkgQ05UUE9GRiB3 aGVuIGluIFZIRS1MMCwgcmVzdWx0cyBpbiBjdmFsIGJlY29taW5nCj4gbXVjaCBsZXNzZXIgdGhh biBwaHlzaWNhbCBjb3VudGVyKGJ1bXBlZCB1cCBzaW5jZSBDTlRQT0ZGIGlzIHplcm8pIGFuZAo+ IHRpbWVyIGludGVycnVwdCB0cmlnZ2VyIGNvbmRpdGlvbiBpcyBtZXQgZmFsc2VseS4KPiAKPiBU aGVyZSBpcyBubyBpc3N1ZS9pbXBhY3Qgb24gY3ZhbCBkdWUgdG8gRUNWLCBob3dldmVyIGl0IGNh biBiZS9pcwo+IG1hbmlwdWxhdGVkIHRvIGhhbmRsZSB0aGlzIG9uIGFuZCBvZmYgb2YgQ05UUE9G Ri9FQ1YuCj4gCj4gSUlVQywgQ05UUE9GRiBhbmQgQ05UVk9GRiBhcmUgbm90IHNhbWUgYXMgcGVy IHNwZWNpZmljYXRpb24uCgpJIG93ZSB5b3UgYW4gYXBvbG9neS4gWW91IGFyZSBjb3JyZWN0LCBh bmQgSSB3YXMgdG90YWxseSB3cm9uZy4gIEknbQp0cnVseSBhbWF6ZWQgaG93IHdyb25nIHdlIGdv dCB0aGlzIHBhcnQgb2YgdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGl0IGlzCndheSB0b28gbGF0ZSBm b3IgYW55IGNoYW5nZSwgYW5kIHdlJ2xsIGhhdmUgdG8gbGl2ZSB3aXRoIGl0LgoKTm93LCB0byB0 aGUgYWN0dWFsIHBhdGNoOiBJIHRoaW5rIHRoZSB3YXkgeW91IG9mZnNldCBDVkFMIGlzbid0Cmdy ZWF0LiBZb3Ugc2hvdWxkIG5ldmVyIGhhdmUgdG8gY2hhbmdlIGl0IG9uIGVudHJ5LCBhbmQgeW91 IHNob3VsZAppbnN0ZWFkIHJlYWQgdGhlIGNvcnJlY3QgdmFsdWUgZnJvbSBtZW1vcnkuIFRoZW4s IHNhdmUvcmVzdG9yZSBvZiBDVkFMCm11c3QgYmUgYW1lbmRlZCB0byBhbHdheXMgYXBwbHkgdGhl IG9mZnNldC4gQ2FuIHlvdSBnaXZlIHRoZSBoYWNrCmJlbG93IGEgZ28gb24geW91ciBIVz8KClRo YW5rcywKCglNLgoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2Fy Y2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYwppbmRleCBlYTQ2YjRlMWU3YTguLmJiODBmZGQ4NDY3 NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jCisrKyBiL2FyY2gvYXJt NjQva3ZtL2FyY2hfdGltZXIuYwpAQCAtNTUsMTEgKzU1LDYgQEAgc3RhdGljIHN0cnVjdCBpcnFf b3BzIGFyY2hfdGltZXJfaXJxX29wcyA9IHsKIAkuZ2V0X2lucHV0X2xldmVsID0ga3ZtX2FyY2hf dGltZXJfZ2V0X2lucHV0X2xldmVsLAogfTsKIAotc3RhdGljIGJvb2wgaGFzX2NudHBvZmYodm9p ZCkKLXsKLQlyZXR1cm4gKGhhc192aGUoKSAmJiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hB U19FQ1ZfQ05UUE9GRikpOwotfQotCiBzdGF0aWMgaW50IG5yX3RpbWVycyhzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUpCiB7CiAJaWYgKCF2Y3B1X2hhc19udjIodmNwdSkpCkBAIC0xODAsNyArMTc1LDcg QEAgdTY0IGt2bV9waHlzX3RpbWVyX3JlYWQodm9pZCkKIAlyZXR1cm4gdGltZWNvdW50ZXItPmNj LT5yZWFkKHRpbWVjb3VudGVyLT5jYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF90aW1lcl9tYXAo c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApCit2b2lkIGdldF90 aW1lcl9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApCiB7 CiAJaWYgKHZjcHVfaGFzX252Mih2Y3B1KSkgewogCQlpZiAoaXNfaHlwX2N0eHQodmNwdSkpIHsK QEAgLTU2OSw4ICs1NjQsNyBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zYXZlX3N0YXRlKHN0cnVjdCBh cmNoX3RpbWVyX2NvbnRleHQgKmN0eCkKIAkJdGltZXJfc2V0X2N0bChjdHgsIHJlYWRfc3lzcmVn X2VsMChTWVNfQ05UUF9DVEwpKTsKIAkJY3ZhbCA9IHJlYWRfc3lzcmVnX2VsMChTWVNfQ05UUF9D VkFMKTsKIAotCQlpZiAoIWhhc19jbnRwb2ZmKCkpCi0JCQljdmFsIC09IHRpbWVyX2dldF9vZmZz ZXQoY3R4KTsKKwkJY3ZhbCAtPSB0aW1lcl9nZXRfb2Zmc2V0KGN0eCk7CiAKIAkJdGltZXJfc2V0 X2N2YWwoY3R4LCBjdmFsKTsKIApAQCAtNjU3LDggKzY1MSw3IEBAIHN0YXRpYyB2b2lkIHRpbWVy X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGFyY2hfdGltZXJfY29udGV4dCAqY3R4KQogCQljdmFsID0g dGltZXJfZ2V0X2N2YWwoY3R4KTsKIAkJb2Zmc2V0ID0gdGltZXJfZ2V0X29mZnNldChjdHgpOwog CQlzZXRfY250cG9mZihvZmZzZXQpOwotCQlpZiAoIWhhc19jbnRwb2ZmKCkpCi0JCQljdmFsICs9 IG9mZnNldDsKKwkJY3ZhbCArPSBvZmZzZXQ7CiAJCXdyaXRlX3N5c3JlZ19lbDAoY3ZhbCwgU1lT X0NOVFBfQ1ZBTCk7CiAJCWlzYigpOwogCQl3cml0ZV9zeXNyZWdfZWwwKHRpbWVyX2dldF9jdGwo Y3R4KSwgU1lTX0NOVFBfQ1RMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUv c3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCmluZGV4IDk2MTFiNGVh ZjY2MS4uNmUzZDNlMTY1NjNmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3 aXRjaC5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKQEAgLTkwLDYgKzkw LDIwIEBAIHN0YXRpYyB2b2lkIF9fYWN0aXZhdGVfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 KQogCiAJX19fYWN0aXZhdGVfdHJhcHModmNwdSwgaGNyKTsKIAorCWlmIChoYXNfY250cG9mZigp KSB7CisJCXN0cnVjdCB0aW1lcl9tYXAgbWFwOworCisJCWdldF90aW1lcl9tYXAodmNwdSwgJm1h cCk7CisKKwkJaWYgKG1hcC5kaXJlY3RfcHRpbWVyID09IHZjcHVfcHRpbWVyKHZjcHUpKQorCQkJ dmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgQ05UUF9DVkFMX0VMMCk7CisJCWVsc2UKKwkJCXZh bCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIENOVEhQX0NWQUxfRUwyKTsKKworCQlpc2IoKTsKKwkJ d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfQ05UUF9DVkFMX0VMMCk7CisJfQorCiAJdmFsID0gcmVh ZF9zeXNyZWcoY3BhY3JfZWwxKTsKIAl2YWwgfD0gQ1BBQ1JfRUx4X1RUQTsKIAl2YWwgJj0gfihD UEFDUl9FTDFfWkVOX0VMMEVOIHwgQ1BBQ1JfRUwxX1pFTl9FTDFFTiB8CkBAIC0xMzEsNiArMTQ1 LDIzIEBAIHN0YXRpYyB2b2lkIF9fZGVhY3RpdmF0ZV90cmFwcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUpCiAKIAl3cml0ZV9zeXNyZWcoSENSX0hPU1RfVkhFX0ZMQUdTLCBoY3JfZWwyKTsKIAorCWlm IChoYXNfY250cG9mZigpKSB7CisJCXN0cnVjdCB0aW1lcl9tYXAgbWFwOworCQl1NjQgdmFsLCBv ZmZzZXQ7CisKKwkJZ2V0X3RpbWVyX21hcCh2Y3B1LCAmbWFwKTsKKworCQl2YWwgPSByZWFkX3N5 c3JlZ19zKFNZU19DTlRQX0NWQUxfRUwwKTsKKwkJaWYgKG1hcC5kaXJlY3RfcHRpbWVyID09IHZj cHVfcHRpbWVyKHZjcHUpKQorCQkJX192Y3B1X3N5c19yZWcodmNwdSwgQ05UUF9DVkFMX0VMMCkg PSB2YWw7CisJCWVsc2UKKwkJCV9fdmNwdV9zeXNfcmVnKHZjcHUsIENOVEhQX0NWQUxfRUwyKSA9 IHZhbDsKKworCQlvZmZzZXQgPSByZWFkX3N5c3JlZ19zKFNZU19DTlRQT0ZGX0VMMik7CisJCXdy aXRlX3N5c3JlZ19zKHZhbCArIG9mZnNldCwgU1lTX0NOVFBfQ1ZBTF9FTDApOworCQlpc2IoKTsK Kwl9CisKIAkvKgogCSAqIEFSTSBlcnJhdGEgMTE2NTUyMiBhbmQgMTUzMDkyMyByZXF1aXJlIHRo ZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZQogCSAqIGFib3ZlIGJlZm9yZSB3ZSBjYW4gc3dpdGNo IHRvIHRoZSBFTDIvRUwwIHRyYW5zbGF0aW9uIHJlZ2ltZSB1c2VkIGJ5CmRpZmYgLS1naXQgYS9p bmNsdWRlL2t2bS9hcm1fYXJjaF90aW1lci5oIGIvaW5jbHVkZS9rdm0vYXJtX2FyY2hfdGltZXIu aAppbmRleCBlYTc3YTU2OWE5MDcuLjg2YTczYWQxNDQ2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9r dm0vYXJtX2FyY2hfdGltZXIuaAorKysgYi9pbmNsdWRlL2t2bS9hcm1fYXJjaF90aW1lci5oCkBA IC04Miw2ICs4Miw4IEBAIHN0cnVjdCB0aW1lcl9tYXAgewogCXN0cnVjdCBhcmNoX3RpbWVyX2Nv bnRleHQgKmVtdWxfcHRpbWVyOwogfTsKIAordm9pZCBnZXRfdGltZXJfbWFwKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgc3RydWN0IHRpbWVyX21hcCAqbWFwKTsKKwogc3RydWN0IGFyY2hfdGltZXJf Y3B1IHsKIAlzdHJ1Y3QgYXJjaF90aW1lcl9jb250ZXh0IHRpbWVyc1tOUl9LVk1fVElNRVJTXTsK IApAQCAtMTQ5LDQgKzE1MSw5IEBAIHZvaWQga3ZtX3RpbWVyX2NwdV9kb3duKHZvaWQpOwogLyog Q05US0NUTF9FTDEgdmFsaWQgYml0cyBhcyBvZiBEREkwNDc2Si5hICovCiAjZGVmaW5lIENOVEtD VExfVkFMSURfQklUUwkoQklUKDE3KSB8IEdFTk1BU0tfVUxMKDksIDApKQogCitzdGF0aWMgaW5s aW5lIGJvb2wgaGFzX2NudHBvZmYodm9pZCkKK3sKKwlyZXR1cm4gKGhhc192aGUoKSAmJiBjcHVz X2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19FQ1ZfQ05UUE9GRikpOworfQorCiAjZW5kaWYKCi0t IApXaXRob3V0IGRldmlhdGlvbiBmcm9tIHRoZSBub3JtLCBwcm9ncmVzcyBpcyBub3QgcG9zc2li bGUuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h cm0ta2VybmVsCg==