qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] 000084: KVM: Fix GSI number space limit


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] 000084: KVM: Fix GSI number space limit
Date: Fri, 20 Jun 2014 12:30:05 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: 00008418aa22700f6c49e794e79f53aeb157d10f
      
https://github.com/qemu/qemu/commit/00008418aa22700f6c49e794e79f53aeb157d10f
  Author: Alexander Graf <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M kvm-all.c

  Log Message:
  -----------
  KVM: Fix GSI number space limit

KVM tells us the number of GSIs it can handle inside the kernel. That value is
basically KVM_MAX_IRQ_ROUTES. However when we try to set the GSI mapping table,
it checks for

    r = -EINVAL;
    if (routing.nr >= KVM_MAX_IRQ_ROUTES)
  goto out;

erroring out even when we're only using all of the GSIs. To make sure we never
hit that limit, let's reduce the number of GSIs we get from KVM by one.

Cc: address@hidden
Signed-off-by: Alexander Graf <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 4b69c7e265a2c2fd1120c431c5d8d0809d4ec10a
      
https://github.com/qemu/qemu/commit/4b69c7e265a2c2fd1120c431c5d8d0809d4ec10a
  Author: James Hogan <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M hw/mips/cputimer.c
    M target-mips/translate.c

  Log Message:
  -----------
  target-mips: Reset CPU timer consistently

The MIPS CPU timer (CP0 Count/Compare registers & QEMU timer) is
reset at machine initialisation, including starting the timeout. Both
registers however are placed before mvp in CPUMIPSState so they will
both be zeroed on reset by the memset in mips_cpu_reset() including soon
after init. This doesn't take into account that the timer may be
running, in which case env->CP0_Count will represent the delta against
the VM clock and the timeout will need updating.

At init time (cpu_mips_clock_init()), lets only create the timer.
Setting Count = 1 and starting the timer (cpu_mips_store_count()) can be
done at reset time from cpu_state_reset(), which is after the memset.
There is also no need to set CP0_Compare = 0 as that is already handled
by the memset.

Note that a reset occurs from mips_cpu_realizefn() which is before the
machine init callback has had a chance to set up the CPU interrupts and
the CPU timer, so env->timer will be NULL. This case is handled
explicitly in cpu_mips_store_count(), treating the timer as disabled
(which will also be the right thing to do when KVM support is added).

Reported-by: Paolo Bonzini <address@hidden>
Signed-off-by: James Hogan <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 353a243e22fae2b993ab7f2d123c2b81013b3c5d
      
https://github.com/qemu/qemu/commit/353a243e22fae2b993ab7f2d123c2b81013b3c5d
  Author: Sanjay Lal <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M hw/mips/cputimer.c

  Log Message:
  -----------
  hw/mips/cputimer: Don't start periodic timer in KVM mode

Compare/Count timer interrupts are handled in-kernel for KVM. Therefore
don't bother creating the timer at init time if KVM is enabled. This
will conveniently avoid attempts to set the timeout when
cpu_mips_store_count() is called at reset with KVM enabled, treating the
timer as stopped so that CP0_Count is modified directly.

Signed-off-by: Sanjay Lal <address@hidden>
address@hidden: Update after "target-mips: Reset CPU timer
consistently" which moves timer start to reset time]
Signed-off-by: James Hogan <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 253fffe725e8ecc0147a4c6f0893493c1393f0f7
      
https://github.com/qemu/qemu/commit/253fffe725e8ecc0147a4c6f0893493c1393f0f7
  Author: Sanjay Lal <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M hw/mips/addr.c
    M include/hw/mips/cpudevs.h

  Log Message:
  -----------
  hw/mips: Add API to convert KVM guest KSEG0 <-> GPA

Add API for converting physical addresses to KVM guest KSEG0 addresses,
and fix the existing API for converting KSEG0 addresses to physical
addresses to work in the KVM case. Both have the same sized KSEG0, so
it's just a case of fixing the mask.

In KVM trap and emulate mode both the guest kernel and guest userspace
execute in useg:
    Guest User address space:   0x00000000..0x3fffffff
    Guest Kernel Unmapped:      0x40000000..0x5fffffff
    Guest Kernel Mapped:        0x60000000..0x7fffffff

Signed-off-by: Sanjay Lal <address@hidden>
Signed-off-by: James Hogan <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 22010ce7f23236b970b40cc5c0cf0c7fe0588e2f
      
