<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/Documentation/virtual, branch v3.9</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/Documentation/virtual?h=v3.9</id>
<link rel='self' href='https://git.amat.us/linux/atom/Documentation/virtual?h=v3.9'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2013-02-24T21:07:18Z</updated>
<entry>
<title>Merge tag 'kvm-3.9-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm</title>
<updated>2013-02-24T21:07:18Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2013-02-24T21:07:18Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=89f883372fa60f604d136924baf3e89ff1870e9e'/>
<id>urn:sha1:89f883372fa60f604d136924baf3e89ff1870e9e</id>
<content type='text'>
Pull KVM updates from Marcelo Tosatti:
 "KVM updates for the 3.9 merge window, including x86 real mode
  emulation fixes, stronger memory slot interface restrictions, mmu_lock
  spinlock hold time reduction, improved handling of large page faults
  on shadow, initial APICv HW acceleration support, s390 channel IO
  based virtio, amongst others"

* tag 'kvm-3.9-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (143 commits)
  Revert "KVM: MMU: lazily drop large spte"
  x86: pvclock kvm: align allocation size to page size
  KVM: nVMX: Remove redundant get_vmcs12 from nested_vmx_exit_handled_msr
  x86 emulator: fix parity calculation for AAD instruction
  KVM: PPC: BookE: Handle alignment interrupts
  booke: Added DBCR4 SPR number
  KVM: PPC: booke: Allow multiple exception types
  KVM: PPC: booke: use vcpu reference from thread_struct
  KVM: Remove user_alloc from struct kvm_memory_slot
  KVM: VMX: disable apicv by default
  KVM: s390: Fix handling of iscs.
  KVM: MMU: cleanup __direct_map
  KVM: MMU: remove pt_access in mmu_set_spte
  KVM: MMU: cleanup mapping-level
  KVM: MMU: lazily drop large spte
  KVM: VMX: cleanup vmx_set_cr0().
  KVM: VMX: add missing exit names to VMX_EXIT_REASONS array
  KVM: VMX: disable SMEP feature when guest is in non-paging mode
  KVM: Remove duplicate text in api.txt
  Revert "KVM: MMU: split kvm_mmu_free_page"
  ...
</content>
</entry>
<entry>
<title>ARM: KVM: VGIC accept vcpu and dist base addresses from user space</title>
<updated>2013-02-11T18:59:01Z</updated>
<author>
<name>Christoffer Dall</name>
<email>c.dall@virtualopensystems.com</email>
</author>
<published>2013-01-22T00:36:13Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=330690cdceba06b60afcfe50a65f72fab7f4f970'/>
<id>urn:sha1:330690cdceba06b60afcfe50a65f72fab7f4f970</id>
<content type='text'>
User space defines the model to emulate to a guest and should therefore
decide which addresses are used for both the virtual CPU interface
directly mapped in the guest physical address space and for the emulated
distributor interface, which is mapped in software by the in-kernel VGIC
support.

Reviewed-by: Will Deacon &lt;will.deacon@arm.com&gt;
Signed-off-by: Christoffer Dall &lt;c.dall@virtualopensystems.com&gt;
Signed-off-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
</content>
</entry>
<entry>
<title>KVM: ARM: Introduce KVM_ARM_SET_DEVICE_ADDR ioctl</title>
<updated>2013-02-11T18:58:39Z</updated>
<author>
<name>Christoffer Dall</name>
<email>c.dall@virtualopensystems.com</email>
</author>
<published>2013-01-23T18:18:04Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=3401d54696f992edf036f00f46c8c399d1b75c2a'/>
<id>urn:sha1:3401d54696f992edf036f00f46c8c399d1b75c2a</id>
<content type='text'>
On ARM some bits are specific to the model being emulated for the guest and
user space needs a way to tell the kernel about those bits.  An example is mmio
device base addresses, where KVM must know the base address for a given device
to properly emulate mmio accesses within a certain address range or directly
map a device with virtualiation extensions into the guest address space.

We make this API ARM-specific as we haven't yet reached a consensus for a
generic API for all KVM architectures that will allow us to do something like
this.

