From patchwork Wed Jul 29 12:01:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1338295 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=VkGIt2Uk; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=etuJRZAv; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-sharedspace-onmicrosoft-com header.b=xJ25G/Be; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BGsc72vWSz9sTH for ; Wed, 29 Jul 2020 22:02:31 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=U3adq+A7gv3x/18dFlyd4bzSCIEN4RKD7J0oTGJ9qss=; b=VkGIt2UkrSyjW3nt/CFIz13Z+Y jvOdvFWypS9mk8EF2ABgDvKwKfC2k5m9O/tHe+jnLWY82vVhBs2WqCkSIaY4wVP/YTKRmxodC1kY0 DMSXWhOHcaPwhRl5bquBLuXB/SkxDcpWa7jaMEKQbW09izBNioSZnLgM9Vz6+c+1KOOMgEH9CtqL4 58y/EHwsM4SEuTbcL6MPUZQLVlYXE3EqPRbw7C5UPUy6sno7RJ1C+9FpQc/cLO/UnfQDtxx2MtegO 9BovdxhwBy8OlOXPCqLHULiFHw6/Wc8cs0mrDqVapCtcvIyN2gOWIDiVM77ik8FFuglnx0ZqcYHoN +rNkexXw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k0kmu-0006Sq-TR; Wed, 29 Jul 2020 12:02:24 +0000 Received: from esa4.hgst.iphmx.com ([216.71.154.42]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k0kmr-0006Ru-B4 for opensbi@lists.infradead.org; Wed, 29 Jul 2020 12:02:22 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1596024141; x=1627560141; h=from:to:cc:subject:date:message-id: content-transfer-encoding:mime-version; bh=97Ui1cM0rvbbYyWGad9Js2XgrU4C+SkZXoZUC7mx3Kk=; b=etuJRZAveSSeSoYZkURz6tQGPjBv/Au42PkmwiHouwmuJYYF40bwneIz DoPIMg2wELbS1SAzuHNQ0il2kiHW7EcDX9D8Vm/71sZ1b5toR3+aM7VMn gz9NbxLc10Z7jncjiHDDZn0RajEayTIm0S2ZZBp+Sj50pmK5IQH7xh0Er fkJ9c+mCsHY6qI4f2Jejcdwwap/yYWHyZh75m5jQhNQLsfJU5164uHmIR 6BSa97HyjN1QRQVXXwU1js7xafnyrCsWFjGxXwxrxDoJ0CbIFNlWWsk1t z9PRbMKOBjX3qZ9wYaLkZvNQfJ+N8TGp9oACVqAUHdSMaLWZ5eJU1htU4 Q==; IronPort-SDR: +5eCZQb+1GdudyN6sMXC5L3E6748ilIzetCRA0+wEUeMUAumI6fG9DtcBx9IqHc8KCoH9KpJSc 5baIdfKSmmGeiLNQPnLxLWIhia4CTElsgdK19+fJHgc0je44ntm+WLXDbfLjMcPyZXUlOd2lCN FyuuOZVwSHGDJ74B6xpgIqqH7RWCrYCRDhpctkMCY+uddgtcXWnC3ExyuRvwduek+MA4D1RaYh isBtuGQ6veOSwTxKEuUDCHK1POlAGnYXZoXsjtIWrWk999xHOqaIulcBVj7TQn0eTJVxRtOjF2 xg4= X-IronPort-AV: E=Sophos;i="5.75,410,1589212800"; d="scan'208";a="143646045" Received: from mail-co1nam11lp2168.outbound.protection.outlook.com (HELO NAM11-CO1-obe.outbound.protection.outlook.com) ([104.47.56.168]) by ob1.hgst.iphmx.com with ESMTP; 29 Jul 2020 20:02:18 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GQXBiCaCajmzKTgLSA5XUjDWqv0DZ+dcAKYLd1p/vvYXgB56tBLqNXHANg0Okro9sFQBrrKFhmKI67tL5KsBvNi7INm6vaHPPl9mH6cv03njdgKtKd11d5oFChYvbG649jsJSNL7hrjU3eksTVKWB39y6N5VOekneKkbEosvs++n81Ui1mPBSiacyYun510uPx1854W5MNQyH9hrmI2dNz2jIRAagYx11wyE9KRugr2tdjOL9/PGdukYXMU9te435yInEOruIi/PpBvW7/dX6tk5KHzvUd4RGqlg4W5MHAm1zFSoTQtXlyj1JRtgs7lEbI5srGsPPr62ADJhH9LRAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gUEWy5k5vYX47nx5mxPhYg1X9585/5U82d0Iw6+Tibc=; b=JjJEQh5VbtYsc5dW1kKRfTb767xp1WQmvs5cERKi8FD1ii8J7rKdjFBHKnSzGzgWHVVjFF0O1EVOztgJ0+okrRRt4J6e0rlrXHaELlqodzMY/N9OvABWSxIgPk/iw/Sata+LzEmDdEdCm0pI/CVixVyc2zQMEIUN4Zrz13oRgYNI0oNhQJ+wwe9u8KZUhY2+OBO7O9o2XqZUi1qS+SAcNtmtNzWoZOWhpANi4RMhZsIopuxIKJtmfpu2mCsLfe4FbORi2f/k0mxQkBMbMAYcMjZ4KUxbZ9s6NvtXW5xzFf+XXq0Elvm3h5ZvIz1NW2olicMqIpxDakrdCegFHEIzgg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gUEWy5k5vYX47nx5mxPhYg1X9585/5U82d0Iw6+Tibc=; b=xJ25G/BePv6wvcUGbiiH74hkfAOpsAHgVtAgBpYMS7ej/8NPZyi9oNY5ZPqPOxYeX3vkh+kVS8i6jpf3IR3+507urxW+tdOk72Wksg5UU4Xp7lezmTjc2Gc8Ek3X4us81QIfOvC5cMwDaVchGQQRXhPdwJOJDB8gvyV41/evhwo= Authentication-Results: wdc.com; dkim=none (message not signed) header.d=none;wdc.com; dmarc=none action=none header.from=wdc.com; Received: from DM6PR04MB6201.namprd04.prod.outlook.com (2603:10b6:5:127::32) by DM6PR04MB5835.namprd04.prod.outlook.com (2603:10b6:5:163::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.25; Wed, 29 Jul 2020 12:02:16 +0000 Received: from DM6PR04MB6201.namprd04.prod.outlook.com ([fe80::e0a4:aa82:1847:dea5]) by DM6PR04MB6201.namprd04.prod.outlook.com ([fe80::e0a4:aa82:1847:dea5%7]) with mapi id 15.20.3239.017; Wed, 29 Jul 2020 12:02:16 +0000 From: Anup Patel To: Atish Patra , Alistair Francis Subject: [PATCH] lib: sbi_misaligned_ldst: Determine transformed instruction length correctly Date: Wed, 29 Jul 2020 17:31:53 +0530 Message-Id: <20200729120153.127735-1-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 X-ClientProxiedBy: BM1PR01CA0163.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::33) To DM6PR04MB6201.namprd04.prod.outlook.com (2603:10b6:5:127::32) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (103.56.183.175) by BM1PR01CA0163.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.17 via Frontend Transport; Wed, 29 Jul 2020 12:02:14 +0000 X-Mailer: git-send-email 2.25.1 X-Originating-IP: [103.56.183.175] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 51b64e02-6607-4ee6-9626-08d833b73ce1 X-MS-TrafficTypeDiagnostic: DM6PR04MB5835: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vmwo0lsURPClC4bJGUQh2azViPjvd7BufNNMv60nK0K+Jdb0FwrbmRQd4qQLbhCOWrgR7fWkj5+goiEAS4aDaQFMNyVIJ/Wqpj5neoNA7WSWUlWwNxTltee68XW/UJpIJgB3SRNChL3IB/fCe752oqXoRb/TId/TEepW1uYfln5GNYuSUixuQN5NZ2El164B9VUAxaW27P9jwycqriQkdAE3ON2I6DR5LZAMZ264J5IYZZmJKHJuhJBld2Vk4odRPb46Q83Z1VIPcZPajBxOBAijGWG1aaO5Pbyrv0mojI3HZiffAN3vg45Z2UDXho2bvgWjC70S4TRJmP07oFi0ZA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR04MB6201.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(136003)(346002)(396003)(376002)(366004)(39860400002)(4326008)(54906003)(7696005)(956004)(316002)(52116002)(8886007)(16526019)(186003)(2616005)(26005)(36756003)(110136005)(44832011)(66476007)(478600001)(86362001)(8936002)(6666004)(55016002)(66556008)(5660300002)(1076003)(2906002)(83380400001)(66946007)(8676002)(6636002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: x1y5XVL8Zth4LLcXwV3vWcl+bqZSByn95cb+zu0PkN1Fu0paWzautJHqTpfG9WfC3kP0wCRrd4JTv4x3tUow8exqNZA35+V0kFQiVLbkjKqz2OqciV5poFjrU9ip/sjUpNxeOlOpWf7BiPRjiRzM1ZYPcvkHH9FmvklKDC9aBB8MUVgYmsHlfMMrQNcg3eU2uWySroKfD4HKhEWsw3HQ035Ry2e86rfaL9pHvh7mxUNgM4k90i5x881zzUEn9SjnOdDxSypZYfIVwmx1maEwZCcPOYpMsT9Fd2aF1n9CCflFDJcLqXtzQkbfGKUPiSZvJCTp3IDM8Qa5ZNiXIqn2mLp+2N0AbGWVyuPMsgLIZWoVvqVHP2LSNjHR/74acpZ8APW/2EKVJ01J5dw4Viha0M7BEaqgvRBth7rekKR6iYeBRJcRrkpB01VE55RPE4B9jS+MPpIBFHtQ99au3KsX3ooQJfoUsQGYzy070avW8/1fRANAxFaYwt9VyL8zQ46c X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 51b64e02-6607-4ee6-9626-08d833b73ce1 X-MS-Exchange-CrossTenant-AuthSource: DM6PR04MB6201.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2020 12:02:16.8212 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9+nwag2mLKw+igotRhu4jBP+SzYVME2rdvDejnq/HOgOxB3Yjx4phfi+3R0WYpiDhQwV2wJWd6+pTCHFIGjziQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR04MB5835 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200729_080221_608632_3573B2BE X-CRM114-Status: GOOD ( 14.21 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [216.71.154.42 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anup Patel , Anup Patel , opensbi@lists.infradead.org Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org If MTINST[0:0] bit is 1 then we have transformed instruction encoding in MTINST CSR. For transformed instructions, if the MTINST[1:1] bit is Zero then original trapped instruction was a 16bit instruction which was converted to 32bit instruction at time of taking trap. We should use MTINST[1:1] bit to determine correct instruction length of transformed instruction. This patch updates misaligned load/store emulation as-per above. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- lib/sbi/sbi_misaligned_ldst.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/sbi/sbi_misaligned_ldst.c b/lib/sbi/sbi_misaligned_ldst.c index 29d79bb..964a372 100644 --- a/lib/sbi/sbi_misaligned_ldst.c +++ b/lib/sbi/sbi_misaligned_ldst.c @@ -24,7 +24,7 @@ union reg_data { int sbi_misaligned_load_handler(ulong addr, ulong tval2, ulong tinst, struct sbi_trap_regs *regs) { - ulong insn; + ulong insn, insn_len; union reg_data val; struct sbi_trap_info uptrap; int i, fp = 0, shift = 0, len = 0; @@ -35,6 +35,7 @@ int sbi_misaligned_load_handler(ulong addr, ulong tval2, ulong tinst, * transformed instruction or custom instruction. */ insn = tinst | INSN_16BIT_MASK; + insn_len = (tinst & 0x2) ? INSN_LEN(insn) : 2; } else { /* * Bit[0] == 0 implies trapped instruction value is @@ -45,6 +46,7 @@ int sbi_misaligned_load_handler(ulong addr, ulong tval2, ulong tinst, uptrap.epc = regs->mepc; return sbi_trap_redirect(regs, &uptrap); } + insn_len = INSN_LEN(insn); } if ((insn & INSN_MASK_LW) == INSN_MATCH_LW) { @@ -134,7 +136,7 @@ int sbi_misaligned_load_handler(ulong addr, ulong tval2, ulong tinst, SET_F32_RD(insn, regs, val.data_ulong); #endif - regs->mepc += INSN_LEN(insn); + regs->mepc += insn_len; return 0; } @@ -142,7 +144,7 @@ int sbi_misaligned_load_handler(ulong addr, ulong tval2, ulong tinst, int sbi_misaligned_store_handler(ulong addr, ulong tval2, ulong tinst, struct sbi_trap_regs *regs) { - ulong insn; + ulong insn, insn_len; union reg_data val; struct sbi_trap_info uptrap; int i, len = 0; @@ -153,6 +155,7 @@ int sbi_misaligned_store_handler(ulong addr, ulong tval2, ulong tinst, * transformed instruction or custom instruction. */ insn = tinst | INSN_16BIT_MASK; + insn_len = (tinst & 0x2) ? INSN_LEN(insn) : 2; } else { /* * Bit[0] == 0 implies trapped instruction value is @@ -163,6 +166,7 @@ int sbi_misaligned_store_handler(ulong addr, ulong tval2, ulong tinst, uptrap.epc = regs->mepc; return sbi_trap_redirect(regs, &uptrap); } + insn_len = INSN_LEN(insn); } val.data_ulong = GET_RS2(insn, regs); @@ -233,7 +237,7 @@ int sbi_misaligned_store_handler(ulong addr, ulong tval2, ulong tinst, } } - regs->mepc += INSN_LEN(insn); + regs->mepc += insn_len; return 0; }