Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp561791imu; Mon, 5 Nov 2018 05:28:20 -0800 (PST) X-Google-Smtp-Source: AJdET5d+YND8+zohd7oLorvIQIVBiOoUwdvrPoA/jNVEOmU3MGvz+tdg/jyLeCtc1KCl0v4Wta16 X-Received: by 2002:a63:c341:: with SMTP id e1-v6mr20162157pgd.452.1541424500129; Mon, 05 Nov 2018 05:28:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541424500; cv=none; d=google.com; s=arc-20160816; b=kG71OlDX7zlONU00pnJZPPXs1la5WbA4gDh9jnYI4RVurqUp/wgRnlbFtpaEGWC4kW nNLLERP26j0wYKafLKuS69Kce38grR1D4pw1qBsiiyKJsQ4CxD4N/uR2jnxeYNl0cDCw oGvfyuHmSL5ro7HFeak55xLlTnnJeU887IGATHwQPc4V7hkq1RvwR+KGH5i1oxxeAh1j Hs/EB7GIsqhmEztendlsPUv0sWi7gcWfFzNL8hvuEkSuEI48V1pKgi5oVyjQbmQoK6Yv HKEd/4vJaHMtroaGlQObwZHNPmV7DQhuqDmoj4y8qh249KkKx6yRFKrxbMFiV3fAkVxW VRUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=TP4GuSuq0MX70btkrwDWh/MpS1pZp/fR2XgFGIOThEE=; b=TcI97boICBmfVZVHbVTL0VBtpAM/ARAyknx4ubZ9r9ofxE1wEODidT9D9+K/yg8i64 gAna0mbLpw3AALfRggFkAvUl49UwMVjrQ9V4WWhBf/lVieyd3h0pD889Tl5weolPw9FO Hhvt4DlE94cEMvCYmEmu+0g/oGLLNnSuMQ2P5R+QKbRLaX+ALFElu7Aq4fvK6aSr7+1K cTBPOEySSOpHKzIzsCocoIcuZQkF4/SfAhEh40mrxm/xfVn7Yrn+j4e1jyI73vZH6Ytq s+8yU8EIKixo6tO0o4lHjgEphkbGPblRJNAwq5BFLzcZKbLlQeCcnd1K0XyB28HjhLnE kxVA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u23-v6si43280767plk.47.2018.11.05.05.28.04; Mon, 05 Nov 2018 05:28:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729645AbeKEWqQ (ORCPT + 99 others); Mon, 5 Nov 2018 17:46:16 -0500 Received: from [110.188.70.11] ([110.188.70.11]:10618 "EHLO spam1.hygon.cn" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726723AbeKEWqQ (ORCPT ); Mon, 5 Nov 2018 17:46:16 -0500 Received: from spam1.hygon.cn (localhost [127.0.0.2] (may be forged)) by spam1.hygon.cn with ESMTP id wA5CtGBO096732 for ; Mon, 5 Nov 2018 20:55:16 +0800 (GMT-8) (envelope-from puwen@hygon.cn) Received: from MK-FE.hygon.cn ([172.23.18.61]) by spam1.hygon.cn with ESMTP id wA5CsJ4N096487; Mon, 5 Nov 2018 20:54:19 +0800 (GMT-8) (envelope-from puwen@hygon.cn) Received: from cncheex01.Hygon.cn ([172.23.18.10]) by MK-FE.hygon.cn with ESMTP id wA5CrnOe063640; Mon, 5 Nov 2018 20:53:49 +0800 (GMT-8) (envelope-from puwen@hygon.cn) Received: from pw-vbox.hygon.cn (172.23.18.44) by cncheex01.Hygon.cn (172.23.18.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1466.3; Mon, 5 Nov 2018 20:54:14 +0800 From: Pu Wen To: , , , , , CC: Pu Wen Subject: [PATCH] x86/cpu: Avoid endless loop to get the number of cache leaves Date: Mon, 5 Nov 2018 20:53:45 +0800 Message-ID: <1541422425-5855-1-git-send-email-puwen@hygon.cn> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [172.23.18.44] X-ClientProxiedBy: cncheex02.Hygon.cn (172.23.18.12) To cncheex01.Hygon.cn (172.23.18.10) X-MAIL: spam1.hygon.cn wA5CsJ4N096487 X-DNSRBL: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To get the number of cache leaves on AMD or Hygon platform, it should get the value of cpuid leaf 0x8000001d. But on certain broken platform such as a not fullly implemented virtual platform(Xen, for example), the value of the cpuid leaf will nerver be CTYPE_NULL, so the kernel will run into an endless loop. To fix this problem, add a new enum type CTYPE_MAX to limit the maximum cpuid accessing. Signed-off-by: Pu Wen --- arch/x86/kernel/cpu/cacheinfo.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/cpu/cacheinfo.c b/arch/x86/kernel/cpu/cacheinfo.c index dc1b934..7bd167f 100644 --- a/arch/x86/kernel/cpu/cacheinfo.c +++ b/arch/x86/kernel/cpu/cacheinfo.c @@ -121,7 +121,8 @@ enum _cache_type { CTYPE_NULL = 0, CTYPE_DATA = 1, CTYPE_INST = 2, - CTYPE_UNIFIED = 3 + CTYPE_UNIFIED = 3, + CTYPE_MAX = 4 }; union _cpuid4_leaf_eax { @@ -640,7 +641,7 @@ static int find_num_cache_leaves(struct cpuinfo_x86 *c) /* Do cpuid(op) loop to find out num_cache_leaves */ cpuid_count(op, i, &eax, &ebx, &ecx, &edx); cache_eax.full = eax; - } while (cache_eax.split.type != CTYPE_NULL); + } while (cache_eax.split.type != CTYPE_NULL && i != CTYPE_MAX); return i; } -- 2.7.4