From patchwork Tue Jun 27 16:31:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Henrique Barboza X-Patchwork-Id: 1800730 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ventanamicro.com header.i=@ventanamicro.com header.a=rsa-sha256 header.s=google header.b=mkIwA8xa; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Qr9KQ4T03z242H for ; Wed, 28 Jun 2023 02:34:34 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qEBcO-0003bx-Bx; Tue, 27 Jun 2023 12:32:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qEBcN-0003b8-8x for qemu-devel@nongnu.org; Tue, 27 Jun 2023 12:32:39 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qEBcL-0004r8-Mu for qemu-devel@nongnu.org; Tue, 27 Jun 2023 12:32:38 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-1b06c978946so403003fac.0 for ; Tue, 27 Jun 2023 09:32:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1687883556; x=1690475556; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xIsSwZv0+6HkvL9zAUnCljJ7f9IbfLIHWBAcagEC0B4=; b=mkIwA8xaduk9fzlnrYUXwD1TrvcNgo2iUupfxdSpIfkXj4RupwJG4eXToga2MPFmzM DOcTVExyeYGKjMv83IOH1iZiqTpDcAOcsLynKNCgU8OZNZyL2arUWooRI6Y3KS35ABxi RQALZ+ZVaHZzchgW8ZjQ7y6XKNl/Zlk0k6JdQC8MUKcSm8P1DNhjtNghexL9vLyayTTA uk7ruKkfbq5lXd5/W4+SvLFnnvPN3KQNmwU0jpkKSzeV6ZJ+GVdc0Kx8j1n0bbbAAHMP Fj564L5fN0kXauAfC7mrH6Mkoavzv8HUfunskw/SbLJpv7+hDA5KnaQrSS0nKp8gQNdt jzAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687883556; x=1690475556; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xIsSwZv0+6HkvL9zAUnCljJ7f9IbfLIHWBAcagEC0B4=; b=SNxhjQCy7frNN39DvbABDazLZUBJY1nFRNlaY/sQA6dcxlSppomWrPFt3/xm5vU4Xz pMySQEkbFmUvOI19fgFlb4GfhmzcOz2qHzgA2kdBc3okXMp8Y60vsQCQgay0+K9tPhUF SnnGpl75UwuDzhSVTgKEnijpRShah8P7niqrYgSnLVIAlg3QrCIpvM4HxStrTibwueuB +qVUdghsafgNb214Zm7suTg1qcnrqIxtiLck3DraFJZEQ7XHiSg3kGB762kszNh2zb1T Z5suigevF4IrX/AcoDIajYHtLGUjiHfavQz6sM8dg5mS+1yRIFUFhVESZHpVvbt5WUjL sNew== X-Gm-Message-State: AC+VfDw4hc5+TsIzAU2R1dZJxKTnBZRg5di9/0SCtnCmxqH8RC1fL/qr IQP95ajMWDSEQ1w5lOYqoE6GemXeO9BmZ33eLk0= X-Google-Smtp-Source: ACHHUZ77j7BAmxdmDF7wi0UInWHZ5ntCmVZcqbq3DAtAk62PS4GwNv1xhdKNNUSPxN/UiuKc6dN3Nw== X-Received: by 2002:a05:6870:e502:b0:1b0:f90:4c91 with SMTP id y2-20020a056870e50200b001b00f904c91mr8497271oag.8.1687883556461; Tue, 27 Jun 2023 09:32:36 -0700 (PDT) Received: from grind.. (201-69-66-110.dial-up.telesp.net.br. [201.69.66.110]) by smtp.gmail.com with ESMTPSA id gu17-20020a056870ab1100b001a3093ec23fsm5254134oab.32.2023.06.27.09.32.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Jun 2023 09:32:36 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, ajones@ventanamicro.com, Daniel Henrique Barboza Subject: [PATCH v5 08/19] target/riscv: handle mvendorid/marchid/mimpid for KVM CPUs Date: Tue, 27 Jun 2023 13:31:52 -0300 Message-ID: <20230627163203.49422-9-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230627163203.49422-1-dbarboza@ventanamicro.com> References: <20230627163203.49422-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=dbarboza@ventanamicro.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org After changing user validation for mvendorid/marchid/mimpid to guarantee that the value is validated on user input time, coupled with the work in fetching KVM default values for them by using a scratch CPU, we're certain that the values in cpu->cfg.(mvendorid|marchid|mimpid) are already good to be written back to KVM. There's no need to write the values back for 'host' type CPUs since the values can't be changed, so let's do that just for generic CPUs. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Andrew Jones Acked-by: Alistair Francis --- target/riscv/kvm.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/target/riscv/kvm.c b/target/riscv/kvm.c index cd2974c663..602727cdfd 100644 --- a/target/riscv/kvm.c +++ b/target/riscv/kvm.c @@ -495,6 +495,33 @@ void kvm_arch_init_irq_routing(KVMState *s) { } +static int kvm_vcpu_set_machine_ids(RISCVCPU *cpu, CPUState *cs) +{ + CPURISCVState *env = &cpu->env; + uint64_t id; + int ret; + + id = kvm_riscv_reg_id(env, KVM_REG_RISCV_CONFIG, + KVM_REG_RISCV_CONFIG_REG(mvendorid)); + ret = kvm_set_one_reg(cs, id, &cpu->cfg.mvendorid); + if (ret != 0) { + return ret; + } + + id = kvm_riscv_reg_id(env, KVM_REG_RISCV_CONFIG, + KVM_REG_RISCV_CONFIG_REG(marchid)); + ret = kvm_set_one_reg(cs, id, &cpu->cfg.marchid); + if (ret != 0) { + return ret; + } + + id = kvm_riscv_reg_id(env, KVM_REG_RISCV_CONFIG, + KVM_REG_RISCV_CONFIG_REG(mimpid)); + ret = kvm_set_one_reg(cs, id, &cpu->cfg.mimpid); + + return ret; +} + int kvm_arch_init_vcpu(CPUState *cs) { int ret = 0; @@ -513,6 +540,10 @@ int kvm_arch_init_vcpu(CPUState *cs) } env->misa_ext = isa; + if (!object_dynamic_cast(OBJECT(cpu), TYPE_RISCV_CPU_HOST)) { + ret = kvm_vcpu_set_machine_ids(cpu, cs); + } + return ret; }