Revision tags: release/13.4.0 |
|
#
f3754afd |
| 12-Sep-2024 |
Joshua Rogers <Joshua@Joshua.Hu> |
Remove stray whitespaces from sys/amd64/
Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu> Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1418
|
#
3ccb0233 |
| 26-Aug-2024 |
Mark Johnston <markj@FreeBSD.org> |
vmm: Move vmm_ktr.h to a common directory
No functional change intended.
Reviewed by: corvink, jhb, emaste Differential Revision: https://reviews.freebsd.org/D46429
|
Revision tags: release/14.1.0, release/13.3.0, release/14.0.0 |
|
#
685dc743 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c pattern
Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
#
95ee2897 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: two-line .h pattern
Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
|
#
e17eca32 |
| 24-May-2023 |
Mark Johnston <markj@FreeBSD.org> |
vmm: Avoid embedding cpuset_t ioctl ABIs
Commit 0bda8d3e9f7a ("vmm: permit some IPIs to be handled by userspace") embedded cpuset_t into the vmm(4) ioctl ABI. This was a mistake since we otherwise
vmm: Avoid embedding cpuset_t ioctl ABIs
Commit 0bda8d3e9f7a ("vmm: permit some IPIs to be handled by userspace") embedded cpuset_t into the vmm(4) ioctl ABI. This was a mistake since we otherwise have some leeway to change the cpuset_t for the whole system, but we want to keep the vmm ioctl ABI stable.
Rework IPI reporting to avoid this problem. Along the way, make VM_RUN a bit more efficient: - Split vmexit metadata out of the main VM_RUN structure. This data is only written by the kernel. - Have userspace pass a cpuset_t pointer and cpusetsize in the VM_RUN structure, as is done for cpuset syscalls. - Have the destination CPU mask for VM_EXITCODE_IPIs live outside the vmexit info structure, and make VM_RUN copy it out separately. Zero out any extra bytes in the CPU mask, like cpuset syscalls do. - Modify the vmexit handler prototype to take a full VM_RUN structure.
PR: 271330 Reviewed by: corvink, jhb (previous versions) Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40113
show more ...
|
#
4d846d26 |
| 10-May-2023 |
Warner Losh <imp@FreeBSD.org> |
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of BSD-2-Clause.
Discussed with: pfg MFC After: 3 days Sponsored by: Netflix
show more ...
|
Revision tags: release/13.2.0 |
|
#
94a3876d |
| 17-Mar-2023 |
Vitaliy Gusev <gusev.vitaliy@gmail.com> |
vmm: fix missing ipi statistic
ipi counters are missing in bhyvectl's output because vm_maxcpu is 0 when initializing them. That's because vmm_stat_register is executed before vmm_init.
Instead of
vmm: fix missing ipi statistic
ipi counters are missing in bhyvectl's output because vm_maxcpu is 0 when initializing them. That's because vmm_stat_register is executed before vmm_init.
Instead of directly fixing it, there's a better solution in illumos which is cherry picked: https://github.com/illumos/illumos-gate/commit/65a3bc83734e5fb0fc2c19df3e5112b87dcdc3f8
It replaces the matrix statistic by two counters per vcpu. One for counting the ipis to the vcpu and one counting the ipis received by the vcpu. This has several advantages:
- A matrix statistic becomes huge when using many vcpus. - A matrix statistic easily reaches the MAX_VMM_STAT_ELEMS limit. - Two counters are enough in most cases. DTrace can be used for more advanced debugging purposes. - A matrix statistic wastes memory. The matrix size is determined by vm_maxcpu regardless of the number of vcpus assigned to the vm.
Reviewed by: corvink, markj Fixes: ee98f99d7a68b284a669fefb969cbfc31df2d0ab ("vmm: Convert VM_MAXCPU into a loader tunable hw.vmm.maxcpu.") MFC after: 1 week Sponsored by: vStack Differential Revision: https://reviews.freebsd.org/D39038
show more ...
|
#
b265a2e0 |
| 09-Feb-2023 |
Mark Johnston <markj@FreeBSD.org> |
vmm: Fix AP startup compatibility for old bhyve executables
These changes unbreak AP startup when using a 13.1-RELEASE bhyve executable with a newer kernel: - Correct the destination mask for the VM
vmm: Fix AP startup compatibility for old bhyve executables
These changes unbreak AP startup when using a 13.1-RELEASE bhyve executable with a newer kernel: - Correct the destination mask for the VM_EXITCODE_IPI message generated by an INIT or STARTUP IPI in vlapic_icrlo_write_handler(). - Only initialize vlapics on active vCPUs. 13.1-RELEASE bhyve activates AP vCPUs only after the BSP starts them with an IPI, and vmm now allocates vcpu structures lazily, so the STARTUP handling in vm_handle_ipi() could trigger a page fault. - Fix an off-by-one setting the vcpuid in a VM_EXITCODE_SPINUP_AP message.
Fixes: 7c326ab5bb9a ("vmm: don't lock a mtx in the icr_low write handler") Reviewed by: jhb, corvink MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D38446
show more ...
|
#
f3bbd0e8 |
| 09-Feb-2023 |
Mark Johnston <markj@FreeBSD.org> |
vmm: Collapse identical case statements in vlapic_icrlo_write_handler()
No functional change intended.
Reviewed by: jhb, corvink MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential
vmm: Collapse identical case statements in vlapic_icrlo_write_handler()
No functional change intended.
Reviewed by: jhb, corvink MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D38446
show more ...
|
Revision tags: release/12.4.0 |
|
#
7c326ab5 |
| 21-Nov-2022 |
Corvin Köhne <corvink@FreeBSD.org> |
vmm: don't lock a mtx in the icr_low write handler
x2apic accesses are handled by a wrmsr exit. This handler is called in a critical section. So, we can't lock a mtx in the icr_low handler.
Reporte
vmm: don't lock a mtx in the icr_low write handler
x2apic accesses are handled by a wrmsr exit. This handler is called in a critical section. So, we can't lock a mtx in the icr_low handler.
Reported by: kp, pho Tested by: kp, pho Approved by: manu (mentor) Fixes: c0f35dbf19c3c8825bd2b321d8efd582807d1940 vmm: Use a cpuset_t for vCPUs waiting for STARTUP IPIs. MFC after: 1 week MFC with: c0f35dbf19c3c8825bd2b321d8efd582807d1940 Sponsored by: Beckhoff Automation GmbH & Co. KG Differential Revision: https://reviews.freebsd.org/D37452
show more ...
|
#
98568a00 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Allocate vCPUs on first use of a vCPU.
Convert the vcpu[] array in struct vm to an array of pointers and allocate vCPUs on first use. This avoids always allocating VM_MAXCPU vCPUs for each VM,
vmm: Allocate vCPUs on first use of a vCPU.
Convert the vcpu[] array in struct vm to an array of pointers and allocate vCPUs on first use. This avoids always allocating VM_MAXCPU vCPUs for each VM, but instead only allocates the vCPUs in use. A new per-VM sx lock is added to serialize attempts to allocate vCPUs on first use. However, a given vCPU is never freed while the VM is active, so the pointer is read via an unlocked read first to avoid the need for the lock in the common case once the vCPU has been created.
Some ioctls need to lock all vCPUs. To prevent races with ioctls that want to allocate a new vCPU, these ioctls also lock the sx lock that protects vCPU creation.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37174
show more ...
|
#
c0f35dbf |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Use a cpuset_t for vCPUs waiting for STARTUP IPIs.
Retire the boot_state member of struct vlapic and instead use a cpuset in the VM to track vCPUs waiting for STARTUP IPIs. INIT IPIs add vCPUs
vmm: Use a cpuset_t for vCPUs waiting for STARTUP IPIs.
Retire the boot_state member of struct vlapic and instead use a cpuset in the VM to track vCPUs waiting for STARTUP IPIs. INIT IPIs add vCPUs to this set, and STARTUP IPIs remove vCPUs from the set. STARTUP IPIs are only reported to userland for vCPUs that were removed from the set.
In particular, this permits a subsequent change to allocate vCPUs on demand when the vCPU may not be allocated until after a STARTUP IPI is reported to userland.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37173
show more ...
|
#
08ebb360 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Destroy mutexes.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37171
|
#
d5118d0f |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm stat: Add a special nelems constant for arrays sized by vCPU count.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37170
|
#
3f0f4b15 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Lookup vcpu pointers in vmmdev_ioctl.
Centralize mapping vCPU IDs to struct vcpu objects in vmmdev_ioctl and pass vcpu pointers to the routines in vmm.c. For operations that want to perform an
vmm: Lookup vcpu pointers in vmmdev_ioctl.
Centralize mapping vCPU IDs to struct vcpu objects in vmmdev_ioctl and pass vcpu pointers to the routines in vmm.c. For operations that want to perform an action on all vCPUs or on a single vCPU, pass pointers to both the VM and the vCPU using a NULL vCPU pointer to request global actions.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37168
show more ...
|
#
e42c24d5 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Remove unused vcpuid argument from vioapic_process_eoi.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37166
|
#
d8be3d52 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Use struct vcpu in the rendezvous code.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37165
|
#
80cb5d84 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Pass vcpu instead of vm and vcpuid to APIs used from CPU backends.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37162
|
#
d3956e46 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Use struct vcpu in the instruction emulation code.
This passes struct vcpu down in place of struct vm and and integer vcpu index through the in-kernel instruction emulation code. To minimize u
vmm: Use struct vcpu in the instruction emulation code.
This passes struct vcpu down in place of struct vm and and integer vcpu index through the in-kernel instruction emulation code. To minimize userland disruption, helper macros are used for the vCPU arguments passed into and through the shared instruction emulation code.
A few other APIs used by the instruction emulation code have also been updated to accept struct vcpu in the kernel including vm_get/set_register and vm_inject_fault.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37161
show more ...
|
#
3dc3d32a |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Use struct vcpu with the vmm_stat API.
The function callbacks still use struct vm and and vCPU index.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37157
|
#
d030f941 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Use VLAPIC_CTR* in more places.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37155
|
#
35abc6c2 |
| 18-Nov-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Use vm_get_maxcpus() instead of VM_MAXCPU in various places.
Mostly these are loops that iterate over all possible vCPU IDs for a specific virtual machine.
Reviewed by: corvink, markj Differen
vmm: Use vm_get_maxcpus() instead of VM_MAXCPU in various places.
Mostly these are loops that iterate over all possible vCPU IDs for a specific virtual machine.
Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37147
show more ...
|
#
769b884e |
| 26-Oct-2022 |
John Baldwin <jhb@FreeBSD.org> |
vmm: Fix AP startup with old userspace binaries.
Older binaries that do not request IPI exits to userspace do not start user threads for other vCPUs until a STARTUP IPI triggers a VM_EXITCODE_SPINUP
vmm: Fix AP startup with old userspace binaries.
Older binaries that do not request IPI exits to userspace do not start user threads for other vCPUs until a STARTUP IPI triggers a VM_EXITCODE_SPINUP_AP exit to userland. This means that those vcpus are not yet active (in terms of vm_active_cpus) when the INIT and STARTUP IPIs are delivered to the vCPUs.
The changes in commit 0bda8d3e9f7a changed the INIT and STARTUP IPIs to reuse the existing vlapic_calcdest() function. This function silently ignores IPIs sent to inactive vCPUs. As a result, when using an old bhyve binary, the INIT and STARTUP IPIs sent to wakeup APs were ignored.
To fix, restructure the compat code for the INIT and STARTUP IPIs to ignore the results of vlapic_calcdest() and manually parse the APIC ID and resulting vcpuid. As part of this, make the compat code always conditonal on the ipi_exit capability being disabled.
Reviewed by: c.koehne_beckhoff.com, markj Differential Revision: https://reviews.freebsd.org/D37093
show more ...
|
#
2a2a64c4 |
| 12-Oct-2022 |
Corvin Köhne <c.koehne@beckhoff.com> |
vmm: validate icr value
Not all combinations of icr values are allowed. Neither Intel nor AMD document what happens when an invalid value is written to the icr. Ignore the IPI. So, the guest will no
vmm: validate icr value
Not all combinations of icr values are allowed. Neither Intel nor AMD document what happens when an invalid value is written to the icr. Ignore the IPI. So, the guest will note that the IPI wasn't delivered.
Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D36946 Sponsored by: Beckhoff Automation GmbH & Co. KG
show more ...
|
#
f56801d6 |
| 10-Oct-2022 |
Corvin Köhne <c.koehne@beckhoff.com> |
vmm: increase vlapic version
Mac os panics on apic versions lower than 0x14.
See https://opensource.apple.com/source/xnu/xnu-7195.81.3/osfmk/i386/lapic_native.c.auto.html
Additionally, an upcoming
vmm: increase vlapic version
Mac os panics on apic versions lower than 0x14.
See https://opensource.apple.com/source/xnu/xnu-7195.81.3/osfmk/i386/lapic_native.c.auto.html
Additionally, an upcoming commit will validate the icr values written by the guest. Older intel processors allow some different combinations than the newer ones. AMD documents that only the newer combinations are allowed. So, bumping the version allows us to avoid a differentiation between AMD and Intel.
Intel documents that newer processors than the P6 are using the new combinations. Sadly, Intel does not document which apic version belongs to those processors. Linux identifies newer apics by a version larger or equal to 0x14. Intel and AMD allow apic version between 0x10 and 0x15. So, using 0x14 seems to be fine.
See https://github.com/torvalds/linux/blob/3eba620e7bd772a0c7dc91966cb107872b54a910/arch/x86/kernel/apic/apic.c#L238
Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D36945 Sponsored by: Beckhoff Automation GmbH & Co. KG
show more ...
|