aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/virtual
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2012-04-26 15:43:42 -0400
committerAlexander Graf <agraf@suse.de>2012-05-06 10:19:12 -0400
commit5b74716ebab10e7bce960d148fe6d8f6920451e5 (patch)
tree169a36d6bcf64330f5bf026d9b064bfbe5582c85 /Documentation/virtual
parentf31e65e1170edba4a86bd8cba0318e251d3746d0 (diff)
kvm/powerpc: Add new ioctl to retreive server MMU infos
This is necessary for qemu to be able to pass the right information to the guest, such as the supported page sizes and corresponding encodings in the SLB and hash table, which can vary depending on the processor type, the type of KVM used (PR vs HV) and the version of KVM Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> [agraf: fix compilation on hv, adjust for newer ioctl numbers] Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'Documentation/virtual')
-rw-r--r--Documentation/virtual/kvm/api.txt70
1 files changed, 70 insertions, 0 deletions
diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
index eb62761b768..930126698a0 100644
--- a/Documentation/virtual/kvm/api.txt
+++ b/Documentation/virtual/kvm/api.txt
@@ -1860,6 +1860,76 @@ See KVM_GET_PIT2 for details on struct kvm_pit_state2.
1860This IOCTL replaces the obsolete KVM_SET_PIT. 1860This IOCTL replaces the obsolete KVM_SET_PIT.
1861 1861
1862 1862
18634.74 KVM_PPC_GET_SMMU_INFO
1864
1865Capability: KVM_CAP_PPC_GET_SMMU_INFO
1866Architectures: powerpc
1867Type: vm ioctl
1868Parameters: None
1869Returns: 0 on success, -1 on error
1870
1871This populates and returns a structure describing the features of
1872the "Server" class MMU emulation supported by KVM.
1873This can in turn be used by userspace to generate the appropariate
1874device-tree properties for the guest operating system.
1875
1876The structure contains some global informations, followed by an
1877array of supported segment page sizes:
1878
1879 struct kvm_ppc_smmu_info {
1880 __u64 flags;
1881 __u32 slb_size;
1882 __u32 pad;
1883 struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
1884 };
1885
1886The supported flags are:
1887
1888 - KVM_PPC_PAGE_SIZES_REAL:
1889 When that flag is set, guest page sizes must "fit" the backing
1890 store page sizes. When not set, any page size in the list can
1891 be used regardless of how they are backed by userspace.
1892
1893 - KVM_PPC_1T_SEGMENTS
1894 The emulated MMU supports 1T segments in addition to the
1895 standard 256M ones.
1896
1897The "slb_size" field indicates how many SLB entries are supported
1898
1899The "sps" array contains 8 entries indicating the supported base
1900page sizes for a segment in increasing order. Each entry is defined
1901as follow:
1902
1903 struct kvm_ppc_one_seg_page_size {
1904 __u32 page_shift; /* Base page shift of segment (or 0) */
1905 __u32 slb_enc; /* SLB encoding for BookS */
1906 struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
1907 };
1908
1909An entry with a "page_shift" of 0 is unused. Because the array is
1910organized in increasing order, a lookup can stop when encoutering
1911such an entry.
1912
1913The "slb_enc" field provides the encoding to use in the SLB for the
1914page size. The bits are in positions such as the value can directly
1915be OR'ed into the "vsid" argument of the slbmte instruction.
1916
1917The "enc" array is a list which for each of those segment base page
1918size provides the list of supported actual page sizes (which can be
1919only larger or equal to the base page size), along with the
1920corresponding encoding in the hash PTE. Similarily, the array is
19218 entries sorted by increasing sizes and an entry with a "0" shift
1922is an empty entry and a terminator:
1923
1924 struct kvm_ppc_one_page_size {
1925 __u32 page_shift; /* Page shift (or 0) */
1926 __u32 pte_enc; /* Encoding in the HPTE (>>12) */
1927 };
1928
1929The "pte_enc" field provides a value that can OR'ed into the hash
1930PTE's RPN field (ie, it needs to be shifted left by 12 to OR it
1931into the hash PTE second double word).
1932
18635. The kvm_run structure 19335. The kvm_run structure
1864------------------------ 1934------------------------
1865 1935