From patchwork Thu Oct 10 11:33:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 175770 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp2178163ill; Thu, 10 Oct 2019 04:56:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqyrutd/4yQcGKJ3V90hUkFCIEzC/krngX5daA52ywK4B9XZXnvk0Df7ZmuCSPM7BJuH6/X8 X-Received: by 2002:a50:f198:: with SMTP id x24mr8112856edl.238.1570708606036; Thu, 10 Oct 2019 04:56:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570708606; cv=none; d=google.com; s=arc-20160816; b=O7GkAhbHpLhgxFf55H/Y4rzk+69UYg5eltiSU/lTbwv1C1sMFqt7qTrDDN/SHUPbQ1 kYQiS6uU1A7goSvzutq8y0ygDeSVqCt7hQOkTCPlYB4TGxhZlPPhvfsB3zuaDhCj+9p8 IwpRlRY1HY3Z9GKnSBCdlmBjW2DLrn/8v0SR544STVHS3pGJ6Pgt7jtAxBw+AKUu2gjk oqbKsiLvjztMiKEfJJD8aZsA/AAxbOiOnUbaLK4MVjB39L6JgVKuWYkGGvt7kTVD/y0S wJtmkDmrw96v/sz/Q2zXql2OPsQdHzXDOBONG9Y5NTZ8KaCTvBxE4ZiCQBrJ5q8NIJ1K XiKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from; bh=7Ivwxu8/t4YfCpLSLM8L9tizkTBczTRQPDbFGKSL1H8=; b=Oj5Ky32Ic5sNdHT4mHwzrqWtNUAshA1RHU+kXuljFmdu5I16b9AUg9AR04ziKRM3zx xxGZ/p6mbqun5VAPZREON0dWbkDJZGfr4B6YbkFcPzuEfenkjbWSOiKB6DoJqXyRfTm5 1Ml3xmF7VhHD9PeLJlsmYs4Lc1f/3aAX+kNn33P6sAsdMyIqiymqhQzdNUhFREYBx9RM 1/o++FaN93OzEtPYaNiE5wUwOzW0Gn8Mq6J1n6Rn1FsETPT8jb9bRoYO0K5LYi1oaj5j V8W58Tj53UbkSXiSiMoJtBCPHnFcPCptxMkwa6Mgr3PF5hhBBf+94S+e0Sin1nyadlhR rJQA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id s19si3025924ejd.277.2019.10.10.04.56.45 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 10 Oct 2019 04:56:46 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from localhost ([::1]:36802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iIX3k-0003zJ-GW for patch@linaro.org; Thu, 10 Oct 2019 07:56:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50694) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iIWkO-0006RZ-M4 for qemu-devel@nongnu.org; Thu, 10 Oct 2019 07:36:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iIWkN-0006aU-EB for qemu-devel@nongnu.org; Thu, 10 Oct 2019 07:36:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:6238) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iIWkN-0006aN-8t; Thu, 10 Oct 2019 07:36:43 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 82D8189AC2; Thu, 10 Oct 2019 11:36:42 +0000 (UTC) Received: from t460s.redhat.com (ovpn-117-138.ams2.redhat.com [10.36.117.138]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4BB515C22C; Thu, 10 Oct 2019 11:36:32 +0000 (UTC) From: David Hildenbrand To: Peter Maydell , qemu-devel@nongnu.org Subject: [PULL 25/31] target/s390x: Rely on unwinding in s390_cpu_tlb_fill Date: Thu, 10 Oct 2019 13:33:50 +0200 Message-Id: <20191010113356.5017-26-david@redhat.com> In-Reply-To: <20191010113356.5017-1-david@redhat.com> References: <20191010113356.5017-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 10 Oct 2019 11:36:42 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-s390x@nongnu.org, Cornelia Huck , Richard Henderson , Thomas Huth , David Hildenbrand Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson We currently set ilen to AUTO, then overwrite that during unwinding, then overwrite that for the code access case. This can be simplified to setting ilen to our arbitrary value for the (undefined) code access case, then rely on unwinding to overwrite that with the correct value for the data access case. Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson Message-Id: <20191001171614.8405-14-richard.henderson@linaro.org> Signed-off-by: David Hildenbrand --- target/s390x/excp_helper.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) -- 2.21.0 diff --git a/target/s390x/excp_helper.c b/target/s390x/excp_helper.c index 98a1ee8317..8ce992e639 100644 --- a/target/s390x/excp_helper.c +++ b/target/s390x/excp_helper.c @@ -96,7 +96,7 @@ bool s390_cpu_tlb_fill(CPUState *cs, vaddr address, int size, { S390CPU *cpu = S390_CPU(cs); - trigger_pgm_exception(&cpu->env, PGM_ADDRESSING, ILEN_AUTO); + trigger_pgm_exception(&cpu->env, PGM_ADDRESSING, ILEN_UNWIND); /* On real machines this value is dropped into LowMem. Since this is userland, simply put this someplace that cpu_loop can find it. */ cpu->env.__excp_addr = address; @@ -179,24 +179,15 @@ bool s390_cpu_tlb_fill(CPUState *cs, vaddr address, int size, stq_phys(env_cpu(env)->as, env->psa + offsetof(LowCore, trans_exc_code), tec); } - trigger_pgm_exception(env, excp, ILEN_AUTO); - cpu_restore_state(cs, retaddr, true); /* - * The ILC value for code accesses is undefined. The important - * thing here is to *not* leave env->int_pgm_ilen set to ILEN_AUTO, - * which would cause do_program_interrupt to attempt to read from - * env->psw.addr again. C.f. the condition in trigger_page_fault, - * but is not universally applied. - * - * ??? If we remove ILEN_AUTO, by moving the computation of ILEN - * into cpu_restore_state, then we may remove this entirely. + * For data accesses, ILEN will be filled in from the unwind info, + * within cpu_loop_exit_restore. For code accesses, retaddr == 0, + * and so unwinding will not occur. However, ILEN is also undefined + * for that case -- we choose to set ILEN = 2. */ - if (access_type == MMU_INST_FETCH) { - env->int_pgm_ilen = 2; - } - - cpu_loop_exit(cs); + trigger_pgm_exception(env, excp, 2); + cpu_loop_exit_restore(cs, retaddr); } static void do_program_interrupt(CPUS390XState *env)