https://github.com/qemu/qemu/commit/22010ce7f23236b970b40cc5c0cf0c7fe0588e2f
  Author: James Hogan <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M target-mips/helper.c

  Log Message:
  -----------
  target-mips: get_physical_address: Add defines for segment bases

Add preprocessor definitions for 32bit segment bases for use in
get_physical_address(). These will also be taken advantage of in the
next patch which adds KVM awareness.

Signed-off-by: James Hogan <address@hidden>
Reviewed-by: Aurelien Jarno <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 4ef37e6907eaeeec3e0425b9e51a4b3918c194c7
      
https://github.com/qemu/qemu/commit/4ef37e6907eaeeec3e0425b9e51a4b3918c194c7
  Author: James Hogan <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M target-mips/helper.c

  Log Message:
  -----------
  target-mips: get_physical_address: Add KVM awareness

MIPS KVM trap & emulate mode (which is currently the only supported
mode) has to add an extra kseg0/kseg1 at 0x40000000 and an extra
kseg2/kseg3 at 0x60000000. Take this into account in
get_physical_address() so that debug memory access works.

This is done by translating the address to a standard kseg0 or kseg2
address before doing the normal address translation. The real virtual
address is still used for TLB lookups.

Signed-off-by: James Hogan <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: aed6efb90cc43faf45f1e40425646c55d37a340f
      
https://github.com/qemu/qemu/commit/aed6efb90cc43faf45f1e40425646c55d37a340f
  Author: James Hogan <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M include/sysemu/kvm.h
    M kvm-all.c

  Log Message:
  -----------
  kvm: Allow arch to set sigmask length

MIPS/Linux is unusual in having 128 signals rather than just 64 like
most other architectures. This means its sigmask is 16 bytes instead of
8, so allow arches to override the sigmask->len value passed to the
KVM_SET_SIGNAL_MASK ioctl in kvm_set_signal_mask() by calling
kvm_set_sigmask_len() from kvm_arch_init(). Otherwise default to 8
bytes.

Signed-off-by: James Hogan <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Cc: Sanjay Lal <address@hidden>
Cc: Gleb Natapov <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Cc: Peter Maydell <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: e2132e0bba7751be7af7e3ebcd6f39e77f76d05e
      
https://github.com/qemu/qemu/commit/e2132e0bba7751be7af7e3ebcd6f39e77f76d05e
  Author: Sanjay Lal <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    A target-mips/kvm.c
    A target-mips/kvm_mips.h

  Log Message:
  -----------
  target-mips: kvm: Add main KVM support for MIPS

Implement the main KVM arch API for MIPS.

Signed-off-by: Sanjay Lal <address@hidden>
Signed-off-by: James Hogan <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Cc: Gleb Natapov <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Cc: Andreas Färber <address@hidden>
Cc: Peter Maydell <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 14c03ab97594d0700d73aedc254579a57b8aeec1
      
https://github.com/qemu/qemu/commit/14c03ab97594d0700d73aedc254579a57b8aeec1
  Author: James Hogan <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M target-mips/cpu.c

  Log Message:
  -----------
  target-mips: Call kvm_mips_reset_vcpu() from mips_cpu_reset()

