<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/arch/arm/kvm, branch linux-4.8.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.8.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.8.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2016-09-09T10:40:30Z</updated>
<entry>
<title>kvm-arm: Unmap shadow pagetables properly</title>
<updated>2016-09-09T10:40:30Z</updated>
<author>
<name>Suzuki K Poulose</name>
</author>
<published>2016-09-08T15:25:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=293f293637b55db4f9f522a5a72514e98a541076'/>
<id>urn:sha1:293f293637b55db4f9f522a5a72514e98a541076</id>
<content type='text'>
On arm/arm64, we depend on the kvm_unmap_hva* callbacks (via
mmu_notifiers::invalidate_*) to unmap the stage2 pagetables when
the userspace buffer gets unmapped. However, when the Hypervisor
process exits without explicit unmap of the guest buffers, the only
notifier we get is kvm_arch_flush_shadow_all() (via mmu_notifier::release
) which does nothing on arm. Later this causes us to access pages that
were already released [via exit_mmap() -&gt; unmap_vmas()] when we actually
get to unmap the stage2 pagetable [via kvm_arch_destroy_vm() -&gt;
kvm_free_stage2_pgd()]. This triggers crashes with CONFIG_DEBUG_PAGEALLOC,
which unmaps any free'd pages from the linear map.

 [  757.644120] Unable to handle kernel paging request at virtual address
  ffff800661e00000
 [  757.652046] pgd = ffff20000b1a2000
 [  757.655471] [ffff800661e00000] *pgd=00000047fffe3003, *pud=00000047fcd8c003,
  *pmd=00000047fcc7c003, *pte=00e8004661e00712
 [  757.666492] Internal error: Oops: 96000147 [#3] PREEMPT SMP
 [  757.672041] Modules linked in:
 [  757.675100] CPU: 7 PID: 3630 Comm: qemu-system-aar Tainted: G      D
 4.8.0-rc1 #3
 [  757.683240] Hardware name: AppliedMicro X-Gene Mustang Board/X-Gene Mustang Board,
  BIOS 3.06.15 Aug 19 2016
 [  757.692938] task: ffff80069cdd3580 task.stack: ffff8006adb7c000
 [  757.698840] PC is at __flush_dcache_area+0x1c/0x40
 [  757.703613] LR is at kvm_flush_dcache_pmd+0x60/0x70
 [  757.708469] pc : [&lt;ffff20000809dbdc&gt;] lr : [&lt;ffff2000080b4a70&gt;] pstate: 20000145
 ...
 [  758.357249] [&lt;ffff20000809dbdc&gt;] __flush_dcache_area+0x1c/0x40
 [  758.363059] [&lt;ffff2000080b6748&gt;] unmap_stage2_range+0x458/0x5f0
 [  758.368954] [&lt;ffff2000080b708c&gt;] kvm_free_stage2_pgd+0x34/0x60
 [  758.374761] [&lt;ffff2000080b2280&gt;] kvm_arch_destroy_vm+0x20/0x68
 [  758.380570] [&lt;ffff2000080aa330&gt;] kvm_put_kvm+0x210/0x358
 [  758.385860] [&lt;ffff2000080aa524&gt;] kvm_vm_release+0x2c/0x40
 [  758.391239] [&lt;ffff2000082ad234&gt;] __fput+0x114/0x2e8
 [  758.396096] [&lt;ffff2000082ad46c&gt;] ____fput+0xc/0x18
 [  758.400869] [&lt;ffff200008104658&gt;] task_work_run+0x108/0x138
 [  758.406332] [&lt;ffff2000080dc8ec&gt;] do_exit+0x48c/0x10e8
 [  758.411363] [&lt;ffff2000080dd5fc&gt;] do_group_exit+0x6c/0x130
 [  758.416739] [&lt;ffff2000080ed924&gt;] get_signal+0x284/0xa18
 [  758.421943] [&lt;ffff20000808a098&gt;] do_signal+0x158/0x860
 [  758.427060] [&lt;ffff20000808aad4&gt;] do_notify_resume+0x6c/0x88
 [  758.432608] [&lt;ffff200008083624&gt;] work_pending+0x10/0x14
 [  758.437812] Code: 9ac32042 8b010001 d1000443 8a230000 (d50b7e20)

This patch fixes the issue by moving the kvm_free_stage2_pgd() to
kvm_arch_flush_shadow_all().

Cc: &lt;stable@vger.kernel.org&gt; # 3.9+
Tested-by: Itaru Kitayama &lt;itaru.kitayama@riken.jp&gt;
Reported-by: Itaru Kitayama &lt;itaru.kitayama@riken.jp&gt;
Reported-by: James Morse &lt;james.morse@arm.com&gt;
Cc: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
Cc: Catalin Marinas &lt;catalin.marinas@arm.com&gt;
Cc: Christoffer Dall &lt;christoffer.dall@linaro.org&gt;
Signed-off-by: Suzuki K Poulose &lt;suzuki.poulose@arm.com&gt;
Signed-off-by: Christoffer Dall &lt;christoffer.dall@linaro.org&gt;
</content>
</entry>
<entry>
<title>arm: KVM: Fix idmap overlap detection when the kernel is idmap'ed</title>
<updated>2016-09-06T11:09:31Z</updated>
<author>
<name>Marc Zyngier</name>
</author>
<published>2016-08-22T08:01:17Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d2896d4b55b2e32b423072a4124d7da4dc1e6cb1'/>
<id>urn:sha1:d2896d4b55b2e32b423072a4124d7da4dc1e6cb1</id>
<content type='text'>
We're trying hard to detect when the HYP idmap overlaps with the
HYP va, as it makes the teardown of a cpu dangerous. But there is
one case where an overlap is completely safe, which is when the
whole of the kernel is idmap'ed, which is likely to happen on 32bit
when RAM is at 0x8000000 and we're using a 2G/2G VA split.

In that case, we can proceed safely.

Reported-by: Christoffer Dall &lt;christoffer.dall@linaro.org&gt;
Signed-off-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
Signed-off-by: Christoffer Dall &lt;christoffer.dall@linaro.org&gt;
</content>
</entry>
<entry>
<title>Merge tag 'kvm-arm-for-v4.8-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD</title>
<updated>2016-08-18T10:19:19Z</updated>
<author>
<name>Paolo Bonzini</name>
</author>
<published>2016-08-18T10:19:19Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2eeb321fd2e24c0910e96e82509a961d1531fa29'/>
<id>urn:sha1:2eeb321fd2e24c0910e96e82509a961d1531fa29</id>
<content type='text'>
KVM/ARM Fixes for v4.8-rc3

This tag contains the following fixes on top of v4.8-rc1:
 - ITS init issues
 - ITS error handling issues
 - ITS IRQ leakage fix
 - Plug a couple of ITS race conditions
 - An erratum workaround for timers
 - Some removal of misleading use of errors and comments
 - A fix for GICv3 on 32-bit guests
</content>
</entry>
<entry>
<title>KVM: arm/arm64: Change misleading use of is_error_pfn</title>
<updated>2016-08-17T09:38:03Z</updated>
<author>
<name>Christoffer Dall</name>
</author>
<published>2016-08-17T08:46:10Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=9ac715954682b23d293d910ad2697554171035e7'/>
<id>urn:sha1:9ac715954682b23d293d910ad2697554171035e7</id>
<content type='text'>
When converting a gfn to a pfn, we call gfn_to_pfn_prot, which returns
various kinds of error values.  It turns out that is_error_pfn() only
returns true when the gfn was found in a memory slot and could somehow
not be used, but it does not return true if the gfn does not belong to
any memory slot.

Change use to is_error_noslot_pfn() which covers both cases.

Note: Since we already check for kvm_is_error_hva(hva) explicitly in the
caller of this function while holding the kvm-&gt;srcu lock protecting the
memory slots, this should never be a problem, but nevertheless this
change is warranted as it shows the intention of the code.

Reported-by: James Hogan &lt;james.hogan@imgtec.com&gt;
Signed-off-by: Christoffer Dall &lt;christoffer.dall@linaro.org&gt;
</content>
</entry>
<entry>
<title>KVM: Protect device ops-&gt;create and list_add with kvm-&gt;lock</title>
<updated>2016-08-12T10:01:27Z</updated>
<author>
<name>Christoffer Dall</name>
</author>
<published>2016-08-09T17:13:01Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a28ebea2adc4a2bef5989a5a181ec238f59fbcad'/>
<id>urn:sha1:a28ebea2adc4a2bef5989a5a181ec238f59fbcad</id>
<content type='text'>
KVM devices were manipulating list data structures without any form of
synchronization, and some implementations of the create operations also
suffered from a lack of synchronization.

Now when we've split the xics create operation into create and init, we
can hold the kvm-&gt;lock mutex while calling the create operation and when
manipulating the devices list.

The error path in the generic code gets slightly ugly because we have to
take the mutex again and delete the device from the list, but holding
the mutex during anon_inode_getfd or releasing/locking the mutex in the
common non-error path seemed wrong.

Signed-off-by: Christoffer Dall &lt;christoffer.dall@linaro.org&gt;
Reviewed-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
Acked-by: Christian Borntraeger &lt;borntraeger@de.ibm.com&gt;
Signed-off-by: Radim Krčmář &lt;rkrcmar@redhat.com&gt;
</content>
</entry>
<entry>
<title>Merge tag 'kvm-arm-for-4.8-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD</title>
<updated>2016-08-04T11:59:56Z</updated>
<author>
<name>Paolo Bonzini</name>
</author>
<published>2016-08-04T11:59:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6f49b2f3414622d3e41135a65dac98968956662b'/>
<id>urn:sha1:6f49b2f3414622d3e41135a65dac98968956662b</id>
<content type='text'>
KVM/ARM Changes for v4.8 - Take 2

Includes GSI routing support to go along with the new VGIC and a small fix that
has been cooking in -next for a while.
</content>
</entry>
<entry>
<title>Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm</title>
<updated>2016-08-02T20:11:27Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2016-08-02T20:11:27Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=221bb8a46e230b9824204ae86537183d9991ff2a'/>
<id>urn:sha1:221bb8a46e230b9824204ae86537183d9991ff2a</id>
<content type='text'>
Pull KVM updates from Paolo Bonzini:

 - ARM: GICv3 ITS emulation and various fixes.  Removal of the
   old VGIC implementation.

 - s390: support for trapping software breakpoints, nested
   virtualization (vSIE), the STHYI opcode, initial extensions
   for CPU model support.

 - MIPS: support for MIPS64 hosts (32-bit guests only) and lots
   of cleanups, preliminary to this and the upcoming support for
   hardware virtualization extensions.

 - x86: support for execute-only mappings in nested EPT; reduced
   vmexit latency for TSC deadline timer (by about 30%) on Intel
   hosts; support for more than 255 vCPUs.

 - PPC: bugfixes.

* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (302 commits)
  KVM: PPC: Introduce KVM_CAP_PPC_HTM
  MIPS: Select HAVE_KVM for MIPS64_R{2,6}
  MIPS: KVM: Reset CP0_PageMask during host TLB flush
  MIPS: KVM: Fix ptr-&gt;int cast via KVM_GUEST_KSEGX()
  MIPS: KVM: Sign extend MFC0/RDHWR results
  MIPS: KVM: Fix 64-bit big endian dynamic translation
  MIPS: KVM: Fail if ebase doesn't fit in CP0_EBase
  MIPS: KVM: Use 64-bit CP0_EBase when appropriate
  MIPS: KVM: Set CP0_Status.KX on MIPS64
  MIPS: KVM: Make entry code MIPS64 friendly
  MIPS: KVM: Use kmap instead of CKSEG0ADDR()
  MIPS: KVM: Use virt_to_phys() to get commpage PFN
  MIPS: Fix definition of KSEGX() for 64-bit
  KVM: VMX: Add VMCS to CPU's loaded VMCSs before VMPTRLD
  kvm: x86: nVMX: maintain internal copy of current VMCS
  KVM: PPC: Book3S HV: Save/restore TM state in H_CEDE
  KVM: PPC: Book3S HV: Pull out TM state save/restore into separate procedures
  KVM: arm64: vgic-its: Simplify MAPI error handling
  KVM: arm64: vgic-its: Make vgic_its_cmd_handle_mapi similar to other handlers
  KVM: arm64: vgic-its: Turn device_id validation into generic ID validation
  ...
</content>
</entry>
<entry>
<title>Merge tag 'kvm-arm-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into next</title>
<updated>2016-07-22T18:27:26Z</updated>
<author>
<name>Radim Krčmář</name>
</author>
<published>2016-07-22T18:27:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=912902ce78b0d48f717f9128e61fb9bffbd65f86'/>
<id>urn:sha1:912902ce78b0d48f717f9128e61fb9bffbd65f86</id>
<content type='text'>
KVM/ARM changes for Linux 4.8

- GICv3 ITS emulation
- Simpler idmap management that fixes potential TLB conflicts
- Honor the kernel protection in HYP mode
- Removal of the old vgic implementation
</content>
</entry>
<entry>
<title>KVM: arm/arm64: Enable irqchip routing</title>
<updated>2016-07-22T17:52:01Z</updated>
<author>
<name>Eric Auger</name>
</author>
<published>2016-07-22T16:20:41Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=180ae7b1182344ca617d8b5200306b02a6b5075d'/>
<id>urn:sha1:180ae7b1182344ca617d8b5200306b02a6b5075d</id>
<content type='text'>
This patch adds compilation and link against irqchip.

Main motivation behind using irqchip code is to enable MSI
routing code. In the future irqchip routing may also be useful
when targeting multiple irqchips.

Routing standard callbacks now are implemented in vgic-irqfd:
- kvm_set_routing_entry
- kvm_set_irq
- kvm_set_msi

They only are supported with new_vgic code.

Both HAVE_KVM_IRQCHIP and HAVE_KVM_IRQ_ROUTING are defined.
KVM_CAP_IRQ_ROUTING is advertised and KVM_SET_GSI_ROUTING is allowed.

So from now on IRQCHIP routing is enabled and a routing table entry
must exist for irqfd injection to succeed for a given SPI. This patch
builds a default flat irqchip routing table (gsi=irqchip.pin) covering
all the VGIC SPI indexes. This routing table is overwritten by the
first first user-space call to KVM_SET_GSI_ROUTING ioctl.

MSI routing setup is not yet allowed.

Signed-off-by: Eric Auger &lt;eric.auger@redhat.com&gt;
Signed-off-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
</content>
</entry>
<entry>
<title>KVM: arm64: vgic-its: Introduce new KVM ITS device</title>
<updated>2016-07-18T17:14:35Z</updated>
<author>
<name>Andre Przywara</name>
</author>
<published>2016-07-15T11:43:31Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1085fdc68c6097244627a02a56bd2d8fe58a1a9c'/>
<id>urn:sha1:1085fdc68c6097244627a02a56bd2d8fe58a1a9c</id>
<content type='text'>
Introduce a new KVM device that represents an ARM Interrupt Translation
Service (ITS) controller. Since there can be multiple of this per guest,
we can't piggy back on the existing GICv3 distributor device, but create
a new type of KVM device.
On the KVM_CREATE_DEVICE ioctl we allocate and initialize the ITS data
structure and store the pointer in the kvm_device data.
Upon an explicit init ioctl from userland (after having setup the MMIO
address) we register the handlers with the kvm_io_bus framework.
Any reference to an ITS thus has to go via this interface.

Signed-off-by: Andre Przywara &lt;andre.przywara@arm.com&gt;
Reviewed-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
Tested-by: Eric Auger &lt;eric.auger@redhat.com&gt;
Signed-off-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
</content>
</entry>
</feed>
