From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762578; cv=none; d=zohomail.com; s=zohoarc; b=daWhRdNgl6l/CJ73y53IJQlHp//B0EpM2U+SFehIsOUR4+eueRdeUHCUsDnsIUEbOHr5r9NaaNyX3vAfFbE2UZDN5n6uq6QcS2qqM9DOnj3lP8cjT2ZiaQYUHI99hBfyPqpZ8eBjjMtzthRjUafw7D/TrFWe2PJP4x8HbFpGfLg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762578; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=unWCB+7tFDxvEbrE324xq/PWVQz1J3pJxb0QQI5akQE=; b=A7NfuW0Cymzo8uCbNKQFlSHA5DkaUCV+jzP6JdgdrKIVv/txrzcjyg2kooSN7baRJFOFqFqMEgiX8M0dPpSYDtfGmq20203vrJ5U5T1S11ZzxMhc9a5K+5mpsnZJrliiPxOcdIeUDLN8rW2692n4bsufBH9w/WX5GrMaeBp99hk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762578559378.4962872976696; Mon, 13 Apr 2020 00:22:58 -0700 (PDT) Received: from localhost ([::1]:41140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtQn-0003Ey-AJ for importer@patchew.org; Mon, 13 Apr 2020 03:22:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36955) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtQ2-0002Nq-I9 for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtQ1-00062u-8l for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:10 -0400 Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042]:51976) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtQ1-00062m-3T for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:09 -0400 Received: by mail-pj1-x1042.google.com with SMTP id e16so3211731pjp.1 for ; Mon, 13 Apr 2020 00:22:09 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.22.05 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:22:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=unWCB+7tFDxvEbrE324xq/PWVQz1J3pJxb0QQI5akQE=; b=eKTR6opBGDmh0WFyXbesHgyM2YLRiQFBHC5uiZl88n0oTzSeL/Tw+NnUNWcgwwMV14 qKkmx5brwvB6qb6lT84AzMa8YjqZO8gDWvwkYx17LXozZOZwUDRvs5yxrWL2p4Ig/s3u X50Y/qv8M0lU4uKxUALpT/12ToTX+eSaLTsgLbN1b9tH/QQvi0RDupAzExbDtqEhZX3n slW9tOMpwAZENfYGaOaU6jubumcyoWCclOA95qQU9NBXVvCMZ9AOoKgbLhNYfYfW518z RfbMLqTBmwnA6IFH4TSOhP9Nyd0OH0d67QITUHNXc2UrZCBwdv+PcS3/U2DsWN3XhRjG 0/Kw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=unWCB+7tFDxvEbrE324xq/PWVQz1J3pJxb0QQI5akQE=; b=FxSnWr1w5eeq7mzm3ShHxXrNr8L4b0+J/lqaPFer4e+g9+2DQqeuPHwzyBYhiHimwm NBg+MY0oTsshbf6y/EMGOJNk0sv0cZOP6hfqzz3jlGFdm6v/Jw0l8OJ8gPVA55qcQ6Ve vwMYT5SabiJdUGAuW+8HrnqB1aH3bpY0sI4CJbox4f/SqGDuwGJXZ+e61/ZWb0DycNIH JRq3bYXDbMWCyp73VD/2aZUc47BtdxMVHdCvFQY7uRqrnFo0DMOzcn7Q3l3+8mhu5oQ5 2QKVcdHnJlNgp6MKoxr++LUe8ISI7DevSnJC/8E3aL4OeknGQAQy69zCSds7batzl5Jy VI9A== X-Gm-Message-State: AGi0PuZoXzL7BSCa383E3YWpHPwJ96JWjMLcdroEaMh7yaLWqSWBSONc bRsB3KaSP7BxgxejMwyzbQg= X-Google-Smtp-Source: APiQypKG3jjD0bEk/1UaizxYUdFYFTcbzT0+h4p2hEYYr1KO3YnMiBfTuV+NpLNifY8hBLinUgTaew== X-Received: by 2002:a17:90a:4809:: with SMTP id a9mr20297730pjh.73.1586762528070; Mon, 13 Apr 2020 00:22:08 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 01/15] mips: define pud_index() regardless of page table folding Date: Mon, 13 Apr 2020 15:30:10 +0800 Message-Id: <1586763024-12197-2-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::1042 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen , Mike Rapoport Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Mike Rapoport Commit 31168f033e37 ("mips: drop __pXd_offset() macros that duplicate pXd_index() ones") is correct that pud_index() & __pud_offset() are the same when pud_index() is actually provided, however it does not take into account the __PAGETABLE_PUD_FOLDED case. This has broken MIPS KVM compilation because it relied on availability of pud_index(). Define pud_index() regardless of page table folded. It will evaluate to actual index for 4-level pagetables and to 0 for folded PUD level. Link: https://lore.kernel.org/lkml/20200331154749.5457-1-pbonzini@redhat.com Tested-by: Bibo Mao Tested-by: Huacai Chen Reported-by: Paolo Bonzini Signed-off-by: Mike Rapoport [Huacai: Add Tested-by and take this patch into my series, because my series can't build an available kernel if without this patch.] Signed-off-by: Huacai Chen --- arch/mips/include/asm/pgtable-64.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgt= able-64.h index f92716c..ee5dc0c 100644 --- a/arch/mips/include/asm/pgtable-64.h +++ b/arch/mips/include/asm/pgtable-64.h @@ -172,6 +172,8 @@ =20 extern pte_t invalid_pte_table[PTRS_PER_PTE]; =20 +#define pud_index(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD - 1)) + #ifndef __PAGETABLE_PUD_FOLDED /* * For 4-level pagetables we defines these ourselves, for 3-level the @@ -210,8 +212,6 @@ static inline void p4d_clear(p4d_t *p4dp) p4d_val(*p4dp) =3D (unsigned long)invalid_pud_table; } =20 -#define pud_index(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD - 1)) - static inline unsigned long p4d_page_vaddr(p4d_t p4d) { return p4d_val(p4d); --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762667; cv=none; d=zohomail.com; s=zohoarc; b=a63kgoMAfs48jRLIB4A1fQRd+1hVMa/oRQ18tw1syOQSX8FGoZfKCSuHbvsBUBCYbkiTfj1XldhNt0edNSO69QiZuzo1nM+wgNflYg4bEcQrTpySDWykuWiOEEhHP2Qfof4knjDAf/xzhkcsoyFC1n+oE2VzF8fM4FDw7Y3QnVM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762667; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=IYw9KM308fvuCNV456QoScKTZAovGHwS9ZllmosmZHA=; b=jM0+gsFPhYpm5f52/ePNe8NO84s7OPG0GNdxVAa7J57xFuWPAwF1m0UQNNyJFljhF7ErCTC4KVTvxb4yaAravB+8Nn8uxriP7j6pf17DmOfYu/u6tiCDekA3jYreSLb07gtmj0kOT9g7LFuinNhbTHBJ6Qtg0xKuunI02avmFDA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158676266735079.53226207917317; Mon, 13 Apr 2020 00:24:27 -0700 (PDT) Received: from localhost ([::1]:41158 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtSD-0005Sh-LS for importer@patchew.org; Mon, 13 Apr 2020 03:24:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36974) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtQK-0002q4-56 for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtQJ-0006KR-3A for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:28 -0400 Received: from mail-pl1-x644.google.com ([2607:f8b0:4864:20::644]:32971) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtQI-0006IT-UC for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:27 -0400 Received: by mail-pl1-x644.google.com with SMTP id ay1so3122346plb.0 for ; Mon, 13 Apr 2020 00:22:26 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.22.23 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:22:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=IYw9KM308fvuCNV456QoScKTZAovGHwS9ZllmosmZHA=; b=oGsjS1xbf9xogVsLJWnou0X56088c+jXKkPfT4EJU21wV61xCDLOKDxpfmfG3pbREz 8RQpXNeO/EqiBDGVeX6h16ORRBAT4GMuyFDC1fiPSjnwWXiceuU2GkdRxDubsjebobmS wdS/aovMHceQneB3xpCwn4W03T2EFMhwJdatsQgjPMvzabeRU3KMqOvbM/uPSCVUmMQZ Y2VqTQKgDxDT6DXqWega5bMoOk65CMSUjR63sJ+QZjjf8AbyyIgnO00cNo/wjESjTQBz 9rZnV43N3RDME72XFmvzcsoVa3MUW1LuYiBW4T+krx3BSkwHC0rX+Y48YBgSGkDTyCFh m9OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=IYw9KM308fvuCNV456QoScKTZAovGHwS9ZllmosmZHA=; b=Kvsky2/FF3urnQEwVxSKr5Veq8dDmX2CioB3iFlocfBdz5pPtfaXRWsVm2Kc13tUXw kKdS6L98qVFUgVdeiZsldwQg2to5AUD0iaUukXeDBUfeRdbTxM7imf7Fei81X70eGVng EFK3wT9VkvjPTD3xNyEocQs48Ocn/3WJgJGGBZyQibAOWuxlQLzS7SIALeN/LCZbSE3C lmFFXcjUP2V351uoIOscFdDWGDIrDruADzz5yAcFDqztSdg1PFENRP6reFuVcrytsUqA 6WAnZoZNsyfw9Lc1OSPGmcOwuZs0FTz7YbQjd0jKf8T5B8dHYUsVhWoYSRcH9PkbSZ0F UqYg== X-Gm-Message-State: AGi0PuZWgJKs0gaIEi9PDB8yaDkVESt5vwIHFHSYlepnLWYCgC41LLKz 9fIJhpCBUcNC0a86Gb6h7C2I+GevO7k= X-Google-Smtp-Source: APiQypLratNJjdldNhRTz0xpzWmi6lNCP7lJRob5L/BRLECvfri/in1gAYGd1LdcJFUKuecUGIfAQw== X-Received: by 2002:a17:90a:c295:: with SMTP id f21mr12982259pjt.176.1586762546007; Mon, 13 Apr 2020 00:22:26 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 02/15] KVM: MIPS: Define KVM_ENTRYHI_ASID to cpu_asid_mask(&boot_cpu_data) Date: Mon, 13 Apr 2020 15:30:11 +0800 Message-Id: <1586763024-12197-3-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::644 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, stable@vger.kernel.org, Fuxin Zhang , Huacai Chen , Xing Li Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Xing Li The code in decode_config4() of arch/mips/kernel/cpu-probe.c asid_mask =3D MIPS_ENTRYHI_ASID; if (config4 & MIPS_CONF4_AE) asid_mask |=3D MIPS_ENTRYHI_ASIDX; set_cpu_asid_mask(c, asid_mask); set asid_mask to cpuinfo->asid_mask. So in order to support variable ASID_MASK, KVM_ENTRYHI_ASID should also be changed to cpu_asid_mask(&boot_cpu_data). Cc: stable@vger.kernel.org Signed-off-by: Xing Li [Huacai: Change current_cpu_data to boot_cpu_data for optimization] Signed-off-by: Huacai Chen --- arch/mips/include/asm/kvm_host.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_h= ost.h index 41204a4..5794584 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h @@ -275,7 +275,7 @@ enum emulation_result { #define MIPS3_PG_FRAME 0x3fffffc0 =20 #define VPN2_MASK 0xffffe000 -#define KVM_ENTRYHI_ASID MIPS_ENTRYHI_ASID +#define KVM_ENTRYHI_ASID cpu_asid_mask(&boot_cpu_data) #define TLB_IS_GLOBAL(x) ((x).tlb_lo[0] & (x).tlb_lo[1] & ENTRYLO_G) #define TLB_VPN2(x) ((x).tlb_hi & VPN2_MASK) #define TLB_ASID(x) ((x).tlb_hi & KVM_ENTRYHI_ASID) --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762761; cv=none; d=zohomail.com; s=zohoarc; b=STVFU1eHbDPO5o80XuaAYufCyqbWtnfFw2BUYcLkDWK3OFBrmQ8mFbw5rrEznPZElEciXE7JeoFFU5cpxjGXBLXOuMr5lDQfsanwWVg7xL3C9BcBLcAfUlN3cQvfcJxaZqJJflDgO5g3rswGac16grmfg5KZKqn7+uT6kKIvWQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762761; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=TZhgT5gzN/QhZfE1otKiPDej1lzfZYbOzbi8m9YCzNk=; b=EgIVWg3y+REwlH8AXIG/cJitcALhKEBgUyZaSs4q5N1cH0WdDhZ2Ig4/qKR9BReaEegyAU+SGqpLWUFyPGXk3kN+oFAQvGvvUPF90uTDZkNQts6kF9+Wjzo3MBdoVmGruHmN/D3rhbCobCFQ1c5PdHR3BM5EKvNwpbP77sfBVHs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762761807362.6350948777475; Mon, 13 Apr 2020 00:26:01 -0700 (PDT) Received: from localhost ([::1]:41176 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtTk-00009e-KB for importer@patchew.org; Mon, 13 Apr 2020 03:26:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37020) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtQg-0003Rx-JL for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtQf-0006gh-LX for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:50 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:41776) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtQf-0006gW-GK for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:22:49 -0400 Received: by mail-pl1-x641.google.com with SMTP id d24so3104613pll.8 for ; Mon, 13 Apr 2020 00:22:49 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.22.45 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:22:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=TZhgT5gzN/QhZfE1otKiPDej1lzfZYbOzbi8m9YCzNk=; b=msz8u4rnm9qloVBXtsffUI8FKe2tlKM+2hEuS45XjwHEz+dCvQHSQ7PdkCU8J9piN1 3JvsDMJor8tnwIMkln5CN+Pa7AlPwBEjUTpBVIWCna1HZjItxG7ACje3wFcktp5e8tkD Kk0eY6ZdyNJ3lfzJ0c+r5Ccm4+ZO3xfZ3QTxoph9DQScR54Vkge4xoT10Fe2RDG+P0VB 9Rv74/DzrAge9B1F/XCGuTOEmDOA3xb1+ktX3RK1VHaz0A0tjixOBqApknXcYiST4eGI CtT6oZS+UsGeR6471krMaDkC7MIFPuSCOX+ElkDp5r1/0cjb1yAvCfvBMdHPQ9Q6x4ta NG3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=TZhgT5gzN/QhZfE1otKiPDej1lzfZYbOzbi8m9YCzNk=; b=NROhwCxxnPy88/T7JeF6n5YcPf5AegBreBA120HNe3YCQ2QSPrr6/M8O5LbtW7yoJA 1ynaluh2k446l46xtFVhmZ69nLY3A7GjceilHSwuA/36Gc+1Quj4VFPry/dkYNeRHkLn HUFs1OixTOSlq5yciWHvGHGhbsKyF7Ec4a4+796tmRX/tJHCuBpiX+PjogzsnXnjGmRB 93br787uhoC8d3EOOJLbjKTFHv8RRNkBjisFcxKnbUVl7+HR18HqxFzarfIyt3zHcd13 hjEZlFU6mgew+ik8KjjfSnB3CCQUokcTA8qMeN2V/iIHFkVl6YbJQmUxLkJBlviTF8PR BgUA== X-Gm-Message-State: AGi0PuZsSumfYlVIow5bU/FKCsiOvm/7VwWi5wOK0SC6RNHWKFI4Ioq8 CeFCeDPY6nP/HPjue/XMOH0= X-Google-Smtp-Source: APiQypI2Dw4REaEH3isPk9kUjxH01Os9b6g4OioUqeQskNSG8c/c8x97XaoId95X7kvG/IQrU79kDw== X-Received: by 2002:a17:90a:ee90:: with SMTP id i16mr3079047pjz.165.1586762568561; Mon, 13 Apr 2020 00:22:48 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 03/15] KVM: MIPS: Fix VPN2_MASK definition for variable cpu_vmbits Date: Mon, 13 Apr 2020 15:30:12 +0800 Message-Id: <1586763024-12197-4-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, stable@vger.kernel.org, Fuxin Zhang , Huacai Chen , Xing Li Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Xing Li If a CPU support more than 32bit vmbits (which is true for 64bit CPUs), VPN2_MASK set to fixed 0xffffe000 will lead to a wrong EntryHi in some functions such as _kvm_mips_host_tlb_inv(). The cpu_vmbits definition of 32bit CPU in cpu-features.h is 31, so we still use the old definition. Cc: stable@vger.kernel.org Signed-off-by: Xing Li [Huacai: Improve commit messages] Signed-off-by: Huacai Chen --- arch/mips/include/asm/kvm_host.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_h= ost.h index 5794584..7b47a32 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h @@ -274,7 +274,11 @@ enum emulation_result { #define MIPS3_PG_SHIFT 6 #define MIPS3_PG_FRAME 0x3fffffc0 =20 +#if defined(CONFIG_64BIT) +#define VPN2_MASK GENMASK(cpu_vmbits - 1, 13) +#else #define VPN2_MASK 0xffffe000 +#endif #define KVM_ENTRYHI_ASID cpu_asid_mask(&boot_cpu_data) #define TLB_IS_GLOBAL(x) ((x).tlb_lo[0] & (x).tlb_lo[1] & ENTRYLO_G) #define TLB_VPN2(x) ((x).tlb_hi & VPN2_MASK) --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762666; cv=none; d=zohomail.com; s=zohoarc; b=LvcpsQwqxwvOPnj31689AB4INep3mt6SNlcmXzRVs3yGX/yJDmpHGWNt5i1Tn2bAWjg12+nkFy0njwjbiahShh1pnM7RC4E29IVT3greX01eEP/2zKAIQc77JeMXhOTZaYZU1+gmRi+E+4oygNafVKRursd905n135CFnzxnDXM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762666; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=qhpq41BRu/RPPwD4eaCJ5cfb9DHBcGHPYRUi0Z0GRT4=; b=dK2qKKH5161RpoYJeWrUMp0PcMhjSO+SwyMd9BHDq/x19Tgkj/lO4xwehxLYzqvbRdWCqccMWNBWnQ2a7j+YByWn1ZOJAecvesH4MvLJzqBjsEFygQXY5RUReJXjdbJKtypMAlJUcdHojYxtmoqaeBTF6IqnkdlGO0rar76tuBg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762666120150.24490095330236; Mon, 13 Apr 2020 00:24:26 -0700 (PDT) Received: from localhost ([::1]:41156 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtSC-0005QR-UG for importer@patchew.org; Mon, 13 Apr 2020 03:24:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37093) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtR2-000430-H8 for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:23:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtR1-00072d-I4 for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:23:12 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:43069) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtR1-00070k-Cs for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:23:11 -0400 Received: by mail-pg1-x536.google.com with SMTP id x26so2928918pgc.10 for ; Mon, 13 Apr 2020 00:23:11 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.23.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:23:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=qhpq41BRu/RPPwD4eaCJ5cfb9DHBcGHPYRUi0Z0GRT4=; b=Pm3BaaYHprds2QFeII0r9egbTq6PKvjEZ4oGWq6qQF9MHfbSZOZ42IDzZkMcHh55A+ moc02dm11rgYAADl/KyOBMkZhgs3w0bnFOczVFoIvmTj6F8HIN1ulrRauQW5Rgo5NuId cXruvUf/VP0hNrJKVD2c53l6etSJ/THuMFWw6OAzl97dx6gQWKjOGJ5CKq9HOOfckpbv sPR1JXy3tWmtoL4udghPanl6w/nfyKA+k43Y769uyDrP2/Y+pGF5wucOFknJIetRoSPE 9AKK2KvEpo2cl4eZXGQrK9nOL0A6VnpDNJLZ3gNDdQSWbY++e/NP/xOvBAtzahq9328R HV+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=qhpq41BRu/RPPwD4eaCJ5cfb9DHBcGHPYRUi0Z0GRT4=; b=FontlRklqyGRBShb+jlQaYha7ND+Rn6esQIwmw7j6k7PBb/Ks7U3KWaH2b9F3JYIUR 61ViHRXaQU9bWXf5PlrqwcAVHD2fR8VA/A49LXXlsIXKXo2gKRFT+WST0SWQ2jaXrQI7 0XJU7m75iUAQygXdEyE56gidU/+4o8KvssjyNnPMK0WPownHU+rRdhIsUbU6g325t3kG q6DDDGZ1lUHhw3d4lfOmbVVX17FdSyHOuPNyWWZ0Akfp4OsTGVUWYVhtLTMsgmMCw4gC sgGbU6cAMl9dRiuqKUhlQ7DHcrOc6Mg29UevoLFrsu9HRT4ITBplRcYYQ4w/WhxGMp6K 1wgQ== X-Gm-Message-State: AGi0PubpMTnFhMmmwbge2qJfoSYXqbXsPUiMe4e6G4/Amo+CFnzzVP9V N3MnPgmk3N3eWZ9LOigOd1w= X-Google-Smtp-Source: APiQypJ2RWntWbbpBSM1g5kZmzP5ruORUti27kfstHoJP/pSw4ATCiAl2BtVdEXVJ1aCioNa49hX9Q== X-Received: by 2002:a62:164d:: with SMTP id 74mr1172550pfw.52.1586762590414; Mon, 13 Apr 2020 00:23:10 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 04/15] KVM: MIPS: Increase KVM_MAX_VCPUS and KVM_USER_MEM_SLOTS to 16 Date: Mon, 13 Apr 2020 15:30:13 +0800 Message-Id: <1586763024-12197-5-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::536 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Loongson-3 based machines can have as many as 16 CPUs, and so does memory slots, so increase KVM_MAX_VCPUS and KVM_USER_MEM_SLOTS to 16. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/include/asm/kvm_host.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_h= ost.h index 7b47a32..2258a2e 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h @@ -78,8 +78,8 @@ #define KVM_REG_MIPS_CP0_KSCRATCH6 MIPS_CP0_64(31, 7) =20 =20 -#define KVM_MAX_VCPUS 8 -#define KVM_USER_MEM_SLOTS 8 +#define KVM_MAX_VCPUS 16 +#define KVM_USER_MEM_SLOTS 16 /* memory slots that does not exposed to userspace */ #define KVM_PRIVATE_MEM_SLOTS 0 =20 --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762711; cv=none; d=zohomail.com; s=zohoarc; b=kD2TROFAIwdaqb7dEVXLWxWY+H8MGIqJLZPC9ymOSTaZWyGG5BwuiV+4v/c9bWp4Fz7mKh0LLRW24uDycoV2q2r5vGE9zPX9aHS9OWYKmTORDSqzS754rBfyAHQIIMZqcPM3UkBTR7l8agUJspWyDfKQsPgEkhJ+UNy+X282z+I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762711; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=UVCxTnXHR3JksW4kNoRPYShJz0VQm0+u2ggksb/zVto=; b=Bm92NbZivvbn1avFKgNYnXdDhL9wBDj8GbpfmKCZgWGGkpPsqhZVW4mreP+b9jdFzOsOcdsAKcf+FwazjPdZBUqq7Z9rHWV7MKSacZATifGDV57jk/TXVZLXVLpg64R2WRyu91hWxo6APLxfl7vg2eqM62zRQ68zLC8uynwMyPA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762711364511.0793347194567; Mon, 13 Apr 2020 00:25:11 -0700 (PDT) Received: from localhost ([::1]:41172 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtSw-0007Dr-3c for importer@patchew.org; Mon, 13 Apr 2020 03:25:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37146) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtRK-0004Vt-Nz for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:23:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtRI-0007LW-Fr for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:23:29 -0400 Received: from mail-pj1-x1041.google.com ([2607:f8b0:4864:20::1041]:39658) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtRI-0007Hq-1u for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:23:28 -0400 Received: by mail-pj1-x1041.google.com with SMTP id o1so2646430pjs.4 for ; Mon, 13 Apr 2020 00:23:27 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.23.24 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:23:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=UVCxTnXHR3JksW4kNoRPYShJz0VQm0+u2ggksb/zVto=; b=YHKwQhQ8uYspWZKAckCJrtm72ODPhNdButAAJ27i9ZCefOlJDY//J9k6k+KGCG9+LI cljDdKd298diKZYs+1YwB3L5xRmmtSEe/0R0Tp1qGy9M6exVw2H/pM0AR7NFXsnsCwsL KwMoI/aRYOokKR/ub5d6FFHj2R0A/J+Kb8Fb1ozpAvLvzUq2zcJbQSC+WGsJ3InM64ER udEBtFP2AoLf2+YyzXXveF9V88yw5U5iNUEcF6jxoDOH+cd0NIROOZWwjuT7nwJ1L7MN zRJY4HD+dc2adbLRErSmlzHa3Rw6gJgc1PreAdODMduMyTn2NCpp66X0scK2Q54ikpur Ljug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=UVCxTnXHR3JksW4kNoRPYShJz0VQm0+u2ggksb/zVto=; b=hxBrRjE35i7g5CP4ZTCWM3dq1ZQL2rv+6JqgaEWAQWYV+yqkdFLiC6jeDYtaOCB8di Tk5UWsZHL90VTLYeB2ZqO4YKHSxw5PA/NRyzCyspoQyjUBxNH1L7BoVBcYRge7l2he5O kZOVNZgbkqKrMMdB19hMHvrpEJ05tEozWkI/E4NrBdT4+KTmy6cxHUdnezPYE4bZYzEG AXrvMQfc6To5HwKavyM5TQh6OJ4hMT8wYMF3GuhB0veQTyXO1kLfiq0ywUvbBiHKj+cT K2+/IBGEmjGQsITjwMgoCjbW1jcZuHY54S9tP0Vqb8ZODiBssEy59+Sa1aFEttUPy6zV h/QA== X-Gm-Message-State: AGi0PuYTYn8lwL5k5s/loHm7SUKmmnqh5k1ZDlD9i0eJe2leFS7b9DLI N3DI0pCD0cpoTt279t5QVW8= X-Google-Smtp-Source: APiQypI1h6KmTeIWmHIup4Gdrnsdh7SfYOYPE5/YrcJrz5mweL0LD6nQ/PM51Xkrsv2zk27QQYZkow== X-Received: by 2002:a17:90a:fe18:: with SMTP id ck24mr21510792pjb.57.1586762607056; Mon, 13 Apr 2020 00:23:27 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 05/15] KVM: MIPS: Add EVENTFD support which is needed by VHOST Date: Mon, 13 Apr 2020 15:30:14 +0800 Message-Id: <1586763024-12197-6-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::1041 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add EVENTFD support for KVM/MIPS, which is needed by VHOST. Tested on Loongson-3 platform. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/kvm/Kconfig | 1 + arch/mips/kvm/Makefile | 2 +- arch/mips/kvm/trap_emul.c | 3 +++ arch/mips/kvm/vz.c | 3 +++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig index eac25ae..80b0464 100644 --- a/arch/mips/kvm/Kconfig +++ b/arch/mips/kvm/Kconfig @@ -22,6 +22,7 @@ config KVM select EXPORT_UASM select PREEMPT_NOTIFIERS select KVM_GENERIC_DIRTYLOG_READ_PROTECT + select HAVE_KVM_EVENTFD select HAVE_KVM_VCPU_ASYNC_IOCTL select KVM_MMIO select MMU_NOTIFIER diff --git a/arch/mips/kvm/Makefile b/arch/mips/kvm/Makefile index 01affc1..0a3cef6 100644 --- a/arch/mips/kvm/Makefile +++ b/arch/mips/kvm/Makefile @@ -2,7 +2,7 @@ # Makefile for KVM support for MIPS # =20 -common-objs-y =3D $(addprefix ../../../virt/kvm/, kvm_main.o coalesced_mmi= o.o) +common-objs-y =3D $(addprefix ../../../virt/kvm/, kvm_main.o coalesced_mmi= o.o eventfd.o) =20 EXTRA_CFLAGS +=3D -Ivirt/kvm -Iarch/mips/kvm =20 diff --git a/arch/mips/kvm/trap_emul.c b/arch/mips/kvm/trap_emul.c index 5a11e83..f464506b 100644 --- a/arch/mips/kvm/trap_emul.c +++ b/arch/mips/kvm/trap_emul.c @@ -529,6 +529,9 @@ static int kvm_trap_emul_check_extension(struct kvm *kv= m, long ext) case KVM_CAP_MIPS_TE: r =3D 1; break; + case KVM_CAP_IOEVENTFD: + r =3D 1; + break; default: r =3D 0; break; diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index dde2088..17932ab 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -2927,6 +2927,9 @@ static int kvm_vz_check_extension(struct kvm *kvm, lo= ng ext) r =3D 2; break; #endif + case KVM_CAP_IOEVENTFD: + r =3D 1; + break; default: r =3D 0; break; --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762764; cv=none; d=zohomail.com; s=zohoarc; b=CKZ+W3dFDJQL74CGu8Qe3k/yjzsn/PTAtmX83MI+Tdm89ksjbHKnQ2p8BTtOKOz8hSP8SHoumTGQ6MhgzCzphx4aRuhesF2gEH131brAkkzTiI+RxmbR7kP4bkENZBgvAlNptEpclbPBLL1qAR5awdz9eYrDdBIK+hOAT5EFCi4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762764; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=gyT3JhnhdKIwjs4eYU6gfUngC8pztPgbzgNj2PrTZlY=; b=PM0lBIJtoTgHm1rqXzxCOEKdyu3+pQWnW2HU7eh21sNeZdW9IZzNytW+DYoKWsZSR1vAUPncxPUi8IZlYugDdM1VSO0f2WpUaiKMMBIDb9MR8uEUxI88U3BBM1/yiHoguOEmAfGVR1hIQ+Z3FdoQqLD4Oi0nAA5T1+15McXHjNA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762764243356.6821687279937; Mon, 13 Apr 2020 00:26:04 -0700 (PDT) Received: from localhost ([::1]:41186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtTm-0000Hb-W7 for importer@patchew.org; Mon, 13 Apr 2020 03:26:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37236) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtRt-0005Nn-NZ for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:24:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtRs-0007ha-Oc for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:24:05 -0400 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]:37135) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtRs-0007hU-JG for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:24:04 -0400 Received: by mail-pl1-x642.google.com with SMTP id m16so3114213pls.4 for ; Mon, 13 Apr 2020 00:24:04 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.24.01 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:24:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=gyT3JhnhdKIwjs4eYU6gfUngC8pztPgbzgNj2PrTZlY=; b=V3VOhY8VmnM/w5l1OtQnzCohgK6qWeXErUDr+UvCipYHvEkRmokVvM10dZWR5KudUA t7hm4n8HWaEb9e56F/JzCCgWdbYle0oQ8IYSHQOZeJobyEApTKdfVEN5TsViNVJteqcY i43cfHzl1z2opTpedqDpfEsltwbZtAIJFLdHdJ8aGzxn2b6WQ//bF0O1VAGm+bfTxTFm xquPJslUM8gGEWXG6ZsEUobUQCoLOK/0W7ZTBz+3io2R376T0pcICYGsrXhhDyHkhk9p VuNnOA1aG7VUaS4jkcoPKcwvnbmQkh6uR6Kolc//ca9/Ij5bVESC3yNOSb1f7QNO1VJc 6R8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=gyT3JhnhdKIwjs4eYU6gfUngC8pztPgbzgNj2PrTZlY=; b=hU/mTRgi9MD5yZqpG4bdZgkdOdhwyKSROWuUw/DZOXWrzIQwPnTjOjXxOWcyMIviOG HIYKb4Xnc+YE2V3i1VmtyCOAkGuOaiOC81CWhQVkADOjBE4zTFicOaYTxI6zq4cUWasP yn80/TIiJCUgrV8g9UTmpw9F2ExFrJMA9FN/upb6Cu7QKS1aG6GrzoEq8TyXNPdXwk+T 9oNAL9yHwYWiGGkTLCDfHAIyAgjaspkuxEA7xctcFNJ8k61aVNFHTPfi+9zlbhIXY6Lq VaTn9Gl51HL05vPUypT+Qb5wkc7UzFCV2p6OFXvxMEQPDBgtU8Ufh04lhaQ8UbXKAywC JvSg== X-Gm-Message-State: AGi0PubItx9e1GqsghEJakpdoAIcJwa/J/vUeZ9XCsH+T8lHaE8lrYHx 9Dc5zS7VtXlLVGNS1TOTizY= X-Google-Smtp-Source: APiQypJBIU25Kv+njqNZQJhQyJZZDlzXd0hmwzx5Ke62j9e0iXHDH4NqDBE9tce8eCwOOpjKc3b96A== X-Received: by 2002:a17:902:322:: with SMTP id 31mr16406962pld.103.1586762643670; Mon, 13 Apr 2020 00:24:03 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 06/15] KVM: MIPS: Use lddir/ldpte instructions to lookup gpa_mm.pgd Date: Mon, 13 Apr 2020 15:30:15 +0800 Message-Id: <1586763024-12197-7-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::642 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Loongson-3 can use lddir/ldpte instuctions to accelerate page table walking, so use them to lookup gpa_mm.pgd. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/kvm/entry.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/arch/mips/kvm/entry.c b/arch/mips/kvm/entry.c index 16e1c93..fd71694 100644 --- a/arch/mips/kvm/entry.c +++ b/arch/mips/kvm/entry.c @@ -56,6 +56,7 @@ #define C0_BADVADDR 8, 0 #define C0_BADINSTR 8, 1 #define C0_BADINSTRP 8, 2 +#define C0_PGD 9, 7 #define C0_ENTRYHI 10, 0 #define C0_GUESTCTL1 10, 4 #define C0_STATUS 12, 0 @@ -307,7 +308,10 @@ static void *kvm_mips_build_enter_guest(void *addr) =20 #ifdef CONFIG_KVM_MIPS_VZ /* Save normal linux process pgd (VZ guarantees pgd_reg is set) */ - UASM_i_MFC0(&p, K0, c0_kscratch(), pgd_reg); + if (cpu_has_ldpte) + UASM_i_MFC0(&p, K0, C0_PWBASE); + else + UASM_i_MFC0(&p, K0, c0_kscratch(), pgd_reg); UASM_i_SW(&p, K0, offsetof(struct kvm_vcpu_arch, host_pgd), K1); =20 /* @@ -469,8 +473,10 @@ void *kvm_mips_build_tlb_refill_exception(void *addr, = void *handler) u32 *p =3D addr; struct uasm_label labels[2]; struct uasm_reloc relocs[2]; +#ifndef CONFIG_CPU_LOONGSON64 struct uasm_label *l =3D labels; struct uasm_reloc *r =3D relocs; +#endif =20 memset(labels, 0, sizeof(labels)); memset(relocs, 0, sizeof(relocs)); @@ -490,6 +496,16 @@ void *kvm_mips_build_tlb_refill_exception(void *addr, = void *handler) */ preempt_disable(); =20 +#ifdef CONFIG_CPU_LOONGSON64 + UASM_i_MFC0(&p, K1, C0_PGD); + uasm_i_lddir(&p, K0, K1, 3); /* global page dir */ +#ifndef __PAGETABLE_PMD_FOLDED + uasm_i_lddir(&p, K1, K0, 1); /* middle page dir */ +#endif + uasm_i_ldpte(&p, K1, 0); /* even */ + uasm_i_ldpte(&p, K1, 1); /* odd */ + uasm_i_tlbwr(&p); +#else /* * Now for the actual refill bit. A lot of this can be common with the * Linux TLB refill handler, however we don't need to handle so many @@ -512,6 +528,7 @@ void *kvm_mips_build_tlb_refill_exception(void *addr, v= oid *handler) build_get_ptep(&p, K0, K1); build_update_entries(&p, K0, K1); build_tlb_write_entry(&p, &l, &r, tlb_random); +#endif =20 preempt_enable(); =20 --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762776; cv=none; d=zohomail.com; s=zohoarc; b=Wv0cZpF7594Ok1ZgsEKI68GXiK1p+nkOMcTxtprFylZa2U2FnUR/CEcfkrpC4nFdbbsN1nmtpxmJEjwnBFalnK4T6QgzWjQw/TcQ7WskR0GQcRQgaa2aF3c/bu6NuFnMbUIYCmrNKrxWPzgwtBkzkig60Ma516HUo6UzFoSw3ZA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762776; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=P1gwtYehv6c5Vy75KJf3Vt8CPa0lZUAYATRIzQMbBOk=; b=WQuHAv9JEyZbM1q0QrNd/PZLo8rEMhlxqfPhKx24qO4kuBZzdsVekAL/5Nz1Zn/xXnbccCMIZ8lEsZ0dkaL4Kg9/cgH4AfiK/oR2AGG+XvCQlJNEb5UeGVT3vo0mPWoVlXO/BViMh2gE6rP/DswV0y0hSdArd/D0TTUiO13LeMY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158676277636419.749997271936195; Mon, 13 Apr 2020 00:26:16 -0700 (PDT) Received: from localhost ([::1]:41196 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtTz-0000q2-4J for importer@patchew.org; Mon, 13 Apr 2020 03:26:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37377) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtSm-0007Wm-Rl for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:25:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtSl-0007u4-Fp for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:25:00 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:39337) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtSl-0007tx-AL for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:24:59 -0400 Received: by mail-pl1-x641.google.com with SMTP id k18so3108606pll.6 for ; Mon, 13 Apr 2020 00:24:59 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.24.55 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:24:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=P1gwtYehv6c5Vy75KJf3Vt8CPa0lZUAYATRIzQMbBOk=; b=Umb11kB+vrK4GG6dK2YS/9zDGze0Btb+TB8xH+f1aeMAyn7d9b4y4KbYq6TVckipGs 2EKE1kWULMhkQC03gfAMi3soWxAwVC9G4uZaNQTS5+XYI6prSXBfG59JnLZk6CF6nXPF 8RwCkn8HQ0KEuVBUgTk9eVsNkoDEuPcFQDWh+7hwKR/xsoZQbuLph3Qbp3Cx4H+BZ/Xp m+obRAWRUq9ny6JltlmAd3eTj7sSCrpR5W1JhY0pyuP8EL5MYMNpAikJm4q0LAvLmVzg PY+GK0djY9SaWGD/h1+5PkcCIGXAcjt3moE1USKXsdIqe5NXWMCvsgIZA3zgkgCXg1Ak 2xOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=P1gwtYehv6c5Vy75KJf3Vt8CPa0lZUAYATRIzQMbBOk=; b=JgA3p3ZsBNP2Kvub7VMlHlsGBfmePh55QCWqV0qtj4yOffCX60PMoY7IhPRU+2IoCp HCZPG/QnLS8eLJElahP5DRHjJBHiLRC8aVP1G97OjYcZJuvB1eZyySw4z+N/CEGLA5Bv aUWdwjnGxmtPY4DLFIhM6MryDXNQaAhgVVJQ7REIXl0wayo8P5h8oqkMFunFM1PvYdaU BG94XdbcDBcLM1tHIsAXsWcOKxDFQXdkqivKGCoCGoUA7z1pOVYhcKkJVcEgMAludxeT fZg7aM2em8oRhFf2exOHy+TU6Am8YRRZGCgmHrAbOlDGnzto2lVkkMbroPfV13xsq1Hg z3BQ== X-Gm-Message-State: AGi0PuYKPiEN3W0H/8AUqobL9NiaSggMq8cIsH5N6PN4y7gGa+GXnr8B IZJp2G7EKiF4jouqChZ4frs= X-Google-Smtp-Source: APiQypK9+Auw7pBt8tjztF5LAWCHIHnFGJdkSJQ2BhKbroLsKAWsSBDeoNRaSQyNzMWaFSg82HbeMA== X-Received: by 2002:a17:90a:630b:: with SMTP id e11mr12400105pjj.167.1586762698222; Mon, 13 Apr 2020 00:24:58 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 07/15] KVM: MIPS: Introduce and use cpu_guest_has_ldpte Date: Mon, 13 Apr 2020 15:30:16 +0800 Message-Id: <1586763024-12197-8-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Loongson-3 has lddir/ldpte instructions and their related CP0 registers are the same as HTW. So we introduce a cpu_guest_has_ldpte flag and use it to indicate whether we need to save/restore HTW related CP0 registers (PWBase, PWSize, PWField and PWCtl). Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/include/asm/cpu-features.h | 3 +++ arch/mips/kernel/cpu-probe.c | 1 + arch/mips/kvm/vz.c | 26 +++++++++++++------------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/c= pu-features.h index de44c92..c576aad 100644 --- a/arch/mips/include/asm/cpu-features.h +++ b/arch/mips/include/asm/cpu-features.h @@ -665,6 +665,9 @@ #ifndef cpu_guest_has_htw #define cpu_guest_has_htw (cpu_data[0].guest.options & MIPS_CPU_HTW) #endif +#ifndef cpu_guest_has_ldpte +#define cpu_guest_has_ldpte (cpu_data[0].guest.options & MIPS_CPU_LDPTE) +#endif #ifndef cpu_guest_has_mvh #define cpu_guest_has_mvh (cpu_data[0].guest.options & MIPS_CPU_MVH) #endif diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index f21a230..5bf0821 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c @@ -1966,6 +1966,7 @@ static inline void cpu_probe_loongson(struct cpuinfo_= mips *c, unsigned int cpu) set_isa(c, MIPS_CPU_ISA_M64R2); decode_configs(c); c->options |=3D MIPS_CPU_FTLB | MIPS_CPU_TLBINV | MIPS_CPU_LDPTE; + c->guest.options |=3D MIPS_CPU_LDPTE; c->writecombine =3D _CACHE_UNCACHED_ACCELERATED; c->ases |=3D (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM | MIPS_ASE_LOONGSON_EXT | MIPS_ASE_LOONGSON_EXT2); diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index 17932ab..422cd06 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -1706,7 +1706,7 @@ static unsigned long kvm_vz_num_regs(struct kvm_vcpu = *vcpu) ret +=3D ARRAY_SIZE(kvm_vz_get_one_regs_contextconfig); if (cpu_guest_has_segments) ret +=3D ARRAY_SIZE(kvm_vz_get_one_regs_segments); - if (cpu_guest_has_htw) + if (cpu_guest_has_htw || cpu_guest_has_ldpte) ret +=3D ARRAY_SIZE(kvm_vz_get_one_regs_htw); if (cpu_guest_has_maar && !cpu_guest_has_dyn_maar) ret +=3D 1 + ARRAY_SIZE(vcpu->arch.maar); @@ -1755,7 +1755,7 @@ static int kvm_vz_copy_reg_indices(struct kvm_vcpu *v= cpu, u64 __user *indices) return -EFAULT; indices +=3D ARRAY_SIZE(kvm_vz_get_one_regs_segments); } - if (cpu_guest_has_htw) { + if (cpu_guest_has_htw || cpu_guest_has_ldpte) { if (copy_to_user(indices, kvm_vz_get_one_regs_htw, sizeof(kvm_vz_get_one_regs_htw))) return -EFAULT; @@ -1878,17 +1878,17 @@ static int kvm_vz_get_one_reg(struct kvm_vcpu *vcpu, *v =3D read_gc0_segctl2(); break; case KVM_REG_MIPS_CP0_PWBASE: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; *v =3D read_gc0_pwbase(); break; case KVM_REG_MIPS_CP0_PWFIELD: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; *v =3D read_gc0_pwfield(); break; case KVM_REG_MIPS_CP0_PWSIZE: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; *v =3D read_gc0_pwsize(); break; @@ -1896,7 +1896,7 @@ static int kvm_vz_get_one_reg(struct kvm_vcpu *vcpu, *v =3D (long)read_gc0_wired(); break; case KVM_REG_MIPS_CP0_PWCTL: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; *v =3D read_gc0_pwctl(); break; @@ -2101,17 +2101,17 @@ static int kvm_vz_set_one_reg(struct kvm_vcpu *vcpu, write_gc0_segctl2(v); break; case KVM_REG_MIPS_CP0_PWBASE: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; write_gc0_pwbase(v); break; case KVM_REG_MIPS_CP0_PWFIELD: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; write_gc0_pwfield(v); break; case KVM_REG_MIPS_CP0_PWSIZE: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; write_gc0_pwsize(v); break; @@ -2119,7 +2119,7 @@ static int kvm_vz_set_one_reg(struct kvm_vcpu *vcpu, change_gc0_wired(MIPSR6_WIRED_WIRED, v); break; case KVM_REG_MIPS_CP0_PWCTL: - if (!cpu_guest_has_htw) + if (!cpu_guest_has_htw && !cpu_guest_has_ldpte) return -EINVAL; write_gc0_pwctl(v); break; @@ -2580,7 +2580,7 @@ static int kvm_vz_vcpu_load(struct kvm_vcpu *vcpu, in= t cpu) } =20 /* restore HTW registers */ - if (cpu_guest_has_htw) { + if (cpu_guest_has_htw || cpu_guest_has_ldpte) { kvm_restore_gc0_pwbase(cop0); kvm_restore_gc0_pwfield(cop0); kvm_restore_gc0_pwsize(cop0); @@ -2685,8 +2685,8 @@ static int kvm_vz_vcpu_put(struct kvm_vcpu *vcpu, int= cpu) } =20 /* save HTW registers if enabled in guest */ - if (cpu_guest_has_htw && - kvm_read_sw_gc0_config3(cop0) & MIPS_CONF3_PW) { + if (cpu_guest_has_ldpte || (cpu_guest_has_htw && + kvm_read_sw_gc0_config3(cop0) & MIPS_CONF3_PW)) { kvm_save_gc0_pwbase(cop0); kvm_save_gc0_pwfield(cop0); kvm_save_gc0_pwsize(cop0); --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762842; cv=none; d=zohomail.com; s=zohoarc; b=dB3W+5OsJUqLKEkJN+pKr52QqJWqoifeP82ZkRsiBQZjV1QFm3tLOsBaeXX/EmuSVJYSh312dj06BMXbkbNrs+OFdySKmmofRZGxDRO9vbDfuGl4SRG0wtiTlOCvx+2Snsb5iqay64jCYPoL7KG7sN+G4Konn6Ot+nyEYN8Hcws= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762842; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=rcr3r7EHKTN20QWo1cHUmhcCCOh7xy4CEyh5IWphRGk=; b=bqDFufaCISUTiNxDfKV9BtZHtoUv1W3HTo8jBWQWTDG32pJhcprUMKu7J/rMkKarycqAyie1QB+ar2XCYIZ5PfNj2V9UwwC2ZFFWu8prLBo/NT7HNPBOvnTbYxcmC3p7ygaobRklzu9arnNgDCoFtVAMDAgfCLZ8+s15YuPJX7E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762842858821.4932805116647; Mon, 13 Apr 2020 00:27:22 -0700 (PDT) Received: from localhost ([::1]:41210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtV3-0002v4-Ln for importer@patchew.org; Mon, 13 Apr 2020 03:27:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37469) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtTY-0000aS-1y for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:25:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtTX-0008Dm-68 for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:25:47 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:35329) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtTX-0008Db-0p for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:25:47 -0400 Received: by mail-pl1-x641.google.com with SMTP id y12so2807187pll.2 for ; Mon, 13 Apr 2020 00:25:46 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.25.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=rcr3r7EHKTN20QWo1cHUmhcCCOh7xy4CEyh5IWphRGk=; b=hjEyoehEw9UiB64zs266aysB8Fech4XcqTwQUvT8cKrEH/MwgwN0vaZZFZWBXbaxEs 2VLmeoun9JWg3PbInHrMXSP0qONm/51gRkxx8p6mWe14O07jdRQKL2meU7uk6Xg/sQ0Z yi5C13ie0/ddCU+RXouid0RzEhQN1OwesDWaxiVLkAsnHbgqRjkl70h/jyKWMzlgeMeC uqUaN3+CSbb8zi+H4NeC0vpHAXeZo3+vsT/CB4zLL9++5c9T3bK/scGget+jFE60g74C f1+lNuEjbfD88NpaPXXpyUMbaHv7JUSx4RrOrhIM2FpZ4ZSZ1xAPfEKyNg8ckNizszn7 /qbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=rcr3r7EHKTN20QWo1cHUmhcCCOh7xy4CEyh5IWphRGk=; b=nAqRzc3BujMBgJgRWfXbFUdlM1riXcuTZ8swZUT1UVtOGoQTj+Lx/smGynGprJKrKD Zvji6URVh+6z72e1CCNuUrq98eztDjZJ65YVXSfgZ0YMjnEwnW2EJg+5yW1oG2kGrVHT qMJunG2oJMoX+xnx7YJI63WFJ+ai0MT0pah5e8RyepTgVqV7VL65W1AR7K54NMgMLHZK oAQD9BWRjyTmsz2ivr6fcrwVwaPnNBhyYF9a85FLjpVV8qIx+hBzJZdm8hJRJBodL/xM +BHZPuZVIPnCoQMoxVvRNX8quyEeW9R2qK2WJ7TgOPb+q7KPfM8NyMpb7EdnQuCX+KZ/ a8lQ== X-Gm-Message-State: AGi0PuZYqKqiETNnIK0znnHvtP0B/I/BVNImdB3sO2iUB5qIEqkOz/Yf dxgcTSTcX1R/0Ntm6DQ39vY= X-Google-Smtp-Source: APiQypJ7sYB35a50kXkyVw2AqbaMP+yLekJXXIv+HR2IAM6iz4MvwvlOfVTeyYhgzICPnycZFBqg+g== X-Received: by 2002:a17:90a:e50a:: with SMTP id t10mr21330556pjy.110.1586762746231; Mon, 13 Apr 2020 00:25:46 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 08/15] KVM: MIPS: Use root tlb to control guest's CCA for Loongson-3 Date: Mon, 13 Apr 2020 15:30:17 +0800 Message-Id: <1586763024-12197-9-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" KVM guest has two levels of address translation: guest tlb translates GVA to GPA, and root tlb translates GPA to HPA. By default guest's CCA is controlled by guest tlb, but Loongson-3 maintains all cache coherency by hardware (including multi-core coherency and I/O DMA coherency) so it prefers all guest mappings be cacheable mappings. Thus, we use root tlb to control guest's CCA for Loongson-3. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/kvm/vz.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index 422cd06..e30ebb2 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -2871,6 +2871,10 @@ static int kvm_vz_hardware_enable(void) if (cpu_has_guestctl2) clear_c0_guestctl2(0x3f << 10); =20 + /* Control guest CCA attribute */ + if (cpu_has_csr()) + csr_writel(csr_readl(0xffffffec) | 0x1, 0xffffffec); + return 0; } =20 --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762854; cv=none; d=zohomail.com; s=zohoarc; b=kZvpNT5aYb+nx5SmIjAZaiuvf1D9lkzEG6V9BkdHhq0xwTRw08+0uj2FN9YaeGvxa4ahjNrK+iQEp6PugoAiH7OsbR+qemtDZxjkY7lsV8ffolsJ6zXTSG3G0a6jW1tyIzqw6FKEAWlge3KyDf1A198fmjXIrpVaWNTq4HLpcPY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762854; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=bZw6h2yo9U+Mfy3dzljKqyaJpon7bVmdpfdx+JLJk18=; b=U4j7TOmaJ4OYfNeL/buyRvUYiaHPtMhjmNxEHNE/K5RZrOC//r2l2f2OJ222t5p5tvlG8urs4v7c9QKZb0CjLi1TwD1C2pe9/CnI87eKSjLs9m6yPi1p1DhW489m63Mgu3wud/hhB5Q4uT1S9C8yWBkQHlgg/NmHAgmXwTAOKIs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762854082740.0408214041291; Mon, 13 Apr 2020 00:27:34 -0700 (PDT) Received: from localhost ([::1]:41212 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtVE-00037n-G5 for importer@patchew.org; Mon, 13 Apr 2020 03:27:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37599) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtUI-0001y8-8r for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:26:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtUH-0008Pm-8I for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:26:34 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:37097) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtUH-0008PT-2o for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:26:33 -0400 Received: by mail-pf1-x444.google.com with SMTP id u65so4164468pfb.4 for ; Mon, 13 Apr 2020 00:26:33 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.26.29 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:26:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=bZw6h2yo9U+Mfy3dzljKqyaJpon7bVmdpfdx+JLJk18=; b=J+U8Kwzn86Rc4sqH084u496a4YLWjSZok7YynJds7+m7/1NOtP1yztf181dwOfLhDl KToGfX1j7pUol8ZgqBsmjUA4lhvipo5wn6lyMD/lFPfZghjWA34eNZRnEyZxugtkNkQt ywSzvX2EfqwXDZJlDTD2YelivRnftxkEysc+Z4Egsv7vORdW/eOQArNwHZSQ/o4nf/rj mtV9xYDOBvdvSUOdo0gSSFUiImcJGDHkE/wcLGFMdpQyUnhqbwe0NqB3EV6ywT27mP/F Rz/CG47h765/07p0N+PMaJOU1irLHtDy1jEKarwdknCXNwal10rq8bfkaz74P854oKDN gWWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=bZw6h2yo9U+Mfy3dzljKqyaJpon7bVmdpfdx+JLJk18=; b=aqip+keYI36JSJ+dmk/POgtCek+/H2V5iuO3w9vcUiQLY518L33XjC4+TZUdg4zPjg xPwwq5c5iCIly9MabAIMWpuIBiT7ND8DWbThQmUo60ziT7fWPI8EC4+V/wKJ2Kfk/JwG jQPPI1CUyl2qCaR6tdwdkq//1hI1Pky+D1+pABYCcSBKAB0TmrxYAcf72si3QXAB4D9Z TbvoCg+cPeP7vrXqhBB80VIlAz0v7mG38IIUYhIFfrC+744RzEFIoMlfmdtL+WNaqif1 YijO14losonDvIxgfq/Udo4+Ojirblstc10QX5+6S9R3AC9praLJLUxeUWLKbKiodwwb xe4A== X-Gm-Message-State: AGi0PuZjFNIxNVpSKjjxF5YH0ZI8OqmAFJRmiBaBqim8l3Hm9BOSWTpS EkR0oGIzeKEd/E6NYPQqzW0= X-Google-Smtp-Source: APiQypL5+/JpeggvZ2dMsDBr8FlWbIdPo+KXT5Ndgn8wFWn18tzkVgeZUGMujR5wtOclfCatqUrB4A== X-Received: by 2002:aa7:96f5:: with SMTP id i21mr17105073pfq.248.1586762792074; Mon, 13 Apr 2020 00:26:32 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 09/15] KVM: MIPS: Let indexed cacheops cause guest exit on Loongson-3 Date: Mon, 13 Apr 2020 15:30:18 +0800 Message-Id: <1586763024-12197-10-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Loongson-3's indexed cache operations need a node-id in the address, but in KVM guest the node-id may be incorrect. So, let indexed cache operations cause guest exit on Loongson-3. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/kvm/vz.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index e30ebb2..9a228dc 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -2853,8 +2853,12 @@ static int kvm_vz_hardware_enable(void) write_c0_guestctl0(MIPS_GCTL0_CP0 | (MIPS_GCTL0_AT_GUEST << MIPS_GCTL0_AT_SHIFT) | MIPS_GCTL0_CG | MIPS_GCTL0_CF); - if (cpu_has_guestctl0ext) - set_c0_guestctl0ext(MIPS_GCTL0EXT_CGI); + if (cpu_has_guestctl0ext) { + if (current_cpu_type() !=3D CPU_LOONGSON64) + set_c0_guestctl0ext(MIPS_GCTL0EXT_CGI); + else + clear_c0_guestctl0ext(MIPS_GCTL0EXT_CGI); + } =20 if (cpu_has_guestid) { write_c0_guestctl1(0); --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762919; cv=none; d=zohomail.com; s=zohoarc; b=e5VT0I4im6cRVuG+ODKaU8Q67qaLxvEzdjHayp2dPBFusSAuPP/yr/d5nuSBhzh+88kLuYCNB6VZo+3j2hJoRgclLxHDunS/0zoQ7Tbu2GP7sk13YxdKhU96M2QdyO9PIzckK+aAmoME12oF7t7UM3LEM2kyUpiLlIu/CSkPP34= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762919; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=P7gLkQIPuNQlPBOIn5uasx4X7H2iy/a2FvVglL7xhFs=; b=g65TTZGKKz+RzlXniF3ak3nlr8TJsrwfc44ZYQTP1XUUV8cxZgCW95SnMHLGLvKxri/OhvwuYvqNtp5TgLWEsOGAxOW7onYFQ3aXjTmd0lOnIbWBzfQNKW/1nHFDdDQZ8088Vrud4yoFGyLVxGUj2ZcyTU+5kbWx3f14u4fN1jU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762919963741.5431377521209; Mon, 13 Apr 2020 00:28:39 -0700 (PDT) Received: from localhost ([::1]:41224 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtWI-0004f5-F6 for importer@patchew.org; Mon, 13 Apr 2020 03:28:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37713) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtUx-0003A2-Fk for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:27:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtUv-0000X3-Jl for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:27:15 -0400 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]:39303) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtUv-0000Us-DR for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:27:13 -0400 Received: by mail-pg1-x541.google.com with SMTP id g32so4116384pgb.6 for ; Mon, 13 Apr 2020 00:27:13 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.27.09 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:27:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=P7gLkQIPuNQlPBOIn5uasx4X7H2iy/a2FvVglL7xhFs=; b=mSIaEOe6WEmtD74gfGTW44hdcZ6hGZS48Zf+SalURw3wqRhKi433JhVqsABNgRd2/K JhoWKvFBh42rZ0qcFMgcCupXJCSG+ji07BJjnOzhqDvO9PdLs3exlyFX4yqJEmMlqhqR mxJGjKmI3AhTyaLQ89EEt4SmfT8YjILA9xEJz16RMkPCblgFp+wmULhM09HMg2zt3XxZ DfElysMzw2PUcYH/+U9UwMEiL4vR0y42xO1lUQhdwe465GgdMg0wbTlf2I0vq2fxOvLl hmihzVKTk+uFPtdH/P9bPDbn8x7uMIf8dkXvdxiVHPlRY+qb0rdf9z3T55EBZuIWweWA iOlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=P7gLkQIPuNQlPBOIn5uasx4X7H2iy/a2FvVglL7xhFs=; b=ZnOUBozVBtfyo8TnP63YK7og5OJWt5hxcWJAu2nNH51WHhsh3Lt4agR/Cyy2pJogJ1 p+/aIIYFhu1VaTIxVgbxqnKIquqrC8wR6RYC7b4wNd6SLzJSCk0XRJu/MWDFjp79UnDQ gZgtpoCJFS20MR9FxJBHrHVHqMcJ90hhwVYbBqlRG38mf5njXc4YbXL9Hy4zzwUnehi5 EnWC5xQcm7S0UiJAlEnZt5wW5C9au+s9BDgdQ/LS9i7zG94xVbQk/pwgCU4S6reWYYkq GrbcSCA8IPg6znHTPqeaWu6Dqk3VkZBaAxDhVLIFrIiEL57bF4R7XuvCL10TGhy66xnj fCwQ== X-Gm-Message-State: AGi0Pubp4hXawBloKdBsNo1nWeTdVBLY+y++LwfvusoyesYi/czSRenD uGAfL51IqinDKLWKzYkqc1U= X-Google-Smtp-Source: APiQypLtb7hku7z8GsxaDxKPnCWJBa/U7fTlL06VXjTFJwOlpFfKbFEyp+oqf7bJxGT+d4W3ZT9M7Q== X-Received: by 2002:a62:ed10:: with SMTP id u16mr7708160pfh.16.1586762832376; Mon, 13 Apr 2020 00:27:12 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 10/15] KVM: MIPS: Add more types of virtual interrupts Date: Mon, 13 Apr 2020 15:30:19 +0800 Message-Id: <1586763024-12197-11-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::541 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" In current implementation, MIPS KVM uses IP2, IP3, IP4 and IP7 for external interrupt, two kinds of IPIs and timer interrupt respectively, but Loongson-3 based machines prefer to use IP2, IP3, IP6 and IP7 for two kinds of external interrupts, IPI and timer interrupt. So we define two priority-irq mapping tables: kvm_loongson3_priority_to_irq[] for Loongson-3, and kvm_default_priority_to_irq[] for others. The virtual interrupt infrastructure is updated to deliver all types of interrupts from IP2, IP3, IP4, IP6 and IP7. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/kvm/interrupt.c | 93 +++++++------------------------------------= ---- arch/mips/kvm/interrupt.h | 14 ++++--- arch/mips/kvm/mips.c | 40 ++++++++++++++++++-- arch/mips/kvm/vz.c | 53 ++++----------------------- 4 files changed, 67 insertions(+), 133 deletions(-) diff --git a/arch/mips/kvm/interrupt.c b/arch/mips/kvm/interrupt.c index 7257e8b6..d28c2c9c 100644 --- a/arch/mips/kvm/interrupt.c +++ b/arch/mips/kvm/interrupt.c @@ -61,27 +61,8 @@ void kvm_mips_queue_io_int_cb(struct kvm_vcpu *vcpu, * the EXC code will be set when we are actually * delivering the interrupt: */ - switch (intr) { - case 2: - kvm_set_c0_guest_cause(vcpu->arch.cop0, (C_IRQ0)); - /* Queue up an INT exception for the core */ - kvm_mips_queue_irq(vcpu, MIPS_EXC_INT_IO); - break; - - case 3: - kvm_set_c0_guest_cause(vcpu->arch.cop0, (C_IRQ1)); - kvm_mips_queue_irq(vcpu, MIPS_EXC_INT_IPI_1); - break; - - case 4: - kvm_set_c0_guest_cause(vcpu->arch.cop0, (C_IRQ2)); - kvm_mips_queue_irq(vcpu, MIPS_EXC_INT_IPI_2); - break; - - default: - break; - } - + kvm_set_c0_guest_cause(vcpu->arch.cop0, 1 << (intr + 8)); + kvm_mips_queue_irq(vcpu, kvm_irq_to_priority(intr)); } =20 void kvm_mips_dequeue_io_int_cb(struct kvm_vcpu *vcpu, @@ -89,26 +70,8 @@ void kvm_mips_dequeue_io_int_cb(struct kvm_vcpu *vcpu, { int intr =3D (int)irq->irq; =20 - switch (intr) { - case -2: - kvm_clear_c0_guest_cause(vcpu->arch.cop0, (C_IRQ0)); - kvm_mips_dequeue_irq(vcpu, MIPS_EXC_INT_IO); - break; - - case -3: - kvm_clear_c0_guest_cause(vcpu->arch.cop0, (C_IRQ1)); - kvm_mips_dequeue_irq(vcpu, MIPS_EXC_INT_IPI_1); - break; - - case -4: - kvm_clear_c0_guest_cause(vcpu->arch.cop0, (C_IRQ2)); - kvm_mips_dequeue_irq(vcpu, MIPS_EXC_INT_IPI_2); - break; - - default: - break; - } - + kvm_clear_c0_guest_cause(vcpu->arch.cop0, 1 << (-intr + 8)); + kvm_mips_dequeue_irq(vcpu, kvm_irq_to_priority(-intr)); } =20 /* Deliver the interrupt of the corresponding priority, if possible. */ @@ -116,50 +79,20 @@ int kvm_mips_irq_deliver_cb(struct kvm_vcpu *vcpu, uns= igned int priority, u32 cause) { int allowed =3D 0; - u32 exccode; + u32 exccode, ie; =20 struct kvm_vcpu_arch *arch =3D &vcpu->arch; struct mips_coproc *cop0 =3D vcpu->arch.cop0; =20 - switch (priority) { - case MIPS_EXC_INT_TIMER: - if ((kvm_read_c0_guest_status(cop0) & ST0_IE) - && (!(kvm_read_c0_guest_status(cop0) & (ST0_EXL | ST0_ERL))) - && (kvm_read_c0_guest_status(cop0) & IE_IRQ5)) { - allowed =3D 1; - exccode =3D EXCCODE_INT; - } - break; - - case MIPS_EXC_INT_IO: - if ((kvm_read_c0_guest_status(cop0) & ST0_IE) - && (!(kvm_read_c0_guest_status(cop0) & (ST0_EXL | ST0_ERL))) - && (kvm_read_c0_guest_status(cop0) & IE_IRQ0)) { - allowed =3D 1; - exccode =3D EXCCODE_INT; - } - break; - - case MIPS_EXC_INT_IPI_1: - if ((kvm_read_c0_guest_status(cop0) & ST0_IE) - && (!(kvm_read_c0_guest_status(cop0) & (ST0_EXL | ST0_ERL))) - && (kvm_read_c0_guest_status(cop0) & IE_IRQ1)) { - allowed =3D 1; - exccode =3D EXCCODE_INT; - } - break; - - case MIPS_EXC_INT_IPI_2: - if ((kvm_read_c0_guest_status(cop0) & ST0_IE) - && (!(kvm_read_c0_guest_status(cop0) & (ST0_EXL | ST0_ERL))) - && (kvm_read_c0_guest_status(cop0) & IE_IRQ2)) { - allowed =3D 1; - exccode =3D EXCCODE_INT; - } - break; + if (priority =3D=3D MIPS_EXC_MAX) + return 0; =20 - default: - break; + ie =3D 1 << (kvm_priority_to_irq[priority] + 8); + if ((kvm_read_c0_guest_status(cop0) & ST0_IE) + && (!(kvm_read_c0_guest_status(cop0) & (ST0_EXL | ST0_ERL))) + && (kvm_read_c0_guest_status(cop0) & ie)) { + allowed =3D 1; + exccode =3D EXCCODE_INT; } =20 /* Are we allowed to deliver the interrupt ??? */ diff --git a/arch/mips/kvm/interrupt.h b/arch/mips/kvm/interrupt.h index 3bf0a49..c3e878c 100644 --- a/arch/mips/kvm/interrupt.h +++ b/arch/mips/kvm/interrupt.h @@ -21,11 +21,12 @@ #define MIPS_EXC_NMI 5 #define MIPS_EXC_MCHK 6 #define MIPS_EXC_INT_TIMER 7 -#define MIPS_EXC_INT_IO 8 -#define MIPS_EXC_EXECUTE 9 -#define MIPS_EXC_INT_IPI_1 10 -#define MIPS_EXC_INT_IPI_2 11 -#define MIPS_EXC_MAX 12 +#define MIPS_EXC_INT_IO_1 8 +#define MIPS_EXC_INT_IO_2 9 +#define MIPS_EXC_EXECUTE 10 +#define MIPS_EXC_INT_IPI_1 11 +#define MIPS_EXC_INT_IPI_2 12 +#define MIPS_EXC_MAX 13 /* XXXSL More to follow */ =20 #define C_TI (_ULCAST_(1) << 30) @@ -38,6 +39,9 @@ #define KVM_MIPS_IRQ_CLEAR_ALL_AT_ONCE (0) #endif =20 +extern u32 *kvm_priority_to_irq; +u32 kvm_irq_to_priority(u32 irq); + void kvm_mips_queue_irq(struct kvm_vcpu *vcpu, unsigned int priority); void kvm_mips_dequeue_irq(struct kvm_vcpu *vcpu, unsigned int priority); int kvm_mips_pending_timer(struct kvm_vcpu *vcpu); diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c index 71244bf..5c3a414 100644 --- a/arch/mips/kvm/mips.c +++ b/arch/mips/kvm/mips.c @@ -495,7 +495,10 @@ int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, int intr =3D (int)irq->irq; struct kvm_vcpu *dvcpu =3D NULL; =20 - if (intr =3D=3D 3 || intr =3D=3D -3 || intr =3D=3D 4 || intr =3D=3D -4) + if (intr =3D=3D kvm_priority_to_irq[MIPS_EXC_INT_IPI_1] || + intr =3D=3D kvm_priority_to_irq[MIPS_EXC_INT_IPI_2] || + intr =3D=3D (-kvm_priority_to_irq[MIPS_EXC_INT_IPI_1]) || + intr =3D=3D (-kvm_priority_to_irq[MIPS_EXC_INT_IPI_2])) kvm_debug("%s: CPU: %d, INTR: %d\n", __func__, irq->cpu, (int)intr); =20 @@ -504,10 +507,10 @@ int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, else dvcpu =3D vcpu->kvm->vcpus[irq->cpu]; =20 - if (intr =3D=3D 2 || intr =3D=3D 3 || intr =3D=3D 4) { + if (intr =3D=3D 2 || intr =3D=3D 3 || intr =3D=3D 4 || intr =3D=3D 6) { kvm_mips_callbacks->queue_io_int(dvcpu, irq); =20 - } else if (intr =3D=3D -2 || intr =3D=3D -3 || intr =3D=3D -4) { + } else if (intr =3D=3D -2 || intr =3D=3D -3 || intr =3D=3D -4 || intr =3D= =3D -6) { kvm_mips_callbacks->dequeue_io_int(dvcpu, irq); } else { kvm_err("%s: invalid interrupt ioctl (%d:%d)\n", __func__, @@ -1679,6 +1682,34 @@ static struct notifier_block kvm_mips_csr_die_notifi= er =3D { .notifier_call =3D kvm_mips_csr_die_notify, }; =20 +static u32 kvm_default_priority_to_irq[MIPS_EXC_MAX] =3D { + [MIPS_EXC_INT_TIMER] =3D C_IRQ5, + [MIPS_EXC_INT_IO_1] =3D C_IRQ0, + [MIPS_EXC_INT_IPI_1] =3D C_IRQ1, + [MIPS_EXC_INT_IPI_2] =3D C_IRQ2, +}; + +static u32 kvm_loongson3_priority_to_irq[MIPS_EXC_MAX] =3D { + [MIPS_EXC_INT_TIMER] =3D C_IRQ5, + [MIPS_EXC_INT_IO_1] =3D C_IRQ0, + [MIPS_EXC_INT_IO_2] =3D C_IRQ1, + [MIPS_EXC_INT_IPI_1] =3D C_IRQ4, +}; + +u32 *kvm_priority_to_irq =3D kvm_default_priority_to_irq; + +u32 kvm_irq_to_priority(u32 irq) +{ + int i; + + for (i =3D MIPS_EXC_INT_TIMER; i < MIPS_EXC_MAX; i++) { + if (kvm_priority_to_irq[i] =3D=3D (1 << (irq + 8))) + return i; + } + + return MIPS_EXC_MAX; +} + static int __init kvm_mips_init(void) { int ret; @@ -1697,6 +1728,9 @@ static int __init kvm_mips_init(void) if (ret) return ret; =20 + if (boot_cpu_type() =3D=3D CPU_LOONGSON64) + kvm_priority_to_irq =3D kvm_loongson3_priority_to_irq; + register_die_notifier(&kvm_mips_csr_die_notifier); =20 return 0; diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index 9a228dc..db9b0f5 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -225,23 +225,7 @@ static void kvm_vz_queue_io_int_cb(struct kvm_vcpu *vc= pu, * interrupts are asynchronous to vcpu execution therefore defer guest * cp0 accesses */ - switch (intr) { - case 2: - kvm_vz_queue_irq(vcpu, MIPS_EXC_INT_IO); - break; - - case 3: - kvm_vz_queue_irq(vcpu, MIPS_EXC_INT_IPI_1); - break; - - case 4: - kvm_vz_queue_irq(vcpu, MIPS_EXC_INT_IPI_2); - break; - - default: - break; - } - + kvm_vz_queue_irq(vcpu, kvm_irq_to_priority(intr)); } =20 static void kvm_vz_dequeue_io_int_cb(struct kvm_vcpu *vcpu, @@ -253,44 +237,22 @@ static void kvm_vz_dequeue_io_int_cb(struct kvm_vcpu = *vcpu, * interrupts are asynchronous to vcpu execution therefore defer guest * cp0 accesses */ - switch (intr) { - case -2: - kvm_vz_dequeue_irq(vcpu, MIPS_EXC_INT_IO); - break; - - case -3: - kvm_vz_dequeue_irq(vcpu, MIPS_EXC_INT_IPI_1); - break; - - case -4: - kvm_vz_dequeue_irq(vcpu, MIPS_EXC_INT_IPI_2); - break; - - default: - break; - } - + kvm_vz_dequeue_irq(vcpu, kvm_irq_to_priority(-intr)); } =20 -static u32 kvm_vz_priority_to_irq[MIPS_EXC_MAX] =3D { - [MIPS_EXC_INT_TIMER] =3D C_IRQ5, - [MIPS_EXC_INT_IO] =3D C_IRQ0, - [MIPS_EXC_INT_IPI_1] =3D C_IRQ1, - [MIPS_EXC_INT_IPI_2] =3D C_IRQ2, -}; - static int kvm_vz_irq_deliver_cb(struct kvm_vcpu *vcpu, unsigned int prior= ity, u32 cause) { u32 irq =3D (priority < MIPS_EXC_MAX) ? - kvm_vz_priority_to_irq[priority] : 0; + kvm_priority_to_irq[priority] : 0; =20 switch (priority) { case MIPS_EXC_INT_TIMER: set_gc0_cause(C_TI); break; =20 - case MIPS_EXC_INT_IO: + case MIPS_EXC_INT_IO_1: + case MIPS_EXC_INT_IO_2: case MIPS_EXC_INT_IPI_1: case MIPS_EXC_INT_IPI_2: if (cpu_has_guestctl2) @@ -311,7 +273,7 @@ static int kvm_vz_irq_clear_cb(struct kvm_vcpu *vcpu, u= nsigned int priority, u32 cause) { u32 irq =3D (priority < MIPS_EXC_MAX) ? - kvm_vz_priority_to_irq[priority] : 0; + kvm_priority_to_irq[priority] : 0; =20 switch (priority) { case MIPS_EXC_INT_TIMER: @@ -329,7 +291,8 @@ static int kvm_vz_irq_clear_cb(struct kvm_vcpu *vcpu, u= nsigned int priority, } break; =20 - case MIPS_EXC_INT_IO: + case MIPS_EXC_INT_IO_1: + case MIPS_EXC_INT_IO_2: case MIPS_EXC_INT_IPI_1: case MIPS_EXC_INT_IPI_2: /* Clear GuestCtl2.VIP irq if not using Hardware Clear */ --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762950; cv=none; d=zohomail.com; s=zohoarc; b=Mzj4oYcjgn3N3KSwLp56cj96nQcGM9rPgdJQ0nQLSdNF24zEYwOpXPSxQpPvQ7nEwWV+qKp0JsPlo1TnTJ1774dexHYuqZ86//tuKhZVlZL2lPCcIIX9K0RGAZcnkh5L4eSiofrsqumlhqt2npSLZbCqn8hEajP2zfsMlYfoYh4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762950; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=E5XZsIYrkFoN+5jD0I/wrFbIiXPkxWIW2fV5KwTgBEQ=; b=fDnyxsfkpSzdTx9LNeRed7T8i+ODlAU8OJK898u3n4KP6fZItgTRzXJk/2Fy1cTBfkxF9yAAST37o0wFqqmWNxRzgWhRBotTsowhBVlVX1aZkva/1bbT6ypLezvYCS4XGrq/yF7AphZU0/p2O2HrTiHnOE0J6dv1FasZD0gQn7Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586762950445444.7128615062012; Mon, 13 Apr 2020 00:29:10 -0700 (PDT) Received: from localhost ([::1]:41230 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtWn-0005Y4-3e for importer@patchew.org; Mon, 13 Apr 2020 03:29:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37778) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtVR-0003rG-IJ for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:27:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtVP-0000yq-Jv for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:27:45 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:32801) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtVP-0000yS-6K for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:27:43 -0400 Received: by mail-pf1-x444.google.com with SMTP id c138so4174312pfc.0 for ; Mon, 13 Apr 2020 00:27:43 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.27.39 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:27:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=E5XZsIYrkFoN+5jD0I/wrFbIiXPkxWIW2fV5KwTgBEQ=; b=U+9g9P4Vw69qaDQk3gys+jQLuU/kCp9CvuU+g3pGc6BKknmKHDJlxVPExvg3zBv4kD lF6tUZYcIYyR6DhGqHo/XF+ASNt9ZnmkERoe3Y45rLMaWjMfh6SWtlBqX1x05NyWLRaS /ZxSGletmTcXrnBUObh+xfVJI1XH6GugJnx9HtFAfCK/nu9JZgd220pi0pAkA1/IXHD0 bEuPYNzFJktX/fFdkaiBYlke0PGujrhfIfjMLzlfMd056gSDZ7Y7CGycGjyBBHsG6BL5 zkEfelWSnOJ800NfTODxsu7UJj5sp1ewMm4cvNvC6IHq4hMG7HkEAPcuUjyNyQDBErRk 57Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=E5XZsIYrkFoN+5jD0I/wrFbIiXPkxWIW2fV5KwTgBEQ=; b=EewbYh2KWzhMZErpfrBIQLZ4d/dfQqTrhsnEGEYlf3Vhpuz7y6RxaVXyN4rDX1zTHv D8JW+yC6yZwFPC6uvMIyuElllph12AByo+OOz7DGuCbsr8XfVV7QWTakLQUOdoCZaU85 ouU4mhcZixxtNfb3g7w0f4Py4orp5FO7N9UPjYkl8HLzeWa2bkTG8rHwuVULOX558zpD l1eiwiY8lbeaoGC3RltG7kM8bqoDtRFK1Kh9hxIEwmf+xgnsUYx6+iRn4CT/6iYOQ5Yj kGoAUf7TyeDrs57M2NjlMOeFmJIJn+pJwuRGCrnRu5oBHkzbgzkYeBeWOabtkeZh9UAi 9a7w== X-Gm-Message-State: AGi0PuZBhZryXLnf9nLMQ6KUPPLdHIND49dPk+dciA/fnMjza2U3AAy4 fJQroOqr/jQLr/bIO9rq1IM= X-Google-Smtp-Source: APiQypJOPUPgo1mrI2VzVpnQy4tPiVfjCCn1bn/fu8hLYrHYsLB8kwYoXC4VuJRWgZ3eO9qL2aDOrA== X-Received: by 2002:a63:5f01:: with SMTP id t1mr15385599pgb.186.1586762862161; Mon, 13 Apr 2020 00:27:42 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 11/15] KVM: MIPS: Add Loongson-3 Virtual IPI interrupt support Date: Mon, 13 Apr 2020 15:30:20 +0800 Message-Id: <1586763024-12197-12-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch add Loongson-3 Virtual IPI interrupt support in the kernel, because emulate it in QEMU is too expensive for performance. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/include/asm/kvm_host.h | 32 ++++++ arch/mips/kvm/Makefile | 3 + arch/mips/kvm/emulate.c | 21 +++- arch/mips/kvm/loongson_ipi.c | 215 +++++++++++++++++++++++++++++++++++= ++++ arch/mips/kvm/mips.c | 6 ++ 5 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 arch/mips/kvm/loongson_ipi.c diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_h= ost.h index 2258a2e..4022712 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h @@ -23,6 +23,8 @@ #include #include =20 +#include + /* MIPS KVM register ids */ #define MIPS_CP0_32(_R, _S) \ (KVM_REG_MIPS_CP0 | KVM_REG_SIZE_U32 | (8 * (_R) + (_S))) @@ -181,11 +183,39 @@ struct kvm_vcpu_stat { struct kvm_arch_memory_slot { }; =20 +#ifdef CONFIG_CPU_LOONGSON64 +typedef struct ipi_state { + uint32_t status; + uint32_t en; + uint32_t set; + uint32_t clear; + uint64_t buf[4]; +} ipi_state; + +struct loongson_kvm_ipi; + +typedef struct ipi_io_device { + int node_id; + struct loongson_kvm_ipi *ipi; + struct kvm_io_device device; +} ipi_io_device; + +struct loongson_kvm_ipi { + spinlock_t lock; + struct kvm *kvm; + ipi_state ipistate[16]; + ipi_io_device dev_ipi[4]; +}; +#endif + struct kvm_arch { /* Guest physical mm */ struct mm_struct gpa_mm; /* Mask of CPUs needing GPA ASID flush */ cpumask_t asid_flush_mask; +#ifdef CONFIG_CPU_LOONGSON64 + struct loongson_kvm_ipi ipi; +#endif }; =20 #define N_MIPS_COPROC_REGS 32 @@ -1133,6 +1163,8 @@ extern int kvm_mips_trans_mtc0(union mips_instruction= inst, u32 *opc, /* Misc */ extern void kvm_mips_dump_stats(struct kvm_vcpu *vcpu); extern unsigned long kvm_mips_get_ramsize(struct kvm *kvm); +extern int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, + struct kvm_mips_interrupt *irq); =20 static inline void kvm_arch_hardware_unsetup(void) {} static inline void kvm_arch_sync_events(struct kvm *kvm) {} diff --git a/arch/mips/kvm/Makefile b/arch/mips/kvm/Makefile index 0a3cef6..506c4ac 100644 --- a/arch/mips/kvm/Makefile +++ b/arch/mips/kvm/Makefile @@ -13,6 +13,9 @@ kvm-objs :=3D $(common-objs-y) mips.o emulate.o entry.o \ fpu.o kvm-objs +=3D hypcall.o kvm-objs +=3D mmu.o +ifdef CONFIG_CPU_LOONGSON64 +kvm-objs +=3D loongson_ipi.o +endif =20 ifdef CONFIG_KVM_MIPS_VZ kvm-objs +=3D vz.o diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c index 754094b..aa2db51 100644 --- a/arch/mips/kvm/emulate.c +++ b/arch/mips/kvm/emulate.c @@ -1600,6 +1600,7 @@ enum emulation_result kvm_mips_emulate_store(union mi= ps_instruction inst, struct kvm_run *run, struct kvm_vcpu *vcpu) { + int r; enum emulation_result er; u32 rt; void *data =3D run->mmio.data; @@ -1666,9 +1667,17 @@ enum emulation_result kvm_mips_emulate_store(union m= ips_instruction inst, goto out_fail; } =20 - run->mmio.is_write =3D 1; vcpu->mmio_needed =3D 1; + run->mmio.is_write =3D 1; vcpu->mmio_is_write =3D 1; + + r =3D kvm_io_bus_write(vcpu, KVM_MMIO_BUS, run->mmio.phys_addr, run->mmio= .len, data); + + if (!r) { + vcpu->mmio_needed =3D 0; + return EMULATE_DONE; + } + return EMULATE_DO_MMIO; =20 out_fail: @@ -1681,6 +1690,7 @@ enum emulation_result kvm_mips_emulate_load(union mip= s_instruction inst, u32 cause, struct kvm_run *run, struct kvm_vcpu *vcpu) { + int r; enum emulation_result er; unsigned long curr_pc; u32 op, rt; @@ -1745,6 +1755,15 @@ enum emulation_result kvm_mips_emulate_load(union mi= ps_instruction inst, =20 run->mmio.is_write =3D 0; vcpu->mmio_is_write =3D 0; + + r =3D kvm_io_bus_read(vcpu, KVM_MMIO_BUS, run->mmio.phys_addr, run->mmio.= len, run->mmio.data); + + if (!r) { + kvm_mips_complete_mmio_load(vcpu, run); + vcpu->mmio_needed =3D 0; + return EMULATE_DONE; + } + return EMULATE_DO_MMIO; } =20 diff --git a/arch/mips/kvm/loongson_ipi.c b/arch/mips/kvm/loongson_ipi.c new file mode 100644 index 00000000..3e22532 --- /dev/null +++ b/arch/mips/kvm/loongson_ipi.c @@ -0,0 +1,215 @@ +/* + * This file is subject to the terms and conditions of the GNU General Pub= lic + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Loongson-3 Virtual IPI interrupt support. + * + * Copyright (C) 2019 Loongson Technologies, Inc. All rights reserved. + * + * Authors: Chen Zhu + * Authors: Huacai Chen + */ + +#include + +#define IPI_BASE 0x3ff01000ULL + +#define CORE0_STATUS_OFF 0x000 +#define CORE0_EN_OFF 0x004 +#define CORE0_SET_OFF 0x008 +#define CORE0_CLEAR_OFF 0x00c +#define CORE0_BUF_20 0x020 +#define CORE0_BUF_28 0x028 +#define CORE0_BUF_30 0x030 +#define CORE0_BUF_38 0x038 + +#define CORE1_STATUS_OFF 0x100 +#define CORE1_EN_OFF 0x104 +#define CORE1_SET_OFF 0x108 +#define CORE1_CLEAR_OFF 0x10c +#define CORE1_BUF_20 0x120 +#define CORE1_BUF_28 0x128 +#define CORE1_BUF_30 0x130 +#define CORE1_BUF_38 0x138 + +#define CORE2_STATUS_OFF 0x200 +#define CORE2_EN_OFF 0x204 +#define CORE2_SET_OFF 0x208 +#define CORE2_CLEAR_OFF 0x20c +#define CORE2_BUF_20 0x220 +#define CORE2_BUF_28 0x228 +#define CORE2_BUF_30 0x230 +#define CORE2_BUF_38 0x238 + +#define CORE3_STATUS_OFF 0x300 +#define CORE3_EN_OFF 0x304 +#define CORE3_SET_OFF 0x308 +#define CORE3_CLEAR_OFF 0x30c +#define CORE3_BUF_20 0x320 +#define CORE3_BUF_28 0x328 +#define CORE3_BUF_30 0x330 +#define CORE3_BUF_38 0x338 + +static int loongson_vipi_read(struct loongson_kvm_ipi *ipi, gpa_t addr, in= t len, void *val) +{ + uint32_t core =3D (addr >> 8) & 3; + uint32_t node =3D (addr >> 44) & 3; + uint32_t id =3D core + node * 4; + uint64_t offset =3D addr & 0xff; + void *pbuf; + ipi_state *s =3D &(ipi->ipistate[id]); + + BUG_ON(offset & (len - 1)); + + switch (offset) { + case CORE0_STATUS_OFF: + *(uint64_t *)val =3D s->status; + break; + + case CORE0_EN_OFF: + *(uint64_t *)val =3D s->en; + break; + + case CORE0_SET_OFF: + *(uint64_t *)val =3D 0; + break; + + case CORE0_CLEAR_OFF: + *(uint64_t *)val =3D 0; + break; + + case CORE0_BUF_20 ... CORE0_BUF_38: + pbuf =3D (void *)s->buf + (offset - 0x20); + if (len =3D=3D 8) + *(uint64_t *)val =3D *(uint64_t *)pbuf; + else /* Assume len =3D=3D 4 */ + *(uint32_t *)val =3D *(uint32_t *)pbuf; + break; + + default: + printk("loongson_vipi_read() with unknown addr %llx \n", addr); + break; + } + + return 0; +} + +static int loongson_vipi_write(struct loongson_kvm_ipi *ipi, gpa_t addr, i= nt len, const void *val) +{ + uint32_t core =3D (addr >> 8) & 3; + uint32_t node =3D (addr >> 44) & 3; + uint32_t id =3D core + node * 4; + uint64_t data, offset =3D addr & 0xff; + void *pbuf; + struct kvm *kvm =3D ipi->kvm; + struct kvm_mips_interrupt irq; + ipi_state *s =3D &(ipi->ipistate[id]); + + data =3D *(uint64_t *)val; + BUG_ON(offset & (len - 1)); + + switch (offset) { + case CORE0_STATUS_OFF: + break; + + case CORE0_EN_OFF: + s->en =3D data; + break; + + case CORE0_SET_OFF: + s->status |=3D data; + irq.cpu =3D id; + irq.irq =3D 6; + kvm_vcpu_ioctl_interrupt(kvm->vcpus[id], &irq); + break; + + case CORE0_CLEAR_OFF: + s->status &=3D ~data; + if (!s->status) { + irq.cpu =3D id; + irq.irq =3D -6; + kvm_vcpu_ioctl_interrupt(kvm->vcpus[id],&irq); + } + break; + + case CORE0_BUF_20 ... CORE0_BUF_38: + pbuf =3D (void *)s->buf + (offset - 0x20); + if (len =3D=3D 8) + *(uint64_t *)pbuf =3D (uint64_t)data; + else /* Assume len =3D=3D 4 */ + *(uint32_t *)pbuf =3D (uint32_t)data; + break; + + default: + printk("loongson_vipi_write() with unknown addr %llx \n", addr); + break; + } + + return 0; +} + +static int kvm_ipi_read(struct kvm_vcpu *vcpu, struct kvm_io_device *dev, + gpa_t addr, int len, void *val) +{ + unsigned long flags; + ipi_io_device *ipi_device; + struct loongson_kvm_ipi *ipi; + + ipi_device =3D container_of(dev, ipi_io_device, device); + ipi =3D ipi_device->ipi; + + spin_lock_irqsave(&ipi->lock, flags); + loongson_vipi_read(ipi, addr, len, val); + spin_unlock_irqrestore(&ipi->lock, flags); + + return 0; +} + +static int kvm_ipi_write(struct kvm_vcpu *vcpu, struct kvm_io_device *dev, + gpa_t addr, int len, const void *val) +{ + unsigned long flags; + ipi_io_device *ipi_device; + struct loongson_kvm_ipi *ipi; + + ipi_device =3D container_of(dev, ipi_io_device, device); + ipi =3D ipi_device->ipi; + + spin_lock_irqsave(&ipi->lock, flags); + loongson_vipi_write(ipi, addr, len, val); + spin_unlock_irqrestore(&ipi->lock, flags); + + return 0; +} + +static const struct kvm_io_device_ops kvm_ipi_ops =3D { + .read =3D kvm_ipi_read, + .write =3D kvm_ipi_write, +}; + +void kvm_init_loongson_ipi(struct kvm *kvm) +{ + int i; + unsigned long addr; + struct loongson_kvm_ipi *s; + struct kvm_io_device *device; + + s =3D &kvm->arch.ipi; + s->kvm =3D kvm; + spin_lock_init(&s->lock); + + /* + * Initialize IPI device + */ + for (i =3D 0; i < 4; i++) { + device =3D &s->dev_ipi[i].device; + kvm_iodevice_init(device, &kvm_ipi_ops); + addr =3D (((unsigned long)i) << 44) + IPI_BASE; + mutex_lock(&kvm->slots_lock); + kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, addr, 0x400, device); + mutex_unlock(&kvm->slots_lock); + s->dev_ipi[i].ipi =3D s; + s->dev_ipi[i].node_id =3D i; + } +} diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c index 5c3a414..20acd50 100644 --- a/arch/mips/kvm/mips.c +++ b/arch/mips/kvm/mips.c @@ -128,6 +128,8 @@ int kvm_arch_check_processor_compat(void) return 0; } =20 +extern void kvm_init_loongson_ipi(struct kvm *kvm); + int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) { switch (type) { @@ -147,6 +149,10 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long ty= pe) if (!kvm->arch.gpa_mm.pgd) return -ENOMEM; =20 +#ifdef CONFIG_CPU_LOONGSON64 + kvm_init_loongson_ipi(kvm); +#endif + return 0; } =20 --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586762991; cv=none; d=zohomail.com; s=zohoarc; b=S8qi2D1IzUDupy3LklkWFLo7NS92qgwlxJCN3v+EY1nMcnRD2IUzlXNHFCQorzRt66PLwSEyOIPHWFper/Vz6f5yrDakd/eAz1IO98esOZWc2QZ41KHt0IaGGwsb7KzpNkWWuZb6vVwKYZ2ztTHmZKulBKul+bQHgi/o48G2Aik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586762991; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=S3hrCRfxrjHE0eXCcEPzbUk7x0CckK6gtsl1aNOJN6A=; b=EDgDVM/Ugxy2V2j7mKp3ySperlaSJPTMUl2Sm1PwGedObRsN0THP8tug6f3Dox4u4uox1mTVGBmqD3FKqCZK2mA9toccM2tP9pCDPdVVOwTvSN3DtS1KckzvqX0cXFSbtqsps6UwgQolYoJE/vNIjZRzTT6GcczZBQyYGU4IDYA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158676299125636.53450656224288; Mon, 13 Apr 2020 00:29:51 -0700 (PDT) Received: from localhost ([::1]:41236 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtXR-0006zU-Nm for importer@patchew.org; Mon, 13 Apr 2020 03:29:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37903) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtWE-00057d-Cj for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:28:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtWD-0001Pz-3c for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:28:34 -0400 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]:32805) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtWC-0001Po-UC for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:28:33 -0400 Received: by mail-pf1-x441.google.com with SMTP id c138so4174960pfc.0 for ; Mon, 13 Apr 2020 00:28:32 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.28.28 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:28:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=S3hrCRfxrjHE0eXCcEPzbUk7x0CckK6gtsl1aNOJN6A=; b=L4mPHI1YNO11GHCIk/q49dUVSuiSd1ntFPAWEiFZ8cQK/c9UA/VR6BrT3X8EF614+S hbA+ZetQzHcW6kqmCNZL+vWe2swQePf50Hq5L6zOfGEEe7QzgXNIiePHBk3aXaIHq51/ oGuiCZcQsDRdGN6Eno2le70i1U0kdY2JEZrx1zRvC0jupB0K1ZBCETo0Nibe5EeY/tRR xn24u92AsQLXWVqDM8h7WMtKWT4mFjANIyAEZzAFXSEVesHAAFHOcdr+Fxe6p/NrAxhD tWTAxSS0CkL9Hoc2rs8GmfXg8wno7IVU7f8TORZeexi/UVovbH8yFNrj1FL6Flv9ZG/1 Vduw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=S3hrCRfxrjHE0eXCcEPzbUk7x0CckK6gtsl1aNOJN6A=; b=f0dEWOIiburG09pMrCU4tYt0TP/ENeCvlxww0v26FGi+HT7HRi/0UgIxD8YpjSedLP vZOudK0W45N6hG0oUMvqC00Vfy3fBrsnvr8T9TwMtHAYUtyQnNFMb5w4vQmBdMLn1Ntx s3PPBRvdeBcxVVwI2h0gk7RKSmAuNGXpq8EcvZrublFwTQmh6zXJGILRPVfBtrZf307T 0xgx8wrnn73TA5Wl8cUMaN7RhJRi0hpfb4TGuLTONu+76jHfaDvCDKx347gJxO+fGq8Q 6Yt78pYM6hh3wwTjqKnwA2yjxtJacvTqlzBu5FmZgBgs6iNSM5kIfrWNIL//Hv7VV5QY +01Q== X-Gm-Message-State: AGi0PuZyVAfEsHJGjUEslUqcvCAJAoFF5Dte11/QyuLAMtapvsF6w0sZ 6fZbVPgU3WKoUaNuHyLoJnwIFx+s7kk= X-Google-Smtp-Source: APiQypLSUUUMvMBfYp4+yShQ1DEsf6XH5JRKGMUPdRFbylQv6kvnJmdBqMrN0RxDJqyxYpMzd4B2uw== X-Received: by 2002:a62:5e86:: with SMTP id s128mr17390854pfb.157.1586762911480; Mon, 13 Apr 2020 00:28:31 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 12/15] KVM: MIPS: Add CPUCFG emulation for Loongson-3 Date: Mon, 13 Apr 2020 15:30:21 +0800 Message-Id: <1586763024-12197-13-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::441 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Loongson-3 overrides lwc2 instructions to implement CPUCFG and CSR read/write functions. These instructions all cause guest exit so CSR doesn't benifit KVM guest (and there are always legacy methods to provide the same functions as CSR). So, we only emulate CPUCFG and let it return 0 (which means the virtual CPU doesn't have any advanced features, including CSR) in KVM. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/include/asm/kvm_host.h | 3 +++ arch/mips/include/uapi/asm/inst.h | 11 +++++++++ arch/mips/kvm/mips.c | 3 +++ arch/mips/kvm/vz.c | 50 +++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 67 insertions(+) diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_h= ost.h index 4022712..c291767 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h @@ -173,6 +173,9 @@ struct kvm_vcpu_stat { u64 vz_ghfc_exits; u64 vz_gpa_exits; u64 vz_resvd_exits; +#ifdef CONFIG_CPU_LOONGSON64 + u64 vz_cpucfg_exits; +#endif #endif u64 halt_successful_poll; u64 halt_attempted_poll; diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm= /inst.h index 98f97c8..43d1faa 100644 --- a/arch/mips/include/uapi/asm/inst.h +++ b/arch/mips/include/uapi/asm/inst.h @@ -1012,6 +1012,16 @@ struct loongson3_lsdc2_format { /* Loongson-3 overri= dden ldc2/sdc2 Load/Store fo ;)))))) }; =20 +struct loongson3_lscsr_format { /* Loongson-3 CPUCFG&CSR read/write format= */ + __BITFIELD_FIELD(unsigned int opcode : 6, + __BITFIELD_FIELD(unsigned int rs : 5, + __BITFIELD_FIELD(unsigned int fr : 5, + __BITFIELD_FIELD(unsigned int rd : 5, + __BITFIELD_FIELD(unsigned int fd : 5, + __BITFIELD_FIELD(unsigned int func : 6, + ;)))))) +}; + /* * MIPS16e instruction formats (16-bit length) */ @@ -1114,6 +1124,7 @@ union mips_instruction { struct mm16_r5_format mm16_r5_format; struct loongson3_lswc2_format loongson3_lswc2_format; struct loongson3_lsdc2_format loongson3_lsdc2_format; + struct loongson3_lscsr_format loongson3_lscsr_format; }; =20 union mips16e_instruction { diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c index 20acd50..2d9ce8d 100644 --- a/arch/mips/kvm/mips.c +++ b/arch/mips/kvm/mips.c @@ -68,6 +68,9 @@ struct kvm_stats_debugfs_item debugfs_entries[] =3D { { "vz_ghfc", VCPU_STAT(vz_ghfc_exits), KVM_STAT_VCPU }, { "vz_gpa", VCPU_STAT(vz_gpa_exits), KVM_STAT_VCPU }, { "vz_resvd", VCPU_STAT(vz_resvd_exits), KVM_STAT_VCPU }, +#ifdef CONFIG_CPU_LOONGSON64 + { "vz_cpucfg", VCPU_STAT(vz_cpucfg_exits), KVM_STAT_VCPU }, +#endif #endif { "halt_successful_poll", VCPU_STAT(halt_successful_poll), KVM_STAT_VCPU = }, { "halt_attempted_poll", VCPU_STAT(halt_attempted_poll), KVM_STAT_VCPU }, diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index db9b0f5..0772565 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -29,6 +29,7 @@ #include =20 #include "interrupt.h" +#include "loongson_regs.h" =20 #include "trace.h" =20 @@ -1092,6 +1093,50 @@ static enum emulation_result kvm_vz_gpsi_cache(union= mips_instruction inst, return EMULATE_FAIL; } =20 +#ifdef CONFIG_CPU_LOONGSON64 +static enum emulation_result kvm_vz_gpsi_lwc2(union mips_instruction inst, + u32 *opc, u32 cause, + struct kvm_run *run, + struct kvm_vcpu *vcpu) +{ + unsigned int rs, rd; + unsigned long curr_pc; + enum emulation_result er =3D EMULATE_DONE; + + /* + * Update PC and hold onto current PC in case there is + * an error and we want to rollback the PC + */ + curr_pc =3D vcpu->arch.pc; + er =3D update_pc(vcpu, cause); + if (er =3D=3D EMULATE_FAIL) + return er; + + rs =3D inst.loongson3_lscsr_format.rs; + rd =3D inst.loongson3_lscsr_format.rd; + switch (inst.loongson3_lscsr_format.fr) { + case 0x8: /* Read CPUCFG */ + ++vcpu->stat.vz_cpucfg_exits; + vcpu->arch.gprs[rd] =3D 0; /* Don't export any advanced features to gue= st */ + break; + default: + kvm_err("lwc2 emulate not impl %d rs %lx @%lx\n", + inst.loongson3_lscsr_format.fr, vcpu->arch.gprs[rs], curr_pc); + er =3D EMULATE_FAIL; + break; + } + /* Rollback PC only if emulation was unsuccessful */ + if (er =3D=3D EMULATE_FAIL) { + kvm_err("[%#lx]%s: unsupported lwc2 instruction 0x%08x 0x%08x\n", + curr_pc, __func__, inst.word, inst.loongson3_lscsr_format.fr); + + vcpu->arch.pc =3D curr_pc; + } + + return er; +} +#endif + static enum emulation_result kvm_trap_vz_handle_gpsi(u32 cause, u32 *opc, struct kvm_vcpu *vcpu) { @@ -1121,6 +1166,11 @@ static enum emulation_result kvm_trap_vz_handle_gpsi= (u32 cause, u32 *opc, er =3D kvm_vz_gpsi_cache(inst, opc, cause, run, vcpu); break; #endif +#ifdef CONFIG_CPU_LOONGSON64 + case lwc2_op: + er =3D kvm_vz_gpsi_lwc2(inst, opc, cause, run, vcpu); + break; +#endif case spec3_op: switch (inst.spec3_format.func) { #ifdef CONFIG_CPU_MIPSR6 --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586763037; cv=none; d=zohomail.com; s=zohoarc; b=CHrrEVHwnmjk6s4WgU4dvVS0doyha9kahg1Tvo7clDKlCre6KiiyQy3NHQWyrpZhU80KvfMtxpBQt+9dA0SkqkJyilEhQBXqZVAR9DIcuN16qhKt7P/QsygpqZtJVi5u5BBgkrLfri7KhyR14wN8GoNSZL9r97v11vDjQH4qoks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586763037; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=ihFiTVvzRtHlOYNilBTdu4VXvEKqopA+rTa1ABFZips=; b=dkjyyjSOMQ6GM2Jro8nSOtdYcIhQRZqy/n0jhOB0TQiH/ibsXmVwSGqbS6bzLaGjMnzyEzNdVNZGEJZzeO5UUV7twHdxYy9jdQghYW7/CuzcnhS3LNIf+nKKcyhqFhiNM1wU9pymeGKWYhEUvCN638a1aRBF3hjEo7bGhd4R/rc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586763037185461.75906331054296; Mon, 13 Apr 2020 00:30:37 -0700 (PDT) Received: from localhost ([::1]:41254 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtYB-000827-Ta for importer@patchew.org; Mon, 13 Apr 2020 03:30:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38086) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtXD-0007E9-Sz for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:29:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtXC-0001gE-5m for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:29:35 -0400 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]:40833) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtXA-0001fX-84 for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:29:33 -0400 Received: by mail-pj1-x1043.google.com with SMTP id kx8so3484146pjb.5 for ; Mon, 13 Apr 2020 00:29:31 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.29.27 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:29:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=ihFiTVvzRtHlOYNilBTdu4VXvEKqopA+rTa1ABFZips=; b=ZT433gA8TI3lVZ6hM2x5/wpT3HOPJYiCemSB2jIpjydRnpGCF3sgQjnv/yiiKyYUiv 3mXjNxZug4pK6T/1OPdgFInz/vmU6GOrxNZyZDkxeJzaJ7UQxIMbzqAN2lzFqszYhYA+ crZ4tpe+gN9Q7MvLkSyrSguYMfCyXJFKF2SX+/IbmvneSfMF8DZBw2Ehn2MS94MLKqUb 9QeYXb8l+3I1tB1UvEfODIbjaI7Cd1cXy1+NGvSSAW7uAdrdmAifVuxhfeapdyqWMWya sdjH+WjU0oV/2Kws+7QfBuRHkWCmuDl5k9xE89n/RfNmZl/pwYNhf83pjuGD9vKf7Y87 NmDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=ihFiTVvzRtHlOYNilBTdu4VXvEKqopA+rTa1ABFZips=; b=DpdoxcngSmJ6KurBQg1qM6Dss2FPzHCzWEaiMiCcVh5uj6xnU8+djzTuxkdG+lrWUI Q6BeAHRVs/7nQe9paFMC+X+HRBNFtPDsp6QEfoCHZGVmH0K5mNW0b7+HFLy9d6RoeHvY BskcQYr0zsovDx2gZePb4hfeAqui5uP3TlWuX0w6rzHyRNEaIaRHDESAF/YX4BXxAPnT 27UprWLrOLhejphKjCfhb44bjeoRC5yY6Hkx4L7bdllWvlepOLb3yGmG3gI9bvlu6bc4 lqVd3QxgfxEc3UGFxns4+1Oni/uADwLin9MBDgOfvuwSGmopSzsXSFx/TvnAadX5IzzE Qc2g== X-Gm-Message-State: AGi0PuYPeiJgE5s6BOfgri3MYicXVT6NM74gtQNnLg/yQTdeUsgBW0Rf +LtbRztZhVqP1p/q6cbRbHk= X-Google-Smtp-Source: APiQypKGSQzTY/Yqn4uNxJB1FylNvhg2qrqd07ISl3307l2NMVR7+TPKm7pPQ/YBi10MHrTHU06f9g== X-Received: by 2002:a17:902:7581:: with SMTP id j1mr16781460pll.171.1586762970255; Mon, 13 Apr 2020 00:29:30 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 13/15] KVM: MIPS: Add CONFIG6 and DIAG registers emulation Date: Mon, 13 Apr 2020 15:30:22 +0800 Message-Id: <1586763024-12197-14-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::1043 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Loongson-3 has CONFIG6 and DIAG registers which need to be emulate. CONFIG6 is mostly used to enable/disable FTLB and SFB, while DIAG is mostly used to flush BTB, ITLB, DTLB, VTLB and FTLB. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/include/asm/kvm_host.h | 5 ++++ arch/mips/include/asm/mipsregs.h | 7 +++++ arch/mips/kvm/tlb.c | 39 +++++++++++++++++++++++++++ arch/mips/kvm/vz.c | 58 ++++++++++++++++++++++++++++++++++++= +++- 4 files changed, 108 insertions(+), 1 deletion(-) diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_h= ost.h index c291767..3ef6ca8 100644 --- a/arch/mips/include/asm/kvm_host.h +++ b/arch/mips/include/asm/kvm_host.h @@ -68,9 +68,11 @@ #define KVM_REG_MIPS_CP0_CONFIG3 MIPS_CP0_32(16, 3) #define KVM_REG_MIPS_CP0_CONFIG4 MIPS_CP0_32(16, 4) #define KVM_REG_MIPS_CP0_CONFIG5 MIPS_CP0_32(16, 5) +#define KVM_REG_MIPS_CP0_CONFIG6 MIPS_CP0_32(16, 6) #define KVM_REG_MIPS_CP0_CONFIG7 MIPS_CP0_32(16, 7) #define KVM_REG_MIPS_CP0_MAARI MIPS_CP0_64(17, 2) #define KVM_REG_MIPS_CP0_XCONTEXT MIPS_CP0_64(20, 0) +#define KVM_REG_MIPS_CP0_DIAG MIPS_CP0_32(22, 0) #define KVM_REG_MIPS_CP0_ERROREPC MIPS_CP0_64(30, 0) #define KVM_REG_MIPS_CP0_KSCRATCH1 MIPS_CP0_64(31, 2) #define KVM_REG_MIPS_CP0_KSCRATCH2 MIPS_CP0_64(31, 3) @@ -256,6 +258,7 @@ struct mips_coproc { #define MIPS_CP0_WATCH_LO 18 #define MIPS_CP0_WATCH_HI 19 #define MIPS_CP0_TLB_XCONTEXT 20 +#define MIPS_CP0_DIAG 22 #define MIPS_CP0_ECC 26 #define MIPS_CP0_CACHE_ERR 27 #define MIPS_CP0_TAG_LO 28 @@ -927,6 +930,8 @@ void kvm_vz_save_guesttlb(struct kvm_mips_tlb *buf, uns= igned int index, unsigned int count); void kvm_vz_load_guesttlb(const struct kvm_mips_tlb *buf, unsigned int ind= ex, unsigned int count); +void kvm_loongson_clear_guest_vtlb(void); +void kvm_loongson_clear_guest_ftlb(void); #endif =20 void kvm_mips_suspend_mm(int cpu); diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsr= egs.h index 796fe47..ce40fbf 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h @@ -674,6 +674,9 @@ #define MIPS_CONF5_CV (_ULCAST_(1) << 29) #define MIPS_CONF5_K (_ULCAST_(1) << 30) =20 +#define MIPS_CONF6_INTIMER (_ULCAST_(1) << 6) +#define MIPS_CONF6_EXTIMER (_ULCAST_(1) << 7) +#define MIPS_CONF6_SFBEN (_ULCAST_(1) << 8) #define MIPS_CONF6_SYND (_ULCAST_(1) << 13) /* proAptiv FTLB on/off bit */ #define MIPS_CONF6_FTLBEN (_ULCAST_(1) << 15) @@ -993,6 +996,8 @@ /* Disable Branch Return Cache */ #define R10K_DIAG_D_BRC (_ULCAST_(1) << 22) =20 +/* Flush BTB */ +#define LOONGSON_DIAG_BTB (_ULCAST_(1) << 1) /* Flush ITLB */ #define LOONGSON_DIAG_ITLB (_ULCAST_(1) << 2) /* Flush DTLB */ @@ -2825,7 +2830,9 @@ __BUILD_SET_C0(status) __BUILD_SET_C0(cause) __BUILD_SET_C0(config) __BUILD_SET_C0(config5) +__BUILD_SET_C0(config6) __BUILD_SET_C0(config7) +__BUILD_SET_C0(diag) __BUILD_SET_C0(intcontrol) __BUILD_SET_C0(intctl) __BUILD_SET_C0(srsmap) diff --git a/arch/mips/kvm/tlb.c b/arch/mips/kvm/tlb.c index 7cd9216..1efb9a0 100644 --- a/arch/mips/kvm/tlb.c +++ b/arch/mips/kvm/tlb.c @@ -20,6 +20,7 @@ =20 #include #include +#include #include #include #include @@ -622,6 +623,44 @@ void kvm_vz_load_guesttlb(const struct kvm_mips_tlb *b= uf, unsigned int index, } EXPORT_SYMBOL_GPL(kvm_vz_load_guesttlb); =20 +void kvm_loongson_clear_guest_vtlb(void) +{ + int idx =3D read_gc0_index(); + + /* Set root GuestID for root probe and write of guest TLB entry */ + set_root_gid_to_guest_gid(); + + write_gc0_index(0); + guest_tlbinvf(); + write_gc0_index(idx); + + clear_root_gid(); + set_c0_diag(LOONGSON_DIAG_ITLB | LOONGSON_DIAG_DTLB); +} +EXPORT_SYMBOL_GPL(kvm_loongson_clear_guest_vtlb); + +void kvm_loongson_clear_guest_ftlb(void) +{ + int i; + int idx =3D read_gc0_index(); + + /* Set root GuestID for root probe and write of guest TLB entry */ + set_root_gid_to_guest_gid(); + + for (i =3D current_cpu_data.tlbsizevtlb; + i < (current_cpu_data.tlbsizevtlb + + current_cpu_data.tlbsizeftlbsets); + i++) { + write_gc0_index(i); + guest_tlbinvf(); + } + write_gc0_index(idx); + + clear_root_gid(); + set_c0_diag(LOONGSON_DIAG_ITLB | LOONGSON_DIAG_DTLB); +} +EXPORT_SYMBOL_GPL(kvm_loongson_clear_guest_ftlb); + #endif =20 /** diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index 0772565..2ea1f13 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -127,6 +127,11 @@ static inline unsigned int kvm_vz_config5_guest_wrmask= (struct kvm_vcpu *vcpu) return mask; } =20 +static inline unsigned int kvm_vz_config6_guest_wrmask(struct kvm_vcpu *vc= pu) +{ + return MIPS_CONF6_INTIMER | MIPS_CONF6_EXTIMER | MIPS_CONF6_SYND; +} + /* * VZ optionally allows these additional Config bits to be written by root: * Config: M, [MT] @@ -181,6 +186,12 @@ static inline unsigned int kvm_vz_config5_user_wrmask(= struct kvm_vcpu *vcpu) return kvm_vz_config5_guest_wrmask(vcpu) | MIPS_CONF5_MRP; } =20 +static inline unsigned int kvm_vz_config6_user_wrmask(struct kvm_vcpu *vcp= u) +{ + return kvm_vz_config6_guest_wrmask(vcpu) | + MIPS_CONF6_SFBEN | MIPS_CONF6_FTLBEN | MIPS_CONF6_FTLBDIS; +} + static gpa_t kvm_vz_gva_to_gpa_cb(gva_t gva) { /* VZ guest has already converted gva to gpa */ @@ -930,7 +941,8 @@ static enum emulation_result kvm_vz_gpsi_cop0(union mip= s_instruction inst, (sel =3D=3D 2 || /* SRSCtl */ sel =3D=3D 3)) || /* SRSMap */ (rd =3D=3D MIPS_CP0_CONFIG && - (sel =3D=3D 7)) || /* Config7 */ + (sel =3D=3D 6 || /* Config6 */ + sel =3D=3D 7)) || /* Config7 */ (rd =3D=3D MIPS_CP0_LLADDR && (sel =3D=3D 2) && /* MAARI */ cpu_guest_has_maar && @@ -938,6 +950,9 @@ static enum emulation_result kvm_vz_gpsi_cop0(union mip= s_instruction inst, (rd =3D=3D MIPS_CP0_ERRCTL && (sel =3D=3D 0))) { /* ErrCtl */ val =3D cop0->reg[rd][sel]; + } else if (rd =3D=3D MIPS_CP0_DIAG && + (sel =3D=3D 0)) { /* Diag */ + val =3D cop0->reg[rd][sel]; } else { val =3D 0; er =3D EMULATE_FAIL; @@ -1000,9 +1015,38 @@ static enum emulation_result kvm_vz_gpsi_cop0(union = mips_instruction inst, cpu_guest_has_maar && !cpu_guest_has_dyn_maar) { kvm_write_maari(vcpu, val); + } else if (rd =3D=3D MIPS_CP0_CONFIG && + (sel =3D=3D 6)) { + cop0->reg[rd][sel] =3D (int)val; } else if (rd =3D=3D MIPS_CP0_ERRCTL && (sel =3D=3D 0)) { /* ErrCtl */ /* ignore the written value */ + } else if (rd =3D=3D MIPS_CP0_DIAG && + (sel =3D=3D 0)) { /* Diag */ + unsigned long flags; + + local_irq_save(flags); + if (val & LOONGSON_DIAG_BTB) { + /* Flush BTB */ + set_c0_diag(LOONGSON_DIAG_BTB); + } + if (val & LOONGSON_DIAG_ITLB) { + /* Flush ITLB */ + set_c0_diag(LOONGSON_DIAG_ITLB); + } + if (val & LOONGSON_DIAG_DTLB) { + /* Flush DTLB */ + set_c0_diag(LOONGSON_DIAG_DTLB); + } + if (val & LOONGSON_DIAG_VTLB) { + /* Flush VTLB */ + kvm_loongson_clear_guest_vtlb(); + } + if (val & LOONGSON_DIAG_FTLB) { + /* Flush FTLB */ + kvm_loongson_clear_guest_ftlb(); + } + local_irq_restore(flags); } else { er =3D EMULATE_FAIL; } @@ -1665,6 +1709,7 @@ static u64 kvm_vz_get_one_regs[] =3D { KVM_REG_MIPS_CP0_CONFIG3, KVM_REG_MIPS_CP0_CONFIG4, KVM_REG_MIPS_CP0_CONFIG5, + KVM_REG_MIPS_CP0_CONFIG6, #ifdef CONFIG_64BIT KVM_REG_MIPS_CP0_XCONTEXT, #endif @@ -1992,6 +2037,9 @@ static int kvm_vz_get_one_reg(struct kvm_vcpu *vcpu, return -EINVAL; *v =3D read_gc0_config5(); break; + case KVM_REG_MIPS_CP0_CONFIG6: + *v =3D kvm_read_sw_gc0_config6(cop0); + break; case KVM_REG_MIPS_CP0_MAAR(0) ... KVM_REG_MIPS_CP0_MAAR(0x3f): if (!cpu_guest_has_maar || cpu_guest_has_dyn_maar) return -EINVAL; @@ -2261,6 +2309,14 @@ static int kvm_vz_set_one_reg(struct kvm_vcpu *vcpu, write_gc0_config5(v); } break; + case KVM_REG_MIPS_CP0_CONFIG6: + cur =3D kvm_read_sw_gc0_config6(cop0); + change =3D (cur ^ v) & kvm_vz_config6_user_wrmask(vcpu); + if (change) { + v =3D cur ^ change; + kvm_write_sw_gc0_config6(cop0, (int)v); + } + break; case KVM_REG_MIPS_CP0_MAAR(0) ... KVM_REG_MIPS_CP0_MAAR(0x3f): if (!cpu_guest_has_maar || cpu_guest_has_dyn_maar) return -EINVAL; --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586763108; cv=none; d=zohomail.com; s=zohoarc; b=Iq8ngYCfLcU2L2sXr/QWCGNZC14Z0TrjKgRx0TWBdiY4veyYsGXJAraSwsw8dJnjY1dMQYlplKi7Pc3TzfZ+Ir17M0gFjqiA92R99Zv7HYyhmlrg4MLYFX/6TB1rFlPPIJi7lSpI1GqeDUN5O3WEfsMXvAyY9BeP779PbBSxEX8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586763108; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=rPlWvUex0dTp890CT1YJuIP9dhFswyoaa9Bq6CJLA5I=; b=OFpwDERbfJv1lS5+gnC5CpYrqcedmXxnWHU6+d+k/BXsC9wuejLXb91T0GZwCVLXe9/Rvcb+hb0kaMinV77H7LSX8vgnpW43/eBqYQeYc64t5qKJhazyHT8Gg2GaNPRMUufBSWgrAhqcjIDxBjr+RtwL6reugpAtPx8pZL1gbrs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586763108500126.09317661798593; Mon, 13 Apr 2020 00:31:48 -0700 (PDT) Received: from localhost ([::1]:41274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtZL-0000gV-7H for importer@patchew.org; Mon, 13 Apr 2020 03:31:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38178) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtY4-0008Co-OY for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:30:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtY2-0001yP-OC for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:30:28 -0400 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]:47082) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtY2-0001y9-Ha for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:30:26 -0400 Received: by mail-pg1-x543.google.com with SMTP id k191so4106540pgc.13 for ; Mon, 13 Apr 2020 00:30:26 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.30.22 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:30:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=rPlWvUex0dTp890CT1YJuIP9dhFswyoaa9Bq6CJLA5I=; b=OTPxFH0Z40PxYOiSM39t+n5jALBmNZ4Qsg1acdRKGtauWtzcRxre6o+z6b0zUnQ3Jy 6ET9DJIFBywoFgcHCGaW7o5IfiO2z3AgcroBPzeKTEKa6MbPJsiN3dOO4A/x/4UKtPA5 YwRxF0H5xGVWqUNmK4sJTrjBcMgUwzEqRqrxDNp//hoIkHwTkmTA8D6ciqugWbNzJ6rw IVHGB/s5Yvxbb+2/D2VTM/q+S+2HpanRCBAfdh2X2g+Mz7QQSIcWS8HUNrBWJa8Ge7/X lFoU320PycQozjg9eN52B7GePt3EqAsibhe9shLZHrIJRJW6UqvgfMYagHdru9KSDX8R 7ZdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=rPlWvUex0dTp890CT1YJuIP9dhFswyoaa9Bq6CJLA5I=; b=PXXwYZSLPXlY0fKU/fLW3Bs3CBWhcohBa/n2sP+oLhgCEQuzMkcAGpDt0FcYhlfIf9 f5N8C1EfXOFQhARqrCkzSWPFsmg3xvZN+X5+yLeZFyL8DuZ7HzVPIKOz4mwDEK4uhZx4 79wFelwVP0iIXn0XlSp1uswBXrWVhgqMsEtM5eJ+UzmSGuVH9I1jCBKK1mvIjVKamlU3 5wx2Yih6Dyu9mIAjy9a1d0xZe2G+MOqJa78TALeGjybRk3/848fs3W1guB3NO2ntUgVj 2jXJZ6P5tk30bpaKffy1kgxeux/lTkHhoUq7q+F74CohKaosT5OWgHJx12POzYGdDN5q E2XA== X-Gm-Message-State: AGi0PubFSdqXwIBHEZPFYN3HdcCN8Qt+9/W2xXc5GFgn5rcCZuWjk2wq UZahlUMapFtQmcaQOmqcWWU= X-Google-Smtp-Source: APiQypKRK80ms+ppQrbiMDxa4rzMKwmCOP9Z9OKcYZoEmW7IEJ97DEH1fIavK/Mns8utrUk+XXpEGA== X-Received: by 2002:a63:31c4:: with SMTP id x187mr15785835pgx.56.1586763025178; Mon, 13 Apr 2020 00:30:25 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 14/15] KVM: MIPS: Add more MMIO load/store instructions emulation Date: Mon, 13 Apr 2020 15:30:23 +0800 Message-Id: <1586763024-12197-15-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::543 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch add more MMIO load/store instructions emulation, which can be observed in QXL and some other device drivers: 1, LWL, LWR, LDW, LDR, SWL, SWR, SDL and SDR for all MIPS; 2, GSLBX, GSLHX, GSLWX, GSLDX, GSSBX, GSSHX, GSSWX and GSSDX for Loongson-3. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/kvm/emulate.c | 440 ++++++++++++++++++++++++++++++++++++++++++++= ++-- 1 file changed, 430 insertions(+), 10 deletions(-) diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c index aa2db51..572e67d 100644 --- a/arch/mips/kvm/emulate.c +++ b/arch/mips/kvm/emulate.c @@ -1604,6 +1604,7 @@ enum emulation_result kvm_mips_emulate_store(union mi= ps_instruction inst, enum emulation_result er; u32 rt; void *data =3D run->mmio.data; + unsigned int imme; unsigned long curr_pc; =20 /* @@ -1661,6 +1662,191 @@ enum emulation_result kvm_mips_emulate_store(union = mips_instruction inst, vcpu->arch.gprs[rt], *(u8 *)data); break; =20 + case swl_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x3); + run->mmio.len =3D 4; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x3; + switch (imme) { + case 0: + *(u32 *)data =3D ((*(u32*)data) & 0xffffff00) | (vcpu->arch.gprs[rt] >>= 24); + break; + case 1: + *(u32 *)data =3D ((*(u32*)data) & 0xffff0000) | (vcpu->arch.gprs[rt] >>= 16); + break; + case 2: + *(u32 *)data =3D ((*(u32*)data) & 0xff000000) | (vcpu->arch.gprs[rt] >>= 8); + break; + case 3: + *(u32 *)data =3D vcpu->arch.gprs[rt]; + break; + default: + break; + } + + kvm_debug("[%#lx] OP_SWL: eaddr: %#lx, gpr: %#lx, data: %#x\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u32 *)data); + break; + + case swr_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x3); + run->mmio.len =3D 4; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x3; + switch (imme) { + case 0: + *(u32 *)data =3D vcpu->arch.gprs[rt]; + break; + case 1: + *(u32 *)data =3D ((*(u32*)data) & 0xff) | (vcpu->arch.gprs[rt] << 8); + break; + case 2: + *(u32 *)data =3D ((*(u32*)data) & 0xffff) | (vcpu->arch.gprs[rt] << 16); + break; + case 3: + *(u32 *)data =3D ((*(u32*)data) & 0xffffff) | (vcpu->arch.gprs[rt] << 2= 4); + break; + default: + break; + } + + kvm_debug("[%#lx] OP_SWR: eaddr: %#lx, gpr: %#lx, data: %#x\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u32 *)data); + break; + + case sdl_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x7); + + run->mmio.len =3D 8; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x7; + switch (imme) { + case 0: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffffffffff00) | ((vcpu->arch.gp= rs[rt] >> 56) & 0xff); + break; + case 1: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffffffff0000) | ((vcpu->arch.gp= rs[rt] >> 48) & 0xffff); + break; + case 2: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffffff000000) | ((vcpu->arch.gp= rs[rt] >> 40) & 0xffffff); + break; + case 3: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffff00000000) | ((vcpu->arch.gp= rs[rt] >> 32) & 0xffffffff); + break; + case 4: + *(u64 *)data =3D ((*(u64*)data) & 0xffffff0000000000) | ((vcpu->arch.gp= rs[rt] >> 24) & 0xffffffffff); + break; + case 5: + *(u64 *)data =3D ((*(u64*)data) & 0xffff000000000000) | ((vcpu->arch.gp= rs[rt] >> 16) & 0xffffffffffff); + break; + case 6: + *(u64 *)data =3D ((*(u64*)data) & 0xff00000000000000) | ((vcpu->arch.gp= rs[rt] >> 8) & 0xffffffffffffff); + break; + case 7: + *(u64 *)data =3D vcpu->arch.gprs[rt]; + break; + default: + break; + } + + kvm_debug("[%#lx] OP_SDL: eaddr: %#lx, gpr: %#lx, data: %llx\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u64 *)data); + break; + + case sdr_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x7); + + run->mmio.len =3D 8; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x7; + switch (imme) { + case 0: + *(u64 *)data =3D vcpu->arch.gprs[rt]; + break; + case 1: + *(u64 *)data =3D ((*(u64*)data) & 0xff) | (vcpu->arch.gprs[rt] << 8); + break; + case 2: + *(u64 *)data =3D ((*(u64*)data) & 0xffff) | (vcpu->arch.gprs[rt] << 16); + break; + case 3: + *(u64 *)data =3D ((*(u64*)data) & 0xffffff) | (vcpu->arch.gprs[rt] << 2= 4); + break; + case 4: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffff) | (vcpu->arch.gprs[rt] <<= 32); + break; + case 5: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffffff) | (vcpu->arch.gprs[rt] = << 40); + break; + case 6: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffffffff) | (vcpu->arch.gprs[rt= ] << 48); + break; + case 7: + *(u64 *)data =3D ((*(u64*)data) & 0xffffffffffffff) | (vcpu->arch.gprs[= rt] << 56); + break; + default: + break; + } + + kvm_debug("[%#lx] OP_SDR: eaddr: %#lx, gpr: %#lx, data: %llx\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u64 *)data); + break; + +#ifdef CONFIG_CPU_LOONGSON64 + case sdc2_op: + rt =3D inst.loongson3_lsdc2_format.rt; + switch (inst.loongson3_lsdc2_format.opcode1) { + /* + * Loongson-3 overridden sdc2 instructions. + * opcode1 instruction + * 0x0 gssbx: store 1 bytes from GPR + * 0x1 gsshx: store 2 bytes from GPR + * 0x2 gsswx: store 4 bytes from GPR + * 0x3 gssdx: store 8 bytes from GPR + */ + case 0x0: + run->mmio.len =3D 1; + *(u8 *)data =3D vcpu->arch.gprs[rt]; + + kvm_debug("[%#lx] OP_GSSBX: eaddr: %#lx, gpr: %#lx, data: %#x\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u8 *)data); + break; + case 0x1: + run->mmio.len =3D 2; + *(u16 *)data =3D vcpu->arch.gprs[rt]; + + kvm_debug("[%#lx] OP_GSSSHX: eaddr: %#lx, gpr: %#lx, data: %#x\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u16 *)data); + break; + case 0x2: + run->mmio.len =3D 4; + *(u32 *)data =3D vcpu->arch.gprs[rt]; + + kvm_debug("[%#lx] OP_GSSWX: eaddr: %#lx, gpr: %#lx, data: %#x\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u32 *)data); + break; + case 0x3: + run->mmio.len =3D 8; + *(u64 *)data =3D vcpu->arch.gprs[rt]; + + kvm_debug("[%#lx] OP_GSSDX: eaddr: %#lx, gpr: %#lx, data: %#llx\n", + vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, + vcpu->arch.gprs[rt], *(u64 *)data); + break; + default: + kvm_err("Godson Exteneded GS-Store not yet supported (inst=3D0x%08x)\n", + inst.word); + break; + } + break; +#endif default: kvm_err("Store not yet supported (inst=3D0x%08x)\n", inst.word); @@ -1694,6 +1880,7 @@ enum emulation_result kvm_mips_emulate_load(union mip= s_instruction inst, enum emulation_result er; unsigned long curr_pc; u32 op, rt; + unsigned int imme; =20 rt =3D inst.i_format.rt; op =3D inst.i_format.opcode; @@ -1746,6 +1933,162 @@ enum emulation_result kvm_mips_emulate_load(union m= ips_instruction inst, run->mmio.len =3D 1; break; =20 + case lwl_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x3); + + run->mmio.len =3D 4; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x3; + switch (imme) { + case 0: + vcpu->mmio_needed =3D 3; /* 1 byte */ + break; + case 1: + vcpu->mmio_needed =3D 4; /* 2 bytes */ + break; + case 2: + vcpu->mmio_needed =3D 5; /* 3 bytes */ + break; + case 3: + vcpu->mmio_needed =3D 6; /* 4 bytes */ + break; + default: + break; + } + break; + + case lwr_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x3); + + run->mmio.len =3D 4; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x3; + switch (imme) { + case 0: + vcpu->mmio_needed =3D 7; /* 4 bytes */ + break; + case 1: + vcpu->mmio_needed =3D 8; /* 3 bytes */ + break; + case 2: + vcpu->mmio_needed =3D 9; /* 2 bytes */ + break; + case 3: + vcpu->mmio_needed =3D 10; /* 1 byte */ + break; + default: + break; + } + break; + + case ldl_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x7); + + run->mmio.len =3D 8; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x7; + switch (imme) { + case 0: + vcpu->mmio_needed =3D 11; /* 1 byte */ + break; + case 1: + vcpu->mmio_needed =3D 12; /* 2 bytes */ + break; + case 2: + vcpu->mmio_needed =3D 13; /* 3 bytes */ + break; + case 3: + vcpu->mmio_needed =3D 14; /* 4 bytes */ + break; + case 4: + vcpu->mmio_needed =3D 15; /* 5 bytes */ + break; + case 5: + vcpu->mmio_needed =3D 16; /* 6 bytes */ + break; + case 6: + vcpu->mmio_needed =3D 17; /* 7 bytes */ + break; + case 7: + vcpu->mmio_needed =3D 18; /* 8 bytes */ + break; + default: + break; + } + break; + + case ldr_op: + run->mmio.phys_addr =3D kvm_mips_callbacks->gva_to_gpa( + vcpu->arch.host_cp0_badvaddr) & (~0x7); + + run->mmio.len =3D 8; + imme =3D vcpu->arch.host_cp0_badvaddr & 0x7; + switch (imme) { + case 0: + vcpu->mmio_needed =3D 19; /* 8 bytes */ + break; + case 1: + vcpu->mmio_needed =3D 20; /* 7 bytes */ + break; + case 2: + vcpu->mmio_needed =3D 21; /* 6 bytes */ + break; + case 3: + vcpu->mmio_needed =3D 22; /* 5 bytes */ + break; + case 4: + vcpu->mmio_needed =3D 23; /* 4 bytes */ + break; + case 5: + vcpu->mmio_needed =3D 24; /* 3 bytes */ + break; + case 6: + vcpu->mmio_needed =3D 25; /* 2 bytes */ + break; + case 7: + vcpu->mmio_needed =3D 26; /* 1 byte */ + break; + default: + break; + } + break; + +#ifdef CONFIG_CPU_LOONGSON64 + case ldc2_op: + rt =3D inst.loongson3_lsdc2_format.rt; + switch (inst.loongson3_lsdc2_format.opcode1) { + /* + * Loongson-3 overridden ldc2 instructions. + * opcode1 instruction + * 0x0 gslbx: store 1 bytes from GPR + * 0x1 gslhx: store 2 bytes from GPR + * 0x2 gslwx: store 4 bytes from GPR + * 0x3 gsldx: store 8 bytes from GPR + */ + case 0x0: + run->mmio.len =3D 1; + vcpu->mmio_needed =3D 27; /* signed */ + break; + case 0x1: + run->mmio.len =3D 2; + vcpu->mmio_needed =3D 28; /* signed */ + break; + case 0x2: + run->mmio.len =3D 4; + vcpu->mmio_needed =3D 29; /* signed */ + break; + case 0x3: + run->mmio.len =3D 8; + vcpu->mmio_needed =3D 30; /* signed */ + break; + default: + kvm_err("Godson Exteneded GS-Load for float not yet supported (inst=3D0= x%08x)\n", + inst.word); + break; + } + break; +#endif + default: kvm_err("Load not yet supported (inst=3D0x%08x)\n", inst.word); @@ -2610,28 +2953,105 @@ enum emulation_result kvm_mips_complete_mmio_load(= struct kvm_vcpu *vcpu, =20 switch (run->mmio.len) { case 8: - *gpr =3D *(s64 *)run->mmio.data; + switch (vcpu->mmio_needed) { + case 11: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffffff ) | (((= *(s64*)run->mmio.data) & 0xff) << 56); + break; + case 12: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffff ) | (((*(= s64*)run->mmio.data) & 0xffff) << 48); + break; + case 13: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffff ) | (((*(s6= 4*)run->mmio.data) & 0xffffff) << 40); + break; + case 14: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffff ) | (((*(s64*= )run->mmio.data) & 0xffffffff) << 32); + break; + case 15: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff ) | (((*(s64*)r= un->mmio.data) & 0xffffffffff) << 24); + break; + case 16: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff ) | (((*(s64*)run= ->mmio.data) & 0xffffffffffff) << 16); + break; + case 17: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff ) | (((*(s64*)run->= mmio.data) & 0xffffffffffffff) << 8); + break; + case 18: + case 19: + *gpr =3D *(s64 *)run->mmio.data; + break; + case 20: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff00000000000000) | ((= ((*(s64*)run->mmio.data)) >> 8) & 0xffffffffffffff); + break; + case 21: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff000000000000) | ((= ((*(s64*)run->mmio.data)) >> 16) & 0x00ffffffffffff); + break; + case 22: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff0000000000) | ((= ((*(s64*)run->mmio.data)) >> 24) & 0x0000ffffffffff); + break; + case 23: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffff00000000) | ((= ((*(s64*)run->mmio.data)) >> 32) & 0x000000ffffffff); + break; + case 24: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffff000000) | ((= ((*(s64*)run->mmio.data)) >> 40) & 0x00000000ffffff); + break; + case 25: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffff0000) | ((= ((*(s64*)run->mmio.data)) >> 48) & 0x0000000000ffff); + break; + case 26: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffffff00) | ((= ((*(s64*)run->mmio.data)) >> 56) & 0x000000000000ff); + break; + default: + *gpr =3D *(s64 *)run->mmio.data; + } break; =20 case 4: - if (vcpu->mmio_needed =3D=3D 2) - *gpr =3D *(s32 *)run->mmio.data; - else + switch (vcpu->mmio_needed) { + case 1: *gpr =3D *(u32 *)run->mmio.data; + break; + case 2: + *gpr =3D *(s32 *)run->mmio.data; + break; + case 3: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff ) | (((*(s32*)r= un->mmio.data) & 0xff) << 24); + break; + case 4: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff ) | (((*(s32*)run= ->mmio.data) & 0xffff) << 16); + break; + case 5: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff ) | (((*(s32*)run->= mmio.data) & 0xffffff) << 8); + break; + case 6: + case 7: + *gpr =3D *(s32 *)run->mmio.data; + break; + case 8: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff000000 ) | ((((*(s32= *)run->mmio.data)) >> 8) & 0xffffff); + break; + case 9: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff0000 ) | ((((*(s32= *)run->mmio.data)) >> 16) & 0x00ffff); + break; + case 10: + *gpr =3D (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff00 ) | ((((*(s32= *)run->mmio.data)) >> 24) & 0x0000ff); + break; + default: + *gpr =3D *(s32 *)run->mmio.data; + } break; =20 case 2: - if (vcpu->mmio_needed =3D=3D 2) - *gpr =3D *(s16 *) run->mmio.data; - else + if (vcpu->mmio_needed =3D=3D 1) *gpr =3D *(u16 *)run->mmio.data; + else + *gpr =3D *(s16 *)run->mmio.data; =20 break; case 1: - if (vcpu->mmio_needed =3D=3D 2) - *gpr =3D *(s8 *) run->mmio.data; + if (vcpu->mmio_needed =3D=3D 1) + *gpr =3D *(u8 *)run->mmio.data; else - *gpr =3D *(u8 *) run->mmio.data; + *gpr =3D *(s8 *)run->mmio.data; break; } =20 --=20 2.7.0 From nobody Thu May 16 00:31:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586763141; cv=none; d=zohomail.com; s=zohoarc; b=PN+F7jR+M+fPFR/wDeObJ+t+GZTk6ooaLkUOzuaZ5F3ox61miMGLd54x+n3jrP4+ndfvkxh1ZTnpToTCybVQZOsFHvzON638kYsE2aTUyU1+w9uOUEYPiqKPTAHgb4d9YWwRONu5Uf4YVFWnR9u34iHcH/PxMDdFUgvD5Eyccdg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586763141; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=lozGXI+RCcD8805GHzdbsHHUQvLgBz8cDlD+L+c1heU=; b=P0bR1BkN5bCif3Yvl12/HWdYO9EeEpuTbGw/DyMWyrt0OuxTYbuQMO9zcp58foIucZIHDCGqwttKaF3c3uhJlc4GqIDzKu8r1RQ9crS1vStBpyBnA4dpOvURxYTKmyDhhRvEJRVdbylKUSLUop5S7eDD6YbY8OP2b/WPeM/j+h0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15867631415401001.5662752801039; Mon, 13 Apr 2020 00:32:21 -0700 (PDT) Received: from localhost ([::1]:41276 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtZs-0001JT-02 for importer@patchew.org; Mon, 13 Apr 2020 03:32:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38212) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jNtYX-00009J-64 for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:30:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jNtYW-00025a-6J for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:30:57 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:46717) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jNtYW-00025L-0b for qemu-devel@nongnu.org; Mon, 13 Apr 2020 03:30:56 -0400 Received: by mail-pl1-x641.google.com with SMTP id n24so382786plp.13 for ; Mon, 13 Apr 2020 00:30:55 -0700 (PDT) Received: from software.domain.org (28.144.92.34.bc.googleusercontent.com. [34.92.144.28]) by smtp.gmail.com with ESMTPSA id u8sm7241341pgl.19.2020.04.13.00.30.52 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 00:30:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=lozGXI+RCcD8805GHzdbsHHUQvLgBz8cDlD+L+c1heU=; b=Kcx4puo8ho90L2YsbhjK/H50hA2RCXsBXZpnLgbU09+jqnjb9lQ2nhCLP8GhBwv3wR jNAUTY9hMqoT01OY7BLsavXjZhZTs9T6sGoxGW9eYd+3ixQ1QQa74P0ahHpcb44jEMD7 2EklggW0EczbXKxs6hGTbgQldVb0hVGNu6hFrHUqcbFeZnFRC+ntZns9C1d6z/+2OS7o ezf0EIsvj4MiI+zzzRz7b5W7UG6qzqOoxtXCMoWbF0MtofE+YTyFKGKxVPC2vrjjKXuS H4IVbXRYGQ+phiyisGvWSHm0TGMpyWqmi5uMk2PZKKMlA5Kftg4Jl3/jTzVdtJerVF4/ RqhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=lozGXI+RCcD8805GHzdbsHHUQvLgBz8cDlD+L+c1heU=; b=hF/byuOWUEAz3e16k+bvp28DiNMRKDrT5hWbG6DueUXAxZYRCFJj8WwJixcbdTIgHM 6FhtaHTg77/F6RcYFm3QJs29dsXXzym3dq69nKR+zypTd3b3kXhSDGXiNzRjeJ2vr7cm A+q+ziLapqlMH3ZPshD5I0g4ruBNG9/7BFUreTEg2uZ+5A8WU+WWd6ROdmvwfLfWtfSB xXcKs8J9C1hV46jQ5j7DWOVuimtLq7JAVKA0TTn6ihG5YE1qOYK2yc5poI9pvZxatX6L Ox56uUdZT8ec17mEf4X0+ZUyosIPg/yXrL/gwBdyy8E6GSUc0CZqBEv1B6aUil48Hw8C E4Tw== X-Gm-Message-State: AGi0PuZTrdX7xdx8MAXyfUVogEL+sSD+QNPT67rs1XvBqGObspnM+yLt fvXBWlJFGIn93iHk9QWQ2Fc= X-Google-Smtp-Source: APiQypJvTPl29jy0Un/24PxwFVkWS2cBvgRYlBkmJPaXAfhrOMi4sadbxXTfHq9f1iE3cmoC12OCQg== X-Received: by 2002:a17:902:9b90:: with SMTP id y16mr15589789plp.227.1586763054390; Mon, 13 Apr 2020 00:30:54 -0700 (PDT) From: Huacai Chen To: Paolo Bonzini , Thomas Bogendoerfer Subject: [PATCH 15/15] KVM: MIPS: Enable KVM support for Loongson-3 Date: Mon, 13 Apr 2020 15:30:24 +0800 Message-Id: <1586763024-12197-16-git-send-email-chenhc@lemote.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1586763024-12197-1-git-send-email-chenhc@lemote.com> References: <1586763024-12197-1-git-send-email-chenhc@lemote.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 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: kvm@vger.kernel.org, Huacai Chen , qemu-devel@nongnu.org, Jiaxun Yang , linux-mips@vger.kernel.org, Fuxin Zhang , Huacai Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch enable KVM support for Loongson-3 by selecting HAVE_KVM, but only enable KVM/VZ on Loongson-3A R4+ (because VZ of early processors are incomplete). Besides, Loongson-3 support SMP guests, so we clear the linked load bit of LLAddr in kvm_vz_vcpu_load() if the guest has more than one VCPUs. Signed-off-by: Huacai Chen Co-developed-by: Jiaxun Yang --- arch/mips/Kconfig | 1 + arch/mips/kernel/cpu-probe.c | 1 + arch/mips/kvm/vz.c | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index a1f973c..e9a1389 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -1465,6 +1465,7 @@ config CPU_LOONGSON64 select MIPS_L1_CACHE_SHIFT_6 select GPIOLIB select SWIOTLB + select HAVE_KVM help The Loongson GSx64(GS264/GS464/GS464E/GS464V) series of processor cores implements the MIPS64R2 instruction set with many extensions, diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 5bf0821..c46724e 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c @@ -1958,6 +1958,7 @@ static inline void cpu_probe_loongson(struct cpuinfo_= mips *c, unsigned int cpu) c->writecombine =3D _CACHE_UNCACHED_ACCELERATED; c->ases |=3D (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM | MIPS_ASE_LOONGSON_EXT | MIPS_ASE_LOONGSON_EXT2); + c->ases &=3D ~MIPS_ASE_VZ; /* VZ of Loongson-3A2000/3000 is incomplete */ break; case PRID_IMP_LOONGSON_64G: c->cputype =3D CPU_LOONGSON64; diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index 2ea1f13..cddd5b0 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -2666,7 +2666,7 @@ static int kvm_vz_vcpu_load(struct kvm_vcpu *vcpu, in= t cpu) * prevents a SC on the next VCPU from succeeding by matching a LL on * the previous VCPU. */ - if (cpu_guest_has_rw_llb) + if (vcpu->kvm->created_vcpus > 1) write_gc0_lladdr(0); =20 return 0; --=20 2.7.0