Message ID | 20200303080710.1672-1-jianjay.zhou@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kvm: selftests: Support dirty log initial-all-set test | expand |
On 03/03/20 09:07, Jay Zhou wrote: > #ifdef USE_CLEAR_DIRTY_LOG > - if (!kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2)) { > - fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, skipping tests\n"); > + dirty_log_manual_caps = > + kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); > + if (!dirty_log_manual_caps) { > + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, " > + "skipping tests\n"); > + exit(KSFT_SKIP); > + } > + if (dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_CAPS && > + dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE) { > + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not valid caps " > + "%"PRIu64", skipping tests\n", > + dirty_log_manual_caps); > exit(KSFT_SKIP); > } > #endif > dirty_log_manual_caps &= (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE | KVM_DIRTY_LOG_INITIALLY_SET); Paolo
On 03/03/20 09:07, Jay Zhou wrote: > #ifdef USE_CLEAR_DIRTY_LOG > - if (!kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2)) { > - fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, skipping tests\n"); > + dirty_log_manual_caps = > + kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); > + if (!dirty_log_manual_caps) { > + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, " > + "skipping tests\n"); > + exit(KSFT_SKIP); > + } > + if (dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_CAPS && > + dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE) { > + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not valid caps " > + "%"PRIu64", skipping tests\n", > + dirty_log_manual_caps); > exit(KSFT_SKIP); > } > #endif > Thanks, instead of this final "if" it should be enough to do dirty_log_manual_caps &= (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE | KVM_DIRTY_LOG_INITIALLY_SET); Otherwise looks good, I'll test it and eventually apply both patches. Paolo
> -----Original Message----- > From: Paolo Bonzini [mailto:pbonzini@redhat.com] > Sent: Tuesday, March 3, 2020 4:54 PM > To: Zhoujian (jay) <jianjay.zhou@huawei.com>; kvm@vger.kernel.org > Cc: peterx@redhat.com; shuah@kernel.org; linux-kselftest@vger.kernel.org; > linux-kernel@vger.kernel.org; wangxin (U) <wangxinxin.wang@huawei.com>; > Huangweidong (C) <weidong.huang@huawei.com>; Liujinsong (Paul) > <liu.jinsong@huawei.com> > Subject: Re: [PATCH] kvm: selftests: Support dirty log initial-all-set test > > On 03/03/20 09:07, Jay Zhou wrote: > > #ifdef USE_CLEAR_DIRTY_LOG > > - if (!kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2)) { > > - fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, skipping > tests\n"); > > + dirty_log_manual_caps = > > + kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); > > + if (!dirty_log_manual_caps) { > > + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, " > > + "skipping tests\n"); > > + exit(KSFT_SKIP); > > + } > > + if (dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_CAPS && > > + dirty_log_manual_caps != > KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE) { > > + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not valid caps " > > + "%"PRIu64", skipping tests\n", > > + dirty_log_manual_caps); > > exit(KSFT_SKIP); > > } > > #endif > > > > Thanks, instead of this final "if" it should be enough to do > > dirty_log_manual_caps &= (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE > | > KVM_DIRTY_LOG_INITIALLY_SET); > > > Otherwise looks good, I'll test it and eventually apply both patches. Do I need to resubmit this patch with this modification? Regards, Jay Zhou > > Paolo
On 03/03/20 11:00, Zhoujian (jay) wrote: > > >> -----Original Message----- >> From: Paolo Bonzini [mailto:pbonzini@redhat.com] >> Sent: Tuesday, March 3, 2020 4:54 PM >> To: Zhoujian (jay) <jianjay.zhou@huawei.com>; kvm@vger.kernel.org >> Cc: peterx@redhat.com; shuah@kernel.org; linux-kselftest@vger.kernel.org; >> linux-kernel@vger.kernel.org; wangxin (U) <wangxinxin.wang@huawei.com>; >> Huangweidong (C) <weidong.huang@huawei.com>; Liujinsong (Paul) >> <liu.jinsong@huawei.com> >> Subject: Re: [PATCH] kvm: selftests: Support dirty log initial-all-set test >> >> On 03/03/20 09:07, Jay Zhou wrote: >>> #ifdef USE_CLEAR_DIRTY_LOG >>> - if (!kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2)) { >>> - fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, skipping >> tests\n"); >>> + dirty_log_manual_caps = >>> + kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); >>> + if (!dirty_log_manual_caps) { >>> + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, " >>> + "skipping tests\n"); >>> + exit(KSFT_SKIP); >>> + } >>> + if (dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_CAPS && >>> + dirty_log_manual_caps != >> KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE) { >>> + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not valid caps " >>> + "%"PRIu64", skipping tests\n", >>> + dirty_log_manual_caps); >>> exit(KSFT_SKIP); >>> } >>> #endif >>> >> >> Thanks, instead of this final "if" it should be enough to do >> >> dirty_log_manual_caps &= (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE >> | >> KVM_DIRTY_LOG_INITIALLY_SET); >> >> >> Otherwise looks good, I'll test it and eventually apply both patches. > > Do I need to resubmit this patch with this modification? No, thanks. Paolo
diff --git a/tools/testing/selftests/kvm/clear_dirty_log_test.c b/tools/testing/selftests/kvm/clear_dirty_log_test.c index 7493369..11672ec 100644 --- a/tools/testing/selftests/kvm/clear_dirty_log_test.c +++ b/tools/testing/selftests/kvm/clear_dirty_log_test.c @@ -1,2 +1,6 @@ #define USE_CLEAR_DIRTY_LOG +#define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE (1 << 0) +#define KVM_DIRTY_LOG_INITIALLY_SET (1 << 1) +#define KVM_DIRTY_LOG_MANUAL_CAPS (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE | \ + KVM_DIRTY_LOG_INITIALLY_SET) #include "dirty_log_test.c" diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/selftests/kvm/dirty_log_test.c index 5614222..7e21addc4 100644 --- a/tools/testing/selftests/kvm/dirty_log_test.c +++ b/tools/testing/selftests/kvm/dirty_log_test.c @@ -264,6 +264,10 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode, uint32_t vcpuid, #define DIRTY_MEM_BITS 30 /* 1G */ #define PAGE_SHIFT_4K 12 +#ifdef USE_CLEAR_DIRTY_LOG +static u64 dirty_log_manual_caps; +#endif + static void run_test(enum vm_guest_mode mode, unsigned long iterations, unsigned long interval, uint64_t phys_offset) { @@ -320,7 +324,7 @@ static void run_test(enum vm_guest_mode mode, unsigned long iterations, struct kvm_enable_cap cap = {}; cap.cap = KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2; - cap.args[0] = 1; + cap.args[0] = dirty_log_manual_caps; vm_enable_cap(vm, &cap); #endif @@ -438,8 +442,18 @@ int main(int argc, char *argv[]) #endif #ifdef USE_CLEAR_DIRTY_LOG - if (!kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2)) { - fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, skipping tests\n"); + dirty_log_manual_caps = + kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2); + if (!dirty_log_manual_caps) { + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not available, " + "skipping tests\n"); + exit(KSFT_SKIP); + } + if (dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_CAPS && + dirty_log_manual_caps != KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE) { + fprintf(stderr, "KVM_CLEAR_DIRTY_LOG not valid caps " + "%"PRIu64", skipping tests\n", + dirty_log_manual_caps); exit(KSFT_SKIP); } #endif
Since the new capability KVM_DIRTY_LOG_INITIALLY_SET of KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 has been introduced, tweak the clear_dirty_log_test to test it. Signed-off-by: Jay Zhou <jianjay.zhou@huawei.com> --- tools/testing/selftests/kvm/clear_dirty_log_test.c | 4 ++++ tools/testing/selftests/kvm/dirty_log_test.c | 20 +++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-)