Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2735124pxj; Mon, 10 May 2021 09:33:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyDoPKOjIAk7xgrVV1mND4ShZsiRunhdaO3MO3agJGzxVo4pzUy83QwbLOdNB5/OTamZMm7 X-Received: by 2002:a05:6402:30bc:: with SMTP id df28mr30446389edb.67.1620664390983; Mon, 10 May 2021 09:33:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620664390; cv=none; d=google.com; s=arc-20160816; b=Eudc0TnEYlt9R82HYUggZsVxzzsFh6XOhrR+MOlpYisfHCP/7+VRVJGrTxJJJ5NC06 UdBlz+ELSkspJGCmDV5ZWNpRpIuZFrs5GBRz8GOYvZIE9b8fRaJHy7jrZvVFkJtzgy1i P+rlNfjrnINjbAL98TYHEjkrVxELapTKGx6h9j1upEADaArQLNYm73TMNeY64V2Z8OgB Gqwkr5JgAe6kN32y7FPeJUptpj8p1C+dtvyS0m3zD80raZmUEedzsAjAQ0fAl1O4N6IE Ceo8dozZuaxNaMXSRKsW60AoQtpZmcMLtvOXo4tK30jBu3ix9QgcvguGDc6vMV5HXzZo 4eXw== 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=BkfDg/7imdX1kS2mno+cgyMshYAEJnF0DUnywtzmZC8=; b=HfqfNEUaBlBwDgTMRWzFenA/iHmPTBeOBsgr7rofgNa9CRxXEk2RT40Lk+8sReq4Ke 78rLkUwa2Uf5pPp2F1SwwQeHmIcmT0FPtVCJBKdjuUcO/c5CGiQIhsXibFU7/smClcdr gTYGoNew5appHKTqwtTTZ+XqKX3w/Z57c9ciTmk5zUD2OBVVilrZK+eScHlViWGeFBhE vwHU5UuVR+DhmPvFe2CB2O6QNkRaX4SmVHTXqDDTrQP50tEddFuBmZrTuGdM0j1fL9k7 5/80YqZ5mQVPCuG0fozbwN+mGHVtD5B1c04sOG60vLTRTheDCT2WTaJCPDcxpNxDYgKJ 7dwg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Rg5r5I5S; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cw16si14234478ejb.337.2021.05.10.09.32.47; Mon, 10 May 2021 09:33:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Rg5r5I5S; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231414AbhEJQad (ORCPT + 99 others); Mon, 10 May 2021 12:30:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34328 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230436AbhEJQaa (ORCPT ); Mon, 10 May 2021 12:30:30 -0400 Received: from mail-il1-x12a.google.com (mail-il1-x12a.google.com [IPv6:2607:f8b0:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4439C061574 for ; Mon, 10 May 2021 09:29:25 -0700 (PDT) Received: by mail-il1-x12a.google.com with SMTP id o9so9463144ilh.6 for ; Mon, 10 May 2021 09:29:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=BkfDg/7imdX1kS2mno+cgyMshYAEJnF0DUnywtzmZC8=; b=Rg5r5I5Swy6LR6oGgCyRRNQ8y01tbtyWS/ZLufuZK3tbzxJ5wWzlX2/SwDmdH/ccVi cVw5pHQVsCbYHSzxZeYs5uwqUqsRigm4/cOYPKBqY3h79/HBz3EWLs8VfZzEn+ThByUG 2P/3HC8SuxBXiLHgYddPZBxwX9EddzBn+qSV/pgFqHETLruZBLbPsTy5kQBoHz/6CzcV cJ7YJuAYXBgkzPLIG3tJtErmtxYZgPjhRtPmpZYiuPqstGAFVoNvFF691USD7hx8lOAG GHkJd5UtmKqKHvUjsd2aQbUQAA2/pYnW4I95ex+21j0gzA59fpwYUqoK/qR5FXoxxVSm rRhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=BkfDg/7imdX1kS2mno+cgyMshYAEJnF0DUnywtzmZC8=; b=n4Y+fuput4Me6/hfG5pvLI9KLGPZlxhZwrrzXjhHD/1c+YeaRP+bC7O78Br15TSFBY O1g1yvz9PWaj5EKbWxa5u7SEI9G5qGWWQyqBfroEUkn6EI/Xk5DogWXiEs/uHV/1IV7z hmm9qtIoVZ3tf7DWFH4DjxJkLDgHQTkLy2mMi5JibEut9qL25fh9fREYEeS/O4dclxnR FMhc3gow3QHykI5Zrvj4eNRVEnJePtOF8Ctgy1S5SN+wnLJLVs42f7HXXF7yA1draQv5 95w/Y/BpIXhPHeUtuEBewSaqVEa7ZOXgtrsBAQ9VNboAsMne6SQI78nXAaXP13yuylHt B6uQ== X-Gm-Message-State: AOAM5326zRaio8KyGn7VErmVig/5uZCvKu2yXl4sI5P87Jx5VsQ7FzIa SThwEYgOqcDsaVDFiLNcZ31r6PbK7i9O24BBSILy2g== X-Received: by 2002:a05:6e02:96d:: with SMTP id q13mr9155411ilt.285.1620664165138; Mon, 10 May 2021 09:29:25 -0700 (PDT) MIME-Version: 1.0 References: <20210506184241.618958-1-bgardon@google.com> <20210506184241.618958-3-bgardon@google.com> <97d085a0-185d-2546-f32e-ea1c55579ba0@redhat.com> In-Reply-To: <97d085a0-185d-2546-f32e-ea1c55579ba0@redhat.com> From: Ben Gardon Date: Mon, 10 May 2021 09:29:14 -0700 Message-ID: Subject: Re: [PATCH v3 2/8] KVM: x86/mmu: Factor out allocating memslot rmap To: David Hildenbrand Cc: LKML , kvm , Paolo Bonzini , Peter Xu , Sean Christopherson , Peter Shier , Yulei Zhang , Wanpeng Li , Xiao Guangrong , Kai Huang , Keqian Zhu Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 7, 2021 at 12:47 AM David Hildenbrand wrote: > > On 06.05.21 20:42, Ben Gardon wrote: > > Small refactor to facilitate allocating rmaps for all memslots at once. > > > > No functional change expected. > > > > Signed-off-by: Ben Gardon > > --- > > arch/x86/kvm/x86.c | 41 ++++++++++++++++++++++++++++++++--------- > > 1 file changed, 32 insertions(+), 9 deletions(-) > > > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > > index 5bcf07465c47..fc32a7dbe4c4 100644 > > --- a/arch/x86/kvm/x86.c > > +++ b/arch/x86/kvm/x86.c > > @@ -10842,10 +10842,37 @@ void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *slot) > > kvm_page_track_free_memslot(slot); > > } > > > > +static int alloc_memslot_rmap(struct kvm_memory_slot *slot, > > + unsigned long npages) > > I'd have called the functions memslot_rmap_alloc() and memslot_rmap_free() > > > > +{ > > + int i; > > + > > + for (i = 0; i < KVM_NR_PAGE_SIZES; ++i) { > > + int lpages; > > + int level = i + 1; > > + > > + lpages = gfn_to_index(slot->base_gfn + npages - 1, > > + slot->base_gfn, level) + 1; > > + > > + slot->arch.rmap[i] = > > + kvcalloc(lpages, sizeof(*slot->arch.rmap[i]), > > + GFP_KERNEL_ACCOUNT); > > + if (!slot->arch.rmap[i]) > > + goto out_free; > > you can just avoid the goto here and do the free_memslot_rmap() right away. Oh good catch. I'll incorporate your suggestions in v4. > > > + } > > + > > + return 0; > > + > > +out_free: > > + free_memslot_rmap(slot); > > + return -ENOMEM; > > +} > > + > > static int kvm_alloc_memslot_metadata(struct kvm_memory_slot *slot, > > unsigned long npages) > > { > > int i; > > + int r; > > > > /* > > * Clear out the previous array pointers for the KVM_MR_MOVE case. The > > @@ -10854,7 +10881,11 @@ static int kvm_alloc_memslot_metadata(struct kvm_memory_slot *slot, > > */ > > memset(&slot->arch, 0, sizeof(slot->arch)); > > > > - for (i = 0; i < KVM_NR_PAGE_SIZES; ++i) { > > + r = alloc_memslot_rmap(slot, npages); > > + if (r) > > + return r; > > + > > + for (i = 1; i < KVM_NR_PAGE_SIZES; ++i) { > > struct kvm_lpage_info *linfo; > > unsigned long ugfn; > > int lpages; > > @@ -10863,14 +10894,6 @@ static int kvm_alloc_memslot_metadata(struct kvm_memory_slot *slot, > > lpages = gfn_to_index(slot->base_gfn + npages - 1, > > slot->base_gfn, level) + 1; > > > > - slot->arch.rmap[i] = > > - kvcalloc(lpages, sizeof(*slot->arch.rmap[i]), > > - GFP_KERNEL_ACCOUNT); > > - if (!slot->arch.rmap[i]) > > - goto out_free; > > - if (i == 0) > > - continue; > > - > > linfo = kvcalloc(lpages, sizeof(*linfo), GFP_KERNEL_ACCOUNT); > > if (!linfo) > > goto out_free; > > > > apart from that LGTM > > -- > Thanks, > > David / dhildenb >