From patchwork Fri Aug 29 14:37:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 36302 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-vc0-f199.google.com (mail-vc0-f199.google.com [209.85.220.199]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 3BEF42054D for ; Fri, 29 Aug 2014 14:46:35 +0000 (UTC) Received: by mail-vc0-f199.google.com with SMTP id id10sf7259155vcb.6 for ; Fri, 29 Aug 2014 07:46:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:date :message-id:in-reply-to:references:subject:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :errors-to:sender:x-original-sender :x-original-authentication-results:mailing-list; bh=dG0Z2276c9x3qP/kbeINYiXgjcOOJ+Vjp0XPM9A+umQ=; b=ZZIEoVzN1I326eHHrcisr8IMmyn9lxSzEWR70mWX6SObdEC3C1jtYJYN/+luQ3qUcL W3t+1E+I3GJfFqBwqTCrsHR3Sn/i2nBAHsswlT5UfBpPO1/z6V8vW+9pbTsBxov0WpjU txzTa93F+KsXfsVmeOgy3qamiHXW/nwB1JJZQ8tQJBiq7rgiAAqzSb/7okGNQvdv1fti Dz7V/3NBoBirrPvDvHuZyRKax4r3xbHtGmQxetXuZtUIJUKUszrJgRRh8GaLqnyG7LfB NRFY8eWVSNRRvz/57RB45OAkFM9vB3emlEEn4SqmMBi/gAZ6JODLWV1a9JZzB4AFtXP+ xI7A== X-Gm-Message-State: ALoCoQkQe1SV5eT8UbCAExr/iJJV/avTnOKY7Kb0DIUm7r1FTt19tcXS0RBFujUo/DWaERV8Un6w X-Received: by 10.224.37.6 with SMTP id v6mr6019251qad.9.1409323595036; Fri, 29 Aug 2014 07:46:35 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.22.229 with SMTP id 92ls839539qgn.98.gmail; Fri, 29 Aug 2014 07:46:34 -0700 (PDT) X-Received: by 10.52.248.232 with SMTP id yp8mr243283vdc.83.1409323594916; Fri, 29 Aug 2014 07:46:34 -0700 (PDT) Received: from mail-vc0-f181.google.com (mail-vc0-f181.google.com [209.85.220.181]) by mx.google.com with ESMTPS id x4si232905vcm.78.2014.08.29.07.46.34 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 29 Aug 2014 07:46:34 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.181 as permitted sender) client-ip=209.85.220.181; Received: by mail-vc0-f181.google.com with SMTP id ij19so2551928vcb.40 for ; Fri, 29 Aug 2014 07:46:34 -0700 (PDT) X-Received: by 10.220.187.134 with SMTP id cw6mr297374vcb.71.1409323594815; Fri, 29 Aug 2014 07:46:34 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.45.67 with SMTP id uj3csp27943vcb; Fri, 29 Aug 2014 07:46:34 -0700 (PDT) X-Received: by 10.236.43.203 with SMTP id l51mr1759270yhb.155.1409323593735; Fri, 29 Aug 2014 07:46:33 -0700 (PDT) Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id t89si355640qga.63.2014.08.29.07.46.33 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Fri, 29 Aug 2014 07:46:33 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Received: from localhost ([::1]:42411 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XNNRh-0004c7-52 for patch@linaro.org; Fri, 29 Aug 2014 10:46:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49818) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XNNJ5-00077b-B3 for qemu-devel@nongnu.org; Fri, 29 Aug 2014 10:37:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XNNJ0-00087Q-9g for qemu-devel@nongnu.org; Fri, 29 Aug 2014 10:37:39 -0400 Received: from mnementh.archaic.org.uk ([81.2.115.146]:46762) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XNNJ0-000805-3j for qemu-devel@nongnu.org; Fri, 29 Aug 2014 10:37:34 -0400 Received: from pm215 by mnementh.archaic.org.uk with local (Exim 4.80) (envelope-from ) id 1XNNIv-00051A-3J for qemu-devel@nongnu.org; Fri, 29 Aug 2014 15:37:29 +0100 From: Peter Maydell To: qemu-devel@nongnu.org Date: Fri, 29 Aug 2014 15:37:14 +0100 Message-Id: <1409323049-19255-3-git-send-email-peter.maydell@linaro.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1409323049-19255-1-git-send-email-peter.maydell@linaro.org> References: <1409323049-19255-1-git-send-email-peter.maydell@linaro.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 81.2.115.146 Subject: [Qemu-devel] [PULL 02/16] target-arm: Fix regression that disabled VFP for ARMv5 CPUs X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: peter.maydell@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.181 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Commit 2c7ffc414 added support for honouring the CPACR coprocessor access control register bits which may disable access to VFP and Neon instructions. However it failed to account for the fact that the CPACR is only present starting from the ARMv6 architecture version, so it accidentally disabled VFP completely for ARMv5 CPUs like the ARM926. Linux would detect this as "no VFP present" and probably fall back to its own emulation, but other guest OSes might crash or misbehave. This fixes bug LP:1359930. Reported-by: Jakub Jermar Signed-off-by: Peter Maydell Message-id: 1408714940-7192-1-git-send-email-peter.maydell@linaro.org Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell --- target-arm/cpu.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/target-arm/cpu.h b/target-arm/cpu.h index 8098b8d..659b104 100644 --- a/target-arm/cpu.h +++ b/target-arm/cpu.h @@ -1255,7 +1255,14 @@ static inline bool arm_singlestep_active(CPUARMState *env) static inline void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc, target_ulong *cs_base, int *flags) { - int fpen = extract32(env->cp15.c1_coproc, 20, 2); + int fpen; + + if (arm_feature(env, ARM_FEATURE_V6)) { + fpen = extract32(env->cp15.c1_coproc, 20, 2); + } else { + /* CPACR doesn't exist before v6, so VFP is always accessible */ + fpen = 3; + } if (is_a64(env)) { *pc = env->pc;