freebsd kernel with SKQ
Go to file
Chuck Tuffli 961be12f6a bhyve: fix NVMe emulation missed interrupts
The bhyve NVMe emulation has a race in the logic which generates command
completion interrupts. On FreeBSD guests, this manifests as kernel log
messages similar to:
    nvme0: Missing interrupt

The NVMe emulation code sets a per-submission queue "busy" flag while
processing the submission queue, and only generates an interrupt when
the submission queue is not busy.

Aside from being counter to the NVMe design (i.e. interrupt properties
are tied to the completion queue) and adding complexity (e.g. exceptions
to not generating an interrupt when "busy"), it causes a race condition
under the following conditions:
 - guest OS has no outstanding interrupts
 - guest OS submits a single NVMe IO command
 - bhyve emulation processes the SQ and sets the "busy" flag
 - bhyve emulation submits the asynchronous IO to the backing storage
 - IO request to the backing storage completes before the SQ processing
   loop exits and doesn't generate an interrupt because the SQ is "busy"
 - bhyve emulation finishes processing the SQ and clears the "busy" flag

Fix is to remove the "busy" flag and generate an interrupt when the CQ
head and tail pointers do not match.

Reported by:	khng300
Reviewed by:	jhb, imp
Approved by:	jhb (maintainer)
MFC after:	2 weeks
Differential Revision: https://reviews.freebsd.org/D24082
2020-03-27 15:28:22 +00:00
bin sh: fix read builtin on 32-bit systems 2020-02-22 03:14:05 +00:00
cddl MFOpenZFS: ZVOLs should not be allowed to have children 2020-03-25 15:56:18 +00:00
contrib Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp 2020-03-26 17:46:32 +00:00
crypto Merge OpenSSL 1.1.1e. 2020-03-18 02:13:12 +00:00
etc Install expected kyua docs. 2020-03-26 17:34:17 +00:00
gnu Now that there are no remaining users of ld.bfd, remove the ld subdir. 2020-03-27 01:12:11 +00:00
include Import OpenSSL 1.1.1e. 2020-03-17 21:27:57 +00:00
kerberos5 Update Makefile.depend files 2019-12-11 17:37:53 +00:00
lib msun: swap words order instead of bits order on BIG ENDIAN 2020-03-26 18:50:54 +00:00
libexec Revert r359294 per manu's request 2020-03-25 08:35:55 +00:00
release pkgbase: Move device.hints from the runtime to the bootloader package 2020-03-24 01:07:01 +00:00
rescue rescue: Remove useless linking with libl 2020-03-24 07:08:02 +00:00
sbin Use IP_FW_NAT44_DESTROY opcode for IP_FW3 socket option to destroy 2020-03-24 12:27:02 +00:00
secure Reduce diff with the vendor version. No functional change. 2020-03-18 02:20:03 +00:00
share [PowerPC] Switch powerpc and powerpcspe to lld 2020-03-27 01:00:03 +00:00
stand [PowerPC] Switch powerpc and powerpcspe to lld 2020-03-27 01:00:03 +00:00
sys Use uint32_t where it is expected to be used. No functional change. 2020-03-27 11:08:11 +00:00
targets retire in-tree GPL dtc devicetree compiler 2020-02-29 17:10:54 +00:00
tests so_reuseport_lb_test: correct setsockopt parameter size 2020-03-25 20:20:08 +00:00
tools [PowerPC] Switch powerpc and powerpcspe to lld 2020-03-27 01:00:03 +00:00
usr.bin Do not use macros in -width 2020-03-26 17:58:52 +00:00
usr.sbin bhyve: fix NVMe emulation missed interrupts 2020-03-27 15:28:22 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.cirrus.yml Cirrus-CI: increase timeout to 120m 2020-02-19 15:56:40 +00:00
.clang-format Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitattributes Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitignore .gitignore: Add LINT kernel configurations generated into SRCDIR 2019-08-10 18:22:22 +00:00
COPYRIGHT Happy New Year 2020! 2019-12-31 16:01:36 +00:00
LOCKS LOCKS: update current locks 2018-06-09 03:08:04 +00:00
MAINTAINERS Move all sources from the llvm project into contrib/llvm-project. 2019-12-20 19:53:05 +00:00
Makefile Disable rarely used architecture variants in make universe by default. 2020-03-24 18:16:02 +00:00
Makefile.inc1 Stop building libl and liby 2020-03-26 08:23:09 +00:00
Makefile.libcompat Stop building libl and liby 2020-03-26 08:23:09 +00:00
Makefile.sys.inc AUTO_OBJ: For all top-level targets enforce using an OBJDIR. 2017-12-05 21:29:47 +00:00
ObsoleteFiles.inc Re-apply r359267 now that tools are using the proper include path 2020-03-25 01:35:13 +00:00
README Import OpenSSL 1.1.1e. 2020-03-17 21:27:57 +00:00
README.md README: add generic notes about GENERIC and NOTES 2018-06-17 19:44:24 +00:00
RELNOTES Add elf2aout removal 2020-02-06 18:00:50 +00:00
UPDATING Set tentative dates. 2020-03-10 07:05:04 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html, and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information, including setting make(1) variables.

Source Roadmap:

bin		System/user commands.

cddl		Various commands and libraries under the Common Development
		and Distribution License.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

stand		Boot loader sources.

sys		Kernel sources.

sys/<arch>/conf Kernel configuration files. GENERIC is the configuration
		used in release builds. NOTES contains documentation of
		all possible entries.

tests		Regression tests which can be run by Kyua.  See tests/README
		for additional information.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html