Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp834482pxb; Tue, 12 Apr 2022 14:47:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx9ywneUKPjX/UfGWRO8yMpdspsAv1p6NEGLbv1dHHvLSS6QdUd4+AkVkkPCMLDfMrY7bBz X-Received: by 2002:a05:6a00:1c5c:b0:505:7469:134a with SMTP id s28-20020a056a001c5c00b005057469134amr6634272pfw.16.1649800045883; Tue, 12 Apr 2022 14:47:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649800045; cv=none; d=google.com; s=arc-20160816; b=cQqQ/G1jbcHQMNHLWbZNvDaUSimQw8QREja621qMQVQ1tuzRM30qMZ8HbgWndOhp/8 KAZuW+5l8qg6vv9DK1rQa0zaL6gISrhBq5aNnYoCox1BQC4lb/8/ozk9QN89t+dinnnD HymrYfBC9p0924i5rvPLOxtzwZE5+N+BqW9oQBnpbVqAC54yVWIUuJ2G2rrScCAmVCO4 vCS79ItzjqeA5AbEIydpX8E8YBFZ3myVLpKb7jAc+p9MYH7WXaVPvRhc8SaO4wtn4dKa 1kycfn11CfzeYfPhmjhl19vtDBtcRO0pgL/F9YqChAmv3GaxDrQ3m/O7992Cs2rLSvNt hpOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=eHMwq1hCh/WshGI8cTMIpUbiFRbaWH2+E/KWSNCulF0=; b=o09f0BOD4Tfh0Cr3ZQ8ljUa8x12Pn6XBgEI+R6VflL0cXXlyCyrwA+pHK7HgzMGsRe 0SFg4qddi83Wz2jTFxAypQy57mxjvEQBKyVibysNif++xti3qH7cp2pZpqoUGVAJxHcN hfMHMcvl5VSehzplnOa4q/WtKOyuAQNCQS3H7qySYXb8TnKeeBisrQEeiOlDjlOAOu7f s3FFx9bh5TJb4OuD/G122hWgvKxtBoa3YOpygEw4RBqLrdsscFckYtJBhAZU4aMk1x// yW+jYG8/6MRPF5tycVIvbKIulz0tIOb5X8vBUo61fmCjw74QTDAL/E0q6pIhVtg9t1/4 BdMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=DMyoyas2; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id ng8-20020a17090b1a8800b001c7049d4fe7si14743209pjb.146.2022.04.12.14.47.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 14:47:25 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=DMyoyas2; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D315013AA13; Tue, 12 Apr 2022 13:46:32 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358713AbiDLS7S (ORCPT + 99 others); Tue, 12 Apr 2022 14:59:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351915AbiDLS7Q (ORCPT ); Tue, 12 Apr 2022 14:59:16 -0400 Received: from mail-yb1-xb2f.google.com (mail-yb1-xb2f.google.com [IPv6:2607:f8b0:4864:20::b2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 734071B7A2 for ; Tue, 12 Apr 2022 11:56:57 -0700 (PDT) Received: by mail-yb1-xb2f.google.com with SMTP id j2so34828384ybu.0 for ; Tue, 12 Apr 2022 11:56:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=eHMwq1hCh/WshGI8cTMIpUbiFRbaWH2+E/KWSNCulF0=; b=DMyoyas2eSkhhVmvnWgufXkDHSzqfnS6ZOW9Mf+ms7554uhXbpQDI7yMDzmNZsI6jY 12Gss+w65bvDjdAkZKLMft7FGFtykJXlNLTH6mbkPY8t4bQlaxksxrjzw1fhh5iNun3H j3Hxub+s20/83m+ZnppQ9RKkKl41NV+HbUWNv4hRHfRulyiz8z3X3ipzxpjMCAGEh+w1 0Ufk1VETl6NHXwfolyiiAUL5lo5/tVBFuHWTG5osvxeZqdbjswmlCOuzxfTTex2AQH3W UM07xvjisCrHhNoN3smZgSpuGKAAKOCUOlbgud+rxRCep97226Lxnei5LWF5rjG+UT9r 1fqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=eHMwq1hCh/WshGI8cTMIpUbiFRbaWH2+E/KWSNCulF0=; b=vRzRj6inLc6ltTsSLGZmgXFuE+gOfUmlzK7RBmp+RUDBx3u7hsdgN1+qB1sSUPmjr/ 7OwPrapLuOjr3/GjDk8yCdp6xyDalXqG8Z3ICS4W/8d/O5d/wH8s1G3rOjEU5KkIFBxL 4fnliz7MipQ7pTX0gSYbo6m/P5WBhx63yp7fBlabBc0SyfyhFfkmsaTREs8I2NQ8a60d 3+h3abLL5tqb3LATrvNNdw4b7bffGbtMkTbW00RiW7ha24huQE371YaAyLYoCyQU41m/ iC5aq7Obp58NLThlFTG0zmSYULzlKo4b4XeCCDVGSZTUhyQEN3ZG5UFtTou8mu9uCrlM KKHw== X-Gm-Message-State: AOAM533tMrCZ1qeHRfTYEDODL2vxPa2ZhZsn1qtOiy1wBcetMnJYfPJm y/i0owLZUcMshAt6d5DV+28FNAT8AeiCjfEHZmMeLw== X-Received: by 2002:a25:add6:0:b0:641:2562:4022 with SMTP id d22-20020a25add6000000b0064125624022mr11431719ybe.391.1649789816478; Tue, 12 Apr 2022 11:56:56 -0700 (PDT) MIME-Version: 1.0 References: <20220411211015.3091615-1-bgardon@google.com> <20220411211015.3091615-4-bgardon@google.com> In-Reply-To: From: Ben Gardon Date: Tue, 12 Apr 2022 11:56:45 -0700 Message-ID: Subject: Re: [PATCH v4 03/10] KVM: selftests: Read binary stats desc in lib To: Mingwei Zhang Cc: LKML , kvm , Paolo Bonzini , Peter Xu , Sean Christopherson , Peter Shier , David Dunn , Junaid Shahid , Jim Mattson , David Matlack , Jing Zhang Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Apr 11, 2022 at 5:55 PM Mingwei Zhang wrote: > > On Mon, Apr 11, 2022, Ben Gardon wrote: > > Move the code to read the binary stats descriptors to the KVM selftests > > library. It will be re-used by other tests to check KVM behavior. > > > > No functional change intended. > > > > Signed-off-by: Ben Gardon > > --- > > .../selftests/kvm/include/kvm_util_base.h | 4 +++ > > .../selftests/kvm/kvm_binary_stats_test.c | 9 ++---- > > tools/testing/selftests/kvm/lib/kvm_util.c | 29 +++++++++++++++++++ > > 3 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h > > index 5ba3132f3110..c5f34551ff76 100644 > > --- a/tools/testing/selftests/kvm/include/kvm_util_base.h > > +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h > > @@ -401,6 +401,10 @@ void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid); > > int vm_get_stats_fd(struct kvm_vm *vm); > > int vcpu_get_stats_fd(struct kvm_vm *vm, uint32_t vcpuid); > > void read_vm_stats_header(int stats_fd, struct kvm_stats_header *header); > > +struct kvm_stats_desc *alloc_vm_stats_desc(int stats_fd, > > + struct kvm_stats_header *header); > > +void read_vm_stats_desc(int stats_fd, struct kvm_stats_header *header, > > + struct kvm_stats_desc *stats_desc); > > > > uint32_t guest_get_vcpuid(void); > > > > diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/testing/selftests/kvm/kvm_binary_stats_test.c > > index 22c22a90f15a..e4795bad7db6 100644 > > --- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c > > +++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c > > @@ -62,14 +62,9 @@ static void stats_test(int stats_fd) > > header.data_offset), > > "Descriptor block is overlapped with data block"); > > > > - /* Allocate memory for stats descriptors */ > > - stats_desc = calloc(header.num_desc, size_desc); > > - TEST_ASSERT(stats_desc, "Allocate memory for stats descriptors"); > > /* Read kvm stats descriptors */ > > - ret = pread(stats_fd, stats_desc, > > - size_desc * header.num_desc, header.desc_offset); > > - TEST_ASSERT(ret == size_desc * header.num_desc, > > - "Read KVM stats descriptors"); > > + stats_desc = alloc_vm_stats_desc(stats_fd, &header); > > + read_vm_stats_desc(stats_fd, &header, stats_desc); > > > > /* Sanity check for fields in descriptors */ > > for (i = 0; i < header.num_desc; ++i) { > > diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c > > index 0caf28e324ed..e3ae26fbef03 100644 > > --- a/tools/testing/selftests/kvm/lib/kvm_util.c > > +++ b/tools/testing/selftests/kvm/lib/kvm_util.c > > @@ -2564,3 +2564,32 @@ void read_vm_stats_header(int stats_fd, struct kvm_stats_header *header) > > ret = read(stats_fd, header, sizeof(*header)); > > TEST_ASSERT(ret == sizeof(*header), "Read stats header"); > > } > > + > > +static ssize_t stats_descs_size(struct kvm_stats_header *header) > > +{ > > + return header->num_desc * > > + (sizeof(struct kvm_stats_desc) + header->name_size); > > +} > I was very confused on header->name_size. So this field means the > maximum string size of a stats name, right? Can we update the comments > in the kvm.h to specify that? By reading the comments, I don't really > feel this is how we should use this field. I believe that's right. I agree the documentation on that was a little confusing. > > hmm, if that is true, isn't this field a compile time value? Why do we > have to get it at runtime? It's compile time for the kernel but not for the userspace binaries which ultimately consume the stats. We could cheat in this selftest perhaps, but then it wouldn't be as good of a test. > > > + > > +/* Caller is responsible for freeing the returned kvm_stats_desc. */ > > +struct kvm_stats_desc *alloc_vm_stats_desc(int stats_fd, > > + struct kvm_stats_header *header) > > +{ > > + struct kvm_stats_desc *stats_desc; > > + > > + stats_desc = malloc(stats_descs_size(header)); > > + TEST_ASSERT(stats_desc, "Allocate memory for stats descriptors"); > > + > > + return stats_desc; > > +} > > + > > +void read_vm_stats_desc(int stats_fd, struct kvm_stats_header *header, > > + struct kvm_stats_desc *stats_desc) > > +{ > > + ssize_t ret; > > + > > + ret = pread(stats_fd, stats_desc, stats_descs_size(header), > > + header->desc_offset); > > + TEST_ASSERT(ret == stats_descs_size(header), > > + "Read KVM stats descriptors"); > > +} > > -- > > 2.35.1.1178.g4f1659d476-goog > >