From patchwork Mon Nov 2 05:40:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Liang X-Patchwork-Id: 11872997 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 71C596A2 for ; Mon, 2 Nov 2020 05:51:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1B92B22273 for ; Mon, 2 Nov 2020 05:51:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1B92B22273 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:58088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kZSkC-0003ym-Ud for patchwork-qemu-devel@patchwork.kernel.org; Mon, 02 Nov 2020 00:51:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51146) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kZSdK-0002Oc-AG; Mon, 02 Nov 2020 00:43:58 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:2374) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kZSdG-0001EO-JC; Mon, 02 Nov 2020 00:43:57 -0500 Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4CPhfh4TjNz15PhT; Mon, 2 Nov 2020 13:43:40 +0800 (CST) Received: from localhost.localdomain (10.175.124.27) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.487.0; Mon, 2 Nov 2020 13:43:31 +0800 From: Peng Liang To: , Subject: [RFC v3 00/10] Support disable/enable CPU features for AArch64 Date: Mon, 2 Nov 2020 13:40:45 +0800 Message-ID: <20201102054055.686143-1-liangpeng10@huawei.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 X-Originating-IP: [10.175.124.27] X-CFilter-Loop: Reflected Received-SPF: pass client-ip=45.249.212.190; envelope-from=liangpeng10@huawei.com; helo=szxga04-in.huawei.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/02 00:43:42 X-ACL-Warn: Detected OS = Linux 3.1-3.10 [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: peter.maydell@linaro.org, drjones@redhat.com, zhang.zhanghailiang@huawei.com, mst@redhat.com, cohuck@redhat.com, xiexiangyou@huawei.com, Peng Liang , pbonzini@redhat.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" QEMU does not support disable/enable CPU features in AArch64 for now. This patch series add support for CPU features in AArch64. Firstly, we change the isar struct in ARMCPU to an array for convenience. Secondly, we add support to configure CPU feautres in AArch64 and make sure that the ID registers can be synchronized to KVM so that guest can read the value we configure. Thirdly, we add a mechanism to solve the dependency relationship of some CPU features. Last, we add a KVM_CAP_ARM_CPU_FEATURE to check whether KVM supports to set CPU features in AArch64. Also export CPU features to the result of qmp query-cpu-model-expansion so that libvirt can get the supported CPU features. Update the ID fields to ARMv8.6 and add some CPU features according to the new ID fields. With related KVM patch set[1], we can disable/enable CPU features in AArch64. [1] https://patchwork.kernel.org/project/kvm/cover/20201102033422.657391-1-liangpeng10@huawei.com/ v2 -> v3: - rebase to newest code v1 -> v2: - adjust the order of patches - only expose AArch64 features which are exposed by kernel via /proc/cpuinfo - add check for conflict CPU features set by user - split the change in linux-headers/linux/kvm.h Peng Liang (10): linux-header: Introduce KVM_CAP_ARM_CPU_FEATURE target/arm: Update ID fields target/arm: only set ID_PFR1_EL1.GIC for AArch32 guest target/arm: convert isar regs to array target/arm: Introduce kvm_arm_cpu_feature_supported target/arm: register CPU features for property target/arm: Allow ID registers to synchronize to KVM target/arm: Introduce user_mask to indicate whether the feature is set explicitly target/arm: introduce CPU feature dependency mechanism target/arm: Add CPU features to query-cpu-model-expansion hw/intc/armv7m_nvic.c | 32 +-- linux-headers/linux/kvm.h | 1 + target/arm/cpu.c | 575 +++++++++++++++++++++++++++++--------- target/arm/cpu.h | 255 +++++++++-------- target/arm/cpu64.c | 190 ++++++------- target/arm/cpu_tcg.c | 314 +++++++++++---------- target/arm/helper.c | 106 ++++--- target/arm/internals.h | 15 +- target/arm/kvm.c | 38 +++ target/arm/kvm64.c | 90 +++--- target/arm/kvm_arm.h | 10 + target/arm/monitor.c | 4 + 12 files changed, 1038 insertions(+), 592 deletions(-)