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 708F9C4167B for ; Wed, 29 Nov 2023 20:55:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234243AbjK2Uzu convert rfc822-to-8bit (ORCPT ); Wed, 29 Nov 2023 15:55:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45276 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234126AbjK2Uzs (ORCPT ); Wed, 29 Nov 2023 15:55:48 -0500 Received: from mail-oo1-f54.google.com (mail-oo1-f54.google.com [209.85.161.54]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EEBD8DC; Wed, 29 Nov 2023 12:55:53 -0800 (PST) Received: by mail-oo1-f54.google.com with SMTP id 006d021491bc7-58d9a0ead0cso41036eaf.0; Wed, 29 Nov 2023 12:55:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701291353; x=1701896153; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N7c1Bubisrl68U842oFCv7/E0UhOuVZ4XvYZuACc8eY=; b=DPCba4Xh2aabY6K4fMtTKm+7kmoBG6L0AYynmDlzhpvBNuluwC1KJwYGLx8QVJUHfT ty2FDEG9sGf8CWU/A2ytPk2uz1pHRZRpDFjfZ5/7kQYK/ysaqWkcFq9c1A2MmvnCzIvG XlkWaPfs/IZWJWFilFDJKBLJFtuVEk2zZIBonHOOiSo3kdHcJl9axawQBqKOXJrTs0Hk AuHrRfs8Pje5ylosz/vqCCVZjy7agOKE2dNOYJh4AS4CB6GZmn39Y5p+iztXXtBzFD/F exm72/DdUzPA0Cax8cLENZdiuoomUg1jjx3Bc4e0M5qTQFW21/nsxeffEJvnEDkxRc5E 1IzQ== X-Gm-Message-State: AOJu0Yz5luxs8zbk+Z+/ExgJKHhICMngEJ7gPdSaXUcm2k4a/TGW+DLU yPhvHfpTO/b4X8PmowX5EHgXQ+yPHN+kOyu8LE4= X-Google-Smtp-Source: AGHT+IEBfD/9l20lo6SNtWfZYkQa3nFyyj//mCc2waWUrux0EwVLhVh78MKvu8Sp5jNwclh7wy3o6FMPoDiNaIiU7+U= X-Received: by 2002:a4a:c691:0:b0:584:1080:f0a5 with SMTP id m17-20020a4ac691000000b005841080f0a5mr19313032ooq.1.1701291353066; Wed, 29 Nov 2023 12:55:53 -0800 (PST) MIME-Version: 1.0 References: <1700488898-12431-1-git-send-email-mihai.carabas@oracle.com> <1700488898-12431-3-git-send-email-mihai.carabas@oracle.com> In-Reply-To: <1700488898-12431-3-git-send-email-mihai.carabas@oracle.com> From: "Rafael J. Wysocki" Date: Wed, 29 Nov 2023 21:55:42 +0100 Message-ID: Subject: Re: [PATCH 2/7] x86/kvm: Move haltpoll_want() to be arch defined To: Mihai Carabas Cc: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, will@kernel.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com, pbonzini@redhat.com, wanpengli@tencent.com, vkuznets@redhat.com, rafael@kernel.org, daniel.lezcano@linaro.org, akpm@linux-foundation.org, pmladek@suse.com, peterz@infradead.org, dianders@chromium.org, npiggin@gmail.com, rick.p.edgecombe@intel.com, joao.m.martins@oracle.com, juerg.haefliger@canonical.com, mic@digikod.net, arnd@arndb.de, ankur.a.arora@oracle.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Nov 20, 2023 at 4:15 PM Mihai Carabas wrote: > > From: Joao Martins > > Right now, kvm_para_has_hint(KVM_HINTS_REALTIME) is x86 only, and so in the > pursuit of making cpuidle-haltpoll arch independent, move the check for > haltpoll enablement to be defined per architecture. Same thing for > boot_option_idle_override. To that end, add a arch_haltpoll_want() and move the > check there. > > Signed-off-by: Joao Martins > Signed-off-by: Ankur Arora > Signed-off-by: Mihai Carabas >From the cpuidle side: Acked-by: Rafael J. Wysocki > --- > arch/x86/include/asm/cpuidle_haltpoll.h | 1 + > arch/x86/kernel/kvm.c | 10 ++++++++++ > drivers/cpuidle/cpuidle-haltpoll.c | 8 ++------ > include/linux/cpuidle_haltpoll.h | 5 +++++ > 4 files changed, 18 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/include/asm/cpuidle_haltpoll.h b/arch/x86/include/asm/cpuidle_haltpoll.h > index c8b39c6716ff..2c5a53ce266f 100644 > --- a/arch/x86/include/asm/cpuidle_haltpoll.h > +++ b/arch/x86/include/asm/cpuidle_haltpoll.h > @@ -4,5 +4,6 @@ > > void arch_haltpoll_enable(unsigned int cpu); > void arch_haltpoll_disable(unsigned int cpu); > +bool arch_haltpoll_want(void); > > #endif > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 1cceac5984da..75a24f107b2a 100644 > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -1151,4 +1151,14 @@ void arch_haltpoll_disable(unsigned int cpu) > smp_call_function_single(cpu, kvm_enable_host_haltpoll, NULL, 1); > } > EXPORT_SYMBOL_GPL(arch_haltpoll_disable); > + > +bool arch_haltpoll_want(void) > +{ > + /* Do not load haltpoll if idle= is passed */ > + if (boot_option_idle_override != IDLE_NO_OVERRIDE) > + return false; > + > + return kvm_para_has_hint(KVM_HINTS_REALTIME); > +} > +EXPORT_SYMBOL_GPL(arch_haltpoll_want); > #endif > diff --git a/drivers/cpuidle/cpuidle-haltpoll.c b/drivers/cpuidle/cpuidle-haltpoll.c > index e66df22f9695..72f9c84990c5 100644 > --- a/drivers/cpuidle/cpuidle-haltpoll.c > +++ b/drivers/cpuidle/cpuidle-haltpoll.c > @@ -96,7 +96,7 @@ static void haltpoll_uninit(void) > > static bool haltpoll_want(void) > { > - return kvm_para_has_hint(KVM_HINTS_REALTIME) || force; > + return (kvm_para_available() && arch_haltpoll_want()) || force; > } > > static int __init haltpoll_init(void) > @@ -104,11 +104,7 @@ static int __init haltpoll_init(void) > int ret; > struct cpuidle_driver *drv = &haltpoll_driver; > > - /* Do not load haltpoll if idle= is passed */ > - if (boot_option_idle_override != IDLE_NO_OVERRIDE) > - return -ENODEV; > - > - if (!kvm_para_available() || !haltpoll_want()) > + if (!haltpoll_want()) > return -ENODEV; > > cpuidle_poll_state_init(drv); > diff --git a/include/linux/cpuidle_haltpoll.h b/include/linux/cpuidle_haltpoll.h > index d50c1e0411a2..bae68a6603e3 100644 > --- a/include/linux/cpuidle_haltpoll.h > +++ b/include/linux/cpuidle_haltpoll.h > @@ -12,5 +12,10 @@ static inline void arch_haltpoll_enable(unsigned int cpu) > static inline void arch_haltpoll_disable(unsigned int cpu) > { > } > + > +static inline bool arch_haltpoll_want(void) > +{ > + return false; > +} > #endif > #endif > -- > 1.8.3.1 > 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 051CBC4167B for ; Wed, 29 Nov 2023 20:56:27 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zZ1YnESPPZYzt8/AmxWxBtD2ZK5YYBiYyaoz19WKjVE=; b=s11SR5l2bWGvxm kC16wIfKcJdwRFzGic5ybU+0vKaA0dc0nVFhXSRCI3noSsqXiyeEZ7S6xhhcgvxUe9Z3+MIde5W3j K8ErQesx+i69nTmHIjrCALumoy1iToyaRWw7fEiZg76k/q4v09zEcyS+6Vd3APE9F9AaUO3FJlXck 8iX25UdQEWDftlE2ge8OETPb3+gsSR1FaSQUszhxHVv/k7sY8Ig7SdcuOWe6VrsyDFE3eSfrZK8FT Cg4iOPPr3tsu36WM+2xVvGfaOKLdHQST3OZBBTYv6hRFtwUQZsNirYRVg3gVnnNmA+r5w9PkUU3Dg sip8RcGiLtO9PfGmgEiQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8RbC-009HlB-0v; Wed, 29 Nov 2023 20:55:58 +0000 Received: from mail-oo1-f48.google.com ([209.85.161.48]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r8Rb8-009Hjw-2Q for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 20:55:56 +0000 Received: by mail-oo1-f48.google.com with SMTP id 006d021491bc7-58ddc32f43fso36816eaf.1 for ; Wed, 29 Nov 2023 12:55:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701291353; x=1701896153; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N7c1Bubisrl68U842oFCv7/E0UhOuVZ4XvYZuACc8eY=; b=Alc5V3QTuxTsoeP83W5KjzYxx5mmOD+E6/mJrGQFrqSlossB+lrkekxiNDMxuco5As hnAE6P7Ya1fhRqNeF2pe1SRjIs6RdmjZPPpALQKNOG9Hz29JpTrtVBMH8QQ1UekYz4OP LnnEv5gDZK080go4fWgEKu4B2lkaVD0D/BnbX1QNpFNfdMtnmaXzqbP/3uaNw8U/tGc+ 3D9XiVmbBBWXR/NypUaRMBXMK+6137IfFULckGEOsSLME/bc3MySvNQ5UxABRgfqUlda oINZ4XIZF5MNyZhlOZUxi07eLp1dVKNGxS/vBKAWNCcs0kF2Y3qokYV9wJ6MPrAZUdqi ozxA== X-Gm-Message-State: AOJu0Yz/SUxrpnTsrBlnIiYm+pnDrgZKBSlNY7K3E683SDfXtwlC8X4m dyIoPrGdQKULylws7q4NSUPkepUxEaunAOl6W8c= X-Google-Smtp-Source: AGHT+IEBfD/9l20lo6SNtWfZYkQa3nFyyj//mCc2waWUrux0EwVLhVh78MKvu8Sp5jNwclh7wy3o6FMPoDiNaIiU7+U= X-Received: by 2002:a4a:c691:0:b0:584:1080:f0a5 with SMTP id m17-20020a4ac691000000b005841080f0a5mr19313032ooq.1.1701291353066; Wed, 29 Nov 2023 12:55:53 -0800 (PST) MIME-Version: 1.0 References: <1700488898-12431-1-git-send-email-mihai.carabas@oracle.com> <1700488898-12431-3-git-send-email-mihai.carabas@oracle.com> In-Reply-To: <1700488898-12431-3-git-send-email-mihai.carabas@oracle.com> From: "Rafael J. Wysocki" Date: Wed, 29 Nov 2023 21:55:42 +0100 Message-ID: Subject: Re: [PATCH 2/7] x86/kvm: Move haltpoll_want() to be arch defined To: Mihai Carabas Cc: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, will@kernel.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com, pbonzini@redhat.com, wanpengli@tencent.com, vkuznets@redhat.com, rafael@kernel.org, daniel.lezcano@linaro.org, akpm@linux-foundation.org, pmladek@suse.com, peterz@infradead.org, dianders@chromium.org, npiggin@gmail.com, rick.p.edgecombe@intel.com, joao.m.martins@oracle.com, juerg.haefliger@canonical.com, mic@digikod.net, arnd@arndb.de, ankur.a.arora@oracle.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_125554_787661_909E0431 X-CRM114-Status: GOOD ( 21.99 ) 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 T24gTW9uLCBOb3YgMjAsIDIwMjMgYXQgNDoxNeKAr1BNIE1paGFpIENhcmFiYXMgPG1paGFpLmNh cmFiYXNAb3JhY2xlLmNvbT4gd3JvdGU6Cj4KPiBGcm9tOiBKb2FvIE1hcnRpbnMgPGpvYW8ubS5t YXJ0aW5zQG9yYWNsZS5jb20+Cj4KPiBSaWdodCBub3csIGt2bV9wYXJhX2hhc19oaW50KEtWTV9I SU5UU19SRUFMVElNRSkgaXMgeDg2IG9ubHksIGFuZCBzbyBpbiB0aGUKPiBwdXJzdWl0IG9mIG1h a2luZyBjcHVpZGxlLWhhbHRwb2xsIGFyY2ggaW5kZXBlbmRlbnQsIG1vdmUgdGhlIGNoZWNrIGZv cgo+IGhhbHRwb2xsIGVuYWJsZW1lbnQgdG8gYmUgZGVmaW5lZCBwZXIgYXJjaGl0ZWN0dXJlLiBT YW1lIHRoaW5nIGZvcgo+IGJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGUuIFRvIHRoYXQgZW5kLCBh ZGQgYSBhcmNoX2hhbHRwb2xsX3dhbnQoKSBhbmQgbW92ZSB0aGUKPiBjaGVjayB0aGVyZS4KPgo+ IFNpZ25lZC1vZmYtYnk6IEpvYW8gTWFydGlucyA8am9hby5tLm1hcnRpbnNAb3JhY2xlLmNvbT4K PiBTaWduZWQtb2ZmLWJ5OiBBbmt1ciBBcm9yYSA8YW5rdXIuYS5hcm9yYUBvcmFjbGUuY29tPgo+ IFNpZ25lZC1vZmYtYnk6IE1paGFpIENhcmFiYXMgPG1paGFpLmNhcmFiYXNAb3JhY2xlLmNvbT4K CkZyb20gdGhlIGNwdWlkbGUgc2lkZToKCkFja2VkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFm YWVsQGtlcm5lbC5vcmc+Cgo+IC0tLQo+ICBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVpZGxlX2hh bHRwb2xsLmggfCAgMSArCj4gIGFyY2gveDg2L2tlcm5lbC9rdm0uYyAgICAgICAgICAgICAgICAg ICB8IDEwICsrKysrKysrKysKPiAgZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtaGFsdHBvbGwuYyAg ICAgIHwgIDggKystLS0tLS0KPiAgaW5jbHVkZS9saW51eC9jcHVpZGxlX2hhbHRwb2xsLmggICAg ICAgIHwgIDUgKysrKysKPiAgNCBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA2IGRl bGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkbGVf aGFsdHBvbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWlkbGVfaGFsdHBvbGwuaAo+IGlu ZGV4IGM4YjM5YzY3MTZmZi4uMmM1YTUzY2UyNjZmIDEwMDY0NAo+IC0tLSBhL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL2NwdWlkbGVfaGFsdHBvbGwuaAo+ICsrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L2NwdWlkbGVfaGFsdHBvbGwuaAo+IEBAIC00LDUgKzQsNiBAQAo+Cj4gIHZvaWQgYXJjaF9oYWx0 cG9sbF9lbmFibGUodW5zaWduZWQgaW50IGNwdSk7Cj4gIHZvaWQgYXJjaF9oYWx0cG9sbF9kaXNh YmxlKHVuc2lnbmVkIGludCBjcHUpOwo+ICtib29sIGFyY2hfaGFsdHBvbGxfd2FudCh2b2lkKTsK Pgo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94 ODYva2VybmVsL2t2bS5jCj4gaW5kZXggMWNjZWFjNTk4NGRhLi43NWEyNGYxMDdiMmEgMTAwNjQ0 Cj4gLS0tIGEvYXJjaC94ODYva2VybmVsL2t2bS5jCj4gKysrIGIvYXJjaC94ODYva2VybmVsL2t2 bS5jCj4gQEAgLTExNTEsNCArMTE1MSwxNCBAQCB2b2lkIGFyY2hfaGFsdHBvbGxfZGlzYWJsZSh1 bnNpZ25lZCBpbnQgY3B1KQo+ICAgICAgICAgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwg a3ZtX2VuYWJsZV9ob3N0X2hhbHRwb2xsLCBOVUxMLCAxKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9M X0dQTChhcmNoX2hhbHRwb2xsX2Rpc2FibGUpOwo+ICsKPiArYm9vbCBhcmNoX2hhbHRwb2xsX3dh bnQodm9pZCkKPiArewo+ICsgICAgICAgLyogRG8gbm90IGxvYWQgaGFsdHBvbGwgaWYgaWRsZT0g aXMgcGFzc2VkICovCj4gKyAgICAgICBpZiAoYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSAhPSBJ RExFX05PX09WRVJSSURFKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsg ICAgICAgcmV0dXJuIGt2bV9wYXJhX2hhc19oaW50KEtWTV9ISU5UU19SRUFMVElNRSk7Cj4gK30K PiArRVhQT1JUX1NZTUJPTF9HUEwoYXJjaF9oYWx0cG9sbF93YW50KTsKPiAgI2VuZGlmCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWhhbHRwb2xsLmMgYi9kcml2ZXJzL2Nw dWlkbGUvY3B1aWRsZS1oYWx0cG9sbC5jCj4gaW5kZXggZTY2ZGYyMmY5Njk1Li43MmY5Yzg0OTkw YzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtaGFsdHBvbGwuYwo+ICsr KyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWhhbHRwb2xsLmMKPiBAQCAtOTYsNyArOTYsNyBA QCBzdGF0aWMgdm9pZCBoYWx0cG9sbF91bmluaXQodm9pZCkKPgo+ICBzdGF0aWMgYm9vbCBoYWx0 cG9sbF93YW50KHZvaWQpCj4gIHsKPiAtICAgICAgIHJldHVybiBrdm1fcGFyYV9oYXNfaGludChL Vk1fSElOVFNfUkVBTFRJTUUpIHx8IGZvcmNlOwo+ICsgICAgICAgcmV0dXJuIChrdm1fcGFyYV9h dmFpbGFibGUoKSAmJiBhcmNoX2hhbHRwb2xsX3dhbnQoKSkgfHwgZm9yY2U7Cj4gIH0KPgo+ICBz dGF0aWMgaW50IF9faW5pdCBoYWx0cG9sbF9pbml0KHZvaWQpCj4gQEAgLTEwNCwxMSArMTA0LDcg QEAgc3RhdGljIGludCBfX2luaXQgaGFsdHBvbGxfaW5pdCh2b2lkKQo+ICAgICAgICAgaW50IHJl dDsKPiAgICAgICAgIHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2ID0gJmhhbHRwb2xsX2RyaXZl cjsKPgo+IC0gICAgICAgLyogRG8gbm90IGxvYWQgaGFsdHBvbGwgaWYgaWRsZT0gaXMgcGFzc2Vk ICovCj4gLSAgICAgICBpZiAoYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSAhPSBJRExFX05PX09W RVJSSURFKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiAtCj4gLSAgICAgICBp ZiAoIWt2bV9wYXJhX2F2YWlsYWJsZSgpIHx8ICFoYWx0cG9sbF93YW50KCkpCj4gKyAgICAgICBp ZiAoIWhhbHRwb2xsX3dhbnQoKSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4K PiAgICAgICAgIGNwdWlkbGVfcG9sbF9zdGF0ZV9pbml0KGRydik7Cj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvY3B1aWRsZV9oYWx0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlX2hh bHRwb2xsLmgKPiBpbmRleCBkNTBjMWUwNDExYTIuLmJhZTY4YTY2MDNlMyAxMDA2NDQKPiAtLS0g YS9pbmNsdWRlL2xpbnV4L2NwdWlkbGVfaGFsdHBvbGwuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgv Y3B1aWRsZV9oYWx0cG9sbC5oCj4gQEAgLTEyLDUgKzEyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBhcmNoX2hhbHRwb2xsX2VuYWJsZSh1bnNpZ25lZCBpbnQgY3B1KQo+ICBzdGF0aWMgaW5saW5l IHZvaWQgYXJjaF9oYWx0cG9sbF9kaXNhYmxlKHVuc2lnbmVkIGludCBjcHUpCj4gIHsKPiAgfQo+ ICsKPiArc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFsdHBvbGxfd2FudCh2b2lkKQo+ICt7Cj4g KyAgICAgICByZXR1cm4gZmFsc2U7Cj4gK30KPiAgI2VuZGlmCj4gICNlbmRpZgo+IC0tCj4gMS44 LjMuMQo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==