When KVM is enabled call kvm_mips_reset_vcpu() from mips_cpu_reset() as
done for other targets since commit 50a2c6e55fa2 (kvm: reset state from
the CPU's reset method).

Signed-off-by: James Hogan <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Cc: Gleb Natapov <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: b1bd8b28ccad3a9813466895794216a02326876c
      
https://github.com/qemu/qemu/commit/b1bd8b28ccad3a9813466895794216a02326876c
  Author: Sanjay Lal <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M hw/mips/mips_int.c

  Log Message:
  -----------
  hw/mips: In KVM mode, inject IRQ2 (I/O) interrupts via ioctls

COP0 emulation is in-kernel for KVM, so inject IRQ2 (I/O) interrupts via
ioctls.

Signed-off-by: Sanjay Lal <address@hidden>
Signed-off-by: James Hogan <address@hidden>
Reviewed-by: Aurelien Jarno <address@hidden>
Reviewed-by: Andreas Färber <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: b03118114d461a681eaf5fc1d07e99e228d45260
      
https://github.com/qemu/qemu/commit/b03118114d461a681eaf5fc1d07e99e228d45260
  Author: James Hogan <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M hw/mips/mips_malta.c

  Log Message:
  -----------
  hw/mips: malta: Add KVM support

In KVM mode the bootrom is loaded and executed from the last 1MB of
DRAM.

Based on "[PATCH 12/12] KVM/MIPS: General KVM support and support for
SMP Guests" by Sanjay Lal <address@hidden>.

Signed-off-by: James Hogan <address@hidden>
Reviewed-by: Aurelien Jarno <address@hidden>
Cc: Peter Maydell <address@hidden>
Cc: Sanjay Lal <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 222e7d11e7c35de5d7e4125da9a8f8dc937b6438
      
https://github.com/qemu/qemu/commit/222e7d11e7c35de5d7e4125da9a8f8dc937b6438
  Author: Sanjay Lal <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M configure
    M target-mips/Makefile.objs

  Log Message:
  -----------
  target-mips: Enable KVM support in build system

Enable KVM support for MIPS in the build system.

Signed-off-by: Sanjay Lal <address@hidden>
Signed-off-by: James Hogan <address@hidden>
Reviewed-by: Aurelien Jarno <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: a31896c411b096dfccee69c338aebb871d4fb80e
      
https://github.com/qemu/qemu/commit/a31896c411b096dfccee69c338aebb871d4fb80e
  Author: James Hogan <address@hidden>
  Date:   2014-06-18 (Wed, 18 Jun 2014)

  Changed paths:
    M MAINTAINERS

  Log Message:
  -----------
  MAINTAINERS: Add entry for MIPS KVM

Add MAINTAINERS entry for MIPS KVM.

Signed-off-by: James Hogan <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: 3c5d0be553b18d47361ac3a701e2bff86b8256b0
      
https://github.com/qemu/qemu/commit/3c5d0be553b18d47361ac3a701e2bff86b8256b0
  Author: James Hogan <address@hidden>
  Date:   2014-06-20 (Fri, 20 Jun 2014)

  Changed paths:
    M hw/mips/mips_malta.c

  Log Message:
  -----------
  hw/mips: malta: Don't boot from flash with KVM T&E

In KVM trap & emulate (T&E) mode the flash reset region at 0xbfc00000
isn't executable, which is why the minimal kernel bootloader is loaded
and executed from the last 1MB of DRAM instead.

Therefore if no kernel is provided on the command line and KVM is
enabled, exit with an error since booting from flash will fail.

Reported-by: Aurelien Jarno <address@hidden>
Signed-off-by: James Hogan <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>


  Commit: d70a319b8d6f10ad895f05bdd5160cdb42f5058a
      
https://github.com/qemu/qemu/commit/d70a319b8d6f10ad895f05bdd5160cdb42f5058a
  Author: Peter Maydell <address@hidden>
  Date:   2014-06-20 (Fri, 20 Jun 2014)

  Changed paths:
    M MAINTAINERS
    M configure
    M hw/mips/addr.c
    M hw/mips/cputimer.c
    M hw/mips/mips_int.c
    M hw/mips/mips_malta.c
    M include/hw/mips/cpudevs.h
    M include/sysemu/kvm.h
    M kvm-all.c
    M target-mips/Makefile.objs
    M target-mips/cpu.c
    M target-mips/helper.c
    A target-mips/kvm.c
    A target-mips/kvm_mips.h
    M target-mips/translate.c

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/kvm/uq/master' into staging

* remotes/kvm/uq/master:
  hw/mips: malta: Don't boot from flash with KVM T&E
  MAINTAINERS: Add entry for MIPS KVM
  target-mips: Enable KVM support in build system
  hw/mips: malta: Add KVM support
  hw/mips: In KVM mode, inject IRQ2 (I/O) interrupts via ioctls
  target-mips: Call kvm_mips_reset_vcpu() from mips_cpu_reset()
  target-mips: kvm: Add main KVM support for MIPS
  kvm: Allow arch to set sigmask length
  target-mips: get_physical_address: Add KVM awareness
  target-mips: get_physical_address: Add defines for segment bases
  hw/mips: Add API to convert KVM guest KSEG0 <-> GPA
  hw/mips/cputimer: Don't start periodic timer in KVM mode
  target-mips: Reset CPU timer consistently
  KVM: Fix GSI number space limit

Signed-off-by: Peter Maydell <address@hidden>


Compare: https://github.com/qemu/qemu/compare/0a99aae5fab5...d70a319b8d6f

reply via email to

[Prev in Thread] Current Thread [Next in Thread]