Reviewed-by: Will Deacon &lt;will.deacon@arm.com&gt;
Signed-off-by: Christoffer Dall &lt;c.dall@virtualopensystems.com&gt;
Signed-off-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
</content>
</entry>
<entry>
<title>KVM: Remove duplicate text in api.txt</title>
<updated>2013-02-06T00:48:50Z</updated>
<author>
<name>Geoff Levand</name>
<email>geoff@infradead.org</email>
</author>
<published>2013-01-31T20:06:08Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=4293b5e5a68074431cafa74d549c1327ba1d0deb'/>
<id>urn:sha1:4293b5e5a68074431cafa74d549c1327ba1d0deb</id>
<content type='text'>
Signed-off-by: Geoff Levand &lt;geoff@infradead.org&gt;
Signed-off-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
</content>
</entry>
<entry>
<title>KVM: set_memory_region: Disallow changing read-only attribute later</title>
<updated>2013-02-05T00:56:47Z</updated>
<author>
<name>Takuya Yoshikawa</name>
<email>yoshikawa_takuya_b1@lab.ntt.co.jp</email>
</author>
<published>2013-01-30T10:40:41Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=75d61fbcf563373696578570e914f555e12c8d97'/>
<id>urn:sha1:75d61fbcf563373696578570e914f555e12c8d97</id>
<content type='text'>
As Xiao pointed out, there are a few problems with it:
 - kvm_arch_commit_memory_region() write protects the memory slot only
   for GET_DIRTY_LOG when modifying the flags.
 - FNAME(sync_page) uses the old spte value to set a new one without
   checking KVM_MEM_READONLY flag.

Since we flush all shadow pages when creating a new slot, the simplest
fix is to disallow such problematic flag changes: this is safe because
no one is doing such things.

Reviewed-by: Gleb Natapov &lt;gleb@redhat.com&gt;
Signed-off-by: Takuya Yoshikawa &lt;yoshikawa_takuya_b1@lab.ntt.co.jp&gt;
Cc: Xiao Guangrong &lt;xiaoguangrong@linux.vnet.ibm.com&gt;
Cc: Alex Williamson &lt;alex.williamson@redhat.com&gt;
Signed-off-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
</content>
</entry>
<entry>
<title>KVM: ARM: Power State Coordination Interface implementation</title>
<updated>2013-01-23T18:29:18Z</updated>
<author>
<name>Marc Zyngier</name>
<email>marc.zyngier@arm.com</email>
</author>
<published>2013-01-20T23:28:13Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=aa024c2f35a07cc32e48c5f62a5807be01c09249'/>
<id>urn:sha1:aa024c2f35a07cc32e48c5f62a5807be01c09249</id>
<content type='text'>
Implement the PSCI specification (ARM DEN 0022A) to control
virtual CPUs being "powered" on or off.

PSCI/KVM is detected using the KVM_CAP_ARM_PSCI capability.

A virtual CPU can now be initialized in a "powered off" state,
using the KVM_ARM_VCPU_POWER_OFF feature flag.

The guest can use either SMC or HVC to execute a PSCI function.

Reviewed-by: Will Deacon &lt;will.deacon@arm.com&gt;
Signed-off-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
Signed-off-by: Christoffer Dall &lt;c.dall@virtualopensystems.com&gt;
</content>
</entry>
<entry>
<title>KVM: ARM: VFP userspace interface</title>
<updated>2013-01-23T18:29:15Z</updated>
<author>
<name>Rusty Russell</name>
<email>rusty.russell@linaro.org</email>
</author>
<published>2013-01-20T23:28:11Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=4fe21e4c6def3c6a8f609893b4d5c72bc186d0d5'/>
<id>urn:sha1:4fe21e4c6def3c6a8f609893b4d5c72bc186d0d5</id>
<content type='text'>
We use space #18 for floating point regs.

Reviewed-by: Will Deacon &lt;will.deacon@arm.com&gt;
Reviewed-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
Signed-off-by: Christoffer Dall &lt;c.dall@virtualopensystems.com&gt;
</content>
</entry>
<entry>
<title>KVM: ARM: Demux CCSIDR in the userspace API</title>
<updated>2013-01-23T18:29:14Z</updated>
<author>
<name>Christoffer Dall</name>
<email>c.dall@virtualopensystems.com</email>
</author>
<published>2013-01-20T23:28:10Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=c27581ed32275897651a84043b04ea3ccdd644e0'/>
<id>urn:sha1:c27581ed32275897651a84043b04ea3ccdd644e0</id>
<content type='text'>
The Cache Size Selection Register (CSSELR) selects the current Cache
Size ID Register (CCSIDR).  You write which cache you are interested
in to CSSELR, and read the information out of CCSIDR.

