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>
	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.


Maintainers
-----------
M: Paolo Bonzini <pbonzini@redhat.com>
M: Radim Krčmář <rkrcmar@redhat.com>
L: kvm@vger.kernel.org
T: git://git.kernel.org/pub/scm/virt/kvm/kvm-unit-tests.git

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

ARM
M: Drew Jones <drjones@redhat.com>
L: kvm@vger.kernel.org
L: kvmarm@lists.cs.columbia.edu
F: arm/*
F: lib/arm/*
F: lib/arm64/*

POWERPC
M: Laurent Vivier <lvivier@redhat.com>
M: Thomas Huth <thuth@redhat.com>
L: kvm@vger.kernel.org
L: kvm-ppc@vger.kernel.org
F: powerpc/*
F: lib/powerpc/*
F: lib/ppc64/*

S390X
M: Thomas Huth <thuth@redhat.com>
M: David Hildenbrand <david@redhat.com>
L: kvm@vger.kernel.org
F: s390x/*
F: lib/s390x/*

X86
M: Paolo Bonzini <pbonzini@redhat.com>
M: Radim Krčmář <rkrcmar@redhat.com>
L: kvm@vger.kernel.org
F: x86/*
F: lib/x86/*
