Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1529566pxb; Thu, 4 Mar 2021 13:53:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJySskk6CD/VfPD4D+LNatEGcOyG447perWfpZHMpiKN3L4rqwQ03xe9TKahj7XfpbMIJ4PZ X-Received: by 2002:a05:6402:5194:: with SMTP id q20mr6634850edd.267.1614894799074; Thu, 04 Mar 2021 13:53:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614894799; cv=none; d=google.com; s=arc-20160816; b=R4uAuIb7n0OUkcYWmnrT/lz/jjSH0JBZg1tO+atZmHbOG4k+9S27V/7VkonsIqe8KA 7cdbBOqxSBLY4H+8UlcLsr5BVzVF1sFmN6ijZSVVSkjDZKcogLL56HbLL78IC2vmqn7E 4J0L6MCBiDgm0GexnhLB2WHhqcJ+s0YskIvjO91Ek0njq8j/Ops+qCePNjkF/C8wuCOM tHymowWk/jea88OWSw0KOtzYlXqsK/0pzPFo8JTKurJp3PlfiAVbG5jS2Ci8b9TiLxzt YJT+Qybduzs9k1fxyPOmE0EmDnTfPyOZj/xNA5VtvqcdLldvkC4KuD9BmjZ90rZdN4yk H6rQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :to:subject; bh=qFfCLaBgOIKonl92czzvlSfBTOT5z/SgPen8eY/1pCg=; b=AUAPDNH4+0RsNSogSEyx3+JSzrEFc9rtZ/CjMLrZXmaM7M8amyTO0ZOdZfZeBjtlKt 8ldZ9qB6UzjoYrf6Pw6JB1IphvA5zcup3j8aqxKwK+SKPshlyYDtQz06TBaP9SD0Z8vs mdgmtUZkq2L+KKmV5F0An/gYOWYMBjzRGUIeBJ71V+RiJJIxip+usMBgpa3RkrUUEUsb qRIuUXenMVCp5/01Dez3MpzRPJFPvUoOTQ4WNjY5LSSPaKu4ZhtASSacb9kMt93x1FDm rp7AlHd47Ndv83C3oxqkjTOB0SHj9WbAoLbujjGYHePtVgTpj4KnBZMS0afcn/w1XlyL 1aqA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z22si462905edb.163.2021.03.04.13.52.55; Thu, 04 Mar 2021 13:53:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1447945AbhCCPQ4 (ORCPT + 99 others); Wed, 3 Mar 2021 10:16:56 -0500 Received: from foss.arm.com ([217.140.110.172]:45036 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238857AbhCCK24 (ORCPT ); Wed, 3 Mar 2021 05:28:56 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F066A1FB; Wed, 3 Mar 2021 01:52:01 -0800 (PST) Received: from [10.57.12.223] (unknown [10.57.12.223]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 33BFD3F73B; Wed, 3 Mar 2021 01:52:00 -0800 (PST) Subject: Re: [PATCH 1/8] ARM: ARMv7-M: Fix register restore corrupt after svc call To: dillon.minfei@gmail.com, robh+dt@kernel.org, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, devicetree@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@armlinux.org.uk, afzal.mohd.ma@gmail.com References: <1614758717-18223-1-git-send-email-dillon.minfei@gmail.com> <1614758717-18223-2-git-send-email-dillon.minfei@gmail.com> From: Vladimir Murzin Message-ID: <5284d390-c03a-4035-df5a-10d6cd60e47b@arm.com> Date: Wed, 3 Mar 2021 09:52:07 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <1614758717-18223-2-git-send-email-dillon.minfei@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/3/21 8:05 AM, dillon.minfei@gmail.com wrote: > From: dillon min > > For some case, kernel not boot by u-boot(single thread), > but by rtos , as most rtos use pendsv to do context switch. Hmm, does it mean that it starts kernel from process context? I'd assume that it is not only kernel who expects MSP. So, what if RTOS you mentioned want to boot other RTOS (even itself)? What if you have no access to the source code for those RTOS(es) to patch MSP/PSP switch? I'd very much prefer to keep stack switching logic outside kernel, say, in some shim which RTOS/bootloader can maintain. Cheers Vladimir > > So, we need add an lr check after svc call, to find out should > use psp or msp. else register restore after svc call might be > corrupted. > > Fixes: b70cd406d7fe ("ARM: 8671/1: V7M: Preserve registers across switch from Thread to Handler mode") > Signed-off-by: dillon min > --- > arch/arm/mm/proc-v7m.S | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S > index 84459c1d31b8..c93d2757312d 100644 > --- a/arch/arm/mm/proc-v7m.S > +++ b/arch/arm/mm/proc-v7m.S > @@ -137,7 +137,10 @@ __v7m_setup_cont: > 1: cpsid i > /* Calculate exc_ret */ > orr r10, lr, #EXC_RET_THREADMODE_PROCESSSTACK > - ldmia sp, {r0-r3, r12} > + tst lr, #EXC_RET_STACK_MASK > + mrsne r4, psp > + moveq r4, sp > + ldmia r4!, {r0-r3, r12} > str r5, [r12, #11 * 4] @ restore the original SVC vector entry > mov lr, r6 @ restore LR > >