From: Quentin Perret <qperret@google.com>
To: Will Deacon <will@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
kernel-team@android.com, kvmarm@lists.cs.columbia.edu,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 02/20] KVM: arm64: Add support for creating kernel-agnostic stage-1 page tables
Date: Fri, 31 Jul 2020 09:19:11 +0100 [thread overview]
Message-ID: <20200731081911.GB3201636@google.com> (raw)
In-Reply-To: <20200731081436.GA3201636@google.com>
On Friday 31 Jul 2020 at 09:14:36 (+0100), Quentin Perret wrote:
> Hey Will,
>
> On Thursday 30 Jul 2020 at 16:33:48 (+0100), Will Deacon wrote:
> > +void *kvm_pgtable_hyp_alloc_cookie(u32 va_bits)
> > +{
> > + struct kvm_pgtable *pgt = kzalloc(sizeof(*pgt), GFP_KERNEL);
> > +
> > + if (!pgt)
> > + return NULL;
> > +
> > + pgt->ia_bits = va_bits;
> > + pgt->start_level = kvm_start_level(va_bits);
> > +
> > + pgt->pgd = (kvm_pte_t *)get_zeroed_page(GFP_KERNEL);
> > + if (!pgt->pgd) {
> > + kfree(pgt);
> > + pgt = NULL;
> > + }
> > +
> > + return pgt;
> > +}
> > +
> > +static int hyp_free_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
> > + enum kvm_pgtable_walk_flags flag, void * const arg)
> > +{
> > + free_page((unsigned long)kvm_pte_follow(*ptep));
> > + return 0;
> > +}
> > +
> > +void kvm_pgtable_hyp_free_cookie(void *cookie)
> > +{
> > + size_t pgd_sz;
> > + struct kvm_pgtable *pgt = cookie;
> > + struct kvm_pgtable_walker walker = {
> > + .cb = hyp_free_walker,
> > + .flags = KVM_PGTABLE_WALK_TABLE_POST,
> > + };
> > +
> > + if (kvm_pgtable_walk(cookie, 0, BIT(pgt->ia_bits), &walker))
> > + kvm_err("Failed to free page-table pages\n");
> > +
> > + pgd_sz = kvm_pgd_pages(pgt) * PAGE_SIZE;
> > + free_pages_exact(pgt->pgd, pgd_sz);
>
> Given that the pgd is unconditionally a single page for the stage 1 case
> (as per kvm_pgtable_hyp_alloc_cookie() above), should we simplify this
> to a simple free_page()? Or did you want to factorize this with the
> stage 2 free path?
Hmm, or maybe it's the alloc() path that needs fixing actually ...
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: Quentin Perret <qperret@google.com>
To: Will Deacon <will@kernel.org>
Cc: Suzuki Poulose <suzuki.poulose@arm.com>,
Marc Zyngier <maz@kernel.org>, James Morse <james.morse@arm.com>,
Catalin Marinas <catalin.marinas@arm.com>,
kernel-team@android.com, kvmarm@lists.cs.columbia.edu,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 02/20] KVM: arm64: Add support for creating kernel-agnostic stage-1 page tables
Date: Fri, 31 Jul 2020 09:19:11 +0100 [thread overview]
Message-ID: <20200731081911.GB3201636@google.com> (raw)
In-Reply-To: <20200731081436.GA3201636@google.com>
On Friday 31 Jul 2020 at 09:14:36 (+0100), Quentin Perret wrote:
> Hey Will,
>
> On Thursday 30 Jul 2020 at 16:33:48 (+0100), Will Deacon wrote:
> > +void *kvm_pgtable_hyp_alloc_cookie(u32 va_bits)
> > +{
> > + struct kvm_pgtable *pgt = kzalloc(sizeof(*pgt), GFP_KERNEL);
> > +
> > + if (!pgt)
> > + return NULL;
> > +
> > + pgt->ia_bits = va_bits;
> > + pgt->start_level = kvm_start_level(va_bits);
> > +
> > + pgt->pgd = (kvm_pte_t *)get_zeroed_page(GFP_KERNEL);
> > + if (!pgt->pgd) {
> > + kfree(pgt);
> > + pgt = NULL;
> > + }
> > +
> > + return pgt;
> > +}
> > +
> > +static int hyp_free_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
> > + enum kvm_pgtable_walk_flags flag, void * const arg)
> > +{
> > + free_page((unsigned long)kvm_pte_follow(*ptep));
> > + return 0;
> > +}
> > +
> > +void kvm_pgtable_hyp_free_cookie(void *cookie)
> > +{
> > + size_t pgd_sz;
> > + struct kvm_pgtable *pgt = cookie;
> > + struct kvm_pgtable_walker walker = {
> > + .cb = hyp_free_walker,
> > + .flags = KVM_PGTABLE_WALK_TABLE_POST,
> > + };
> > +
> > + if (kvm_pgtable_walk(cookie, 0, BIT(pgt->ia_bits), &walker))
> > + kvm_err("Failed to free page-table pages\n");
> > +
> > + pgd_sz = kvm_pgd_pages(pgt) * PAGE_SIZE;
> > + free_pages_exact(pgt->pgd, pgd_sz);
>
> Given that the pgd is unconditionally a single page for the stage 1 case
> (as per kvm_pgtable_hyp_alloc_cookie() above), should we simplify this
> to a simple free_page()? Or did you want to factorize this with the
> stage 2 free path?
Hmm, or maybe it's the alloc() path that needs fixing actually ...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-07-31 8:19 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-30 15:33 [PATCH 00/20] KVM: arm64: Rewrite page-table code and fault handling Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 01/20] KVM: arm64: Add stand-alone page-table walker infrastructure Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 02/20] KVM: arm64: Add support for creating kernel-agnostic stage-1 page tables Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-31 8:14 ` Quentin Perret
2020-07-31 8:14 ` Quentin Perret
2020-07-31 8:19 ` Quentin Perret [this message]
2020-07-31 8:19 ` Quentin Perret
2020-07-31 8:22 ` Will Deacon
2020-07-31 8:22 ` Will Deacon
2020-07-31 8:36 ` Quentin Perret
2020-07-31 8:36 ` Quentin Perret
2020-07-31 9:06 ` Quentin Perret
2020-07-31 9:06 ` Quentin Perret
2020-07-30 15:33 ` [PATCH 03/20] KVM: arm64: Use generic allocator for hyp stage-1 page-tables Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 04/20] KVM: arm64: Add support for creating kernel-agnostic stage-2 page tables Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 05/20] KVM: arm64: Add support for stage-2 map()/unmap() in generic page-table Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 06/20] KVM: arm64: Convert kvm_phys_addr_ioremap() to generic page-table API Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 07/20] KVM: arm64: Convert kvm_set_spte_hva() " Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 08/20] KVM: arm64: Convert unmap_stage2_range() " Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 09/20] KVM: arm64: Add support for stage-2 page-aging in generic page-table Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 10/20] KVM: arm64: Convert page-aging and access faults to generic page-table API Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 11/20] KVM: arm64: Add support for stage-2 write-protect in generic page-table Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 12/20] KVM: arm64: Convert write-protect operation to generic page-table API Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:33 ` [PATCH 13/20] KVM: arm64: Add support for stage-2 cache flushing in generic page-table Will Deacon
2020-07-30 15:33 ` Will Deacon
2020-07-30 15:34 ` [PATCH 14/20] KVM: arm64: Convert memslot cache-flushing code to generic page-table API Will Deacon
2020-07-30 15:34 ` Will Deacon
2020-07-30 15:34 ` [PATCH 15/20] KVM: arm64: Add support for relaxing stage-2 perms in generic page-table code Will Deacon
2020-07-30 15:34 ` Will Deacon
2020-07-30 15:34 ` [PATCH 16/20] KVM: arm64: Convert user_mem_abort() to generic page-table API Will Deacon
2020-07-30 15:34 ` Will Deacon
2020-07-30 15:34 ` [PATCH 17/20] KVM: arm64: Check the cookie instead of the pgd when modifying page-table Will Deacon
2020-07-30 15:34 ` Will Deacon
2020-07-30 15:34 ` [PATCH 18/20] KVM: arm64: Remove unused page-table code Will Deacon
2020-07-30 15:34 ` Will Deacon
2020-07-30 15:34 ` [PATCH 19/20] KVM: arm64: Remove unused 'pgd' field from 'struct kvm_s2_mmu' Will Deacon
2020-07-30 15:34 ` Will Deacon
2020-07-30 15:34 ` [PATCH 20/20] KVM: arm64: Don't constrain maximum IPA size based on host configuration Will Deacon
2020-07-30 15:34 ` Will Deacon
2020-08-03 8:17 ` [PATCH 00/20] KVM: arm64: Rewrite page-table code and fault handling Andrew Jones
2020-08-03 8:17 ` Andrew Jones
2020-08-03 17:12 ` Quentin Perret
2020-08-03 17:12 ` Quentin Perret
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200731081911.GB3201636@google.com \
--to=qperret@google.com \
--cc=catalin.marinas@arm.com \
--cc=kernel-team@android.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=maz@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.