1. 05 2月, 2013 4 次提交
  2. 30 1月, 2013 2 次提交
    • C
      s390/kvm: Fix instruction decoding · 0c29b229
      Christian Borntraeger 提交于
      Instructions with long displacement have a signed displacement.
      Currently the sign bit is interpreted as 2^20: Lets fix it by doing the
      sign extension from 20bit to 32bit and then use it as a signed variable
      in the addition (see kvm_s390_get_base_disp_rsy).
      
      Furthermore, there are lots of "int" in that code. This is problematic,
      because shifting on a signed integer is undefined/implementation defined
      if the bit value happens to be negative.
      Fortunately the promotion rules will make the right hand side unsigned
      anyway, so there is no real problem right now.
      Let's convert them anyway to unsigned where appropriate to avoid
      problems if the code is changed or copy/pasted later on.
      Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Reviewed-by: NCornelia Huck <cornelia.huck@de.ibm.com>
      Signed-off-by: NGleb Natapov <gleb@redhat.com>
      0c29b229
    • C
      s390/kvm: Fix store status for ACRS/FPRS · 15bc8d84
      Christian Borntraeger 提交于
      On store status we need to copy the current state of registers
      into a save area. Currently we might save stale versions:
      The sie state descriptor doesnt have fields for guest ACRS,FPRS,
      those registers are simply stored in the host registers. The host
      program must copy these away if needed. We do that in vcpu_put/load.
      
      If we now do a store status in KVM code between vcpu_put/load, the
      saved values are not up-to-date. Lets collect the ACRS/FPRS before
      saving them.
      
      This also fixes some strange problems with hotplug and virtio-ccw,
      since the low level machine check handler (on hotplug a machine check
      will happen) will revalidate all registers with the content of the
      save area.
      Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      CC: stable@vger.kernel.org
      Signed-off-by: NGleb Natapov <gleb@redhat.com>
      15bc8d84
  3. 29 1月, 2013 3 次提交
  4. 27 1月, 2013 1 次提交
  5. 24 1月, 2013 17 次提交
  6. 22 1月, 2013 3 次提交
  7. 17 1月, 2013 1 次提交
  8. 14 1月, 2013 7 次提交
  9. 11 1月, 2013 2 次提交
    • X
      KVM: MMU: fix infinite fault access retry · 7751babd
      Xiao Guangrong 提交于
      We have two issues in current code:
      - if target gfn is used as its page table, guest will refault then kvm will use
        small page size to map it. We need two #PF to fix its shadow page table
      
      - sometimes, say a exception is triggered during vm-exit caused by #PF
        (see handle_exception() in vmx.c), we remove all the shadow pages shadowed
        by the target gfn before go into page fault path, it will cause infinite
        loop:
        delete shadow pages shadowed by the gfn -> try to use large page size to map
        the gfn -> retry the access ->...
      
      To fix these, we can adjust page size early if the target gfn is used as page
      table
      Signed-off-by: NXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
      Signed-off-by: NMarcelo Tosatti <mtosatti@redhat.com>
      7751babd
    • X
      KVM: MMU: fix Dirty bit missed if CR0.WP = 0 · c2288505
      Xiao Guangrong 提交于
      If the write-fault access is from supervisor and CR0.WP is not set on the
      vcpu, kvm will fix it by adjusting pte access - it sets the W bit on pte
      and clears U bit. This is the chance that kvm can change pte access from
      readonly to writable
      
      Unfortunately, the pte access is the access of 'direct' shadow page table,
      means direct sp.role.access = pte_access, then we will create a writable
      spte entry on the readonly shadow page table. It will cause Dirty bit is
      not tracked when two guest ptes point to the same large page. Note, it
      does not have other impact except Dirty bit since cr0.wp is encoded into
      sp.role
      
      It can be fixed by adjusting pte access before establishing shadow page
      table. Also, after that, no mmu specified code exists in the common function
      and drop two parameters in set_spte
      Signed-off-by: NXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
      Signed-off-by: NMarcelo Tosatti <mtosatti@redhat.com>
      c2288505