|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v3 09/16] xen/riscv: introduce vcpu_kick() implementation
Add a RISC-V implementation of vcpu_kick(), which unblocks the target
vCPU and sends an event check IPI if the vCPU was running on another
processor. This mirrors the behavior of Arm and enables proper vCPU
wakeup handling on RISC-V.
Remove the stub implementation from stubs.c, as it is now provided by
arch/riscv/domain.c.
Since vcpu_kick() calls perfc_incr(vcpu_kick), add perfcounter for
vcpu_kick to handle the case when CONFIG_PERF_COUNTERS=y. Although
CONFIG_PERF_COUNTERS is not enabled by default, it can be enabled,
for example, by randconfig what will lead to CI build issues.
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
Changes in v3:
- Add asm/perfc_defn.h to provide vcpu_kick perfcoounter to cover
the case when CONFIG_PERF_COUNTERS=y.
---
Changes in v2:
- Add Acked-by: Jan Beulich <jbeulich@xxxxxxxx>.
---
xen/arch/riscv/domain.c | 14 ++++++++++++++
xen/arch/riscv/include/asm/Makefile | 1 -
xen/arch/riscv/include/asm/perfc_defn.h | 3 +++
xen/arch/riscv/stubs.c | 5 -----
4 files changed, 17 insertions(+), 6 deletions(-)
create mode 100644 xen/arch/riscv/include/asm/perfc_defn.h
diff --git a/xen/arch/riscv/domain.c b/xen/arch/riscv/domain.c
index 3f4b062b6ce8..30a966f53c1d 100644
--- a/xen/arch/riscv/domain.c
+++ b/xen/arch/riscv/domain.c
@@ -1,8 +1,10 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <xen/cpumask.h>
#include <xen/init.h>
#include <xen/mm.h>
#include <xen/sched.h>
+#include <xen/smp.h>
#include <xen/vmap.h>
#include <asm/bitops.h>
@@ -231,3 +233,15 @@ void vcpu_flush_interrupts(struct vcpu *v)
vcpu_update_hvip(v);
}
}
+
+void vcpu_kick(struct vcpu *v)
+{
+ bool running = v->is_running;
+
+ vcpu_unblock(v);
+ if ( running && v != current )
+ {
+ perfc_incr(vcpu_kick);
+ smp_send_event_check_mask(cpumask_of(v->processor));
+ }
+}
diff --git a/xen/arch/riscv/include/asm/Makefile
b/xen/arch/riscv/include/asm/Makefile
index 3824f31c395c..86c56251d5d7 100644
--- a/xen/arch/riscv/include/asm/Makefile
+++ b/xen/arch/riscv/include/asm/Makefile
@@ -7,7 +7,6 @@ generic-y += hypercall.h
generic-y += iocap.h
generic-y += irq-dt.h
generic-y += percpu.h
-generic-y += perfc_defn.h
generic-y += random.h
generic-y += softirq.h
generic-y += vm_event.h
diff --git a/xen/arch/riscv/include/asm/perfc_defn.h
b/xen/arch/riscv/include/asm/perfc_defn.h
new file mode 100644
index 000000000000..8a4b945df662
--- /dev/null
+++ b/xen/arch/riscv/include/asm/perfc_defn.h
@@ -0,0 +1,3 @@
+/* This file is intended to be included multiple times. */
+
+PERFCOUNTER(vcpu_kick, "vcpu: notify other vcpu")
diff --git a/xen/arch/riscv/stubs.c b/xen/arch/riscv/stubs.c
index c5784a436574..1f0add97b361 100644
--- a/xen/arch/riscv/stubs.c
+++ b/xen/arch/riscv/stubs.c
@@ -208,11 +208,6 @@ void vcpu_block_unless_event_pending(struct vcpu *v)
BUG_ON("unimplemented");
}
-void vcpu_kick(struct vcpu *v)
-{
- BUG_ON("unimplemented");
-}
-
unsigned long
hypercall_create_continuation(unsigned int op, const char *format, ...)
{
--
2.52.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |