From nobody Thu Nov 6 06:17:03 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1539371189476343.9219160942456; Fri, 12 Oct 2018 12:06:29 -0700 (PDT) Received: from localhost ([::1]:42309 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gB2lY-0003gx-EO for importer@patchew.org; Fri, 12 Oct 2018 15:06:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35838) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gB2ju-0002lX-H5 for qemu-devel@nongnu.org; Fri, 12 Oct 2018 15:04:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gB2jq-0003dP-Jo for qemu-devel@nongnu.org; Fri, 12 Oct 2018 15:04:46 -0400 Received: from out3-smtp.messagingengine.com ([66.111.4.27]:48237) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gB2jo-0003b9-CK for qemu-devel@nongnu.org; Fri, 12 Oct 2018 15:04:41 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id EC2B622165; Fri, 12 Oct 2018 15:04:36 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Fri, 12 Oct 2018 15:04:36 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 71191102EB; Fri, 12 Oct 2018 15:04:36 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; s=mesmtp; bh=KOJz8Nl7AiY8nGmM9ifnexwKMaMgcGf1/yNAxFCiJ+4=; b=FVrjevk2hFNS CpvYdUXxXc6dEriTHoLbV+KvoQTPMgLsqCJdqVnFFMyVqbmZP2wKmHvZPJgaHWzo pUZDh5F9JGObi1JAy0gnrB/5MiOHUKZkODJKNcT30hiqEh5eRC+wajAcTk3uOH7D czZkpVsF6oizMMjIWHK5J9GqRrdqOQQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=KOJz8Nl7AiY8nGmM9ifnexwKMaMgcGf1/yNAxFCiJ +4=; b=IHU9+uhomzW3L0Qb8z79DWlSHcLX8t35T/LR37U7DzOleLjDH5xh6/YMR V6amYiWQTkJzWVVakThW4r5sXnRUu9s9s5ocdvrrFdo4Ivs79oedh6jhkvUi5PLx GdKW9iCEBfZwzrmALtGVZ9Mo251g2C6H62XRL1VeM0/hVWZW1lLe7wj1XNyjtpkC wWGAZOu6A/sjixosi9Uo4n/tJ5X2Df4wm6W3FF4yztHMffbwiOqCVHyjoTg8DZTf 0ScljY+14GeG1rCD8oiBI3wWhZFLnTXl66AW25EnzqY+7zmV5dM3l5w2l0LVbKi3 eK++c4SMaJ+jrbEwFYqBSG8E3PeWA== X-ME-Sender: X-ME-Proxy: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Fri, 12 Oct 2018 15:04:32 -0400 Message-Id: <20181012190434.19477-2-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181012190434.19477-1-cota@braap.org> References: <20181012190434.19477-1-cota@braap.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.27 Subject: [Qemu-devel] [PATCH v4 1/3] cputlb: do not evict empty entries to the vtlb 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: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Currently we evict an entry to the victim TLB when it doesn't match the current address. But it could be that there's no match because the current entry is empty (i.e. all -1's, for instance via tlb_flush). Do not evict the entry to the vtlb in that case. This change will help us keep track of the TLB's use rate, which we'll use to implement a policy for dynamic TLB sizing. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Richard Henderson Signed-off-by: Emilio G. Cota --- include/exec/cpu-all.h | 9 +++++++++ accel/tcg/cputlb.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 117d2fbbca..e21140049b 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -362,6 +362,15 @@ static inline bool tlb_hit(target_ulong tlb_addr, targ= et_ulong addr) return tlb_hit_page(tlb_addr, addr & TARGET_PAGE_MASK); } =20 +/** + * tlb_entry_is_empty - return true if the entry is not in use + * @te: pointer to CPUTLBEntry + */ +static inline bool tlb_entry_is_empty(const CPUTLBEntry *te) +{ + return te->addr_read =3D=3D -1 && te->addr_write =3D=3D -1 && te->addr= _code =3D=3D -1; +} + void dump_exec_info(FILE *f, fprintf_function cpu_fprintf); void dump_opcount_info(FILE *f, fprintf_function cpu_fprintf); #endif /* !CONFIG_USER_ONLY */ diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index a6b716eb79..6ee18308d5 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -678,7 +678,7 @@ void tlb_set_page_with_attrs(CPUState *cpu, target_ulon= g vaddr, * Only evict the old entry to the victim tlb if it's for a * different page; otherwise just overwrite the stale data. */ - if (!tlb_hit_page_anyprot(te, vaddr_page)) { + if (!tlb_hit_page_anyprot(te, vaddr_page) && !tlb_entry_is_empty(te)) { unsigned vidx =3D env->vtlb_index++ % CPU_VTLB_SIZE; CPUTLBEntry *tv =3D &env->tlb_v_table[mmu_idx][vidx]; =20 --=20 2.17.1