[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v1 11/17] xen/riscv: add vAPLIC state save/restore hooks
- To: Jan Beulich <jbeulich@xxxxxxxx>
- From: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
- Date: Mon, 17 Aug 2026 10:43:21 +0200
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:Content-Type:In-Reply-To:From:Content-Language:References:Cc:To:Subject:User-Agent:MIME-Version:Date:Message-ID"
- Cc: Romain Caritey <Romain.Caritey@xxxxxxxxxxxxx>, Baptiste Le Duc <baptiste.le-duc@xxxxxxxxxx>, Alistair Francis <alistair.francis@xxxxxxx>, Connor Davis <connojdavis@xxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger@xxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
- Delivery-date: Mon, 17 Aug 2026 08:43:25 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 8/12/26 4:19 PM, Jan Beulich wrote:
On 20.07.2026 18:02, Oleksii Kurochko wrote:
--- a/xen/arch/riscv/include/asm/vaplic.h
+++ b/xen/arch/riscv/include/asm/vaplic.h
@@ -34,4 +34,7 @@ struct vaplic {
int domain_vaplic_init(struct domain *d);
void domain_vaplic_deinit(struct domain *d);
+void vaplic_state_save(struct vcpu *v);
+void vaplic_state_restore(struct vcpu *v);
Why would these be needed? Can't ...
--- a/xen/arch/riscv/vaplic.c
+++ b/xen/arch/riscv/vaplic.c
@@ -400,9 +400,27 @@ static const struct mmio_handler_ops vaplic_mmio_ops = {
.write = vaplic_mmio_write,
};
+void vaplic_state_save(struct vcpu *v)
... both be static?
They are only needed to cover potentially two cases (w/ MSI and w/o MSI
support) but I see a sense two follow your suggestion below ...
And don't they want to be cf_check?
Agree, cf_check should be used here.
+{
+ if ( has_msi_support() )
+ imsic_state_save(v);
+ else
+ BUG_ON("unimplemented");
+}
+
+void vaplic_state_restore(struct vcpu *v)
+{
+ if ( has_msi_support() )
+ imsic_state_restore(v);
+ else
+ BUG_ON("unimplemented");
+}
If you're merely forwarding the calls, why can't ...
static const struct vintc_ops vintc_ops = {
.vcpu_init = vaplic_init,
.vcpu_deinit = vaplic_deinit,
+ .store_state = vaplic_state_save,
+ .restore_state = vaplic_state_restore,
... imsic_state_{save,restore}() be used directly here? And whatever other
pair of handlers for the case when it's not IMSIC?
... It could be done in that way. I will follow it.
Thanks.
~ Oleksii
|