From patchwork Wed Jan 18 22:38:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artyom Tarasenko X-Patchwork-Id: 716896 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3v3j9G1VXZz9sCg for ; Thu, 19 Jan 2017 10:00:02 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TV1yjiCJ"; dkim-atps=neutral Received: from localhost ([::1]:44880 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTzCx-00073I-Dr for incoming@patchwork.ozlabs.org; Wed, 18 Jan 2017 17:59:59 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37255) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTytW-0006ud-5G for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cTytR-0002yJ-E3 for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:54 -0500 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:34342) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cTytR-0002xt-7r for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:49 -0500 Received: by mail-wm0-x242.google.com with SMTP id c85so7558871wmi.1 for ; Wed, 18 Jan 2017 14:39:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tuBCuoXx2vZis0pJssjqQHOmRywxXrb3kHZpSoLUp+M=; b=TV1yjiCJf0cKNJCVcZnbVZ+rcdmbEZ40uQCawry9TVlilmi9Yr+d0yKDkirptO2Zqf XqksQu8glzg520O0dZ6lcfrSRdrdwMtDXKItMnLHHWBuambHz2QaNvfsptGWHSfSH9vq zx4qwvXAiC+GHPoS3Q/Q0mOJzCwbgQfFltYLiftJMviBZ3Nu9oBHwRojK1AfSAIWUzOR HhS+awiRdYu0fcljEdQ/wkaVKOBVDzc5SDhhmcYAXFty8oSBDNK7bbR9QWEeOSpbBBQs WGhSDZ/YULYm9QQaBbqiCG0xs6t/zYQpKPZepeLXnml2V9aq8kZSF4qGzfW5+G2kGaeS Mf/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tuBCuoXx2vZis0pJssjqQHOmRywxXrb3kHZpSoLUp+M=; b=ugzuxoMXsWgLX3Zwj7XPdij/NzFJFEvUxVkHJ3UsnqKzgb6y63OO2NHbHFiFLY9ktp 0B9Rw+c4KZsuBsUfXF5mM+KdmgGPKVCweUgfWVeuPYT/sfQsLErV2AA1+kr4UmgXMzvI g/CCOYn6oNxAwZHMWmx4+fLescYH/WVf9pCNM0/2F+7bRz+MtvbkiADq80fdnXWUGna7 812Jbex0XABtOjtYERe/X6bUdVYS2FOZKRu5YLpkuNmCE5fLnKdN/hgG5kg8PKwVyxE1 t9QyGJcBtbf8slYBIMNVsVn6QhsIr7j9U9Nn2CT3pr8pq2w9EU4KLQCpej+Gi7KLDCiC 5WFA== X-Gm-Message-State: AIkVDXJy6V6e1BCYDRcDNOX1cxp+b3corG6KZJoAeCyrwhoeJpHs5mvZxiW4w1W+YKvmCg== X-Received: by 10.28.203.75 with SMTP id b72mr5074735wmg.110.1484779188212; Wed, 18 Jan 2017 14:39:48 -0800 (PST) Received: from localhost (x4e33e2b8.dyn.telefonica.de. [78.51.226.184]) by smtp.gmail.com with ESMTPSA id g197sm48489844wmd.15.2017.01.18.14.39.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Jan 2017 14:39:47 -0800 (PST) From: Artyom Tarasenko To: peter.maydell@linaro.org Date: Wed, 18 Jan 2017 23:38:36 +0100 Message-Id: <1484779123-18968-24-git-send-email-atar4qemu@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1484779123-18968-1-git-send-email-atar4qemu@gmail.com> References: <1484779123-18968-1-git-send-email-atar4qemu@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::242 Subject: [Qemu-devel] [PULL 23/30] target-sparc: implement auto-demapping for UA2005 CPUs X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.cave-ayland@ilande.co.uk, qemu-devel@nongnu.org, Artyom Tarasenko , rth@twiddle.net Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Artyom Tarasenko --- target/sparc/ldst_helper.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/target/sparc/ldst_helper.c b/target/sparc/ldst_helper.c index d4eee33..4f55388 100644 --- a/target/sparc/ldst_helper.c +++ b/target/sparc/ldst_helper.c @@ -210,6 +210,28 @@ static void replace_tlb_1bit_lru(SparcTLBEntry *tlb, { unsigned int i, replace_used; + if (cpu_has_hypervisor(env1)) { + uint64_t new_vaddr = tlb_tag & ~0x1fffULL; + uint64_t new_size = 8192ULL << 3 * TTE_PGSIZE(tlb_tte); + uint32_t new_ctx = tlb_tag & 0x1fffU; + for (i = 0; i < 64; i++) { + uint32_t ctx = tlb[i].tag & 0x1fffU; + /* check if new mapping overlaps an existing one */ + if (new_ctx == ctx) { + uint64_t vaddr = tlb[i].tag & ~0x1fffULL; + uint64_t size = 8192ULL << 3 * TTE_PGSIZE(tlb[i].tte); + if (new_vaddr == vaddr + || (new_vaddr < vaddr + size + && vaddr < new_vaddr + new_size)) { + DPRINTF_MMU("auto demap entry [%d] %lx->%lx\n", i, vaddr, + new_vaddr); + replace_tlb_entry(&tlb[i], tlb_tag, tlb_tte, env1); + return; + } + } + + } + } /* Try replacing invalid entry */ for (i = 0; i < 64; i++) { if (!TTE_IS_VALID(tlb[i].tte)) {