#
29241c96 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Update v1.4 Identify Controller data
Compliant v1.4 Controllers must report a Controller Type (CNTRLTYPE). Also, do not advertise secure erase functionality in the Format NVM Attributes
bhyve nvme: Update v1.4 Identify Controller data
Compliant v1.4 Controllers must report a Controller Type (CNTRLTYPE). Also, do not advertise secure erase functionality in the Format NVM Attributes field of the Identify Controller data structure as the Controller does not implement secure erase.
Fixes UNH ILO Test 1.1, Case 2
Reviewed by: imp, allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33573
show more ...
|
#
ea9ee355 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Add Temperature Threshold support
This adds the ability for a guest OS to send Set / Get Feature, Temperature Threshold commands. The implementation assumes a constant temperature and wi
bhyve nvme: Add Temperature Threshold support
This adds the ability for a guest OS to send Set / Get Feature, Temperature Threshold commands. The implementation assumes a constant temperature and will generate an Asynchronous Event Notification if the specified threshold is above/below this value. Although the specification allows 9 temperature values, this implementation only implements the Composite Temperature.
While in the neighborhood, move the clear of the CSTS register in the reset function after all other cleanup. This avoids a race with the guest thinking the reset is complete (i.e. CSTS.RDY = 0) before the NVMe emulation is actually complete with the reset.
Fixes UNH IOL 16.0 Test 1.7, cases 1, 2, and 4.
Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33572
show more ...
|
#
1381a118 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Fix Set Features
Be more conservative and only support the Features mandatory for an I/O Controller.
Avoids a "hang" in UNH test 1.2.10 associated with Predictable Latency Mode Configur
bhyve nvme: Fix Set Features
Be more conservative and only support the Features mandatory for an I/O Controller.
Avoids a "hang" in UNH test 1.2.10 associated with Predictable Latency Mode Configuration and Host Behavior Support features.
Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33571
show more ...
|
#
45ab4076 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Remove redundant AER Limit checks
The NVMe emulation checked if the Asynchronous Event Request Limit (a.k.a AERL) would be exceeded in pci_nvme_aer_add(), but this function is only calle
bhyve nvme: Remove redundant AER Limit checks
The NVMe emulation checked if the Asynchronous Event Request Limit (a.k.a AERL) would be exceeded in pci_nvme_aer_add(), but this function is only called from nvme_opc_async_event_req() which also checks for exceeding the AERL.
Reviewed by: imp, allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33570
show more ...
|
#
785b5da3 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Add missing Admin opcodes
Don't treat unsupported Admin commands as Invalid Opcode. Instead return the proper Invalid Field in Command.
Fixes UNH IOL test 1.17.2
Reviewed by: imp, alla
bhyve nvme: Add missing Admin opcodes
Don't treat unsupported Admin commands as Invalid Opcode. Instead return the proper Invalid Field in Command.
Fixes UNH IOL test 1.17.2
Reviewed by: imp, allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33569
show more ...
|
#
b1b2a4d9 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Implement Log Page Offset
Modify the Get Log Page command to parse the Log Page Offset fields to support more recent versions of the NVMe specification.
Fixes various tests for UNH Test
bhyve nvme: Implement Log Page Offset
Modify the Get Log Page command to parse the Log Page Offset fields to support more recent versions of the NVMe specification.
Fixes various tests for UNH Test 1.3.*
Reviewed by: imp, allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33568
show more ...
|
#
62d47fec |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Fix Namespace Specific Set Features
Return an error if the feature specified in Set Features is Namespace specific but the Namespace ID uses the Global Namespace tag.
Fixes UNH Test 1.2
bhyve nvme: Fix Namespace Specific Set Features
Return an error if the feature specified in Set Features is Namespace specific but the Namespace ID uses the Global Namespace tag.
Fixes UNH Test 1.2.7
Reviewed by: imp, allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33566
show more ...
|
#
cf76cdd4 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Fix NVM Format completion status
The NVM Format command is unique among the Admin commands in that it needs to finish asynchronously. For this reason, the emulation code invented a synth
bhyve nvme: Fix NVM Format completion status
The NVM Format command is unique among the Admin commands in that it needs to finish asynchronously. For this reason, the emulation code invented a synthetic completion status (NVME_NO_STATUS) to indicate that the command was still in progress and the command processing loop should not generate a completion message. The implementation used the value 0xffff for the synthetic value as this set both the Status Code and Status Code Type fields to reserved values.
Format initialized the completion status to this value and expected error cases to override it with a status code/type appropriate to the situation. The macros used to set the NVMe status are careful not to modify bit 0 (i.e. the phase bit), which with the synthetic completion status, causes the phase bit to get out of sync. When running tests in a guest with illegal NVM Format commands, Admin commands would eventually hang because it appeared there were no completions due to the incorrect phase bit value.
Fix is to only set NVME_NO_STATUS if the blockif delete command succeeds. While in the neighborhood, add a missing break statement when NVM Format is not supported.
Reviewed by: imp, allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33565
show more ...
|
#
595a12f1 |
| 30-Jan-2022 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Advertise v1.4 support
Bump advertised NVMe support from v1.3 to v1.4
Reviewed by: allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://revi
bhyve nvme: Advertise v1.4 support
Bump advertised NVMe support from v1.3 to v1.4
Reviewed by: allanjude Tested by: jason@tubnor.net MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33564
show more ...
|
#
c2fa905c |
| 26-Dec-2021 |
Toomas Soome <tsoome@FreeBSD.org> |
bhyve: clean up trailing whitespaces
Clean up trailing whitespaces. No functional changes.
Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D33681
|
#
cf3ed8e0 |
| 15-Dec-2021 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Inform guests of namespace resize
Register a "block resize" callback to be notified of changes to the backing storage for the Namespace. Use this to generate an Asynchronous Event Notifi
bhyve nvme: Inform guests of namespace resize
Register a "block resize" callback to be notified of changes to the backing storage for the Namespace. Use this to generate an Asynchronous Event Notification, Namespace Attributes Changed when the guest OS provides an Asynchronous Event Request.
MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D32953
show more ...
|
#
9f1fa1a4 |
| 15-Dec-2021 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve nvme: Add AEN support to NVMe emulation
Add Asynchronous Event Notification infrastructure to the NVMe emulation.
Reviewed by: imp, grehan MFC after: 1 month Differential Revision: https://re
bhyve nvme: Add AEN support to NVMe emulation
Add Asynchronous Event Notification infrastructure to the NVMe emulation.
Reviewed by: imp, grehan MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D32952
show more ...
|
#
e76c0e4f |
| 30-Aug-2021 |
Elliott Mitchell <ehem_freebsd@m5p.com> |
bhyve: Nuke double-semicolons
A distinct number of double-semicolons ended up in bhyve. Take a pass at getting rid of many of these harmless typos.
MFC after: 3 days
|
#
91064841 |
| 28-Jun-2021 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: Fix NVMe iovec construction for large IOs
The UEFI driver included with Rocky Linux 8.4 uncovered an existing bug in the NVMe emulation's construction of iovec's.
By default, NVMe data trans
bhyve: Fix NVMe iovec construction for large IOs
The UEFI driver included with Rocky Linux 8.4 uncovered an existing bug in the NVMe emulation's construction of iovec's.
By default, NVMe data transfer operations use a scatter-gather list in which all entries point to a fixed size memory region. For example, if the Memory Page Size is 4KiB, a 2MiB IO requires 512 entries. Lists themselves are also fixed size (default is 512 entries).
Because the list size is fixed, the last entry is special. If the IO requires more than 512 entries, the last entry in the list contains the address of the next list of entries. But if the IO requires exactly 512 entries, the last entry points to data.
The NVMe emulation missed this logic and unconditionally treated the last entry as a pointer to the next list. Fix is to check if the remaining data is greater than the page size before using the last entry as a pointer to the next list.
PR: 256422 Reported by: dave@syix.com Tested by: jason@tubnor.net MFC after: 5 days Relnotes: yes Reviewed by: imp, grehan Differential Revision: https://reviews.freebsd.org/D30897
show more ...
|
#
a11ca79c |
| 24-Jun-2021 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: fix NVMe MDTS comment
Removes an obsolete comment and adds parenthesis around the macro while in the area. No functional change.
|
#
3a4ab183 |
| 15-Jun-2021 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: Fix cli regression with NVMe ram
The configuration management refactoring inadvertently removed support for a RAM-backed NVMe Namespace (i.e. -s X,nvme,ram=16384). This adds it back.
Reporte
bhyve: Fix cli regression with NVMe ram
The configuration management refactoring inadvertently removed support for a RAM-backed NVMe Namespace (i.e. -s X,nvme,ram=16384). This adds it back.
Reported by: andy@omniosce.org Reviewed by: jhb, andy@omniosce.org Fixes: 621b5090487d MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D30717
show more ...
|
Revision tags: release/13.0.0, release/12.2.0, release/11.4.0, release/12.1.0, release/11.3.0 |
|
#
621b5090 |
| 26-Jun-2019 |
John Baldwin <jhb@FreeBSD.org> |
Refactor configuration management in bhyve.
Replace the existing ad-hoc configuration via various global variables with a small database of key-value pairs. The database supports heirarchical keys
Refactor configuration management in bhyve.
Replace the existing ad-hoc configuration via various global variables with a small database of key-value pairs. The database supports heirarchical keys using a MIB-like syntax to name the path to a given key. Values are always stored as strings. The API used to manage configuation values does include wrappers to handling boolean values. Other values use non-string types require parsing by consumers.
The configuration values are stored in a tree using nvlists. Leaf nodes hold string values. Configuration values are permitted to reference other configuration values using '%(name)'. This permits constructing template configurations.
All existing command line arguments now set configuration values. For devices, the "-s" option parses its option argument to generate a list of key-value pairs for the given device.
A new '-o' command line option permits setting an individual configuration variable. The key name is always given as a full path of dot-separated components.
A new '-k' command line option parses a simple configuration file. This configuration file holds a flat list of 'key=value' lines where the 'key' is the full path of a configuration variable. Lines starting with a '#' are comments.
In general, bhyve starts by parsing command line options in sequence and applying those settings to configuration values. Once this is complete, bhyve then begins initializing its state based on the configuration values. This means that subsequent configuration options or files may override or supplement previously given settings.
A special 'config.dump' configuration value can be set to true to help debug configuration issues. When this value is set, bhyve will print out the configuration variables as a flat list of 'key=value' lines.
Most command line argments map to a single configuration variable, e.g. '-w' sets the 'x86.strictmsr' value to false. A few command line arguments have less obvious effects:
- Multiple '-p' options append their values (as a comma-seperated list) to "vcpu.N.cpuset" values (where N is a decimal vcpu number).
- For '-s' options, a pci.<bus>.<slot>.<function> node is created. The first argument to '-s' (the device type) is used as the value of a "device" variable. Additional comma-separated arguments are then parsed into 'key=value' pairs and used to set additional variables under the device node. A PCI device emulation driver can provide its own hook to override the parsing of the additonal '-s' arguments after the device type.
After the configuration phase as completed, the init_pci hook then walks the "pci.<bus>.<slot>.<func>" nodes. It uses the "device" value to find the device model to use. The device model's init routine is passed a reference to its nvlist node in the configuration tree which it can query for specific variables.
The result is that a lot of the string parsing is removed from the device models and centralized. In addition, adding a new variable just requires teaching the model to look for the new variable.
- For '-l' options, a similar model is used where the string is parsed into values that are later read during initialization. One key note here is that the serial ports use the commonly used lowercase names from existing documentation and examples (e.g. "lpc.com1") instead of the uppercase names previously used internally in bhyve.
Reviewed by: grehan MFC after: 3 months Differential Revision: https://reviews.freebsd.org/D26035
show more ...
|
#
e2515283 |
| 27-Aug-2020 |
Glen Barber <gjb@FreeBSD.org> |
MFH
Sponsored by: Rubicon Communications, LLC (netgate.com)
|
#
71a51f69 |
| 24-Aug-2020 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: NVMe queue create must init head/tail
The NVMe emulation code did not explicitly initialize queue head and tail pointers on queue creation. As these pointers are part of calloc()'ed memory, t
bhyve: NVMe queue create must init head/tail
The NVMe emulation code did not explicitly initialize queue head and tail pointers on queue creation. As these pointers are part of calloc()'ed memory, this only becomes a problem if the queues are deleted and then recreated.
This error can manifest with messages about completions not matching a command.
show more ...
|
#
c4a86c1f |
| 24-Aug-2020 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: NVMe set nominal health values
Some operating systems believe bhyve's emulated NVMe drive is failing based on certain values in the SMART / Health Information log page being zero. Fix is to s
bhyve: NVMe set nominal health values
Some operating systems believe bhyve's emulated NVMe drive is failing based on certain values in the SMART / Health Information log page being zero. Fix is to set the reported temperature and available spare values to reasonable defaults.
Submitted by: wanpengqian@gmail.com Reviewed by: grehan MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24202
show more ...
|
#
0ed1d2e4 |
| 29-Jun-2020 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: fix NVMe Active Namespace list
The NVMe specification requires unused entries in the Identify, Active Namespace ID data to be zero. Fix is bzero the provided page, similar to what is done for
bhyve: fix NVMe Active Namespace list
The NVMe specification requires unused entries in the Identify, Active Namespace ID data to be zero. Fix is bzero the provided page, similar to what is done for the Namespace Descriptors list.
Fixes UNH Tests 2.6 and 2.9
Tested by: Jason Tubnor MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24901
show more ...
|
#
a104b18c |
| 29-Jun-2020 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: NVMe handle zero length DSM ranges
Dataset Management range specifications may have a zero length (a.k.a. an empty range definition). Handle the case of all ranges being empty by completing w
bhyve: NVMe handle zero length DSM ranges
Dataset Management range specifications may have a zero length (a.k.a. an empty range definition). Handle the case of all ranges being empty by completing with Success (DSM commands are advisory only). For Deallocate, skip empty range definitions when sending TRIM's to the backing storage.
Fixes UNH Test 2.2.4
Reviewed by: imp Tested by: Jason Tubnor MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24900
show more ...
|
#
7669ea7b |
| 29-Jun-2020 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: fix NVMe Get Features, Predictable Latency
If the Predictable Latency Mode is not supported, NVMe Controllers must return Invalid Field in Command status for the Get Features command with IDs
bhyve: fix NVMe Get Features, Predictable Latency
If the Predictable Latency Mode is not supported, NVMe Controllers must return Invalid Field in Command status for the Get Features command with IDs: - Predictable Latency Mode Config - Predictable Latency Mode Window
Fixes UNH Tests 3.6
Tested by: Jason Tubnor MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24899
show more ...
|
#
f97ed151 |
| 29-Jun-2020 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: add NVMe Feature Interrupt Vector Config
This adds support for NVMe Get Features, Interrupt Vector Config parameter error checking done by the UNH compliance tests.
Fixes UNH Tests 1.6.8 and
bhyve: add NVMe Feature Interrupt Vector Config
This adds support for NVMe Get Features, Interrupt Vector Config parameter error checking done by the UNH compliance tests.
Fixes UNH Tests 1.6.8 and 5.5.6
Tested by: Jason Tubnor MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24898
show more ...
|
#
46ea6273 |
| 29-Jun-2020 |
Chuck Tuffli <chuck@FreeBSD.org> |
bhyve: add basic NVMe Firmware Commit support
This commit updates the Identify Controller data to advertise the Controller supports a single firmware slot and that firmware slot 1 is read-only. Addi
bhyve: add basic NVMe Firmware Commit support
This commit updates the Identify Controller data to advertise the Controller supports a single firmware slot and that firmware slot 1 is read-only. Additionally, it returns an "Invalid Firmware Slot" error when the host issues any Firmware Commit command (a.k.a. Firmware Activate).
Fixes UNH Test 5.5.3
Tested by: Jason Tubnor MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D24897
show more ...
|