From patchwork Mon Sep 7 10:06:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huacai Chen X-Patchwork-Id: 11760391 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E6EC8618 for ; Mon, 7 Sep 2020 10:06:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BD2E9215A4 for ; Mon, 7 Sep 2020 10:06:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Kr5iNZy0" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728331AbgIGKGP (ORCPT ); Mon, 7 Sep 2020 06:06:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728317AbgIGKGO (ORCPT ); Mon, 7 Sep 2020 06:06:14 -0400 Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94B79C061573 for ; Mon, 7 Sep 2020 03:06:13 -0700 (PDT) Received: by mail-pf1-x441.google.com with SMTP id n14so448799pff.6 for ; Mon, 07 Sep 2020 03:06:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=G5IfRmqPuMpaOCcxbL+BlkKGKTuCTWSjkTLclXpS/yY=; b=Kr5iNZy0vJn+Fttk/bFRpg7KbOBb6Fh9mExVyVsgDW22od4ehfvfFH48Rwh+rWHzYJ LxYg89pc91LPaf4Pv7c9yVo7fNECPVOwFMQrKr3ge+VvWB5R+D4bz5XdZOIisgdzw8fm P6y5A6Fr3IYtoq/s/x2mLn2/LkSgMvbOWR+aNceRNWceteeU7nCIefPCIBAHM7q02MrJ 92DjkS235WAzjZNRVvRfYmwGLvWwrB53+nV9C0RGG0dZeLHmdZfvotP54pGrZB04b8sD Bd0ET063nw7uand61Y7iQUgc9cM2QRY4/TYh90BvLUA6JXSWcG0TWzRMMyU2AFl6OpkT uGaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=G5IfRmqPuMpaOCcxbL+BlkKGKTuCTWSjkTLclXpS/yY=; b=E6CxkM5AEf4YzmGzNBu7yP0YhX5n5VmN30By30146WKFVlwZq9NgKEUzwlCwUofs4L NRh6aJMKyWL28LAeWyJYvvirJiOGB1zrt9Kff+OH0o3K3D55SxUVMa77cmdYTH8mufGz vpElGkNlgp4E924NVSBF7rXHiqEl77DJgTl93FwSGIDdcA+hM4ghJqmm6/sZnlkpt9Ck PJSptfpN2FmkDirRNCOhmhmL/Rmbd+psSIiVLDQKEVd6U5IIFS2jwDn/C55u6ekgUpdZ jhtPp3YjMkb8Z5DQQeyO2NUG8WznTWHbCqX2fZtHtllOvDUuWdjEIVGJ8RL+DN8NS9Jd RMkg== X-Gm-Message-State: AOAM532qZ1UWhNnH68wJdm+ACtO/aJGLxKvWlWq5KpqaQ8k2E1sjRmpW 7KM45jViQTl6iY4ho6LwYdk= X-Google-Smtp-Source: ABdhPJw7/Bc0B4xFnULR7ZChe9F+72gza0akhwYTRoTforUjh6vz8uenu9xFTUwv1nRD/WKUKaGqIg== X-Received: by 2002:aa7:998a:: with SMTP id k10mr1512275pfh.151.1599473173057; Mon, 07 Sep 2020 03:06:13 -0700 (PDT) Received: from software.domain.org ([45.77.13.216]) by smtp.gmail.com with ESMTPSA id 64sm7992238pgi.90.2020.09.07.03.06.10 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Sep 2020 03:06:12 -0700 (PDT) From: Huacai Chen To: Thomas Bogendoerfer Cc: linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen , Jiaxun Yang , Huacai Chen Subject: [PATCH V6 1/3] MIPS: context switch: Use save/restore instead of set/clear for Status.CU2 Date: Mon, 7 Sep 2020 18:06:07 +0800 Message-Id: <1599473169-6599-1-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 Sender: linux-mips-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org Some processors (such as Loongson-3) need to enable CU2 in kernel mode, current set/clear method will lose Status.CU2 during context switching, so use save/restore method instead. Signed-off-by: Huacai Chen --- arch/mips/include/asm/switch_to.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/mips/include/asm/switch_to.h b/arch/mips/include/asm/switch_to.h index 0b0a93b..a4374b4 100644 --- a/arch/mips/include/asm/switch_to.h +++ b/arch/mips/include/asm/switch_to.h @@ -117,6 +117,8 @@ do { \ __restore_dsp(next); \ } \ if (cop2_present) { \ + u32 status = read_c0_status(); \ + \ set_c0_status(ST0_CU2); \ if ((KSTK_STATUS(prev) & ST0_CU2)) { \ if (cop2_lazy_restore) \ @@ -127,7 +129,7 @@ do { \ !cop2_lazy_restore) { \ cop2_restore(next); \ } \ - clear_c0_status(ST0_CU2); \ + write_c0_status(status); \ } \ __clear_r5_hw_ll_bit(); \ __clear_software_ll_bit(); \ From patchwork Mon Sep 7 10:06:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huacai Chen X-Patchwork-Id: 11760393 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 98E5659D for ; Mon, 7 Sep 2020 10:06:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7383B20C09 for ; Mon, 7 Sep 2020 10:06:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KGCOfRmy" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728331AbgIGKGv (ORCPT ); Mon, 7 Sep 2020 06:06:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728317AbgIGKGu (ORCPT ); Mon, 7 Sep 2020 06:06:50 -0400 Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3F0FC061573 for ; Mon, 7 Sep 2020 03:06:48 -0700 (PDT) Received: by mail-pj1-x1043.google.com with SMTP id kk9so3896932pjb.2 for ; Mon, 07 Sep 2020 03:06:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=Z9TpHfumO0CTgwEuoa23RwPOaRJrW5ZKiBcljLeWhrE=; b=KGCOfRmyVHPFBfs3Iybn5Ucua2Asg9BarQrRUu3SP+fnlQCDJ2Y1eL5gJP/jzZg0Cs nzI67UvpaFmSisN+HzxDg6qNsPp2IFQdfJBiGe5TDbDQe4o++Aw+uI6jmbeG4z/F6wze 8+QGOjalayBJHZWyqgeS0B8SlCbsVuPvHFTgP7AUtTx3UslqNBwpVfSzpd4nH0Iw+flN 5kq6WVENFbYumowaMLNKGWlWJ3w5muTvhCJsNqkG4Qkt18l0bchNv5u7FlivLdxY3Weh svJ6KrW0rn+DTmXmuozljwptMy6eya6xtmAOGcDWVGY7BgXzzHMuiWof3mNVcHd6tWgH mkZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Z9TpHfumO0CTgwEuoa23RwPOaRJrW5ZKiBcljLeWhrE=; b=e/nr2lFdAA+w/4UYd+gOWJSuEG0D1epS+/jzmIw6kdLH98SYmwx1xKZzZvGFptXIzI cFriMjJBt21/nzIvIMc7BD9VMf4Mn+mr0/xKEl59ngxy3nYp5KqKlF/NyQs14EUaTX4K Km17RQGfNhPmCSY7festWcCRyG3KBzeyTQLuA+ruAuNiuC1LOZ1v1u0J9iWcjdA5uqQq PtXxqXZSPY7VaEfkYfhk4Wi48lTRqxtipVYYfkfAv8aTU6pSImbTXzQBHVkYfAW/StsS EwT4EeRM9PRjb2zVi51+SeWUi0qZ/cjJur+puwz/33NI3WkHymgWP2MY2u6xTKndAc+c 23eQ== X-Gm-Message-State: AOAM532xf4JPOV3gKzikjIojIj0iC+AgfLKUUfEcAILlDNozhh2Mc3Be 9uZGSMVVepxpsCSdPMXlb3M= X-Google-Smtp-Source: ABdhPJxLoM6qiAYG/Zy5ktwnbYS14ef+7jqMQFhbOt/qiwHaybPpa+OFcpkLIxs6KTq4Sci2z6/p9A== X-Received: by 2002:a17:90a:46c2:: with SMTP id x2mr19660150pjg.184.1599473208206; Mon, 07 Sep 2020 03:06:48 -0700 (PDT) Received: from software.domain.org ([45.77.13.216]) by smtp.gmail.com with ESMTPSA id 64sm7992238pgi.90.2020.09.07.03.06.45 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Sep 2020 03:06:47 -0700 (PDT) From: Huacai Chen To: Thomas Bogendoerfer Cc: linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen , Jiaxun Yang , Huacai Chen Subject: [PATCH V6 2/3] MIPS: Loongson-3: Enable COP2 usage in kernel Date: Mon, 7 Sep 2020 18:06:08 +0800 Message-Id: <1599473169-6599-2-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1599473169-6599-1-git-send-email-chenhc@lemote.com> References: <1599473169-6599-1-git-send-email-chenhc@lemote.com> Sender: linux-mips-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org Loongson-3's COP2 is Multi-Media coprocessor, it is disabled in kernel mode by default. However, gslq/gssq (16-bytes load/store instructions) overrides the instruction format of lwc2/swc2. If we wan't to use gslq/ gssq for optimization in kernel, we should enable COP2 usage in kernel. Please pay attention that in this patch we only enable COP2 in kernel, which means it will lose ST0_CU2 when a process go to user space (try to use COP2 in user space will trigger an exception and then grab COP2, which is similar to FPU). And as a result, we need to modify the context switching code because the new scheduled process doesn't contain ST0_CU2 in its THERAD_STATUS probably. Signed-off-by: Huacai Chen --- V3: Stop using ST0_MM and use ST0_CU2 instead (Thank Thomas and Maciej). V4: Adopt Thomas's suggestion to improve coding style. V5: Use ST0_KERNEL_CUMASK in all possible places to avoid #ifdefs. V6: Modify switch_to() and don't touch r4k_switch.S. arch/mips/boot/compressed/head.S | 5 +++++ arch/mips/include/asm/mipsregs.h | 7 +++++++ arch/mips/include/asm/stackframe.h | 6 +++--- arch/mips/kernel/head.S | 2 +- arch/mips/kernel/process.c | 4 ++-- arch/mips/kernel/traps.c | 2 +- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/arch/mips/boot/compressed/head.S b/arch/mips/boot/compressed/head.S index 409cb48..9fc88ec 100644 --- a/arch/mips/boot/compressed/head.S +++ b/arch/mips/boot/compressed/head.S @@ -14,11 +14,16 @@ #include #include +#include .set noreorder .cprestore LEAF(start) start: + mfc0 t0, CP0_STATUS + or t0, ST0_KERNEL_CUMASK + mtc0 t0, CP0_STATUS + /* Save boot rom start args */ move s0, a0 move s1, a1 diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index 1a03fdc2..36b8433 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h @@ -389,6 +389,13 @@ #define ST0_CU3 0x80000000 #define ST0_XX 0x80000000 /* MIPS IV naming */ +/* in-kernel enabled CUs */ +#ifdef CONFIG_CPU_LOONGSON64 +#define ST0_KERNEL_CUMASK (ST0_CU0 | ST0_CU2) +#else +#define ST0_KERNEL_CUMASK ST0_CU0 +#endif + /* * Bitfields and bit numbers in the coprocessor 0 IntCtl register. (MIPSR2) */ diff --git a/arch/mips/include/asm/stackframe.h b/arch/mips/include/asm/stackframe.h index 3e8d2aa..aa430a6 100644 --- a/arch/mips/include/asm/stackframe.h +++ b/arch/mips/include/asm/stackframe.h @@ -450,7 +450,7 @@ */ .macro CLI mfc0 t0, CP0_STATUS - li t1, ST0_CU0 | STATMASK + li t1, ST0_KERNEL_CUMASK | STATMASK or t0, t1 xori t0, STATMASK mtc0 t0, CP0_STATUS @@ -463,7 +463,7 @@ */ .macro STI mfc0 t0, CP0_STATUS - li t1, ST0_CU0 | STATMASK + li t1, ST0_KERNEL_CUMASK | STATMASK or t0, t1 xori t0, STATMASK & ~1 mtc0 t0, CP0_STATUS @@ -477,7 +477,7 @@ */ .macro KMODE mfc0 t0, CP0_STATUS - li t1, ST0_CU0 | (STATMASK & ~1) + li t1, ST0_KERNEL_CUMASK | (STATMASK & ~1) #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) andi t2, t0, ST0_IEP srl t2, 2 diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S index 7dd234e..61b7358 100644 --- a/arch/mips/kernel/head.S +++ b/arch/mips/kernel/head.S @@ -35,7 +35,7 @@ .macro setup_c0_status set clr .set push mfc0 t0, CP0_STATUS - or t0, ST0_CU0|\set|0x1f|\clr + or t0, ST0_KERNEL_CUMASK|\set|0x1f|\clr xor t0, 0x1f|\clr mtc0 t0, CP0_STATUS .set noreorder diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index f5dc316..b36297e 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c @@ -68,7 +68,7 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp) unsigned long status; /* New thread loses kernel privileges. */ - status = regs->cp0_status & ~(ST0_CU0|ST0_CU1|ST0_FR|KU_MASK); + status = regs->cp0_status & ~(ST0_CU0|ST0_CU1|ST0_CU2|ST0_FR|KU_MASK); status |= KU_USER; regs->cp0_status = status; lose_fpu(0); @@ -133,7 +133,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, childregs = (struct pt_regs *) childksp - 1; /* Put the stack after the struct pt_regs. */ childksp = (unsigned long) childregs; - p->thread.cp0_status = read_c0_status() & ~(ST0_CU2|ST0_CU1); + p->thread.cp0_status = (read_c0_status() & ~(ST0_CU2|ST0_CU1)) | ST0_KERNEL_CUMASK; if (unlikely(p->flags & PF_KTHREAD)) { /* kernel thread */ unsigned long status = p->thread.cp0_status; diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index cf788591..e035295 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -2204,7 +2204,7 @@ static void configure_status(void) * flag that some firmware may have left set and the TS bit (for * IP27). Set XX for ISA IV code to work. */ - unsigned int status_set = ST0_CU0; + unsigned int status_set = ST0_KERNEL_CUMASK; #ifdef CONFIG_64BIT status_set |= ST0_FR|ST0_KX|ST0_SX|ST0_UX; #endif From patchwork Mon Sep 7 10:06:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huacai Chen X-Patchwork-Id: 11760395 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5C14459D for ; Mon, 7 Sep 2020 10:07:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3CB0221531 for ; Mon, 7 Sep 2020 10:07:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kZL1jrnX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728408AbgIGKHM (ORCPT ); Mon, 7 Sep 2020 06:07:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728317AbgIGKHL (ORCPT ); Mon, 7 Sep 2020 06:07:11 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92263C061573 for ; Mon, 7 Sep 2020 03:07:09 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id w7so8400505pfi.4 for ; Mon, 07 Sep 2020 03:07:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=VairmXzYfCn1dnkA9xHTGhcEUlhFriElxDnD3N6Npyk=; b=kZL1jrnXQybAz0DFEyRqvosZgx+OlBeXHfD9ESKIiCg+fvLLIP4+mMomZBlmqmZ0rp ZpMcHGLHpPYGqfUb9a++dR/aBRClhdNzbeZelcaiObMC6dxuRKEkBgmWyzKo2i5uUqtH 3PliAib18mRn7uOIPMEv/UkyYD7jk1na5lV5fQX3jD3HzyFOrqBttedzyGHoI1y+vgN7 hFriYQUI5Wt4OtRiEX+9clDYe7i4W91bQeTR6ZGhKkCBJaVJ+1JKGQwZTbIg3PnUXW73 kewQZvl89M8L3AEDwls+C8H5+flz3UGdARF87MHw3G6d++Ke2DALwVXHs6HtRWaBQOdA dWmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=VairmXzYfCn1dnkA9xHTGhcEUlhFriElxDnD3N6Npyk=; b=pbNl+OghjW+XqVvtCzhTEVWCjNS5gYDADlJuHz6zsxaUU9rNLnWZrrf1EgVvbu6nOg oa76flhSXY5i0SL57Sha5OMf1lmprz+cdk+L71ZrBkZkK+VStKh23QP/+GQ3Cm7RUgDQ gvaf2WdMVVGrX/abjRjwy9VAvj3UWH8CKQPANP7Y4HsSzf7srfTMacEc/oE0uSbsIsjA UrHxNqv/jHICKx66UQA3hplUUiJpElch/nuNSMl5ZSPsIbjvLXYSeMmRlUyOoaJHCG3K WuZ1gEzoH4nce5NEw5MwDIjRRC+48GbeqQbImIxQsrbcei2kqzQ+RlEr1ddEPIXooNhh EnJg== X-Gm-Message-State: AOAM530GJpqVk3Q8nh3Hy6TiXK06WY/yK+qAYcRJ/9AdMJeGbMUBnnV3 lqO0DuPzoxvgjLjqIkJ7sgc= X-Google-Smtp-Source: ABdhPJwpIy2VNGmFztGduNWanNgGnPa/nGXENVHb6xLjwigS3KIfiL7NaZiSXwY/bjWangsK0qXOQg== X-Received: by 2002:a63:2a96:: with SMTP id q144mr16827351pgq.447.1599473229155; Mon, 07 Sep 2020 03:07:09 -0700 (PDT) Received: from software.domain.org ([45.77.13.216]) by smtp.gmail.com with ESMTPSA id 64sm7992238pgi.90.2020.09.07.03.07.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Sep 2020 03:07:08 -0700 (PDT) From: Huacai Chen To: Thomas Bogendoerfer Cc: linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen , Jiaxun Yang , Huacai Chen Subject: [PATCH V6 3/3] MIPS: Loongson-3: Calculate ra properly when unwinding the stack Date: Mon, 7 Sep 2020 18:06:09 +0800 Message-Id: <1599473169-6599-3-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1599473169-6599-1-git-send-email-chenhc@lemote.com> References: <1599473169-6599-1-git-send-email-chenhc@lemote.com> Sender: linux-mips-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org Loongson-3 has 16-bytes load/store instructions: gslq and gssq. This patch calculate ra properly when unwinding the stack, if ra is saved by gssq and restored by gslq. Signed-off-by: Huacai Chen --- arch/mips/kernel/process.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index b36297e..37f05c8 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c @@ -279,7 +279,21 @@ static inline int is_ra_save_ins(union mips_instruction *ip, int *poff) *poff = ip->i_format.simmediate / sizeof(ulong); return 1; } - +#ifdef CONFIG_CPU_LOONGSON64 + if ((ip->loongson3_lswc2_format.opcode == swc2_op) && + (ip->loongson3_lswc2_format.ls == 1) && + (ip->loongson3_lswc2_format.fr == 0) && + (ip->loongson3_lswc2_format.base == 29)) { + if (ip->loongson3_lswc2_format.rt == 31) { + *poff = ip->loongson3_lswc2_format.offset << 1; + return 1; + } + if (ip->loongson3_lswc2_format.rq == 31) { + *poff = (ip->loongson3_lswc2_format.offset << 1) + 1; + return 1; + } + } +#endif return 0; #endif }