From nobody Tue Feb 10 05:10:36 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=1686690080; cv=none; d=zohomail.com; s=zohoarc; b=AbeDofSOY14+BoT+2aJUB9jJMAs4LSg7qS/ANxnkSV/6zaTUGq3TVIfUUwYtqNztwASvuR4uoz9OuGLU74uQH0wqkP9QN0AwnV3MOvPyDq7Qpm1C4H985vVSIsl2QE/RPPVK0XkAv8K+198oWyEPTdQOJKHkNUC98Hu8toP4S70= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686690080; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=UmgHpltBv9j1kQYmnmMbSI6QLFwM8nliDr4+gOdlKMM=; b=M+nRKYdNmXMMJ4XLNc1wPNE18Kq9EvPfYg4lFEr04h0q4PsNmnPrJbTHXTSUpsd8RGqoaO4gmAFSfw51ca9lFOyNzEbAuwX/VXfJi1sJYkFBQKQ1Q8nFRXvmOem1sLB9v9UCdqkFCeff87ZLL0GiZOP3PHMEFNkK2ED/pv5Jdpg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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 1686690080488367.78193677224044; Tue, 13 Jun 2023 14:01:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q9B86-0002mE-Ew; Tue, 13 Jun 2023 17:00:42 -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 1q9B7n-0002a5-AS for qemu-devel@nongnu.org; Tue, 13 Jun 2023 17:00:24 -0400 Received: from mail-oo1-xc2c.google.com ([2607:f8b0:4864:20::c2c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q9B7c-00072f-GA for qemu-devel@nongnu.org; Tue, 13 Jun 2023 17:00:16 -0400 Received: by mail-oo1-xc2c.google.com with SMTP id 006d021491bc7-558b70c715cso5639eaf.2 for ; Tue, 13 Jun 2023 14:00:10 -0700 (PDT) Received: from grind.. ([177.170.117.210]) by smtp.gmail.com with ESMTPSA id q82-20020acaf255000000b003982a8a1e3fsm5619514oih.51.2023.06.13.14.00.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jun 2023 14:00:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1686690009; x=1689282009; 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=UmgHpltBv9j1kQYmnmMbSI6QLFwM8nliDr4+gOdlKMM=; b=OiSbzSP+i8t9gMDNPfXBjgHrcg7DtQkD9TpsB3g8RCYld29j+I/VGmCZsQ6PhnWafv tCQ/8C3PrDoECWb+bqtYWod78925eVZepAsD4/9bXtSFNPsLlylYLJgzCGm/SAoNmyVh Nh0HiRfi833dWHylsSJNlPFW+Hi2OBYsjLdlY8PrRCO1KV203UqOdnx4gMFkx9ZlvxDk WxcOSWi1yTWjCQx/QMbt8K8UBJTYBcKOZYdqlzM35jQHztEAUnh4MlyPN4CqggI7ACtW v/VErxyA/2Mo84iHyjo+QyCyqSCTwGPxnvB1kHjXSaEUWQG1Y7qLVw2x++nEn/QJQyhF Hfww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686690009; x=1689282009; 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=UmgHpltBv9j1kQYmnmMbSI6QLFwM8nliDr4+gOdlKMM=; b=bDIB0wSgtLoQJfnnzfstITnSajQlQf1XpwU5R1PnU4aEXjm6JYaqMvnhTacO2/FwAm waIPSnILd66Gm5xtAirOEYPxGAySI4hEVONzRV+QlJOe+oolSS3LdaB/KXiUPK+11q8W jTjfyY/oAprVPN8qE4hAStdcjkGlPlFh1kV+cr9RwUJA8xp6+dRSodj3QwJIKq/aeSYP ImZm0KzvM1eFEwVHa0Fkjl1Jzn8YG6sF4P2RUKmZNP3rncR/LK1Im18VGxKR9UjvlNHN S25TbK4cH9ctUT6nFRsly+j1RGzCrp9MGD/S1vVK8H22KIlS1ALJ2gAFf9GwPyB1ldz2 hf/g== X-Gm-Message-State: AC+VfDyQISNflAPAcfvq6x5H8hLf80USTCKm6HIvzl16E5BOSw2+B4Nr abIh3wlgyOzGocx7NFT9pEnM6uG4yKiaBb1/T7Q= X-Google-Smtp-Source: ACHHUZ5znRE0Z3ovRGdDc1jTfVk3HEk3omp1zMa1Xo/LiVFcLLo2rK3C1p3GlPy9vDQUWz+5GZvVTw== X-Received: by 2002:a05:6808:1885:b0:395:eed6:5193 with SMTP id bi5-20020a056808188500b00395eed65193mr9038410oib.10.1686690009234; Tue, 13 Jun 2023 14:00:09 -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 v2 18/18] target/riscv/kvm.c: read/write (cbom|cboz)_blocksize in KVM Date: Tue, 13 Jun 2023 17:58:57 -0300 Message-Id: <20230613205857.495165-19-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230613205857.495165-1-dbarboza@ventanamicro.com> References: <20230613205857.495165-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2c; envelope-from=dbarboza@ventanamicro.com; helo=mail-oo1-xc2c.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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1686690080863100001 Content-Type: text/plain; charset="utf-8" If we don't set a proper cbom_blocksize|cboz_blocksize in the FDT the Linux Kernel will fail to detect the availability of the CBOM/CBOZ extensions, regardless of the contents of the 'riscv,isa' DT prop. The FDT is being written using the cpu->cfg.cbom|z_blocksize attributes, so let's expose them as user properties like it is already done with TCG. This will also require us to determine proper blocksize values during init() time since the FDT is already created during realize(). We'll take a ride in kvm_riscv_init_multiext_cfg() to do it. Note that we don't need to fetch both cbom and cboz blocksizes every time: check for their parent extensions (icbom and icboz) and only read the blocksizes if needed. In contrast with cbom/z_blocksize properties from TCG, the user is not able to set any value that is different from the 'host' value when running KVM. KVM can be particularly harsh dealing with it: a ENOTSUPP can be thrown for the mere attempt of executing kvm_set_one_reg() for these 2 regs. Hopefully, we don't need to call kvm_set_one_reg() for these regs. We'll check if the user input matches the host value in kvm_cpu_set_cbomz_blksize(), the set() accessor for both blocksize properties. We'll fail fast since it's already known to not be supported. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Andrew Jones --- target/riscv/kvm.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/target/riscv/kvm.c b/target/riscv/kvm.c index 3a9f7b0722..ccd2375d8d 100644 --- a/target/riscv/kvm.c +++ b/target/riscv/kvm.c @@ -283,6 +283,42 @@ static void kvm_cpu_set_multi_ext_cfg(Object *obj, Vis= itor *v, kvm_cpu_cfg_set(cpu, multi_ext_cfg, value); } =20 +static KVMCPUConfig kvm_cbom_blocksize =3D { + .name =3D "cbom_blocksize", + .offset =3D CPUCFG(cbom_blocksize), + .kvm_reg_id =3D KVM_REG_RISCV_CONFIG_REG(zicbom_block_size) +}; + +static KVMCPUConfig kvm_cboz_blocksize =3D { + .name =3D "cboz_blocksize", + .offset =3D CPUCFG(cboz_blocksize), + .kvm_reg_id =3D KVM_REG_RISCV_CONFIG_REG(zicboz_block_size) +}; + +static void kvm_cpu_set_cbomz_blksize(Object *obj, Visitor *v, + const char *name, + void *opaque, Error **errp) +{ + KVMCPUConfig *cbomz_cfg =3D opaque; + RISCVCPU *cpu =3D RISCV_CPU(obj); + uint16_t value, *host_val; + + if (!visit_type_uint16(v, name, &value, errp)) { + return; + } + + host_val =3D kvmconfig_get_cfg_addr(cpu, cbomz_cfg); + + if (value !=3D *host_val) { + error_report("Unable to set %s to a different value than " + "the host (%u)", + cbomz_cfg->name, *host_val); + exit(EXIT_FAILURE); + } + + cbomz_cfg->user_set =3D true; +} + static void kvm_riscv_update_cpu_cfg_isa_ext(RISCVCPU *cpu, CPUState *cs) { CPURISCVState *env =3D &cpu->env; @@ -332,6 +368,14 @@ static void kvm_riscv_add_cpu_user_properties(Object *= cpu_obj) kvm_cpu_set_multi_ext_cfg, NULL, multi_cfg); } + + object_property_add(cpu_obj, "cbom_blocksize", "uint16", + NULL, kvm_cpu_set_cbomz_blksize, + NULL, &kvm_cbom_blocksize); + + object_property_add(cpu_obj, "cboz_blocksize", "uint16", + NULL, kvm_cpu_set_cbomz_blksize, + NULL, &kvm_cboz_blocksize); } =20 static int kvm_riscv_get_regs_core(CPUState *cs) @@ -647,6 +691,24 @@ static void kvm_riscv_init_misa_ext_mask(RISCVCPU *cpu, env->misa_ext =3D env->misa_ext_mask; } =20 +static void kvm_riscv_read_cbomz_blksize(RISCVCPU *cpu, KVMScratchCPU *kvm= cpu, + KVMCPUConfig *cbomz_cfg) +{ + CPURISCVState *env =3D &cpu->env; + struct kvm_one_reg reg; + int ret; + + reg.id =3D kvm_riscv_reg_id(env, KVM_REG_RISCV_CONFIG, + cbomz_cfg->kvm_reg_id); + reg.addr =3D (uint64_t)kvmconfig_get_cfg_addr(cpu, cbomz_cfg); + ret =3D ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, ®); + if (ret !=3D 0) { + error_report("Unable to read KVM reg %s, error %d", + cbomz_cfg->name, ret); + exit(EXIT_FAILURE); + } +} + static void kvm_riscv_init_multiext_cfg(RISCVCPU *cpu, KVMScratchCPU *kvmc= pu) { CPURISCVState *env =3D &cpu->env; @@ -678,6 +740,14 @@ static void kvm_riscv_init_multiext_cfg(RISCVCPU *cpu,= KVMScratchCPU *kvmcpu) =20 kvm_cpu_cfg_set(cpu, multi_ext_cfg, val); } + + if (cpu->cfg.ext_icbom) { + kvm_riscv_read_cbomz_blksize(cpu, kvmcpu, &kvm_cbom_blocksize); + } + + if (cpu->cfg.ext_icboz) { + kvm_riscv_read_cbomz_blksize(cpu, kvmcpu, &kvm_cboz_blocksize); + } } =20 void kvm_riscv_init_user_properties(Object *cpu_obj) --=20 2.40.1