From nobody Fri Nov 18 19:25:07 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4NDRZs3r21z4dJTX; Fri, 18 Nov 2022 19:25:41 +0000 (UTC) (envelope-from freebsd@walstatt-de.de) Received: from smtp6.goneo.de (smtp6.goneo.de [IPv6:2001:1640:5::8:31]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4NDRZs2zsSz3Q0d; Fri, 18 Nov 2022 19:25:41 +0000 (UTC) (envelope-from freebsd@walstatt-de.de) Authentication-Results: mx1.freebsd.org; none Received: from hub2.goneo.de (hub2.goneo.de [IPv6:2001:1640:5::8:53]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by smtp6.goneo.de (Postfix) with ESMTPS id B3F8F10A330E; Fri, 18 Nov 2022 20:25:39 +0100 (CET) Received: from hub2.goneo.de (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by hub2.goneo.de (Postfix) with ESMTPS id 9B3C610A32E4; Fri, 18 Nov 2022 20:25:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walstatt-de.de; s=DKIM001; t=1668799535; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=piFqz4wDNvW3RO4r9PRafRz/BCGSqSp/qWzyRdbbB8s=; b=X948Ifw7/UC9dygYOG+zl333V2p9Zn3TqkxakRMoPC3MfaRHeigfIlblMyx4hpdwixHs8W LluvNhE7pLQBldTit/VS9hg5IZ4fKxaYAYYcNRGjABz+veWB3dYWt5IJ3APqpmguZxzQtT KuEtyRZQV6mdVI/r9eJp76J9y81WnhIwySppH62ToTQZ179Mu2WQ+PgRdq8yOVvP9Fmi8W GFiA2SAdtFZ1+F8ddx8qepqbMGmiS5dFUFYJ5IG6zYSHqWmEGukDiAxdEjdkY+iTjeQHPk NuryjQk6n+lUlPtifjGNwOsQPJJAdBnZh3J/5xR+QNotxs8AfF0OFDnY7I2Trg== Received: from thor.intern.walstatt.dynvpn.de (dynamic-078-055-080-013.78.55.pool.telefonica.de [78.55.80.13]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by hub2.goneo.de (Postfix) with ESMTPSA id 534DE10A3308; Fri, 18 Nov 2022 20:25:35 +0100 (CET) Date: Fri, 18 Nov 2022 20:25:07 +0100 From: FreeBSD User To: John Baldwin Cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: 58eefc67a1cf - main - vmm vmx: Allocate vpids on demand as each vCPU is initialized. Message-ID: <20221118202534.2e08a2df@thor.intern.walstatt.dynvpn.de> In-Reply-To: <202211181826.2AIIQnPs030585@gitrepo.freebsd.org> References: <202211181826.2AIIQnPs030585@gitrepo.freebsd.org> Organization: walstatt-de.de List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspamd-UID: 642c42 X-Rspamd-UID: 816474 X-Rspamd-Queue-Id: 4NDRZs2zsSz3Q0d X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:25394, ipnet:2001:1640::/32, country:DE] X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-ThisMailContainsUnwantedMimeParts: N Am Fri, 18 Nov 2022 18:26:49 GMT John Baldwin schrieb: > The branch main has been updated by jhb: > > URL: https://cgit.FreeBSD.org/src/commit/?id=58eefc67a1cf16623c23354efd089f65401c0455 > > commit 58eefc67a1cf16623c23354efd089f65401c0455 > Author: John Baldwin > AuthorDate: 2022-11-18 18:04:11 +0000 > Commit: John Baldwin > CommitDate: 2022-11-18 18:25:38 +0000 > > vmm vmx: Allocate vpids on demand as each vCPU is initialized. > > Compared to the previous version this does mean that if the system as > a whole runs out of dedicated vPIDs you might end up with some vCPUs > within a single VM using dedicated vPIDs and others using shared > vPIDs, but this should not break anything. > > Reviewed by: corvink, markj > Differential Revision: https://reviews.freebsd.org/D37169 > --- > sys/amd64/vmm/intel/vmx.c | 47 +++++++++++++++++------------------------------ > sys/amd64/vmm/intel/vmx.h | 1 - > 2 files changed, 17 insertions(+), 31 deletions(-) > > diff --git a/sys/amd64/vmm/intel/vmx.c b/sys/amd64/vmm/intel/vmx.c > index 9db638fd858e..52573416ded7 100644 > --- a/sys/amd64/vmm/intel/vmx.c > +++ b/sys/amd64/vmm/intel/vmx.c > @@ -527,36 +527,25 @@ vpid_free(int vpid) > free_unr(vpid_unr, vpid); > } > > -static void > -vpid_alloc(uint16_t *vpid, int num) > +static uint16_t > +vpid_alloc(int vcpuid) > { > - int i, x; > - > - if (num <= 0 || num > VM_MAXCPU) > - panic("invalid number of vpids requested: %d", num); > + int x; > > /* > * If the "enable vpid" execution control is not enabled then the > * VPID is required to be 0 for all vcpus. > */ > - if ((procbased_ctls2 & PROCBASED2_ENABLE_VPID) == 0) { > - for (i = 0; i < num; i++) > - vpid[i] = 0; > - return; > - } > + if ((procbased_ctls2 & PROCBASED2_ENABLE_VPID) == 0) > + return (0); > > /* > - * Allocate a unique VPID for each vcpu from the unit number allocator. > + * Try to allocate a unique VPID for each from the unit number > + * allocator. > */ > - for (i = 0; i < num; i++) { > - x = alloc_unr(vpid_unr); > - if (x == -1) > - break; > - else > - vpid[i] = x; > - } > + x = alloc_unr(vpid_unr); > > - if (i < num) { > + if (x == -1) { > atomic_add_int(&vpid_alloc_failed, 1); > > /* > @@ -570,12 +559,10 @@ vpid_alloc(uint16_t *vpid, int num) > * It is still sub-optimal because the invvpid will invalidate > * combined mappings for a particular VPID across all EP4TAs. > */ > - while (i-- > 0) > - vpid_free(vpid[i]); > - > - for (i = 0; i < num; i++) > - vpid[i] = i + 1; > + return (vcpuid + 1); > } > + > + return (x); > } > > static void > @@ -1035,7 +1022,6 @@ vmx_init(struct vm *vm, pmap_t pmap) > { > int error; > struct vmx *vmx; > - uint16_t maxcpus = vm_get_maxcpus(vm); > > vmx = malloc(sizeof(struct vmx), M_VMX, M_WAITOK | M_ZERO); > vmx->vm = vm; > @@ -1096,8 +1082,6 @@ vmx_init(struct vm *vm, pmap_t pmap) > ((cap_rdpid || cap_rdtscp) && guest_msr_ro(vmx, MSR_TSC_AUX))) > panic("vmx_init: error setting guest msr access"); > > - vpid_alloc(vmx->vpids, maxcpus); > - > if (virtual_interrupt_delivery) { > error = vm_map_mmio(vm, DEFAULT_APIC_BASE, PAGE_SIZE, > APIC_ACCESS_ADDRESS); > @@ -1116,8 +1100,11 @@ vmx_vcpu_init(void *vmi, struct vcpu *vcpu1, int vcpuid) > struct vmcs *vmcs; > struct vmx_vcpu *vcpu; > uint32_t exc_bitmap; > + uint16_t vpid; > int error; > > + vpid = vpid_alloc(vcpuid); > + > vcpu = malloc(sizeof(*vcpu), M_VMX, M_WAITOK | M_ZERO); > vcpu->vmx = vmx; > vcpu->vcpu = vcpu1; > @@ -1156,7 +1143,7 @@ vmx_vcpu_init(void *vmi, struct vcpu *vcpu1, int vcpuid) > error += vmwrite(VMCS_EXIT_CTLS, exit_ctls); > error += vmwrite(VMCS_ENTRY_CTLS, entry_ctls); > error += vmwrite(VMCS_MSR_BITMAP, vtophys(vmx->msr_bitmap)); > - error += vmwrite(VMCS_VPID, vmx->vpids[vcpuid]); > + error += vmwrite(VMCS_VPID, vpid); > > if (guest_l1d_flush && !guest_l1d_flush_sw) { > vmcs_write(VMCS_ENTRY_MSR_LOAD, pmap_kextract( > @@ -1204,7 +1191,7 @@ vmx_vcpu_init(void *vmi, struct vcpu *vcpu1, int vcpuid) > > vcpu->state.nextrip = ~0; > vcpu->state.lastcpu = NOCPU; > - vcpu->state.vpid = vmx->vpids[vcpuid]; > + vcpu->state.vpid = vpid; > > /* > * Set up the CR0/4 shadows, and init the read shadow > diff --git a/sys/amd64/vmm/intel/vmx.h b/sys/amd64/vmm/intel/vmx.h > index e91675b62800..ad172073b03f 100644 > --- a/sys/amd64/vmm/intel/vmx.h > +++ b/sys/amd64/vmm/intel/vmx.h > @@ -147,7 +147,6 @@ struct vmx { > uint64_t eptp; > long eptgen[MAXCPU]; /* cached pmap->pm_eptgen */ > pmap_t pmap; > - uint16_t vpids[VM_MAXCPU]; > }; > > extern bool vmx_have_msr_tsc_aux; > Buildworld bails out on vmx.c: [...] /usr/src/sys/amd64/vmm/intel/vmx.c:1023:6: error: variable 'error' set but not used [-Werror,-Wunused-but-set-variable] int error; -- O. Hartmann