From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-il1-f180.google.com (mail-il1-f180.google.com [209.85.166.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDA2221D5A6 for ; Fri, 10 Jan 2025 23:55:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.180 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736553347; cv=none; b=RLoL5vi+nWUKlQuzzF/OtSKWCsib6f1ypad8LvrHJv0hqCLHU6jrpeYJlY8NZy1Y1avd8OWrGuSIIC2CcQ5XcjF3MifKFuMTbf9w7IXa+Lh3m6xjl6f27BP+qi2n2qEFXecE9gvmkIESY5YvyG56iRQ+wyxFE3HlRTQdjkKJ3M0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736553347; c=relaxed/simple; bh=6WwWPxjEZKQ1xUf1jWLHrZ93xlpPj2Otfo2my453W+4=; h=Message-ID:Date:MIME-Version:Subject:To:References:From:Cc: In-Reply-To:Content-Type; b=V3Boi3jGMYzF5nHMpJq34jPF2YTWpzgh8SohVKGVvJ507B9Svk4Ms0ZspOgSGH2VI82oy/S9T3ZDphNHHI2oX80eoPalNUVzjgm3P/Z83gO7zUbFjQg7AMq6rnkn2UK8GdAt6TQXVqI06ybTty0vEqeYBq85TWbg76XMZiYMHBA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=eb9v4QNQ; arc=none smtp.client-ip=209.85.166.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="eb9v4QNQ" Received: by mail-il1-f180.google.com with SMTP id e9e14a558f8ab-3a777958043so8988945ab.2 for ; Fri, 10 Jan 2025 15:55:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1736553345; x=1737158145; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:cc:content-language:from :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=83wRULGvUmj10rdkn50Twrq4N8VlHWb+qzAtMGfh0G4=; b=eb9v4QNQendavFA7FJQ4geosQtKaR91Ll1gigMBeiWjedGjNuaQ5uaXW+C1xrSmIe4 EyNuRvH9W2ojUI7Lzq/7Aq5ccxy+BMW5FcVCfl7LfWtj9dONr/lAv8yoyxNFNDx35j1Q Y45MpxOyITk0eGJqqkPUAGBaEX1rJ+07CoJemSvO7iYwobUBYwdBJiLqr9NoEAM0ZAG6 N/Cn3Q0ubidIZ3wM2uBCanEX0r8WST1twIG7l1kPuN2jMgh8APMYYEaFYRZNh+Z1LCva aYtwGQEywlGbP6LeZGvmVeuIrg7d0qz+XzkzvvrzCJ4Nn7r84/TPMoKhZHyfKh3m+qOv UmtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736553345; x=1737158145; h=content-transfer-encoding:in-reply-to:cc:content-language:from :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=83wRULGvUmj10rdkn50Twrq4N8VlHWb+qzAtMGfh0G4=; b=REK5N4NrXreEVhIk8qKAketXxHFrOyqIm01ZjlDBdiLlhWzbr4Uu7z/L5tvtlG53Z8 JXPJ+BERKdi59e5iSaZEXfWh33cdwDaotnvCdUgF2FOcRBtWdDM06n6WSkxsCxH48sIj ltjYgUBygKez8XO0xQITDRrWcQ3ao+w5ZE0DGbVFpA3tlRCkzH/67+vBI9bDu+2Yvwrd gahnBdVma/rbS/ZByDkZvGbvSbf5QB0LpGcL7MeiLq8CumaVEl1K0zdtwnuzJO0xUDW2 6rOWm0zYu4El4QYPF0N5yWtYDIxtvns5+faM+Q1tqwT+zIyw0bJzCti4go369G3IAhkX 5QuQ== X-Forwarded-Encrypted: i=1; AJvYcCUbSagLxM3D5U3l6eRCEnCl6kyIX5xYGFD+CW7tUptnnEviFk3Y4JGyfTdTem/EepbqMfTS1HsClzZ+uSI=@vger.kernel.org X-Gm-Message-State: AOJu0YwAQVy/Jgro0SCv4xGIqTSFU8A5JLT3pCiG7GdmKkYzQM/0Nhp1 ShcgDEe5QIEfXRnFBfx4TS7dm7FJyqSdXfhVc6jI5KMqLbv9A1yyEOnol9c7BQo= X-Gm-Gg: ASbGnctDvew2NGlQOOY+iQTCiXwZJZR4+6ndtCq/njM4OEmQvcdPYvJ+RmJyuP3ASaj pa+EPvfx7ByQzihhZN7ElnUcKrIZUarOwbn1qzC3Gv2rRZVY2HmS0PoCGcxHuKUPrDNvjmKNPYX 5ALddCdfm+V8RI4OpVrJGGpAxQnh8Bk0VmWu8wxrlFwGk1ZunDcn2ffN1jMYTgOAMInezEZfu03 SkvuOa1FeOby42+HgRjzS7BCebyFUHF43d07jPCDmQyBTm8n1Xu8UBIdhOnRl5+ikQn9kwlPf+b HAOr X-Google-Smtp-Source: AGHT+IH0fgQxMOSKadJfIoy2Nj8jc7fKrOvZJO0N4J4fYEHjn0eRwTiFqc8rtxsnNitjP7FoCOy29w== X-Received: by 2002:a05:6e02:1c81:b0:3a7:6636:eb3b with SMTP id e9e14a558f8ab-3ce3aa5ad65mr87898675ab.17.1736553344919; Fri, 10 Jan 2025 15:55:44 -0800 (PST) Received: from [100.64.0.1] ([165.188.116.9]) by smtp.gmail.com with ESMTPSA id e9e14a558f8ab-3ce4ad94327sm11932995ab.15.2025.01.10.15.55.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 10 Jan 2025 15:55:44 -0800 (PST) Message-ID: Date: Fri, 10 Jan 2025 17:55:43 -0600 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 6/6] RISC-V: KVM: add support for SBI_FWFT_MISALIGNED_DELEG To: =?UTF-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= References: <20250106154847.1100344-1-cleger@rivosinc.com> <20250106154847.1100344-7-cleger@rivosinc.com> From: Samuel Holland Content-Language: en-US Cc: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org In-Reply-To: <20250106154847.1100344-7-cleger@rivosinc.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 2025-01-06 9:48 AM, Clément Léger wrote: > SBI_FWFT_MISALIGNED_DELEG needs hedeleg to be modified to delegate > misaligned load/store exceptions. Save and restore it during CPU > load/put. > > Signed-off-by: Clément Léger > --- > arch/riscv/kvm/vcpu.c | 3 +++ > arch/riscv/kvm/vcpu_sbi_fwft.c | 39 ++++++++++++++++++++++++++++++++++ > 2 files changed, 42 insertions(+) > > diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c > index 3420a4a62c94..bb6f788d46f5 100644 > --- a/arch/riscv/kvm/vcpu.c > +++ b/arch/riscv/kvm/vcpu.c > @@ -641,6 +641,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) > { > void *nsh; > struct kvm_vcpu_csr *csr = &vcpu->arch.guest_csr; > + struct kvm_vcpu_config *cfg = &vcpu->arch.cfg; > > vcpu->cpu = -1; > > @@ -666,6 +667,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) > csr->vstval = nacl_csr_read(nsh, CSR_VSTVAL); > csr->hvip = nacl_csr_read(nsh, CSR_HVIP); > csr->vsatp = nacl_csr_read(nsh, CSR_VSATP); > + cfg->hedeleg = nacl_csr_read(nsh, CSR_HEDELEG); > } else { > csr->vsstatus = csr_read(CSR_VSSTATUS); > csr->vsie = csr_read(CSR_VSIE); > @@ -676,6 +678,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) > csr->vstval = csr_read(CSR_VSTVAL); > csr->hvip = csr_read(CSR_HVIP); > csr->vsatp = csr_read(CSR_VSATP); > + cfg->hedeleg = csr_read(CSR_HEDELEG); > } > } > > diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c > index 55433e805baa..1e85ff6666af 100644 > --- a/arch/riscv/kvm/vcpu_sbi_fwft.c > +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c > @@ -14,6 +14,8 @@ > #include > #include > > +#define MIS_DELEG (1UL << EXC_LOAD_MISALIGNED | 1UL << EXC_STORE_MISALIGNED) > + > static const enum sbi_fwft_feature_t kvm_fwft_defined_features[] = { > SBI_FWFT_MISALIGNED_EXC_DELEG, > SBI_FWFT_LANDING_PAD, > @@ -35,7 +37,44 @@ static bool kvm_fwft_is_defined_feature(enum sbi_fwft_feature_t feature) > return false; > } > > +static bool kvm_sbi_fwft_misaligned_delegation_supported(struct kvm_vcpu *vcpu) > +{ > + if (!unaligned_ctl_available()) This seems like the wrong condition. Patch 2 requests delegation regardless of what probing detects. For MISALIGNED_SCALAR_FAST, the delegation likely doesn't change any actual behavior, because the hardware likely never raises the exception. But it does ensure M-mode never emulates anything, so if the exception were to occur, the kernel has the choice whether to handle it. And this lets us provide the same guarantee to KVM guests. So I think this feature should also be supported if we successfully delegated the exception on the host side. > + return false; > + > + return true; > +} > + > +static int kvm_sbi_fwft_set_misaligned_delegation(struct kvm_vcpu *vcpu, > + struct kvm_sbi_fwft_config *conf, > + unsigned long value) > +{ > + if (value == 1) > + csr_set(CSR_HEDELEG, MIS_DELEG); > + else if (value == 0) > + csr_clear(CSR_HEDELEG, MIS_DELEG); > + else > + return SBI_ERR_INVALID_PARAM; > + > + return SBI_SUCCESS; > +} > + > +static int kvm_sbi_fwft_get_misaligned_delegation(struct kvm_vcpu *vcpu, > + struct kvm_sbi_fwft_config *conf, > + unsigned long *value) > +{ > + *value = (csr_read(CSR_HEDELEG) & MIS_DELEG) != 0; > + > + return SBI_SUCCESS; > +} > + > static const struct kvm_sbi_fwft_feature features[] = { > + { > + .id = SBI_FWFT_MISALIGNED_EXC_DELEG, > + .supported = kvm_sbi_fwft_misaligned_delegation_supported, > + .set = kvm_sbi_fwft_set_misaligned_delegation, > + .get = kvm_sbi_fwft_get_misaligned_delegation, > + } nit: Please add a trailing comma here as future patches will extend the array. Regards, Samuel > }; > > static struct kvm_sbi_fwft_config *