#
7a380ca3 |
| 16-Oct-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
apic: Open-code timer save/restore
To enable migration between accelerated and non-accelerated APIC models, we will need to handle the timer saving and restoring specially and can no longer rely on
apic: Open-code timer save/restore
To enable migration between accelerated and non-accelerated APIC models, we will need to handle the timer saving and restoring specially and can no longer rely on the automatics of VMSTATE_TIMER. Specifically, accelerated model will not start any QEMUTimer.
This patch therefore factors out the generic bits into apic_next_timer and use a post-load callback to implemented model-specific logic.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
show more ...
|
#
dae01685 |
| 16-Oct-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
apic: Factor out base class for KVM reuse
The KVM in-kernel APIC model will reuse parts of the user space model while providing the same frontend view to guest and most management interfaces.
Facto
apic: Factor out base class for KVM reuse
The KVM in-kernel APIC model will reuse parts of the user space model while providing the same frontend view to guest and most management interfaces.
Factor out an APIC base class to encapsulate those parts that will be shared by user space and KVM model. This class offers callback hooks for init, base/tpr setting, and the external NMI delivery that will be set via APICCommonInfo structure and implemented specifically in the subclasses.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
show more ...
|
#
343270ea |
| 13-Dec-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
apic: Introduce apic_report_irq_delivered
The in-kernel i8259 and IOAPIC backends for KVM will need this, so encapsulate the shared bits.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
|
#
02c09195 |
| 17-Oct-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
apic: Inject external NMI events via LINT1
On real hardware, NMI button events are injected via the LINT1 line of the APICs. E.g. kdump expect this wiring and gets upset if the per-APIC LINT1 mask i
apic: Inject external NMI events via LINT1
On real hardware, NMI button events are injected via the LINT1 line of the APICs. E.g. kdump expect this wiring and gets upset if the per-APIC LINT1 mask is not respected, i.e. if NMIs are injected to VCPUs that should not receive them. Change the APIC emulation code to reflect this.
Based on qemu-kvm patch by Lai Jiangshan.
CC: Lai Jiangshan <laijs@cn.fujitsu.com> Reported-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
show more ...
|
#
ab388a98 |
| 16-Oct-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
apic: Stop timer on reset
All LVTs are masked on reset, so the timer becomes ineffective. Letting it tick nevertheless is harmless, but will at least create a spurious trace event.
Signed-off-by: J
apic: Stop timer on reset
All LVTs are masked on reset, so the timer becomes ineffective. Letting it tick nevertheless is harmless, but will at least create a spurious trace event.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
show more ...
|
#
750ecd44 |
| 27-Nov-2011 |
Avi Kivity <avi@redhat.com> |
sysbus: rename sysbus_init_mmio_region() to sysbus_init_mmio()
Signed-off-by: Avi Kivity <avi@redhat.com>
|
#
d96e1737 |
| 07-Oct-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
pc: Fix and clean up PIC-to-APIC IRQ path
The master PIC is connected to the LINTIN0 of the APICs. As the APIC currently does not track the state of that line, we have to ask the PIC to reinject its
pc: Fix and clean up PIC-to-APIC IRQ path
The master PIC is connected to the LINTIN0 of the APICs. As the APIC currently does not track the state of that line, we have to ask the PIC to reinject its IRQ after the CPU picked up an event from the APIC.
This introduces pic_get_output to read the master PIC IRQ line state without changing it. The APIC uses this function to decide if a PIC IRQ should be reinjected on apic_update_irq. This reflects better how the real hardware works.
The patch fixes some failures of the kvm unit tests apic and eventinj by allowing to enable the proper CPU IRQ deassertion when the guest masks some pending IRQs at PIC level.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|
#
1f6f408c |
| 22-Aug-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
target-i386: Remove unused polarity arguments from APIC API
Polarity of external interrupts needs to be handled in the IOAPIC. Passing it to the APIC is pointless. So remove all these arguments.
Si
target-i386: Remove unused polarity arguments from APIC API
Polarity of external interrupts needs to be handled in the IOAPIC. Passing it to the APIC is pointless. So remove all these arguments.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
show more ...
|
#
312b4234 |
| 15-Aug-2011 |
Avi Kivity <avi@redhat.com> |
apic: convert to memory API
Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
|
#
74475455 |
| 11-Mar-2011 |
Paolo Bonzini <pbonzini@redhat.com> |
change all other clock references to use nanosecond resolution accessors
This was done with:
sed -i 's/qemu_get_clock\>/qemu_get_clock_ns/' \ $(git grep -l 'qemu_get_clock\>' ) sed
change all other clock references to use nanosecond resolution accessors
This was done with:
sed -i 's/qemu_get_clock\>/qemu_get_clock_ns/' \ $(git grep -l 'qemu_get_clock\>' ) sed -i 's/qemu_new_timer\>/qemu_new_timer_ns/' \ $(git grep -l 'qemu_new_timer\>' )
after checking that get_clock and new_timer never occur twice on the same line. There were no missed occurrences; however, even if there had been, they would have been caught by the compiler.
There was exactly one false positive in qemu_run_timers:
- current_time = qemu_get_clock (clock); + current_time = qemu_get_clock_ns (clock);
which is of course not in this patch.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
show more ...
|
#
0fbfbb59 |
| 07-Feb-2011 |
Gleb Natapov <gleb@redhat.com> |
correctly check ppr priority during interrupt injection]
TPR blocks all interrupts in a priority class, so simple "less or equal" check is not enough.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
correctly check ppr priority during interrupt injection]
TPR blocks all interrupts in a priority class, so simple "less or equal" check is not enough.
Signed-off-by: Gleb Natapov <gleb@redhat.com> Reviewed-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
show more ...
|
#
0280b571 |
| 03-Feb-2011 |
Jan Kiszka <jan.kiszka@siemens.com> |
ioapic: Implement EOI handling for level-triggered IRQs
Add the missing EOI broadcast from local APIC to the IOAPICs on completion of level-triggered IRQs. This ensures that a still asserted IRQ sou
ioapic: Implement EOI handling for level-triggered IRQs
Add the missing EOI broadcast from local APIC to the IOAPICs on completion of level-triggered IRQs. This ensures that a still asserted IRQ source properly re-triggers an APIC IRQ.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
show more ...
|
#
f5095c63 |
| 19-Dec-2010 |
Andreas Färber <andreas.faerber@web.de> |
apic: Fix accidental use of SoftFloat uint32 type
softfloat.h's uint32 type has least-width semantics. Surrounding code uses uint32_t, so use uint32_t here, too.
v4: * Summary change.
v3: * Split
apic: Fix accidental use of SoftFloat uint32 type
softfloat.h's uint32 type has least-width semantics. Surrounding code uses uint32_t, so use uint32_t here, too.
v4: * Summary change.
v3: * Split off.
Signed-off-by: Andreas Färber <andreas.faerber@web.de> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|
#
2507c12a |
| 08-Dec-2010 |
Alexander Graf <agraf@suse.de> |
Add endianness as io mem parameter
As stated before, devices can be little, big or native endian. The target endianness is not of their concern, so we need to push things down a level.
This patch a
Add endianness as io mem parameter
As stated before, devices can be little, big or native endian. The target endianness is not of their concern, so we need to push things down a level.
This patch adds a parameter to cpu_register_io_memory that allows a device to choose its endianness. For now, all devices simply choose native endian, because that's the same behavior as before.
Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|
#
b538e53e |
| 05-Nov-2010 |
Alex Williamson <alex.williamson@redhat.com> |
apic: Don't iterate past last used apic
local_apics are allocated sequentially and never removed, so we can stop any iterations that go to MAX_APICS as soon as we hit the first NULL. Looking at a s
apic: Don't iterate past last used apic
local_apics are allocated sequentially and never removed, so we can stop any iterations that go to MAX_APICS as soon as we hit the first NULL. Looking at a small guest running a virtio-net workload with oprofile, this drops apic_get_delivery_bitmask() from #3 in the profile to down in the noise.
Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
show more ...
|
#
d8023f31 |
| 20-Oct-2010 |
Blue Swirl <blauwirbel@gmail.com> |
apic: convert debug printf statements to tracepoints
Replace debug printf statements with tracepoints.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Blue Swirl <blauwi
apic: convert debug printf statements to tracepoints
Replace debug printf statements with tracepoints.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|
#
92a16d7a |
| 19-Jun-2010 |
Blue Swirl <blauwirbel@gmail.com> |
apic: qdev conversion cleanup
Make APICState completely private to apic.c by using DeviceState in external APIs.
Move apic_init() to pc.c.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
|
#
8546b099 |
| 19-Jun-2010 |
Blue Swirl <blauwirbel@gmail.com> |
apic: convert to qdev
Convert to qdev.
Use an opaque CPUState pointer because of missing VMState implementation for CPUState.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
|
#
0e26b7b8 |
| 19-Jun-2010 |
Blue Swirl <blauwirbel@gmail.com> |
apic: avoid using CPUState internals
Move the actual CPUState contents handling to cpu.h and cpuid.c.
Handle CPU reset and set env->halted in pc.c.
Add a function to get the local APIC state of th
apic: avoid using CPUState internals
Move the actual CPUState contents handling to cpu.h and cpuid.c.
Handle CPU reset and set env->halted in pc.c.
Add a function to get the local APIC state of the current CPU for the MMIO.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|
#
4a942cea |
| 19-Jun-2010 |
Blue Swirl <blauwirbel@gmail.com> |
apic: avoid passing CPUState from CPU code
Pass only APICState when accessing APIC from CPU code.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
|
#
cf6d64bf |
| 19-Jun-2010 |
Blue Swirl <blauwirbel@gmail.com> |
apic: avoid passing CPUState from devices
Pass only APICState from pc.c.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
|
#
0a3c5921 |
| 29-May-2010 |
Blue Swirl <blauwirbel@gmail.com> |
apic: improve debugging
Add a DPRINTF macro. Use TARGET_FMT_plx for printing target_phys_addr_t items. Add a separate flag for debugging coalescing interrupts.
Signed-off-by: Blue Swirl <blauwirbel
apic: improve debugging
Add a DPRINTF macro. Use TARGET_FMT_plx for printing target_phys_addr_t items. Add a separate flag for debugging coalescing interrupts.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|
#
aa28b9bf |
| 21-Mar-2010 |
Blue Swirl <blauwirbel@gmail.com> |
Move x86 specific PC declarations to a separate file
x86 definitions (especially CPUState uses) prevent many files from being compiled within libhw.
Move x86 specific declarations (APIC stuff) to a
Move x86 specific PC declarations to a separate file
x86 definitions (especially CPUState uses) prevent many files from being compiled within libhw.
Move x86 specific declarations (APIC stuff) to a separate file.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|
#
ea375f9a |
| 01-Mar-2010 |
Jan Kiszka <jan.kiszka@siemens.com> |
KVM: Rework VCPU state writeback API
This grand cleanup drops all reset and vmsave/load related synchronization points in favor of four(!) generic hooks:
- cpu_synchronize_all_states in qemu_savevm
KVM: Rework VCPU state writeback API
This grand cleanup drops all reset and vmsave/load related synchronization points in favor of four(!) generic hooks:
- cpu_synchronize_all_states in qemu_savevm_state_complete (initial sync from kernel before vmsave) - cpu_synchronize_all_post_init in qemu_loadvm_state (writeback after vmload) - cpu_synchronize_all_post_init in main after machine init - cpu_synchronize_all_post_reset in qemu_system_reset (writeback after system reset)
These writeback points + the existing one of VCPU exec after cpu_synchronize_state map on three levels of writeback:
- KVM_PUT_RUNTIME_STATE (during runtime, other VCPUs continue to run) - KVM_PUT_RESET_STATE (on synchronous system reset, all VCPUs stopped) - KVM_PUT_FULL_STATE (on init or vmload, all VCPUs stopped as well)
This level is passed to the arch-specific VCPU state writing function that will decide which concrete substates need to be written. That way, no writer of load, save or reset functions that interact with in-kernel KVM states will ever have to worry about synchronization again. That also means that a lot of reasons for races, segfaults and deadlocks are eliminated.
cpu_synchronize_state remains untouched, just as Anthony suggested. We continue to need it before reading or writing of VCPU states that are also tracked by in-kernel KVM subsystems.
Consequently, this patch removes many cpu_synchronize_state calls that are now redundant, just like remaining explicit register syncs.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
show more ...
|
#
c1699988 |
| 05-Nov-2009 |
Glauber Costa <glommer@redhat.com> |
v3: don't call reset functions on cpu initialization
There is absolutely no need to call reset functions when initializing devices. Since we are already registering them, calling qemu_system_reset()
v3: don't call reset functions on cpu initialization
There is absolutely no need to call reset functions when initializing devices. Since we are already registering them, calling qemu_system_reset() should suffice. Actually, it is what happens when we reboot the machine, and using the same process instead of a special case semantics will even allow us to find bugs easier.
Furthermore, the fact that we initialize things like the cpu quite early, leads to the need to introduce synchronization stuff like qemu_system_cond. This patch removes it entirely. All we need to do is call qemu_system_reset() only when we're already sure the system is up and running
I tested it with qemu (with and without io-thread) and qemu-kvm, and it seems to be doing okay - although qemu-kvm uses a slightly different patch.
[ v2: user mode still needs cpu_reset, so put it in ifdef. ] [ v3: leave qemu_system_cond for now. ]
Signed-off-by: Glauber Costa <glommer@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
show more ...
|