Which cache numbers are valid is known by reading the Cache Level ID
Register (CLIDR).

To export this state to userspace, we add a KVM_REG_ARM_DEMUX
numberspace (17), which uses 8 bits to represent which register is
being demultiplexed (0 for CCSIDR), and the lower 8 bits to represent
this demultiplexing (in our case, the CSSELR value, which is 4 bits).

Reviewed-by: Will Deacon &lt;will.deacon@arm.com&gt;
Reviewed-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
Signed-off-by: Christoffer Dall &lt;c.dall@virtualopensystems.com&gt;
</content>
</entry>
<entry>
<title>KVM: ARM: User space API for getting/setting co-proc registers</title>
<updated>2013-01-23T18:29:14Z</updated>
<author>
<name>Christoffer Dall</name>
<email>c.dall@virtualopensystems.com</email>
</author>
<published>2013-01-20T23:28:10Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=1138245ccf9652429630c09fb068e9b12c56c3d3'/>
<id>urn:sha1:1138245ccf9652429630c09fb068e9b12c56c3d3</id>
<content type='text'>
The following three ioctls are implemented:
 -  KVM_GET_REG_LIST
 -  KVM_GET_ONE_REG
 -  KVM_SET_ONE_REG

Now we have a table for all the cp15 registers, we can drive a generic
API.

The register IDs carry the following encoding:

ARM registers are mapped using the lower 32 bits.  The upper 16 of that
is the register group type, or coprocessor number:

ARM 32-bit CP15 registers have the following id bit patterns:
  0x4002 0000 000F &lt;zero:1&gt; &lt;crn:4&gt; &lt;crm:4&gt; &lt;opc1:4&gt; &lt;opc2:3&gt;

ARM 64-bit CP15 registers have the following id bit patterns:
  0x4003 0000 000F &lt;zero:1&gt; &lt;zero:4&gt; &lt;crm:4&gt; &lt;opc1:4&gt; &lt;zero:3&gt;

For futureproofing, we need to tell QEMU about the CP15 registers the
host lets the guest access.

It will need this information to restore a current guest on a future
CPU or perhaps a future KVM which allow some of these to be changed.

We use a separate table for these, as they're only for the userspace API.

Reviewed-by: Will Deacon &lt;will.deacon@arm.com&gt;
Reviewed-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
Signed-off-by: Christoffer Dall &lt;c.dall@virtualopensystems.com&gt;
</content>
</entry>
<entry>
<title>KVM: ARM: Inject IRQs and FIQs from userspace</title>
<updated>2013-01-23T18:29:12Z</updated>
<author>
<name>Christoffer Dall</name>
<email>cdall@cs.columbia.edu</email>
</author>
<published>2013-01-20T23:28:08Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=86ce85352f0da7e1431ad8efcb04323819a620e7'/>
<id>urn:sha1:86ce85352f0da7e1431ad8efcb04323819a620e7</id>
<content type='text'>
All interrupt injection is now based on the VM ioctl KVM_IRQ_LINE.  This
works semantically well for the GIC as we in fact raise/lower a line on
a machine component (the gic).  The IOCTL uses the follwing struct.

struct kvm_irq_level {
	union {
		__u32 irq;     /* GSI */
		__s32 status;  /* not used for KVM_IRQ_LEVEL */
	};
	__u32 level;           /* 0 or 1 */
};

ARM can signal an interrupt either at the CPU level, or at the in-kernel irqchip
(GIC), and for in-kernel irqchip can tell the GIC to use PPIs designated for
specific cpus.  The irq field is interpreted like this:

  bits:  | 31 ... 24 | 23  ... 16 | 15    ...    0 |
  field: | irq_type  | vcpu_index |   irq_number   |

The irq_type field has the following values:
- irq_type[0]: out-of-kernel GIC: irq_number 0 is IRQ, irq_number 1 is FIQ
- irq_type[1]: in-kernel GIC: SPI, irq_number between 32 and 1019 (incl.)
               (the vcpu_index field is ignored)
- irq_type[2]: in-kernel GIC: PPI, irq_number between 16 and 31 (incl.)

The irq_number thus corresponds to the irq ID in as in the GICv2 specs.

This is documented in Documentation/kvm/api.txt.

Reviewed-by: Will Deacon &lt;will.deacon@arm.com&gt;
Reviewed-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Signed-off-by: Christoffer Dall &lt;c.dall@virtualopensystems.com&gt;
</content>
</entry>
</feed>
