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=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 DBED0C4320A for ; Fri, 20 Aug 2021 07:42:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BA4A1610A0 for ; Fri, 20 Aug 2021 07:42:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238926AbhHTHnS (ORCPT ); Fri, 20 Aug 2021 03:43:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53540 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238492AbhHTHnR (ORCPT ); Fri, 20 Aug 2021 03:43:17 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 992E6C061575; Fri, 20 Aug 2021 00:42:39 -0700 (PDT) Date: Fri, 20 Aug 2021 09:42:36 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1629445358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QqLJ5hLgypHjC+dPcfPr/kJzRdclrHJYAqLQV0dAdEw=; b=g6LBHUbuUuaKS7iLj/rq/HenZvtqMhIdpv6h9jHvL2mMQ1G8twRJ6ZuFDcUW0mAt2fJNus 2BW7BZa0Tk+boWtwcHKfYLsS82GZJKrbi66XX+SB8DL3xAoFm6u30xq5vlnFt+nNmbF9t4 mzqqIv21MEvSMlrR2UPHdbJYohVFE/pFX6UeyGYYqdRujoGWXst3r+1vaTn3T83J4eFb02 ZFBbKFMBuQUGhP4j/pimXXrH24fp4ya7JQUNc0JaIqC20ZrKUQ2oNv7GU8s+FFrIRBPGae ohi3sVlhym6sFQf1kPg6YaedT5TS7O1G+HtGuEGESKo6FopGhPmMnv5CHIzFFg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1629445358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QqLJ5hLgypHjC+dPcfPr/kJzRdclrHJYAqLQV0dAdEw=; b=wsuSg+75ukkN1vLdCQFGN6RyBHfLjVDg935WLJlTpS0CGzPjugK9gfFX8WSrj759boMFhb Ns3K4K3TcJFLkGAA== From: Sebastian Andrzej Siewior To: Scott Wood Cc: paulmck@kernel.org, Valentin Schneider , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rcu@vger.kernel.org, linux-rt-users@vger.kernel.org, Catalin Marinas , Will Deacon , Ingo Molnar , Peter Zijlstra , Thomas Gleixner , Steven Rostedt , Daniel Bristot de Oliveira , Frederic Weisbecker , Josh Triplett , Mathieu Desnoyers , Davidlohr Bueso , Lai Jiangshan , Joel Fernandes , Anshuman Khandual , Vincenzo Frascino , Steven Price , Ard Biesheuvel , Boqun Feng , Mike Galbraith Subject: [PATCH v2] rcutorture: Avoid problematic critical section nesting on PREEMPT_RT Message-ID: <20210820074236.2zli4nje7bof62rh@linutronix.de> References: <20210811201354.1976839-1-valentin.schneider@arm.com> <20210811201354.1976839-2-valentin.schneider@arm.com> <20210817121345.5iyj5epemczn3a52@linutronix.de> <20210817131741.evduh4fw7vyv2dzt@linutronix.de> <20210817144018.nqssoq475vitrqlv@linutronix.de> <20210818224651.GY4126399@paulmck-ThinkPad-P17-Gen-1> <20210819153927.clqxr4f7qegpflbr@linutronix.de> <20210819154708.3efz6jtgwtuhpeds@linutronix.de> <20210819182035.GF4126399@paulmck-ThinkPad-P17-Gen-1> <561ab28b18c31fbc221f4cb0c4df6db9b0538675.camel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <561ab28b18c31fbc221f4cb0c4df6db9b0538675.camel@redhat.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org =46rom: "From: Scott Wood" rcutorture is generating some nesting scenarios that are not compatible on = PREEMPT_RT. For example: preempt_disable(); rcu_read_lock_bh(); preempt_enable(); rcu_read_unlock_bh(); The problem here is that on PREEMPT_RT the bottom halves have to be disabled and enabled in preemptible context. Reorder locking: start with BH locking and continue with then with disabling preemption or interrupts. In the unlocking do it reverse by first enabling interrupts and preemption and BH at the very end. Ensure that on PREEMPT_RT BH locking remains unchanged if in non-preemptible context. Link: https://lkml.kernel.org/r/20190911165729.11178-6-swood@redhat.com Link: https://lkml.kernel.org/r/20210819182035.GF4126399@paulmck-ThinkPad-P= 17-Gen-1 Signed-off-by: Scott Wood [bigeasy: Drop ATOM_BH, make it only about changing BH in atomic context. Allow enabling RCU in IRQ-off section. Reword commit message.] Signed-off-by: Sebastian Andrzej Siewior --- v1=E2=80=A6v2: - Drop the ATOM_BH* bits. There don't seem to be needed, Paul did not ant the preempt-disable around enabling/disabling BH as it might fix things that RCU should take care. - Allow enabling RCU with disabled interrupts on RT. Scott confirmed that it was needed but might no longer be needed. Paul said that it might have been required at some point. It survived multiple 6h long TREE01 and TREE06 testing. kernel/rcu/rcutorture.c | 48 ++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 40ef5417d9545..d2ef535530b10 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -1432,28 +1432,34 @@ static void rcutorture_one_extend(int *readstate, i= nt newstate, /* First, put new protection in place to avoid critical-section gap. */ if (statesnew & RCUTORTURE_RDR_BH) local_bh_disable(); + if (statesnew & RCUTORTURE_RDR_RBH) + rcu_read_lock_bh(); if (statesnew & RCUTORTURE_RDR_IRQ) local_irq_disable(); if (statesnew & RCUTORTURE_RDR_PREEMPT) preempt_disable(); - if (statesnew & RCUTORTURE_RDR_RBH) - rcu_read_lock_bh(); if (statesnew & RCUTORTURE_RDR_SCHED) rcu_read_lock_sched(); if (statesnew & RCUTORTURE_RDR_RCU) idxnew =3D cur_ops->readlock() << RCUTORTURE_RDR_SHIFT; =20 - /* Next, remove old protection, irq first due to bh conflict. */ + /* + * Next, remove old protection, in decreasing order of strength + * to avoid unlock paths that aren't safe in the stronger + * context. Namely: BH can not be enabled with disabled interrupts. + * Additionally PREEMPT_RT requires that BH is enabled in preemptible + * context. + */ if (statesold & RCUTORTURE_RDR_IRQ) local_irq_enable(); - if (statesold & RCUTORTURE_RDR_BH) - local_bh_enable(); if (statesold & RCUTORTURE_RDR_PREEMPT) preempt_enable(); - if (statesold & RCUTORTURE_RDR_RBH) - rcu_read_unlock_bh(); if (statesold & RCUTORTURE_RDR_SCHED) rcu_read_unlock_sched(); + if (statesold & RCUTORTURE_RDR_BH) + local_bh_enable(); + if (statesold & RCUTORTURE_RDR_RBH) + rcu_read_unlock_bh(); if (statesold & RCUTORTURE_RDR_RCU) { bool lockit =3D !statesnew && !(torture_random(trsp) & 0xffff); =20 @@ -1496,6 +1502,9 @@ rcutorture_extend_mask(int oldmask, struct torture_ra= ndom_state *trsp) int mask =3D rcutorture_extend_mask_max(); unsigned long randmask1 =3D torture_random(trsp) >> 8; unsigned long randmask2 =3D randmask1 >> 3; + unsigned long preempts =3D RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED; + unsigned long preempts_irq =3D preempts | RCUTORTURE_RDR_IRQ; + unsigned long bhs =3D RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH; =20 WARN_ON_ONCE(mask >> RCUTORTURE_RDR_SHIFT); /* Mostly only one bit (need preemption!), sometimes lots of bits. */ @@ -1503,11 +1512,26 @@ rcutorture_extend_mask(int oldmask, struct torture_= random_state *trsp) mask =3D mask & randmask2; else mask =3D mask & (1 << (randmask2 % RCUTORTURE_RDR_NBITS)); - /* Can't enable bh w/irq disabled. */ - if ((mask & RCUTORTURE_RDR_IRQ) && - ((!(mask & RCUTORTURE_RDR_BH) && (oldmask & RCUTORTURE_RDR_BH)) || - (!(mask & RCUTORTURE_RDR_RBH) && (oldmask & RCUTORTURE_RDR_RBH)))) - mask |=3D RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH; + + /* + * Can't enable bh w/irq disabled. + */ + if (mask & RCUTORTURE_RDR_IRQ) + mask |=3D oldmask & bhs; + + /* + * Ideally these sequences would be detected in debug builds + * (regardless of RT), but until then don't stop testing + * them on non-RT. + */ + if (IS_ENABLED(CONFIG_PREEMPT_RT)) { + /* Can't modify BH in atomic context */ + if (oldmask & preempts_irq) + mask &=3D ~bhs; + if ((oldmask | mask) & preempts_irq) + mask |=3D oldmask & bhs; + } + return mask ?: RCUTORTURE_RDR_RCU; } =20 --=20 2.33.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=-14.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 BFB57C4338F for ; Fri, 20 Aug 2021 07:45:04 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 8B69961042 for ; Fri, 20 Aug 2021 07:45:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 8B69961042 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=PvJ223O478F40NAI3/GKz1SIuUgWleOBEUBGcKEH/IU=; b=Ch10CTGB10WXH/ ygpaAyuHnmQhk7fS4k3t9PnXpUwx8wxElJ2Jn1MUledh8/4pAZ6DUlABL2OGC3p9FgLpNUcK10stt Mq6345uc/kBpJS+/AhilzrNaIbvSV/kIr0ANG910xvOuNomVBrnCLigQzo7OM9k60gM+SJ4HiNJr1 JLaDkSEC47D/06qdX66gr+NrcH6+SmSgYV6xnZxD3BZR0BKS3+PodWW5gpdutg1GQu8flxhtiXhcJ uQdbQPV646F7G9nqF6C08KU4SqJD49b+0YqgdQH1dAgjNpSPHd4RN7IYW8SphneeT/M8dwXp5FAso oUemOwlKGVprJ4y2D3tg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mGzB3-00AGdm-Af; Fri, 20 Aug 2021 07:42:57 +0000 Received: from galois.linutronix.de ([2a0a:51c0:0:12e:550::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mGzAl-00AGca-LC for linux-arm-kernel@lists.infradead.org; Fri, 20 Aug 2021 07:42:44 +0000 Date: Fri, 20 Aug 2021 09:42:36 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1629445358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QqLJ5hLgypHjC+dPcfPr/kJzRdclrHJYAqLQV0dAdEw=; b=g6LBHUbuUuaKS7iLj/rq/HenZvtqMhIdpv6h9jHvL2mMQ1G8twRJ6ZuFDcUW0mAt2fJNus 2BW7BZa0Tk+boWtwcHKfYLsS82GZJKrbi66XX+SB8DL3xAoFm6u30xq5vlnFt+nNmbF9t4 mzqqIv21MEvSMlrR2UPHdbJYohVFE/pFX6UeyGYYqdRujoGWXst3r+1vaTn3T83J4eFb02 ZFBbKFMBuQUGhP4j/pimXXrH24fp4ya7JQUNc0JaIqC20ZrKUQ2oNv7GU8s+FFrIRBPGae ohi3sVlhym6sFQf1kPg6YaedT5TS7O1G+HtGuEGESKo6FopGhPmMnv5CHIzFFg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1629445358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QqLJ5hLgypHjC+dPcfPr/kJzRdclrHJYAqLQV0dAdEw=; b=wsuSg+75ukkN1vLdCQFGN6RyBHfLjVDg935WLJlTpS0CGzPjugK9gfFX8WSrj759boMFhb Ns3K4K3TcJFLkGAA== From: Sebastian Andrzej Siewior To: Scott Wood Cc: paulmck@kernel.org, Valentin Schneider , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rcu@vger.kernel.org, linux-rt-users@vger.kernel.org, Catalin Marinas , Will Deacon , Ingo Molnar , Peter Zijlstra , Thomas Gleixner , Steven Rostedt , Daniel Bristot de Oliveira , Frederic Weisbecker , Josh Triplett , Mathieu Desnoyers , Davidlohr Bueso , Lai Jiangshan , Joel Fernandes , Anshuman Khandual , Vincenzo Frascino , Steven Price , Ard Biesheuvel , Boqun Feng , Mike Galbraith Subject: [PATCH v2] rcutorture: Avoid problematic critical section nesting on PREEMPT_RT Message-ID: <20210820074236.2zli4nje7bof62rh@linutronix.de> References: <20210811201354.1976839-1-valentin.schneider@arm.com> <20210811201354.1976839-2-valentin.schneider@arm.com> <20210817121345.5iyj5epemczn3a52@linutronix.de> <20210817131741.evduh4fw7vyv2dzt@linutronix.de> <20210817144018.nqssoq475vitrqlv@linutronix.de> <20210818224651.GY4126399@paulmck-ThinkPad-P17-Gen-1> <20210819153927.clqxr4f7qegpflbr@linutronix.de> <20210819154708.3efz6jtgwtuhpeds@linutronix.de> <20210819182035.GF4126399@paulmck-ThinkPad-P17-Gen-1> <561ab28b18c31fbc221f4cb0c4df6db9b0538675.camel@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <561ab28b18c31fbc221f4cb0c4df6db9b0538675.camel@redhat.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210820_004240_032481_74309990 X-CRM114-Status: GOOD ( 17.23 ) 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 RnJvbTogIkZyb206IFNjb3R0IFdvb2QiIDxzd29vZEByZWRoYXQuY29tPgoKcmN1dG9ydHVyZSBp cyBnZW5lcmF0aW5nIHNvbWUgbmVzdGluZyBzY2VuYXJpb3MgdGhhdCBhcmUgbm90IGNvbXBhdGli bGUgb24gUFJFRU1QVF9SVC4KRm9yIGV4YW1wbGU6CglwcmVlbXB0X2Rpc2FibGUoKTsKCXJjdV9y ZWFkX2xvY2tfYmgoKTsKCXByZWVtcHRfZW5hYmxlKCk7CglyY3VfcmVhZF91bmxvY2tfYmgoKTsK ClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBvbiBQUkVFTVBUX1JUIHRoZSBib3R0b20gaGFsdmVz IGhhdmUgdG8gYmUKZGlzYWJsZWQgYW5kIGVuYWJsZWQgaW4gcHJlZW1wdGlibGUgY29udGV4dC4K ClJlb3JkZXIgbG9ja2luZzogc3RhcnQgd2l0aCBCSCBsb2NraW5nIGFuZCBjb250aW51ZSB3aXRo IHRoZW4gd2l0aApkaXNhYmxpbmcgcHJlZW1wdGlvbiBvciBpbnRlcnJ1cHRzLiBJbiB0aGUgdW5s b2NraW5nIGRvIGl0IHJldmVyc2UgYnkKZmlyc3QgZW5hYmxpbmcgaW50ZXJydXB0cyBhbmQgcHJl ZW1wdGlvbiBhbmQgQkggYXQgdGhlIHZlcnkgZW5kLgpFbnN1cmUgdGhhdCBvbiBQUkVFTVBUX1JU IEJIIGxvY2tpbmcgcmVtYWlucyB1bmNoYW5nZWQgaWYgaW4Kbm9uLXByZWVtcHRpYmxlIGNvbnRl eHQuCgpMaW5rOiBodHRwczovL2xrbWwua2VybmVsLm9yZy9yLzIwMTkwOTExMTY1NzI5LjExMTc4 LTYtc3dvb2RAcmVkaGF0LmNvbQpMaW5rOiBodHRwczovL2xrbWwua2VybmVsLm9yZy9yLzIwMjEw ODE5MTgyMDM1LkdGNDEyNjM5OUBwYXVsbWNrLVRoaW5rUGFkLVAxNy1HZW4tMQpTaWduZWQtb2Zm LWJ5OiBTY290dCBXb29kIDxzd29vZEByZWRoYXQuY29tPgpbYmlnZWFzeTogRHJvcCBBVE9NX0JI LCBtYWtlIGl0IG9ubHkgYWJvdXQgY2hhbmdpbmcgQkggaW4gYXRvbWljCmNvbnRleHQuIEFsbG93 IGVuYWJsaW5nIFJDVSBpbiBJUlEtb2ZmIHNlY3Rpb24uIFJld29yZCBjb21taXQgbWVzc2FnZS5d ClNpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBBbmRyemVqIFNpZXdpb3IgPGJpZ2Vhc3lAbGludXRy b25peC5kZT4KLS0tCnYx4oCmdjI6CiAgLSBEcm9wIHRoZSBBVE9NX0JIKiBiaXRzLiBUaGVyZSBk b24ndCBzZWVtIHRvIGJlIG5lZWRlZCwgUGF1bCBkaWQgbm90CiAgICBhbnQgdGhlIHByZWVtcHQt ZGlzYWJsZSBhcm91bmQgZW5hYmxpbmcvZGlzYWJsaW5nIEJIIGFzIGl0IG1pZ2h0IGZpeAogICAg dGhpbmdzIHRoYXQgUkNVIHNob3VsZCB0YWtlIGNhcmUuCgogIC0gQWxsb3cgZW5hYmxpbmcgUkNV IHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvbiBSVC4gU2NvdHQgY29uZmlybWVkCiAgICB0aGF0 IGl0IHdhcyBuZWVkZWQgYnV0IG1pZ2h0IG5vIGxvbmdlciBiZSBuZWVkZWQuIFBhdWwgc2FpZCB0 aGF0IGl0CiAgICBtaWdodCBoYXZlIGJlZW4gcmVxdWlyZWQgYXQgc29tZSBwb2ludC4gSXQgc3Vy dml2ZWQgbXVsdGlwbGUgNmggbG9uZwogICAgVFJFRTAxIGFuZCBUUkVFMDYgdGVzdGluZy4KCiBr ZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyB8IDQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1 L3JjdXRvcnR1cmUuYwppbmRleCA0MGVmNTQxN2Q5NTQ1Li5kMmVmNTM1NTMwYjEwIDEwMDY0NAot LS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUu YwpAQCAtMTQzMiwyOCArMTQzMiwzNCBAQCBzdGF0aWMgdm9pZCByY3V0b3J0dXJlX29uZV9leHRl bmQoaW50ICpyZWFkc3RhdGUsIGludCBuZXdzdGF0ZSwKIAkvKiBGaXJzdCwgcHV0IG5ldyBwcm90 ZWN0aW9uIGluIHBsYWNlIHRvIGF2b2lkIGNyaXRpY2FsLXNlY3Rpb24gZ2FwLiAqLwogCWlmIChz dGF0ZXNuZXcgJiBSQ1VUT1JUVVJFX1JEUl9CSCkKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOworCWlm IChzdGF0ZXNuZXcgJiBSQ1VUT1JUVVJFX1JEUl9SQkgpCisJCXJjdV9yZWFkX2xvY2tfYmgoKTsK IAlpZiAoc3RhdGVzbmV3ICYgUkNVVE9SVFVSRV9SRFJfSVJRKQogCQlsb2NhbF9pcnFfZGlzYWJs ZSgpOwogCWlmIChzdGF0ZXNuZXcgJiBSQ1VUT1JUVVJFX1JEUl9QUkVFTVBUKQogCQlwcmVlbXB0 X2Rpc2FibGUoKTsKLQlpZiAoc3RhdGVzbmV3ICYgUkNVVE9SVFVSRV9SRFJfUkJIKQotCQlyY3Vf cmVhZF9sb2NrX2JoKCk7CiAJaWYgKHN0YXRlc25ldyAmIFJDVVRPUlRVUkVfUkRSX1NDSEVEKQog CQlyY3VfcmVhZF9sb2NrX3NjaGVkKCk7CiAJaWYgKHN0YXRlc25ldyAmIFJDVVRPUlRVUkVfUkRS X1JDVSkKIAkJaWR4bmV3ID0gY3VyX29wcy0+cmVhZGxvY2soKSA8PCBSQ1VUT1JUVVJFX1JEUl9T SElGVDsKIAotCS8qIE5leHQsIHJlbW92ZSBvbGQgcHJvdGVjdGlvbiwgaXJxIGZpcnN0IGR1ZSB0 byBiaCBjb25mbGljdC4gKi8KKwkvKgorCSAqIE5leHQsIHJlbW92ZSBvbGQgcHJvdGVjdGlvbiwg aW4gZGVjcmVhc2luZyBvcmRlciBvZiBzdHJlbmd0aAorCSAqIHRvIGF2b2lkIHVubG9jayBwYXRo cyB0aGF0IGFyZW4ndCBzYWZlIGluIHRoZSBzdHJvbmdlcgorCSAqIGNvbnRleHQuIE5hbWVseTog QkggY2FuIG5vdCBiZSBlbmFibGVkIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cy4KKwkgKiBBZGRp dGlvbmFsbHkgUFJFRU1QVF9SVCByZXF1aXJlcyB0aGF0IEJIIGlzIGVuYWJsZWQgaW4gcHJlZW1w dGlibGUKKwkgKiBjb250ZXh0LgorCSAqLwogCWlmIChzdGF0ZXNvbGQgJiBSQ1VUT1JUVVJFX1JE Ul9JUlEpCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKLQlpZiAoc3RhdGVzb2xkICYgUkNVVE9SVFVS RV9SRFJfQkgpCi0JCWxvY2FsX2JoX2VuYWJsZSgpOwogCWlmIChzdGF0ZXNvbGQgJiBSQ1VUT1JU VVJFX1JEUl9QUkVFTVBUKQogCQlwcmVlbXB0X2VuYWJsZSgpOwotCWlmIChzdGF0ZXNvbGQgJiBS Q1VUT1JUVVJFX1JEUl9SQkgpCi0JCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCWlmIChzdGF0ZXNv bGQgJiBSQ1VUT1JUVVJFX1JEUl9TQ0hFRCkKIAkJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CisJ aWYgKHN0YXRlc29sZCAmIFJDVVRPUlRVUkVfUkRSX0JIKQorCQlsb2NhbF9iaF9lbmFibGUoKTsK KwlpZiAoc3RhdGVzb2xkICYgUkNVVE9SVFVSRV9SRFJfUkJIKQorCQlyY3VfcmVhZF91bmxvY2tf YmgoKTsKIAlpZiAoc3RhdGVzb2xkICYgUkNVVE9SVFVSRV9SRFJfUkNVKSB7CiAJCWJvb2wgbG9j a2l0ID0gIXN0YXRlc25ldyAmJiAhKHRvcnR1cmVfcmFuZG9tKHRyc3ApICYgMHhmZmZmKTsKIApA QCAtMTQ5Niw2ICsxNTAyLDkgQEAgcmN1dG9ydHVyZV9leHRlbmRfbWFzayhpbnQgb2xkbWFzaywg c3RydWN0IHRvcnR1cmVfcmFuZG9tX3N0YXRlICp0cnNwKQogCWludCBtYXNrID0gcmN1dG9ydHVy ZV9leHRlbmRfbWFza19tYXgoKTsKIAl1bnNpZ25lZCBsb25nIHJhbmRtYXNrMSA9IHRvcnR1cmVf cmFuZG9tKHRyc3ApID4+IDg7CiAJdW5zaWduZWQgbG9uZyByYW5kbWFzazIgPSByYW5kbWFzazEg Pj4gMzsKKwl1bnNpZ25lZCBsb25nIHByZWVtcHRzID0gUkNVVE9SVFVSRV9SRFJfUFJFRU1QVCB8 IFJDVVRPUlRVUkVfUkRSX1NDSEVEOworCXVuc2lnbmVkIGxvbmcgcHJlZW1wdHNfaXJxID0gcHJl ZW1wdHMgfCBSQ1VUT1JUVVJFX1JEUl9JUlE7CisJdW5zaWduZWQgbG9uZyBiaHMgPSBSQ1VUT1JU VVJFX1JEUl9CSCB8IFJDVVRPUlRVUkVfUkRSX1JCSDsKIAogCVdBUk5fT05fT05DRShtYXNrID4+ IFJDVVRPUlRVUkVfUkRSX1NISUZUKTsKIAkvKiBNb3N0bHkgb25seSBvbmUgYml0IChuZWVkIHBy ZWVtcHRpb24hKSwgc29tZXRpbWVzIGxvdHMgb2YgYml0cy4gKi8KQEAgLTE1MDMsMTEgKzE1MTIs MjYgQEAgcmN1dG9ydHVyZV9leHRlbmRfbWFzayhpbnQgb2xkbWFzaywgc3RydWN0IHRvcnR1cmVf cmFuZG9tX3N0YXRlICp0cnNwKQogCQltYXNrID0gbWFzayAmIHJhbmRtYXNrMjsKIAllbHNlCiAJ CW1hc2sgPSBtYXNrICYgKDEgPDwgKHJhbmRtYXNrMiAlIFJDVVRPUlRVUkVfUkRSX05CSVRTKSk7 Ci0JLyogQ2FuJ3QgZW5hYmxlIGJoIHcvaXJxIGRpc2FibGVkLiAqLwotCWlmICgobWFzayAmIFJD VVRPUlRVUkVfUkRSX0lSUSkgJiYKLQkgICAgKCghKG1hc2sgJiBSQ1VUT1JUVVJFX1JEUl9CSCkg JiYgKG9sZG1hc2sgJiBSQ1VUT1JUVVJFX1JEUl9CSCkpIHx8Ci0JICAgICAoIShtYXNrICYgUkNV VE9SVFVSRV9SRFJfUkJIKSAmJiAob2xkbWFzayAmIFJDVVRPUlRVUkVfUkRSX1JCSCkpKSkKLQkJ bWFzayB8PSBSQ1VUT1JUVVJFX1JEUl9CSCB8IFJDVVRPUlRVUkVfUkRSX1JCSDsKKworCS8qCisJ ICogQ2FuJ3QgZW5hYmxlIGJoIHcvaXJxIGRpc2FibGVkLgorCSAqLworCWlmIChtYXNrICYgUkNV VE9SVFVSRV9SRFJfSVJRKQorCQltYXNrIHw9IG9sZG1hc2sgJiBiaHM7CisKKwkvKgorCSAqIElk ZWFsbHkgdGhlc2Ugc2VxdWVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGluIGRlYnVnIGJ1aWxkcwor CSAqIChyZWdhcmRsZXNzIG9mIFJUKSwgYnV0IHVudGlsIHRoZW4gZG9uJ3Qgc3RvcCB0ZXN0aW5n CisJICogdGhlbSBvbiBub24tUlQuCisJICovCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVN UFRfUlQpKSB7CisJCS8qIENhbid0IG1vZGlmeSBCSCBpbiBhdG9taWMgY29udGV4dCAqLworCQlp ZiAob2xkbWFzayAmIHByZWVtcHRzX2lycSkKKwkJCW1hc2sgJj0gfmJoczsKKwkJaWYgKChvbGRt YXNrIHwgbWFzaykgJiBwcmVlbXB0c19pcnEpCisJCQltYXNrIHw9IG9sZG1hc2sgJiBiaHM7CisJ fQorCiAJcmV0dXJuIG1hc2sgPzogUkNVVE9SVFVSRV9SRFJfUkNVOwogfQogCi0tIAoyLjMzLjAK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==