From nobody Sun Feb 8 22:49:59 2026 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F3FC405D4 for ; Thu, 22 Feb 2024 11:16:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708600613; cv=none; b=DXdkYPi0koPT+Rx2WznXqPCS8Ubqf8fVME777TsM4oHEtDC6ZvCS67ZkF1vih53jx55+FxldLQtHrz0kwoUSkGRCdUBaD2aEWwNCPy/LqZ24O/fMd2b/ygA+gc5c6gEJdPDX150hxXnbPSfVf0xhJJI8Ha5/Wy2/+Pw1L94fJlU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708600613; c=relaxed/simple; bh=rxtY7H0wM9qx+Z0fjosj7tqZaxRDqcbDj1LTjD9zRNg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RF85Xdm/pETk8fzEqMwi88wDIoMrPttz4kSN3BnZWRADjSQfkc+HJk5Hu2Yr1WNEYSWiuZM9Rp8l7dCIzRQF8xuoNrlAxc6XDpjuEzk4w5bX6g3cCRroEMgaHeuC901jMwR8+tZO8B+LaORzbu2/RvzGblXucmz/C8oMsigrDqQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=XLibcITl; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=XLibcITl; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="XLibcITl"; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="XLibcITl" Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [10.150.64.97]) (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 smtp-out1.suse.de (Postfix) with ESMTPS id 4311D222B0; Thu, 22 Feb 2024 11:16:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1708600610; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4KjgXYrHVvwADgI5kTKZFgaMxkaodrMCR2ZZQJa+QmU=; b=XLibcITlVhR+Y+l1qkAS5iRuNT5Orwn94ePgaAe51uiCgaYEOb2m6Dc8FuvB9XbOUxGI0z k6Y6N2x1SGBC5P7YyNYCOSZ736GXFkVFyEgZiEmGbhgXiNQZN2obAKey1ifobTl13NN+W0 gIEeMBxQxxAz1S87iZtL4u0ZGS/+jZo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1708600610; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4KjgXYrHVvwADgI5kTKZFgaMxkaodrMCR2ZZQJa+QmU=; b=XLibcITlVhR+Y+l1qkAS5iRuNT5Orwn94ePgaAe51uiCgaYEOb2m6Dc8FuvB9XbOUxGI0z k6Y6N2x1SGBC5P7YyNYCOSZ736GXFkVFyEgZiEmGbhgXiNQZN2obAKey1ifobTl13NN+W0 gIEeMBxQxxAz1S87iZtL4u0ZGS/+jZo= Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.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 imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 0452A13ADA; Thu, 22 Feb 2024 11:16:49 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap1.dmz-prg2.suse.org with ESMTPSA id GFUhOiEt12VrGgAAD6G6ig (envelope-from ); Thu, 22 Feb 2024 11:16:49 +0000 From: Nikolay Borisov To: bp@alien8.de Cc: linux-kernel@vger.kernel.org, x86@kernel.org, Nikolay Borisov Subject: [PATCH 1/2] x86/insn: Remove superfluous checks from instruction decoding routines Date: Thu, 22 Feb 2024 13:16:35 +0200 Message-Id: <20240222111636.2214523-2-nik.borisov@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240222111636.2214523-1-nik.borisov@suse.com> References: <20240222111636.2214523-1-nik.borisov@suse.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Authentication-Results: smtp-out1.suse.de; none X-Spamd-Result: default: False [6.00 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; BAYES_SPAM(5.10)[100.00%]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; TO_DN_SOME(0.00)[]; DKIM_SIGNED(0.00)[suse.com:s=susede1]; MID_CONTAINS_FROM(1.00)[]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[] X-Spam-Level: ****** X-Spam-Score: 6.00 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" It's pointless checking if a particular part of an instruction is decoded before calling the routine responsible for decoding it as this check is duplicated in the routines itself. Streamline the code by removing the superfluous checks. No functional difference. Signed-off-by: Nikolay Borisov --- arch/x86/lib/insn.c | 56 +++++++++++++++------------------------ tools/arch/x86/lib/insn.c | 56 +++++++++++++++------------------------ 2 files changed, 42 insertions(+), 70 deletions(-) diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c index 55e371cc69fd..3946bdc75087 100644 --- a/arch/x86/lib/insn.c +++ b/arch/x86/lib/insn.c @@ -268,11 +268,9 @@ int insn_get_opcode(struct insn *insn) if (opcode->got) return 0; =20 - if (!insn->prefixes.got) { - ret =3D insn_get_prefixes(insn); - if (ret) - return ret; - } + ret =3D insn_get_prefixes(insn); + if (ret) + return ret; =20 /* Get first opcode */ op =3D get_next(insn_byte_t, insn); @@ -339,11 +337,9 @@ int insn_get_modrm(struct insn *insn) if (modrm->got) return 0; =20 - if (!insn->opcode.got) { - ret =3D insn_get_opcode(insn); - if (ret) - return ret; - } + ret =3D insn_get_opcode(insn); + if (ret) + return ret; =20 if (inat_has_modrm(insn->attr)) { mod =3D get_next(insn_byte_t, insn); @@ -386,11 +382,9 @@ int insn_rip_relative(struct insn *insn) if (!insn->x86_64) return 0; =20 - if (!modrm->got) { - ret =3D insn_get_modrm(insn); - if (ret) - return 0; - } + ret =3D insn_get_modrm(insn); + if (ret) + return 0; /* * For rip-relative instructions, the mod field (top 2 bits) * is zero and the r/m field (bottom 3 bits) is 0x5. @@ -417,11 +411,9 @@ int insn_get_sib(struct insn *insn) if (insn->sib.got) return 0; =20 - if (!insn->modrm.got) { - ret =3D insn_get_modrm(insn); - if (ret) - return ret; - } + ret =3D insn_get_modrm(insn); + if (ret) + return ret; =20 if (insn->modrm.nbytes) { modrm =3D insn->modrm.bytes[0]; @@ -460,11 +452,9 @@ int insn_get_displacement(struct insn *insn) if (insn->displacement.got) return 0; =20 - if (!insn->sib.got) { - ret =3D insn_get_sib(insn); - if (ret) - return ret; - } + ret =3D insn_get_sib(insn); + if (ret) + return ret; =20 if (insn->modrm.nbytes) { /* @@ -628,11 +618,9 @@ int insn_get_immediate(struct insn *insn) if (insn->immediate.got) return 0; =20 - if (!insn->displacement.got) { - ret =3D insn_get_displacement(insn); - if (ret) - return ret; - } + ret =3D insn_get_displacement(insn); + if (ret) + return ret; =20 if (inat_has_moffset(insn->attr)) { if (!__get_moffset(insn)) @@ -703,11 +691,9 @@ int insn_get_length(struct insn *insn) if (insn->length) return 0; =20 - if (!insn->immediate.got) { - ret =3D insn_get_immediate(insn); - if (ret) - return ret; - } + ret =3D insn_get_immediate(insn); + if (ret) + return ret; =20 insn->length =3D (unsigned char)((unsigned long)insn->next_byte - (unsigned long)insn->kaddr); diff --git a/tools/arch/x86/lib/insn.c b/tools/arch/x86/lib/insn.c index 8fd63a067308..5d81924478d9 100644 --- a/tools/arch/x86/lib/insn.c +++ b/tools/arch/x86/lib/insn.c @@ -268,11 +268,9 @@ int insn_get_opcode(struct insn *insn) if (opcode->got) return 0; =20 - if (!insn->prefixes.got) { - ret =3D insn_get_prefixes(insn); - if (ret) - return ret; - } + ret =3D insn_get_prefixes(insn); + if (ret) + return ret; =20 /* Get first opcode */ op =3D get_next(insn_byte_t, insn); @@ -339,11 +337,9 @@ int insn_get_modrm(struct insn *insn) if (modrm->got) return 0; =20 - if (!insn->opcode.got) { - ret =3D insn_get_opcode(insn); - if (ret) - return ret; - } + ret =3D insn_get_opcode(insn); + if (ret) + return ret; =20 if (inat_has_modrm(insn->attr)) { mod =3D get_next(insn_byte_t, insn); @@ -386,11 +382,9 @@ int insn_rip_relative(struct insn *insn) if (!insn->x86_64) return 0; =20 - if (!modrm->got) { - ret =3D insn_get_modrm(insn); - if (ret) - return 0; - } + ret =3D insn_get_modrm(insn); + if (ret) + return 0; /* * For rip-relative instructions, the mod field (top 2 bits) * is zero and the r/m field (bottom 3 bits) is 0x5. @@ -417,11 +411,9 @@ int insn_get_sib(struct insn *insn) if (insn->sib.got) return 0; =20 - if (!insn->modrm.got) { - ret =3D insn_get_modrm(insn); - if (ret) - return ret; - } + ret =3D insn_get_modrm(insn); + if (ret) + return ret; =20 if (insn->modrm.nbytes) { modrm =3D insn->modrm.bytes[0]; @@ -460,11 +452,9 @@ int insn_get_displacement(struct insn *insn) if (insn->displacement.got) return 0; =20 - if (!insn->sib.got) { - ret =3D insn_get_sib(insn); - if (ret) - return ret; - } + ret =3D insn_get_sib(insn); + if (ret) + return ret; =20 if (insn->modrm.nbytes) { /* @@ -628,11 +618,9 @@ int insn_get_immediate(struct insn *insn) if (insn->immediate.got) return 0; =20 - if (!insn->displacement.got) { - ret =3D insn_get_displacement(insn); - if (ret) - return ret; - } + ret =3D insn_get_displacement(insn); + if (ret) + return ret; =20 if (inat_has_moffset(insn->attr)) { if (!__get_moffset(insn)) @@ -703,11 +691,9 @@ int insn_get_length(struct insn *insn) if (insn->length) return 0; =20 - if (!insn->immediate.got) { - ret =3D insn_get_immediate(insn); - if (ret) - return ret; - } + ret =3D insn_get_immediate(insn); + if (ret) + return ret; =20 insn->length =3D (unsigned char)((unsigned long)insn->next_byte - (unsigned long)insn->kaddr); --=20 2.34.1 From nobody Sun Feb 8 22:49:59 2026 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E9B2405F4 for ; Thu, 22 Feb 2024 11:16:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708600615; cv=none; b=Ea4SMQgQ6lUeWZVH72ljCijc+X53ef2BzJWiKfnXJnDFHyuZow15YZWb2zWlA+P1Bn9QO9rjsPG2WCU2xVmoHymUA1CE66tVzmNxy0zgTraQncdCzVnrsSZL27fEU+BVwDGxgmVaxBVTqNxwH1Jr3W4xsrE979yAJ5IDCRKSDZU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708600615; c=relaxed/simple; bh=wIBGGeIaNfSeyrkvzBZ1D01uQ3bxKni4qhhnuwVG9eg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PqeYt6JkvLdS5bhYv+WUyQx0HCNBCrvx/dbiRftbQIHeGhSfY+D9QTis+QxVaG125Q7SZaWNTeX8EINYdLkthnsLUL19cJ2wtvEEOnlxTr+0+rGWkr43Y+5t4lZ59GmwQxiJBzW+2xEe8Ke9mPFQsl9Ud4jwNcznc59xZyts9xo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=plA23eWb; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=plA23eWb; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="plA23eWb"; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="plA23eWb" Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [10.150.64.97]) (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 smtp-out1.suse.de (Postfix) with ESMTPS id 9CF52222CA; Thu, 22 Feb 2024 11:16:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1708600610; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5/YD9GWMk8p3PrUPaDfQKLAsZ5U02sG/PlLxn+IalyI=; b=plA23eWbwnmO0t1WdETuN6PXwZFwUFhm6Lil7pnbcZIBhhg3g/81arlXExOwvblMn9LPFe g2oDp+cuiM5JyIZIn6t/jEuPj5KpAtvb/56Jc+gf3EU4KtntSEJpwf0eoHVamodKKwXZPm ySfutLg+dAx4U+vw4ksQlexVgwQfuNo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1708600610; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5/YD9GWMk8p3PrUPaDfQKLAsZ5U02sG/PlLxn+IalyI=; b=plA23eWbwnmO0t1WdETuN6PXwZFwUFhm6Lil7pnbcZIBhhg3g/81arlXExOwvblMn9LPFe g2oDp+cuiM5JyIZIn6t/jEuPj5KpAtvb/56Jc+gf3EU4KtntSEJpwf0eoHVamodKKwXZPm ySfutLg+dAx4U+vw4ksQlexVgwQfuNo= Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.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 imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 5178913A8C; Thu, 22 Feb 2024 11:16:50 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap1.dmz-prg2.suse.org with ESMTPSA id 2PmjESIt12VrGgAAD6G6ig (envelope-from ); Thu, 22 Feb 2024 11:16:50 +0000 From: Nikolay Borisov To: bp@alien8.de Cc: linux-kernel@vger.kernel.org, x86@kernel.org, Nikolay Borisov Subject: [PATCH 2/2] x86/insn: Directly assign x86_64 state in init_ins Date: Thu, 22 Feb 2024 13:16:36 +0200 Message-Id: <20240222111636.2214523-3-nik.borisov@suse.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240222111636.2214523-1-nik.borisov@suse.com> References: <20240222111636.2214523-1-nik.borisov@suse.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Authentication-Results: smtp-out1.suse.de; none X-Spamd-Result: default: False [5.87 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; BAYES_SPAM(4.97)[99.67%]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; TO_DN_SOME(0.00)[]; DKIM_SIGNED(0.00)[suse.com:s=susede1]; MID_CONTAINS_FROM(1.00)[]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[] X-Spam-Level: ***** X-Spam-Score: 5.87 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" No point in checking again as this was already done by the caller. Signed-off-by: Nikolay Borisov --- arch/x86/lib/insn.c | 2 +- tools/arch/x86/lib/insn.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c index 3946bdc75087..1bb155a0955b 100644 --- a/arch/x86/lib/insn.c +++ b/arch/x86/lib/insn.c @@ -71,7 +71,7 @@ void insn_init(struct insn *insn, const void *kaddr, int = buf_len, int x86_64) insn->kaddr =3D kaddr; insn->end_kaddr =3D kaddr + buf_len; insn->next_byte =3D kaddr; - insn->x86_64 =3D x86_64 ? 1 : 0; + insn->x86_64 =3D x86_64; insn->opnd_bytes =3D 4; if (x86_64) insn->addr_bytes =3D 8; diff --git a/tools/arch/x86/lib/insn.c b/tools/arch/x86/lib/insn.c index 5d81924478d9..ada4b4a79dd4 100644 --- a/tools/arch/x86/lib/insn.c +++ b/tools/arch/x86/lib/insn.c @@ -71,7 +71,7 @@ void insn_init(struct insn *insn, const void *kaddr, int = buf_len, int x86_64) insn->kaddr =3D kaddr; insn->end_kaddr =3D kaddr + buf_len; insn->next_byte =3D kaddr; - insn->x86_64 =3D x86_64 ? 1 : 0; + insn->x86_64 =3D x86_64; insn->opnd_bytes =3D 4; if (x86_64) insn->addr_bytes =3D 8; --=20 2.34.1