1. 12 1月, 2015 1 次提交
  2. 07 1月, 2015 1 次提交
  3. 05 11月, 2014 1 次提交
  4. 08 9月, 2014 6 次提交
    • A
      PPC: KVM: Use vm check_extension for pv hcall · 6fd33a75
      Alexander Graf 提交于
      To find out whether we support the KVM hypercall interface we need to ask KVM
      on the VM level rather than the global KVM level, because Book3S HV KVM does
      not support it and we play conservative when both HV and PR are loaded.
      
      So instead, use the VM helper that falls back to global KVM enumeration. That
      should cover all cases.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      6fd33a75
    • B
      ppc: Add hw breakpoint watchpoint support · 88365d17
      Bharat Bhushan 提交于
      This patch adds hardware breakpoint and hardware watchpoint support
      for ppc.
      
      On BOOKE architecture we cannot share debug resources between QEMU
      and guest because:
          When QEMU is using debug resources then debug exception must
          be always enabled. To achieve this we set MSR_DE and also set
          MSRP_DEP so guest cannot change MSR_DE.
      
          When emulating debug resource for guest we want guest
          to control MSR_DE (enable/disable debug interrupt on need).
      
          So above mentioned two configuration cannot be supported
          at the same time. So the result is that we cannot share
          debug resources between QEMU and Guest on BOOKE architecture.
      
      In the current design QEMU gets priority over guest,
      this means that if QEMU is using debug resources then guest
      cannot use them and if guest is using debug resource then
      qemu can overwrite them.
      
      When QEMU is not able to handle debug exception then we inject program
      exception to guest. Yes program exception NOT debug exception and the
      reason is:
       1) QEMU and guest not sharing debug resources
       2) For software breakpoint QEMU uses a ehpriv-1 instruction;
      
       So there cannot be any reason that we are in qemu with exit reason
       KVM_EXIT_DEBUG  for guest set debug exception, only possibility is
       guest executed ehpriv-1 privilege instruction and that's why we are
       injecting program exception.
      Signed-off-by: NBharat Bhushan <Bharat.Bhushan@freescale.com>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      88365d17
    • B
      ppc: Add software breakpoint support · 8a0548f9
      Bharat Bhushan 提交于
      This patch allow insert/remove software breakpoint.
      
      When QEMU is not able to handle debug exception then we inject
      program exception to guest because for software breakpoint QEMU
      uses a ehpriv-1 instruction;
      So there cannot be any reason that we are in qemu with exit reason
      KVM_EXIT_DEBUG  for guest set debug exception, only possibility is
      guest executed ehpriv-1 privilege instruction and that's why we are
      injecting program exception.
      Signed-off-by: NBharat Bhushan <Bharat.Bhushan@freescale.com>
      [agraf: make deflect comment booke/book3s agnostic]
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      8a0548f9
    • B
      ppc: synchronize excp_vectors for injecting exception · c371c2e3
      Bharat Bhushan 提交于
      This patch synchronizes env->excp_vectors[] with env->iovr[].
      This is required for using the existing interrupt injection mechanism
      for kvm.
      Signed-off-by: NBharat Bhushan <Bharat.Bhushan@freescale.com>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      c371c2e3
    • B
      ppc: debug stub: Get trap instruction opcode from KVM · 3c902d44
      Bharat Bhushan 提交于
      Get trap instruction opcode from KVM and this opcode will
      be used for setting software breakpoint in following patch
      Signed-off-by: NBharat Bhushan <Bharat.Bhushan@freescale.com>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      3c902d44
    • N
      spapr: add uuid/host details to device tree · ef951443
      Nikunj A Dadhania 提交于
      Useful for identifying the guest/host uniquely within the
      guest. Adding following properties to the guest root node.
      
      vm,uuid - uuid of the guest
      host-model - Host model number
      host-serial - Host machine serial number
      hypervisor type - Tells its "kvm"
      Signed-off-by: NNikunj A Dadhania <nikunj@linux.vnet.ibm.com>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      ef951443
  5. 15 7月, 2014 1 次提交
    • A
      spapr: Move RMA memory region registration code · 658fa66b
      Alexey Kardashevskiy 提交于
      PPC970 does not support VRMA (virtual RMA) so real memory required
      for SLOF to execute must be allocated by the KVM_ALLOCATE_RMA ioctl.
      Later this memory is used as a part of the guest RAM area.
      The RMA allocating code also registers a memory region for this piece
      of RAM.
      
      We are going to simplify memory regions layout: RMA memory region
      will be a subregion in the RAM memory region, both starting from zero.
      This way we will not have to take care of start address alignment for
      the piece of RAM next to the RMA.
      
      This moves memory region business closer to the RAM memory region
      creation/allocation code.
      
      As this is a mechanical patch, no change in behaviour is expected.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      [agraf: fix compilation on non-kvm systems]
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      658fa66b
  6. 27 6月, 2014 1 次提交
    • A
      spapr_iommu: Make in-kernel TCE table optional · 9bb62a07
      Alexey Kardashevskiy 提交于
      POWER KVM supports an KVM_CAP_SPAPR_TCE capability which allows allocating
      TCE tables in the host kernel memory and handle H_PUT_TCE requests
      targeted to specific LIOBN (logical bus number) right in the host without
      switching to QEMU. At the moment this is used for emulated devices only
      and the handler only puts TCE to the table. If the in-kernel H_PUT_TCE
      handler finds a LIOBN and corresponding table, it will put a TCE to
      the table and complete hypercall execution. The user space will not be
      notified.
      
      Upcoming VFIO support is going to use the same sPAPRTCETable device class
      so KVM_CAP_SPAPR_TCE is going to be used as well. That means that TCE
      tables for VFIO are going to be allocated in the host as well.
      However VFIO operates with real IOMMU tables and simple copying of
      a TCE to the real hardware TCE table will not work as guest physical
      to host physical address translation is requited.
      
      So until the host kernel gets VFIO support for H_PUT_TCE, we better not
      to register VFIO's TCE in the host.
      
      This adds a place holder for KVM_CAP_SPAPR_TCE_VFIO capability. It is not
      in upstream yet and being discussed so now it is always false which means
      that in-kernel VFIO acceleration is not supported.
      
      This adds a bool @vfio_accel flag to the sPAPRTCETable device telling
      that sPAPRTCETable should not try allocating TCE table in the host kernel
      for VFIO. The flag is false now as at the moment there is no VFIO.
      
      This adds an vfio_accel parameter to spapr_tce_new_table(), the semantic
      is the same. Since there is only emulated PCI and VIO now, the flag is set
      to false. Upcoming VFIO support will set it to true.
      
      This is a preparation patch so no change in behaviour is expected
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      9bb62a07
  7. 16 6月, 2014 9 次提交
    • A
      PPC: KVM: Make pv hcall endian agnostic · d13fc32e
      Alexander Graf 提交于
      There were a few revisions of the Linux kernel that incorrectly swapped
      the hcall instructions when they saw ePAPR compliant hypercalls.
      
      We already have fixups for those in place when running with PR KVM, but
      HV KVM and systems that don't implement hypercalls at all are still broken
      because they fall back to the QEMU implementation of fallback hypercalls.
      
      So let's make the fallback hypercall instruction path endian agnostic. This
      only really works well for 64bit guests, but I don't think there are any 32bit
      systems left that don't implement real pv hcall support, so we'll never get
      into this code path.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      d13fc32e
    • A
      KVM: target-ppc: Enable TM state migration · 80b3f79b
      Alexey Kardashevskiy 提交于
      This adds migration support for registers saved before Transactional
      Memory (TM) transaction started.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Reviewed-by: NTom Musta <tommusta@gmail.com>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      80b3f79b
    • A
      KVM: PPC: Expose fixup hcall capability · 87a91de6
      Alexander Graf 提交于
      New kvm versions expose a PPC_FIXUP_HCALL capability. Make it visible to
      machine code so we can take decisions based on it.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      87a91de6
    • A
      spapr_iommu: Get rid of window_size in sPAPRTCETable · 523e7b8a
      Alexey Kardashevskiy 提交于
      This removes window_size as it is basically a copy of nb_table
      shifted by SPAPR_TCE_PAGE_SHIFT. As new dynamic DMA windows are
      going to support windows as big as the entire RAM and this number
      will be bigger that 32 capacity, we will have to do something
      about @window_size anyway and removal seems to be the right way to go.
      
      This removes dma_window_start/dma_window_size from sPAPRPHBState as
      they are no longer used.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      523e7b8a
    • A
      spapr_iommu: Enable multiple TCE requests · da95324e
      Alexey Kardashevskiy 提交于
      Currently only single TCE entry per request is supported (H_PUT_TCE).
      However PAPR+ specification allows multiple entry requests such as
      H_PUT_TCE_INDIRECT and H_STUFF_TCE. Having less transitions to the host
      kernel via ioctls, support of these calls can accelerate IOMMU operations.
      
      This implements H_STUFF_TCE and H_PUT_TCE_INDIRECT.
      
      This advertises "multi-tce" capability to the guest if the host kernel
      supports it (KVM_CAP_SPAPR_MULTITCE) or guest is running in TCG mode.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      da95324e
    • A
      KVM: PPC: Enable compatibility mode · 6db5bb0f
      Alexey Kardashevskiy 提交于
      The host kernel implements a KVM_REG_PPC_ARCH_COMPAT register which
      this uses to enable a compatibility mode if any chosen.
      
      This sets the KVM_REG_PPC_ARCH_COMPAT register in KVM. ppc_set_compat()
      signals the caller if the mode cannot be enabled by the host kernel.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      [agraf: fix TCG compat setting]
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      6db5bb0f
    • A
      spapr: Add support for time base offset migration · 98a8b524
      Alexey Kardashevskiy 提交于
      This allows guests to have a different timebase origin from the host.
      
      This is needed for migration, where a guest can migrate from one host
      to another and the two hosts might have a different timebase origin.
      However, the timebase seen by the guest must not go backwards, and
      should go forwards only by a small amount corresponding to the time
      taken for the migration.
      
      This is only supported for recent POWER hardware which has the TBU40
      (timebase upper 40 bits) register. That includes POWER6, 7, 8 but not
      970.
      
      This adds kvm_access_one_reg() to access a special register which is not
      in env->spr. This requires kvm_set_one_reg/kvm_get_one_reg patch.
      
      The feature must be present in the host kernel.
      
      This bumps vmstate_spapr::version_id and enables new vmstate_ppc_timebase
      only for it. Since the vmstate_spapr::minimum_version_id remains
      unchanged, migration from older QEMU is supported but without
      vmstate_ppc_timebase.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      98a8b524
    • A
      KVM: PPC: Don't secretly add 1T segment feature to CPU · 08215d8f
      Alexander Graf 提交于
      When we select a CPU type that does not support 1TB segments, we should
      not expose 1TB just because KVM supports 1TB segments. User configuration
      always wins over feature availability.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      08215d8f
    • A
      target-ppc: Create versionless CPU class per family if KVM · 5b79b1ca
      Alexey Kardashevskiy 提交于
      At the moment generic version-less CPUs are supported via hardcoded aliases.
      For example, POWER7 is an alias for POWER7_v2.1. So when QEMU is started
      with -cpu POWER7, the POWER7_v2.1 class instance is created.
      
      This approach works for TCG and KVMs other than HV KVM. HV KVM cannot emulate
      PVR value so the guest always sees the real PVR. HV KVM will not allow setting
      PVR other that the host PVR because of that (the kernel patch for it is on
      its way). So in most cases it is impossible to run QEMU with -cpu POWER7
      unless the host PVR is exactly the same as the one from the alias (which
      is now POWER7_v2.3). It was decided that under HV KVM QEMU should use
      -cpu host.
      
      Using "host" CPU type creates a problem for management tools such as libvirt
      because they want to know in advance if the destination guest can possibly
      run on the destination. Since the "host" type is really not a type and will
      always work with any KVM, there is no way for libvirt to know if the migration
      will success.
      
      This registers additional CPU class derived from the host CPU family.
      The name for it is taken from @desc field of the CPU family class.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      5b79b1ca
  8. 13 5月, 2014 1 次提交
    • P
      kvm: reset state from the CPU's reset method · 50a2c6e5
      Paolo Bonzini 提交于
      Now that we have a CPU object with a reset method, it is better to
      keep the KVM reset close to the CPU reset.  Using qemu_register_reset
      as we do now keeps them far apart.
      
      With this patch, PPC no longer calls the kvm_arch_ function, so
      it can get removed there.  Other arches call it from their CPU
      reset handler, and the function gets an ARMCPU/X86CPU/S390CPU.
      
      Note that ARM- and s390-specific functions are called kvm_arm_*
      and kvm_s390_*, while x86-specific functions are called kvm_arch_*.
      That follows the convention used by the different architectures.
      Changing that is the topic of a separate patch.
      Reviewed-by: NGleb Natapov <gnatapov@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      50a2c6e5
  9. 30 4月, 2014 1 次提交
  10. 14 3月, 2014 2 次提交
  11. 05 3月, 2014 7 次提交
  12. 14 2月, 2014 1 次提交
  13. 20 12月, 2013 2 次提交
    • A
      powerpc: add PVR mask support · 3bc9ccc0
      Alexey Kardashevskiy 提交于
      IBM POWERPC processors encode PVR as a CPU family in higher 16 bits and
      a CPU version in lower 16 bits. Since there is no significant change
      in behavior between versions, there is no point to add every single CPU
      version in QEMU's CPU list. Also, new CPU versions of already supported
      CPU won't break the existing code.
      
      This adds PVR value/mask support for KVM, i.e. for -cpu host option.
      
      As CPU family class name for POWER7 is "POWER7-family", there is no need
      to touch aliases.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Reviewed-by: NAndreas Färber <afaerber@suse.de>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      3bc9ccc0
    • G
      target-ppc: add stubs for KVM breakpoints · c65f9a07
      Greg Kurz 提交于
      The latest update to v3.13-rc3 (bf63839f) breaks the
      ppc build with KVM:
      
      kvm-all.o: In function `kvm_update_guest_debug':
      kvm-all.c:1910: undefined reference to `kvm_arch_update_guest_debug'
      kvm-all.o: In function `kvm_insert_breakpoint':
      kvm-all.c:1937: undefined reference to `kvm_arch_insert_sw_breakpoint'
      kvm-all.c:1945: undefined reference to `kvm_arch_insert_hw_breakpoint'
      kvm-all.o: In function `kvm_remove_breakpoint':
      kvm-all.c:1977: undefined reference to `kvm_arch_remove_sw_breakpoint'
      kvm-all.c:1985: undefined reference to `kvm_arch_remove_hw_breakpoint'
      kvm-all.o: In function `kvm_remove_all_breakpoints':
      kvm-all.c:2009: undefined reference to `kvm_arch_remove_sw_breakpoint'
      kvm-all.c:2006: undefined reference to `kvm_arch_remove_sw_breakpoint'
      kvm-all.c:2017: undefined reference to `kvm_arch_remove_all_hw_breakpoints'
      
      We need stubs until something gets implemented.
      Signed-off-by: NGreg Kurz <gkurz@linux.vnet.ibm.com>
      Reviewed-by: NAlexander Graf <agraf@suse.de>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      c65f9a07
  14. 26 10月, 2013 3 次提交
  15. 23 8月, 2013 1 次提交
  16. 30 7月, 2013 1 次提交
  17. 29 7月, 2013 1 次提交