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.


Maintainers
-----------
M: Paolo Bonzini <pbonzini@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: Andrew 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>
M: Janosch Frank <frankja@linux.ibm.com>
R: Cornelia Huck <cohuck@redhat.com>
L: kvm@vger.kernel.org
L: linux-s390@vger.kernel.org
F: s390x/*
F: lib/s390x/*

X86
M: Paolo Bonzini <pbonzini@redhat.com>
L: kvm@vger.kernel.org
F: x86/*
F: lib/x86/*
