* [PATCH 0/2] RISC-V: KVM: Enable ring-based dirty memory tracking @ 2025-06-13 11:29 zhouquan 2025-06-13 11:29 ` [PATCH 1/2] " zhouquan 2025-06-13 11:30 ` [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases zhouquan 0 siblings, 2 replies; 8+ messages in thread From: zhouquan @ 2025-06-13 11:29 UTC (permalink / raw) To: anup, ajones, atishp, paul.walmsley, palmer Cc: linux-kernel, linux-riscv, kvm, kvm-riscv, Quan Zhou From: Quan Zhou <zhouquan@iscas.ac.cn> Enable ring-based dirty memory tracking and add some common KVM tests for riscv. Quan Zhou (2): RISC-V: KVM: Enable ring-based dirty memory tracking KVM: riscv: selftests: Add common supported test cases Documentation/virt/kvm/api.rst | 2 +- arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/Kconfig | 1 + arch/riscv/kvm/vcpu.c | 18 ++++++++++++++++-- tools/testing/selftests/kvm/Makefile.kvm | 12 ++++++++++++ .../selftests/kvm/include/riscv/processor.h | 2 ++ tools/testing/selftests/rseq/rseq-riscv.h | 3 +-- 7 files changed, 34 insertions(+), 5 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] RISC-V: KVM: Enable ring-based dirty memory tracking 2025-06-13 11:29 [PATCH 0/2] RISC-V: KVM: Enable ring-based dirty memory tracking zhouquan @ 2025-06-13 11:29 ` zhouquan 2025-07-17 6:10 ` Anup Patel 2025-06-13 11:30 ` [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases zhouquan 1 sibling, 1 reply; 8+ messages in thread From: zhouquan @ 2025-06-13 11:29 UTC (permalink / raw) To: anup, ajones, atishp, paul.walmsley, palmer Cc: linux-kernel, linux-riscv, kvm, kvm-riscv, Quan Zhou From: Quan Zhou <zhouquan@iscas.ac.cn> Enable ring-based dirty memory tracking on riscv: - Enable CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL as riscv is weakly ordered. - Set KVM_DIRTY_LOG_PAGE_OFFSET for the ring buffer's physical page offset. - Add a check to kvm_vcpu_kvm_riscv_check_vcpu_requests for checking whether the dirty ring is soft full. To handle vCPU requests that cause exits to userspace, modified the `kvm_riscv_check_vcpu_requests` to return a value (currently only returns 0 or 1). Signed-off-by: Quan Zhou <zhouquan@iscas.ac.cn> --- Documentation/virt/kvm/api.rst | 2 +- arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/Kconfig | 1 + arch/riscv/kvm/vcpu.c | 18 ++++++++++++++++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index 1bd2d42e6424..5de0fbfe2fc0 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -8316,7 +8316,7 @@ core crystal clock frequency, if a non-zero CPUID 0x15 is exposed to the guest. 7.36 KVM_CAP_DIRTY_LOG_RING/KVM_CAP_DIRTY_LOG_RING_ACQ_REL ---------------------------------------------------------- -:Architectures: x86, arm64 +:Architectures: x86, arm64, riscv :Type: vm :Parameters: args[0] - size of the dirty log ring diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h index 5f59fd226cc5..ef27d4289da1 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -18,6 +18,7 @@ #define __KVM_HAVE_IRQ_LINE #define KVM_COALESCED_MMIO_PAGE_OFFSET 1 +#define KVM_DIRTY_LOG_PAGE_OFFSET 64 #define KVM_INTERRUPT_SET -1U #define KVM_INTERRUPT_UNSET -2U diff --git a/arch/riscv/kvm/Kconfig b/arch/riscv/kvm/Kconfig index 704c2899197e..5a62091b0809 100644 --- a/arch/riscv/kvm/Kconfig +++ b/arch/riscv/kvm/Kconfig @@ -25,6 +25,7 @@ config KVM select HAVE_KVM_MSI select HAVE_KVM_VCPU_ASYNC_IOCTL select HAVE_KVM_READONLY_MEM + select HAVE_KVM_DIRTY_RING_ACQ_REL select KVM_COMMON select KVM_GENERIC_DIRTYLOG_READ_PROTECT select KVM_GENERIC_HARDWARE_ENABLING diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index e0a01af426ff..0502125efb30 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -690,7 +690,14 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) } } -static void kvm_riscv_check_vcpu_requests(struct kvm_vcpu *vcpu) +/** + * check_vcpu_requests - check and handle pending vCPU requests + * @vcpu: the VCPU pointer + * + * Return: 1 if we should enter the guest + * 0 if we should exit to userspace + */ +static int kvm_riscv_check_vcpu_requests(struct kvm_vcpu *vcpu) { struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu); @@ -735,7 +742,12 @@ static void kvm_riscv_check_vcpu_requests(struct kvm_vcpu *vcpu) if (kvm_check_request(KVM_REQ_STEAL_UPDATE, vcpu)) kvm_riscv_vcpu_record_steal_time(vcpu); + + if (kvm_dirty_ring_check_request(vcpu)) + return 0; } + + return 1; } static void kvm_riscv_update_hvip(struct kvm_vcpu *vcpu) @@ -917,7 +929,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) kvm_riscv_gstage_vmid_update(vcpu); - kvm_riscv_check_vcpu_requests(vcpu); + ret = kvm_riscv_check_vcpu_requests(vcpu); + if (ret <= 0) + continue; preempt_disable(); -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] RISC-V: KVM: Enable ring-based dirty memory tracking 2025-06-13 11:29 ` [PATCH 1/2] " zhouquan @ 2025-07-17 6:10 ` Anup Patel 0 siblings, 0 replies; 8+ messages in thread From: Anup Patel @ 2025-07-17 6:10 UTC (permalink / raw) To: zhouquan Cc: ajones, atishp, paul.walmsley, palmer, linux-kernel, linux-riscv, kvm, kvm-riscv On Fri, Jun 13, 2025 at 5:08 PM <zhouquan@iscas.ac.cn> wrote: > > From: Quan Zhou <zhouquan@iscas.ac.cn> > > Enable ring-based dirty memory tracking on riscv: > > - Enable CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL as riscv is weakly > ordered. > - Set KVM_DIRTY_LOG_PAGE_OFFSET for the ring buffer's physical page > offset. > - Add a check to kvm_vcpu_kvm_riscv_check_vcpu_requests for checking > whether the dirty ring is soft full. > > To handle vCPU requests that cause exits to userspace, modified the > `kvm_riscv_check_vcpu_requests` to return a value (currently only > returns 0 or 1). > > Signed-off-by: Quan Zhou <zhouquan@iscas.ac.cn> LGTM. Reviewed-by: Anup Patel <anup@brainfault.org> Queued this patch for Linux-6.17 Thanks, Anup > --- > Documentation/virt/kvm/api.rst | 2 +- > arch/riscv/include/uapi/asm/kvm.h | 1 + > arch/riscv/kvm/Kconfig | 1 + > arch/riscv/kvm/vcpu.c | 18 ++++++++++++++++-- > 4 files changed, 19 insertions(+), 3 deletions(-) > > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst > index 1bd2d42e6424..5de0fbfe2fc0 100644 > --- a/Documentation/virt/kvm/api.rst > +++ b/Documentation/virt/kvm/api.rst > @@ -8316,7 +8316,7 @@ core crystal clock frequency, if a non-zero CPUID 0x15 is exposed to the guest. > 7.36 KVM_CAP_DIRTY_LOG_RING/KVM_CAP_DIRTY_LOG_RING_ACQ_REL > ---------------------------------------------------------- > > -:Architectures: x86, arm64 > +:Architectures: x86, arm64, riscv > :Type: vm > :Parameters: args[0] - size of the dirty log ring > > diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h > index 5f59fd226cc5..ef27d4289da1 100644 > --- a/arch/riscv/include/uapi/asm/kvm.h > +++ b/arch/riscv/include/uapi/asm/kvm.h > @@ -18,6 +18,7 @@ > #define __KVM_HAVE_IRQ_LINE > > #define KVM_COALESCED_MMIO_PAGE_OFFSET 1 > +#define KVM_DIRTY_LOG_PAGE_OFFSET 64 > > #define KVM_INTERRUPT_SET -1U > #define KVM_INTERRUPT_UNSET -2U > diff --git a/arch/riscv/kvm/Kconfig b/arch/riscv/kvm/Kconfig > index 704c2899197e..5a62091b0809 100644 > --- a/arch/riscv/kvm/Kconfig > +++ b/arch/riscv/kvm/Kconfig > @@ -25,6 +25,7 @@ config KVM > select HAVE_KVM_MSI > select HAVE_KVM_VCPU_ASYNC_IOCTL > select HAVE_KVM_READONLY_MEM > + select HAVE_KVM_DIRTY_RING_ACQ_REL > select KVM_COMMON > select KVM_GENERIC_DIRTYLOG_READ_PROTECT > select KVM_GENERIC_HARDWARE_ENABLING > diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c > index e0a01af426ff..0502125efb30 100644 > --- a/arch/riscv/kvm/vcpu.c > +++ b/arch/riscv/kvm/vcpu.c > @@ -690,7 +690,14 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) > } > } > > -static void kvm_riscv_check_vcpu_requests(struct kvm_vcpu *vcpu) > +/** > + * check_vcpu_requests - check and handle pending vCPU requests > + * @vcpu: the VCPU pointer > + * > + * Return: 1 if we should enter the guest > + * 0 if we should exit to userspace > + */ > +static int kvm_riscv_check_vcpu_requests(struct kvm_vcpu *vcpu) > { > struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu); > > @@ -735,7 +742,12 @@ static void kvm_riscv_check_vcpu_requests(struct kvm_vcpu *vcpu) > > if (kvm_check_request(KVM_REQ_STEAL_UPDATE, vcpu)) > kvm_riscv_vcpu_record_steal_time(vcpu); > + > + if (kvm_dirty_ring_check_request(vcpu)) > + return 0; > } > + > + return 1; > } > > static void kvm_riscv_update_hvip(struct kvm_vcpu *vcpu) > @@ -917,7 +929,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) > > kvm_riscv_gstage_vmid_update(vcpu); > > - kvm_riscv_check_vcpu_requests(vcpu); > + ret = kvm_riscv_check_vcpu_requests(vcpu); > + if (ret <= 0) > + continue; > > preempt_disable(); > > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases 2025-06-13 11:29 [PATCH 0/2] RISC-V: KVM: Enable ring-based dirty memory tracking zhouquan 2025-06-13 11:29 ` [PATCH 1/2] " zhouquan @ 2025-06-13 11:30 ` zhouquan 2025-06-24 14:10 ` Andrew Jones 2025-07-17 6:12 ` Anup Patel 1 sibling, 2 replies; 8+ messages in thread From: zhouquan @ 2025-06-13 11:30 UTC (permalink / raw) To: anup, ajones, atishp, paul.walmsley, palmer Cc: linux-kernel, linux-riscv, kvm, kvm-riscv, Quan Zhou From: Quan Zhou <zhouquan@iscas.ac.cn> Some common KVM test cases are supported on riscv now as following: access_tracking_perf_test demand_paging_test dirty_log_perf_test dirty_log_test guest_print_test kvm_binary_stats_test kvm_create_max_vcpus kvm_page_table_test memslot_modification_stress_test memslot_perf_test rseq_test set_memory_region_test Add missing headers for tests and fix RISCV_FENCE redefinition in `rseq-riscv.h` by using the existing macro from <asm/fence.h>. Signed-off-by: Quan Zhou <zhouquan@iscas.ac.cn> --- tools/testing/selftests/kvm/Makefile.kvm | 12 ++++++++++++ .../testing/selftests/kvm/include/riscv/processor.h | 2 ++ tools/testing/selftests/rseq/rseq-riscv.h | 3 +-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm index 38b95998e1e6..565e191e99c8 100644 --- a/tools/testing/selftests/kvm/Makefile.kvm +++ b/tools/testing/selftests/kvm/Makefile.kvm @@ -197,6 +197,18 @@ TEST_GEN_PROGS_riscv += arch_timer TEST_GEN_PROGS_riscv += coalesced_io_test TEST_GEN_PROGS_riscv += get-reg-list TEST_GEN_PROGS_riscv += steal_time +TEST_GEN_PROGS_riscv += access_tracking_perf_test +TEST_GEN_PROGS_riscv += demand_paging_test +TEST_GEN_PROGS_riscv += dirty_log_perf_test +TEST_GEN_PROGS_riscv += dirty_log_test +TEST_GEN_PROGS_riscv += guest_print_test +TEST_GEN_PROGS_riscv += kvm_binary_stats_test +TEST_GEN_PROGS_riscv += kvm_create_max_vcpus +TEST_GEN_PROGS_riscv += kvm_page_table_test +TEST_GEN_PROGS_riscv += memslot_modification_stress_test +TEST_GEN_PROGS_riscv += memslot_perf_test +TEST_GEN_PROGS_riscv += rseq_test +TEST_GEN_PROGS_riscv += set_memory_region_test TEST_GEN_PROGS_loongarch += coalesced_io_test TEST_GEN_PROGS_loongarch += demand_paging_test diff --git a/tools/testing/selftests/kvm/include/riscv/processor.h b/tools/testing/selftests/kvm/include/riscv/processor.h index 162f303d9daa..4cf5ae11760f 100644 --- a/tools/testing/selftests/kvm/include/riscv/processor.h +++ b/tools/testing/selftests/kvm/include/riscv/processor.h @@ -9,7 +9,9 @@ #include <linux/stringify.h> #include <asm/csr.h> +#include <asm/vdso/processor.h> #include "kvm_util.h" +#include "ucall_common.h" #define INSN_OPCODE_MASK 0x007c #define INSN_OPCODE_SHIFT 2 diff --git a/tools/testing/selftests/rseq/rseq-riscv.h b/tools/testing/selftests/rseq/rseq-riscv.h index 67d544aaa9a3..06c840e81c8b 100644 --- a/tools/testing/selftests/rseq/rseq-riscv.h +++ b/tools/testing/selftests/rseq/rseq-riscv.h @@ -8,6 +8,7 @@ * exception when executed in all modes. */ #include <endian.h> +#include <asm/fence.h> #if defined(__BYTE_ORDER) ? (__BYTE_ORDER == __LITTLE_ENDIAN) : defined(__LITTLE_ENDIAN) #define RSEQ_SIG 0xf1401073 /* csrr mhartid, x0 */ @@ -24,8 +25,6 @@ #define REG_L __REG_SEL("ld ", "lw ") #define REG_S __REG_SEL("sd ", "sw ") -#define RISCV_FENCE(p, s) \ - __asm__ __volatile__ ("fence " #p "," #s : : : "memory") #define rseq_smp_mb() RISCV_FENCE(rw, rw) #define rseq_smp_rmb() RISCV_FENCE(r, r) #define rseq_smp_wmb() RISCV_FENCE(w, w) -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases 2025-06-13 11:30 ` [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases zhouquan @ 2025-06-24 14:10 ` Andrew Jones 2025-07-17 9:24 ` Quan Zhou 2025-07-17 6:12 ` Anup Patel 1 sibling, 1 reply; 8+ messages in thread From: Andrew Jones @ 2025-06-24 14:10 UTC (permalink / raw) To: zhouquan Cc: anup, atishp, paul.walmsley, palmer, linux-kernel, linux-riscv, kvm, kvm-riscv On Fri, Jun 13, 2025 at 07:30:13PM +0800, zhouquan@iscas.ac.cn wrote: > From: Quan Zhou <zhouquan@iscas.ac.cn> > > Some common KVM test cases are supported on riscv now as following: > > access_tracking_perf_test > demand_paging_test > dirty_log_perf_test > dirty_log_test > guest_print_test > kvm_binary_stats_test > kvm_create_max_vcpus > kvm_page_table_test > memslot_modification_stress_test > memslot_perf_test > rseq_test > set_memory_region_test Half this list is already build for riscv since they're common. See TEST_GEN_PROGS_COMMON. If the other half can be built and run then please send a separate patch, not something tacked onto this series, since they're all unrelated to the series. > > Add missing headers for tests and fix RISCV_FENCE redefinition > in `rseq-riscv.h` by using the existing macro from <asm/fence.h>. > > Signed-off-by: Quan Zhou <zhouquan@iscas.ac.cn> > --- > tools/testing/selftests/kvm/Makefile.kvm | 12 ++++++++++++ > .../testing/selftests/kvm/include/riscv/processor.h | 2 ++ > tools/testing/selftests/rseq/rseq-riscv.h | 3 +-- > 3 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm > index 38b95998e1e6..565e191e99c8 100644 > --- a/tools/testing/selftests/kvm/Makefile.kvm > +++ b/tools/testing/selftests/kvm/Makefile.kvm > @@ -197,6 +197,18 @@ TEST_GEN_PROGS_riscv += arch_timer > TEST_GEN_PROGS_riscv += coalesced_io_test > TEST_GEN_PROGS_riscv += get-reg-list > TEST_GEN_PROGS_riscv += steal_time > +TEST_GEN_PROGS_riscv += access_tracking_perf_test > +TEST_GEN_PROGS_riscv += demand_paging_test > +TEST_GEN_PROGS_riscv += dirty_log_perf_test > +TEST_GEN_PROGS_riscv += dirty_log_test > +TEST_GEN_PROGS_riscv += guest_print_test > +TEST_GEN_PROGS_riscv += kvm_binary_stats_test > +TEST_GEN_PROGS_riscv += kvm_create_max_vcpus > +TEST_GEN_PROGS_riscv += kvm_page_table_test > +TEST_GEN_PROGS_riscv += memslot_modification_stress_test > +TEST_GEN_PROGS_riscv += memslot_perf_test > +TEST_GEN_PROGS_riscv += rseq_test > +TEST_GEN_PROGS_riscv += set_memory_region_test > > TEST_GEN_PROGS_loongarch += coalesced_io_test > TEST_GEN_PROGS_loongarch += demand_paging_test > diff --git a/tools/testing/selftests/kvm/include/riscv/processor.h b/tools/testing/selftests/kvm/include/riscv/processor.h > index 162f303d9daa..4cf5ae11760f 100644 > --- a/tools/testing/selftests/kvm/include/riscv/processor.h > +++ b/tools/testing/selftests/kvm/include/riscv/processor.h > @@ -9,7 +9,9 @@ > > #include <linux/stringify.h> > #include <asm/csr.h> > +#include <asm/vdso/processor.h> > #include "kvm_util.h" > +#include "ucall_common.h" These should be included directly from the tests that need them. > > #define INSN_OPCODE_MASK 0x007c > #define INSN_OPCODE_SHIFT 2 > diff --git a/tools/testing/selftests/rseq/rseq-riscv.h b/tools/testing/selftests/rseq/rseq-riscv.h > index 67d544aaa9a3..06c840e81c8b 100644 > --- a/tools/testing/selftests/rseq/rseq-riscv.h > +++ b/tools/testing/selftests/rseq/rseq-riscv.h > @@ -8,6 +8,7 @@ > * exception when executed in all modes. > */ > #include <endian.h> > +#include <asm/fence.h> > > #if defined(__BYTE_ORDER) ? (__BYTE_ORDER == __LITTLE_ENDIAN) : defined(__LITTLE_ENDIAN) > #define RSEQ_SIG 0xf1401073 /* csrr mhartid, x0 */ > @@ -24,8 +25,6 @@ > #define REG_L __REG_SEL("ld ", "lw ") > #define REG_S __REG_SEL("sd ", "sw ") > > -#define RISCV_FENCE(p, s) \ > - __asm__ __volatile__ ("fence " #p "," #s : : : "memory") > #define rseq_smp_mb() RISCV_FENCE(rw, rw) > #define rseq_smp_rmb() RISCV_FENCE(r, r) > #define rseq_smp_wmb() RISCV_FENCE(w, w) > -- > 2.34.1 tools/testing/selftests/rseq isn't under KVM's purview, so this should be a separate patch CC'ing the appropriate people and lists. Thanks, drew ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases 2025-06-24 14:10 ` Andrew Jones @ 2025-07-17 9:24 ` Quan Zhou 0 siblings, 0 replies; 8+ messages in thread From: Quan Zhou @ 2025-07-17 9:24 UTC (permalink / raw) To: Andrew Jones Cc: anup, atishp, paul.walmsley, palmer, linux-kernel, linux-riscv, kvm, kvm-riscv On 2025/6/24 22:10, Andrew Jones wrote: > On Fri, Jun 13, 2025 at 07:30:13PM +0800, zhouquan@iscas.ac.cn wrote: >> From: Quan Zhou <zhouquan@iscas.ac.cn> >> >> Some common KVM test cases are supported on riscv now as following: >> >> access_tracking_perf_test >> demand_paging_test >> dirty_log_perf_test >> dirty_log_test >> guest_print_test >> kvm_binary_stats_test >> kvm_create_max_vcpus >> kvm_page_table_test >> memslot_modification_stress_test >> memslot_perf_test >> rseq_test >> set_memory_region_test > > Half this list is already build for riscv since they're common. See > TEST_GEN_PROGS_COMMON. If the other half can be built and run then > please send a separate patch, not something tacked onto this series, > since they're all unrelated to the series. > >> >> Add missing headers for tests and fix RISCV_FENCE redefinition >> in `rseq-riscv.h` by using the existing macro from <asm/fence.h>. >> >> Signed-off-by: Quan Zhou <zhouquan@iscas.ac.cn> >> --- >> tools/testing/selftests/kvm/Makefile.kvm | 12 ++++++++++++ >> .../testing/selftests/kvm/include/riscv/processor.h | 2 ++ >> tools/testing/selftests/rseq/rseq-riscv.h | 3 +-- >> 3 files changed, 15 insertions(+), 2 deletions(-) >> >> diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm >> index 38b95998e1e6..565e191e99c8 100644 >> --- a/tools/testing/selftests/kvm/Makefile.kvm >> +++ b/tools/testing/selftests/kvm/Makefile.kvm >> @@ -197,6 +197,18 @@ TEST_GEN_PROGS_riscv += arch_timer >> TEST_GEN_PROGS_riscv += coalesced_io_test >> TEST_GEN_PROGS_riscv += get-reg-list >> TEST_GEN_PROGS_riscv += steal_time >> +TEST_GEN_PROGS_riscv += access_tracking_perf_test >> +TEST_GEN_PROGS_riscv += demand_paging_test >> +TEST_GEN_PROGS_riscv += dirty_log_perf_test >> +TEST_GEN_PROGS_riscv += dirty_log_test >> +TEST_GEN_PROGS_riscv += guest_print_test >> +TEST_GEN_PROGS_riscv += kvm_binary_stats_test >> +TEST_GEN_PROGS_riscv += kvm_create_max_vcpus >> +TEST_GEN_PROGS_riscv += kvm_page_table_test >> +TEST_GEN_PROGS_riscv += memslot_modification_stress_test >> +TEST_GEN_PROGS_riscv += memslot_perf_test >> +TEST_GEN_PROGS_riscv += rseq_test >> +TEST_GEN_PROGS_riscv += set_memory_region_test >> >> TEST_GEN_PROGS_loongarch += coalesced_io_test >> TEST_GEN_PROGS_loongarch += demand_paging_test >> diff --git a/tools/testing/selftests/kvm/include/riscv/processor.h b/tools/testing/selftests/kvm/include/riscv/processor.h >> index 162f303d9daa..4cf5ae11760f 100644 >> --- a/tools/testing/selftests/kvm/include/riscv/processor.h >> +++ b/tools/testing/selftests/kvm/include/riscv/processor.h >> @@ -9,7 +9,9 @@ >> >> #include <linux/stringify.h> >> #include <asm/csr.h> >> +#include <asm/vdso/processor.h> >> #include "kvm_util.h" >> +#include "ucall_common.h" > > These should be included directly from the tests that need them. > >> >> #define INSN_OPCODE_MASK 0x007c >> #define INSN_OPCODE_SHIFT 2 >> diff --git a/tools/testing/selftests/rseq/rseq-riscv.h b/tools/testing/selftests/rseq/rseq-riscv.h >> index 67d544aaa9a3..06c840e81c8b 100644 >> --- a/tools/testing/selftests/rseq/rseq-riscv.h >> +++ b/tools/testing/selftests/rseq/rseq-riscv.h >> @@ -8,6 +8,7 @@ >> * exception when executed in all modes. >> */ >> #include <endian.h> >> +#include <asm/fence.h> >> >> #if defined(__BYTE_ORDER) ? (__BYTE_ORDER == __LITTLE_ENDIAN) : defined(__LITTLE_ENDIAN) >> #define RSEQ_SIG 0xf1401073 /* csrr mhartid, x0 */ >> @@ -24,8 +25,6 @@ >> #define REG_L __REG_SEL("ld ", "lw ") >> #define REG_S __REG_SEL("sd ", "sw ") >> >> -#define RISCV_FENCE(p, s) \ >> - __asm__ __volatile__ ("fence " #p "," #s : : : "memory") >> #define rseq_smp_mb() RISCV_FENCE(rw, rw) >> #define rseq_smp_rmb() RISCV_FENCE(r, r) >> #define rseq_smp_wmb() RISCV_FENCE(w, w) >> -- >> 2.34.1 > > tools/testing/selftests/rseq isn't under KVM's purview, so this should be > a separate patch CC'ing the appropriate people and lists. > > Thanks, > drew Thanks so much for your review, I'll split and modify this set of patches. Regards, Quan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases 2025-06-13 11:30 ` [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases zhouquan 2025-06-24 14:10 ` Andrew Jones @ 2025-07-17 6:12 ` Anup Patel 2025-07-17 9:21 ` Quan Zhou 1 sibling, 1 reply; 8+ messages in thread From: Anup Patel @ 2025-07-17 6:12 UTC (permalink / raw) To: zhouquan Cc: ajones, atishp, paul.walmsley, palmer, linux-kernel, linux-riscv, kvm, kvm-riscv On Fri, Jun 13, 2025 at 5:08 PM <zhouquan@iscas.ac.cn> wrote: > > From: Quan Zhou <zhouquan@iscas.ac.cn> > > Some common KVM test cases are supported on riscv now as following: > > access_tracking_perf_test > demand_paging_test > dirty_log_perf_test > dirty_log_test > guest_print_test > kvm_binary_stats_test > kvm_create_max_vcpus > kvm_page_table_test > memslot_modification_stress_test > memslot_perf_test > rseq_test > set_memory_region_test > > Add missing headers for tests and fix RISCV_FENCE redefinition > in `rseq-riscv.h` by using the existing macro from <asm/fence.h>. > > Signed-off-by: Quan Zhou <zhouquan@iscas.ac.cn> Please address Drew's comments and send v2 of only this patch. The first patch of this series is already queued. Regards, Anup > --- > tools/testing/selftests/kvm/Makefile.kvm | 12 ++++++++++++ > .../testing/selftests/kvm/include/riscv/processor.h | 2 ++ > tools/testing/selftests/rseq/rseq-riscv.h | 3 +-- > 3 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm > index 38b95998e1e6..565e191e99c8 100644 > --- a/tools/testing/selftests/kvm/Makefile.kvm > +++ b/tools/testing/selftests/kvm/Makefile.kvm > @@ -197,6 +197,18 @@ TEST_GEN_PROGS_riscv += arch_timer > TEST_GEN_PROGS_riscv += coalesced_io_test > TEST_GEN_PROGS_riscv += get-reg-list > TEST_GEN_PROGS_riscv += steal_time > +TEST_GEN_PROGS_riscv += access_tracking_perf_test > +TEST_GEN_PROGS_riscv += demand_paging_test > +TEST_GEN_PROGS_riscv += dirty_log_perf_test > +TEST_GEN_PROGS_riscv += dirty_log_test > +TEST_GEN_PROGS_riscv += guest_print_test > +TEST_GEN_PROGS_riscv += kvm_binary_stats_test > +TEST_GEN_PROGS_riscv += kvm_create_max_vcpus > +TEST_GEN_PROGS_riscv += kvm_page_table_test > +TEST_GEN_PROGS_riscv += memslot_modification_stress_test > +TEST_GEN_PROGS_riscv += memslot_perf_test > +TEST_GEN_PROGS_riscv += rseq_test > +TEST_GEN_PROGS_riscv += set_memory_region_test > > TEST_GEN_PROGS_loongarch += coalesced_io_test > TEST_GEN_PROGS_loongarch += demand_paging_test > diff --git a/tools/testing/selftests/kvm/include/riscv/processor.h b/tools/testing/selftests/kvm/include/riscv/processor.h > index 162f303d9daa..4cf5ae11760f 100644 > --- a/tools/testing/selftests/kvm/include/riscv/processor.h > +++ b/tools/testing/selftests/kvm/include/riscv/processor.h > @@ -9,7 +9,9 @@ > > #include <linux/stringify.h> > #include <asm/csr.h> > +#include <asm/vdso/processor.h> > #include "kvm_util.h" > +#include "ucall_common.h" > > #define INSN_OPCODE_MASK 0x007c > #define INSN_OPCODE_SHIFT 2 > diff --git a/tools/testing/selftests/rseq/rseq-riscv.h b/tools/testing/selftests/rseq/rseq-riscv.h > index 67d544aaa9a3..06c840e81c8b 100644 > --- a/tools/testing/selftests/rseq/rseq-riscv.h > +++ b/tools/testing/selftests/rseq/rseq-riscv.h > @@ -8,6 +8,7 @@ > * exception when executed in all modes. > */ > #include <endian.h> > +#include <asm/fence.h> > > #if defined(__BYTE_ORDER) ? (__BYTE_ORDER == __LITTLE_ENDIAN) : defined(__LITTLE_ENDIAN) > #define RSEQ_SIG 0xf1401073 /* csrr mhartid, x0 */ > @@ -24,8 +25,6 @@ > #define REG_L __REG_SEL("ld ", "lw ") > #define REG_S __REG_SEL("sd ", "sw ") > > -#define RISCV_FENCE(p, s) \ > - __asm__ __volatile__ ("fence " #p "," #s : : : "memory") > #define rseq_smp_mb() RISCV_FENCE(rw, rw) > #define rseq_smp_rmb() RISCV_FENCE(r, r) > #define rseq_smp_wmb() RISCV_FENCE(w, w) > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases 2025-07-17 6:12 ` Anup Patel @ 2025-07-17 9:21 ` Quan Zhou 0 siblings, 0 replies; 8+ messages in thread From: Quan Zhou @ 2025-07-17 9:21 UTC (permalink / raw) To: Anup Patel Cc: ajones, atishp, paul.walmsley, palmer, linux-kernel, linux-riscv, kvm, kvm-riscv On 2025/7/17 14:12, Anup Patel wrote: > On Fri, Jun 13, 2025 at 5:08 PM <zhouquan@iscas.ac.cn> wrote: >> >> From: Quan Zhou <zhouquan@iscas.ac.cn> >> >> Some common KVM test cases are supported on riscv now as following: >> >> access_tracking_perf_test >> demand_paging_test >> dirty_log_perf_test >> dirty_log_test >> guest_print_test >> kvm_binary_stats_test >> kvm_create_max_vcpus >> kvm_page_table_test >> memslot_modification_stress_test >> memslot_perf_test >> rseq_test >> set_memory_region_test >> >> Add missing headers for tests and fix RISCV_FENCE redefinition >> in `rseq-riscv.h` by using the existing macro from <asm/fence.h>. >> >> Signed-off-by: Quan Zhou <zhouquan@iscas.ac.cn> > > Please address Drew's comments and send v2 of only this patch. > The first patch of this series is already queued. > > Regards, > Anup Okay, I'll split and modify this set of patches. Thanks. Regards, Quan > >> --- >> tools/testing/selftests/kvm/Makefile.kvm | 12 ++++++++++++ >> .../testing/selftests/kvm/include/riscv/processor.h | 2 ++ >> tools/testing/selftests/rseq/rseq-riscv.h | 3 +-- >> 3 files changed, 15 insertions(+), 2 deletions(-) >> >> diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm >> index 38b95998e1e6..565e191e99c8 100644 >> --- a/tools/testing/selftests/kvm/Makefile.kvm >> +++ b/tools/testing/selftests/kvm/Makefile.kvm >> @@ -197,6 +197,18 @@ TEST_GEN_PROGS_riscv += arch_timer >> TEST_GEN_PROGS_riscv += coalesced_io_test >> TEST_GEN_PROGS_riscv += get-reg-list >> TEST_GEN_PROGS_riscv += steal_time >> +TEST_GEN_PROGS_riscv += access_tracking_perf_test >> +TEST_GEN_PROGS_riscv += demand_paging_test >> +TEST_GEN_PROGS_riscv += dirty_log_perf_test >> +TEST_GEN_PROGS_riscv += dirty_log_test >> +TEST_GEN_PROGS_riscv += guest_print_test >> +TEST_GEN_PROGS_riscv += kvm_binary_stats_test >> +TEST_GEN_PROGS_riscv += kvm_create_max_vcpus >> +TEST_GEN_PROGS_riscv += kvm_page_table_test >> +TEST_GEN_PROGS_riscv += memslot_modification_stress_test >> +TEST_GEN_PROGS_riscv += memslot_perf_test >> +TEST_GEN_PROGS_riscv += rseq_test >> +TEST_GEN_PROGS_riscv += set_memory_region_test >> >> TEST_GEN_PROGS_loongarch += coalesced_io_test >> TEST_GEN_PROGS_loongarch += demand_paging_test >> diff --git a/tools/testing/selftests/kvm/include/riscv/processor.h b/tools/testing/selftests/kvm/include/riscv/processor.h >> index 162f303d9daa..4cf5ae11760f 100644 >> --- a/tools/testing/selftests/kvm/include/riscv/processor.h >> +++ b/tools/testing/selftests/kvm/include/riscv/processor.h >> @@ -9,7 +9,9 @@ >> >> #include <linux/stringify.h> >> #include <asm/csr.h> >> +#include <asm/vdso/processor.h> >> #include "kvm_util.h" >> +#include "ucall_common.h" >> >> #define INSN_OPCODE_MASK 0x007c >> #define INSN_OPCODE_SHIFT 2 >> diff --git a/tools/testing/selftests/rseq/rseq-riscv.h b/tools/testing/selftests/rseq/rseq-riscv.h >> index 67d544aaa9a3..06c840e81c8b 100644 >> --- a/tools/testing/selftests/rseq/rseq-riscv.h >> +++ b/tools/testing/selftests/rseq/rseq-riscv.h >> @@ -8,6 +8,7 @@ >> * exception when executed in all modes. >> */ >> #include <endian.h> >> +#include <asm/fence.h> >> >> #if defined(__BYTE_ORDER) ? (__BYTE_ORDER == __LITTLE_ENDIAN) : defined(__LITTLE_ENDIAN) >> #define RSEQ_SIG 0xf1401073 /* csrr mhartid, x0 */ >> @@ -24,8 +25,6 @@ >> #define REG_L __REG_SEL("ld ", "lw ") >> #define REG_S __REG_SEL("sd ", "sw ") >> >> -#define RISCV_FENCE(p, s) \ >> - __asm__ __volatile__ ("fence " #p "," #s : : : "memory") >> #define rseq_smp_mb() RISCV_FENCE(rw, rw) >> #define rseq_smp_rmb() RISCV_FENCE(r, r) >> #define rseq_smp_wmb() RISCV_FENCE(w, w) >> -- >> 2.34.1 >> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-07-17 9:36 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-06-13 11:29 [PATCH 0/2] RISC-V: KVM: Enable ring-based dirty memory tracking zhouquan 2025-06-13 11:29 ` [PATCH 1/2] " zhouquan 2025-07-17 6:10 ` Anup Patel 2025-06-13 11:30 ` [PATCH 2/2] KVM: riscv: selftests: Add common supported test cases zhouquan 2025-06-24 14:10 ` Andrew Jones 2025-07-17 9:24 ` Quan Zhou 2025-07-17 6:12 ` Anup Patel 2025-07-17 9:21 ` Quan Zhou
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).