KVM Unit Tests Maintainers
==========================

The intention of this file is not to establish who owns what portions of the
code base, but to provide a set of names that developers can consult when they
have a question about a particular subset and also to provide a set of names
to be CC'd when submitting a patch to obtain appropriate review.

In general, if you have a question about inclusion of a patch, you
should consult the KVM mailing list <kvm@vger.kernel.org> and not any
specific individual privately.

Descriptions of section entries:

	M: Mail patches to: FullName <address@domain>
	R: Designated reviewer: FullName <address@domain>
	   These reviewers should be CCed on patches.
	L: Mailing list that is relevant to this area
	W: Web-page with status/info
	Q: Patchwork web based patch tracking system site
	T: SCM tree type and location.  Type is one of: git, hg, quilt, stgit.
	S: Status, one of the following:
	   Supported:	Someone is actually paid to look after this.
	   Maintained:	Someone actually looks after it.
	   Odd Fixes:	It has a maintainer but they don't have time to do
			much other than throw the odd patch in. See below.
	   Orphan:	No current maintainer [but maybe you could take the
			role as you write your new code].
	   Obsolete:	Old code. Something tagged obsolete generally means
			it has been replaced by a better system and you
			should be using that.
	F: Files and directories with wildcard patterns.
	   A trailing slash includes all files and subdirectory files.
	   F:	drivers/net/	all files in and below drivers/net
	   F:	drivers/net/*	all files in drivers/net, but not below
	   F:	*/net/*		all files in "any top level directory"/net
	   One pattern per line.  Multiple F: lines acceptable.
	X: Files and directories that are NOT maintained, same rules as F:
	   Files exclusions are tested before file matches.
	   Can be useful for excluding a specific subdirectory, for instance:
	   F:	net/
	   X:	net/ipv6/
	   matches all files in and below net excluding net/ipv6/
	K: Keyword perl extended regex pattern to match content in a
	   patch or file.  For instance:
	   K: of_get_profile
	      matches patches or files that contain "of_get_profile"
	   K: \b(printk|pr_(info|err))\b
	      matches patches or files that contain one or more of the words
	      printk, pr_info or pr_err
	   One regex pattern per line.  Multiple K: lines acceptable.


General Project Administration
------------------------------

Project administration
M: Paolo Bonzini <pbonzini@redhat.com>
M: Thomas Huth <thuth@redhat.com>
M: Andrew Jones <andrew.jones@linux.dev>
S: Supported
L: kvm@vger.kernel.org
T: https://gitlab.com/kvm-unit-tests/kvm-unit-tests.git
F: COPYRIGHT
F: LICENSE
F: MAINTAINERS
F: README.md

Default mailing list
L: kvm@vger.kernel.org
F: *
F: */

Architecture Specific Code:
---------------------------

ARM
M: Andrew Jones <andrew.jones@linux.dev>
R: Alexandru Elisei <alexandru.elisei@arm.com>
R: Eric Auger <eric.auger@redhat.com>
S: Supported
L: kvmarm@lists.linux.dev
F: arm/
F: lib/arm/
F: lib/arm64/
T: https://gitlab.com/jones-drew/kvm-unit-tests.git

POWERPC
M: Laurent Vivier <lvivier@redhat.com>
M: Thomas Huth <thuth@redhat.com>
S: Maintained
L: linuxppc-dev@lists.ozlabs.org
F: powerpc/
F: lib/powerpc/
F: lib/ppc64/

RISCV
M: Andrew Jones <andrew.jones@linux.dev>
S: Supported
L: kvm-riscv@lists.infradead.org
F: riscv/
F: lib/riscv/
T: https://gitlab.com/jones-drew/kvm-unit-tests.git

S390X
M: Janosch Frank <frankja@linux.ibm.com>
M: Claudio Imbrenda <imbrenda@linux.ibm.com>
M: Nico Böhr <nrb@linux.ibm.com>
S: Supported
R: David Hildenbrand <david@redhat.com>
R: Thomas Huth <thuth@redhat.com>
L: linux-s390@vger.kernel.org
F: s390x/
F: lib/s390x/
F: scripts/s390x/

X86
M: Paolo Bonzini <pbonzini@redhat.com>
S: Supported
F: x86/
F: lib/x86/
T: https://gitlab.com/bonzini/kvm-unit-tests.git
