From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753110AbbERJLj (ORCPT ); Mon, 18 May 2015 05:11:39 -0400 Received: from terminus.zytor.com ([198.137.202.10]:40965 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752423AbbERJLa (ORCPT ); Mon, 18 May 2015 05:11:30 -0400 Date: Mon, 18 May 2015 02:10:50 -0700 From: tip-bot for Borislav Petkov Message-ID: Cc: quentin.casasnovas@oracle.com, linux-kernel@vger.kernel.org, torvalds@linux-foundation.org, bp@suse.de, tglx@linutronix.de, peterz@infradead.org, mingo@kernel.org, hpa@zytor.com Reply-To: hpa@zytor.com, mingo@kernel.org, peterz@infradead.org, tglx@linutronix.de, linux-kernel@vger.kernel.org, quentin.casasnovas@oracle.com, bp@suse.de, torvalds@linux-foundation.org In-Reply-To: <1431860101-14847-3-git-send-email-bp@alien8.de> References: <1431860101-14847-3-git-send-email-bp@alien8.de> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/microcode] x86/microcode/intel: Simplify update_match_cpu() Git-Commit-ID: 6b2d469f5b5dd1d39548f2e79557b9b5ffe00eb1 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 6b2d469f5b5dd1d39548f2e79557b9b5ffe00eb1 Gitweb: http://git.kernel.org/tip/6b2d469f5b5dd1d39548f2e79557b9b5ffe00eb1 Author: Borislav Petkov AuthorDate: Sun, 17 May 2015 12:54:59 +0200 Committer: Ingo Molnar CommitDate: Mon, 18 May 2015 09:32:36 +0200 x86/microcode/intel: Simplify update_match_cpu() Drop unreadable macro, deconstruct compound conditional statement into single ones and return early if they match. Add comments. There should be no functionality change resulting from this patch. Signed-off-by: Borislav Petkov Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Quentin Casasnovas Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/1431860101-14847-3-git-send-email-bp@alien8.de Signed-off-by: Ingo Molnar --- arch/x86/include/asm/microcode_intel.h | 3 --- arch/x86/kernel/cpu/microcode/intel_lib.c | 19 +++++++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/x86/include/asm/microcode_intel.h b/arch/x86/include/asm/microcode_intel.h index 8e87e6f..45a318f 100644 --- a/arch/x86/include/asm/microcode_intel.h +++ b/arch/x86/include/asm/microcode_intel.h @@ -51,9 +51,6 @@ struct extended_sigtable { (((struct microcode_intel *)mc)->hdr.datasize ? \ ((struct microcode_intel *)mc)->hdr.datasize : DEFAULT_UCODE_DATASIZE) -#define sigmatch(s1, s2, p1, p2) \ - (((s1) == (s2)) && (((p1) & (p2)) || (((p1) == 0) && ((p2) == 0)))) - #define exttable_size(et) ((et)->count * EXT_SIGNATURE_SIZE + EXT_HEADER_SIZE) extern int has_newer_microcode(void *mc, unsigned int csig, int cpf, int rev); diff --git a/arch/x86/kernel/cpu/microcode/intel_lib.c b/arch/x86/kernel/cpu/microcode/intel_lib.c index 425f8e2..1ffe507 100644 --- a/arch/x86/kernel/cpu/microcode/intel_lib.c +++ b/arch/x86/kernel/cpu/microcode/intel_lib.c @@ -31,11 +31,18 @@ #include #include -static inline int -update_match_cpu(unsigned int csig, unsigned int cpf, - unsigned int sig, unsigned int pf) +static inline bool cpu_signatures_match(unsigned int s1, unsigned int p1, + unsigned int s2, unsigned int p2) { - return (!sigmatch(sig, csig, pf, cpf)) ? 0 : 1; + if (s1 != s2) + return false; + + /* Processor flags are either both 0 ... */ + if (!p1 && !p2) + return true; + + /* ... or they intersect. */ + return p1 & p2; } int microcode_sanity_check(void *mc, int print_err) @@ -132,7 +139,7 @@ int get_matching_sig(unsigned int csig, int cpf, void *mc) int ext_sigcount, i; struct extended_signature *ext_sig; - if (update_match_cpu(csig, cpf, mc_header->sig, mc_header->pf)) + if (cpu_signatures_match(csig, cpf, mc_header->sig, mc_header->pf)) return 1; /* Look for ext. headers: */ @@ -144,7 +151,7 @@ int get_matching_sig(unsigned int csig, int cpf, void *mc) ext_sig = (void *)ext_header + EXT_HEADER_SIZE; for (i = 0; i < ext_sigcount; i++) { - if (update_match_cpu(csig, cpf, ext_sig->sig, ext_sig->pf)) + if (cpu_signatures_match(csig, cpf, ext_sig->sig, ext_sig->pf)) return 1; ext_sig++; }