[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <bf4111f9-f722-1847-4f1d-964c5356f392@redhat.com>
Date: Mon, 20 Feb 2023 18:46:16 +0100
From: Paolo Bonzini <pbonzini@...hat.com>
To: Tianrui Zhao <zhaotianrui@...ngson.cn>
Cc: Huacai Chen <chenhuacai@...nel.org>,
WANG Xuerui <kernel@...0n.name>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
loongarch@...ts.linux.dev, linux-kernel@...r.kernel.org,
kvm@...r.kernel.org, Jens Axboe <axboe@...nel.dk>,
Mark Brown <broonie@...nel.org>,
Alex Deucher <alexander.deucher@....com>,
Oliver Upton <oliver.upton@...ux.dev>, maobibo@...ngson.cn
Subject: Re: [PATCH v2 02/29] LoongArch: KVM: Implement kvm module related
interface
On 2/20/23 07:57, Tianrui Zhao wrote:
> + order = get_order(kvm_vector_size + kvm_enter_guest_size);
> + addr = (void *)__get_free_pages(GFP_KERNEL, order);
> + if (!addr) {
> + free_percpu(vmcs);
> + return -ENOMEM;
> + }
> +
> + memcpy(addr, kvm_vector_entry, kvm_vector_size);
> + memcpy(addr + kvm_vector_size, kvm_enter_guest, kvm_enter_guest_size);
> + flush_icache_range((unsigned long)addr, (unsigned long)addr +
> + kvm_vector_size + kvm_enter_guest_size);
> +
> + vpid_mask = read_csr_gstat();
> + vpid_mask = (vpid_mask & CSR_GSTAT_GIDBIT) >> CSR_GSTAT_GIDBIT_SHIFT;
> + if (vpid_mask)
> + vpid_mask = GENMASK(vpid_mask - 1, 0);
> +
> + for_each_possible_cpu(cpu) {
> + context = per_cpu_ptr(vmcs, cpu);
> + context->vpid_mask = vpid_mask;
> + context->vpid_cache = context->vpid_mask + 1;
> + context->last_vcpu = NULL;
> + context->kvm_eentry = addr;
> + context->kvm_enter_guest = addr + kvm_vector_size;
> + context->page_order = order;
> + }
A lot of these variables are constant across all pCPUs, any reason to
have them in a per-CPU variable? Likewise, since they are all the same
as the constant global vmcs variable, why make them part of struct
kvm_context instead of just making them globals?
Also, why does the world switch code need a copy?
Paolo
Powered by blists - more mailing lists