gem5  v20.1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Functions
KVM Interrupt handling.

These methods control interrupt delivery to the guest system. More...

Functions

void BaseKvmCPU::kvmNonMaskableInterrupt ()
 Send a non-maskable interrupt to the guest. More...
 
void BaseKvmCPU::kvmInterrupt (const struct kvm_interrupt &interrupt)
 Send a normal interrupt to the guest. More...
 
void KvmVM::createIRQChip ()
 Create an in-kernel interrupt controller. More...
 
void KvmVM::setIRQLine (uint32_t irq, bool high)
 Set the status of an IRQ line using KVM_IRQ_LINE. More...
 
bool KvmVM::hasKernelIRQChip () const
 Is in-kernel IRQ chip emulation enabled? More...
 
void KvmVM::enableKernelIRQChip ()
 Tell the VM and VCPUs to use an in-kernel IRQ chip for interrupt delivery. More...
 

Detailed Description

These methods control interrupt delivery to the guest system.

Function Documentation

◆ createIRQChip()

void KvmVM::createIRQChip ( )

Create an in-kernel interrupt controller.

Note
This functionality depends on Kvm::capIRQChip().

Definition at line 486 of file vm.cc.

References KvmVM::_hasKernelIRQChip, KvmVM::ioctl(), panic, and warn.

◆ enableKernelIRQChip()

void KvmVM::enableKernelIRQChip ( )
inline

Tell the VM and VCPUs to use an in-kernel IRQ chip for interrupt delivery.

Note
This is set automatically if the IRQ chip is created using the KvmVM::createIRQChip() API.

Definition at line 360 of file vm.hh.

References KvmVM::_hasKernelIRQChip.

Referenced by KvmKernelGicV2::KvmKernelGicV2().

◆ hasKernelIRQChip()

bool KvmVM::hasKernelIRQChip ( ) const
inline

Is in-kernel IRQ chip emulation enabled?

Definition at line 351 of file vm.hh.

References KvmVM::_hasKernelIRQChip.

Referenced by BaseArmKvmCPU::kvmRun(), and BaseArmKvmCPU::startup().

◆ kvmInterrupt()

void BaseKvmCPU::kvmInterrupt ( const struct kvm_interrupt &  interrupt)
protected

Send a normal interrupt to the guest.

Note
Make sure that ready_for_interrupt_injection in kvm_run is set prior to calling this function. If not, an interrupt window must be requested by setting request_interrupt_window in kvm_run to 1 and restarting the guest.
Parameters
interruptStructure describing the interrupt to send

Definition at line 790 of file base.cc.

References BaseKvmCPU::ioctl(), BaseKvmCPU::StatGroup::numInterrupts, panic, and BaseKvmCPU::stats.

Referenced by X86KvmCPU::deliverInterrupts().

◆ kvmNonMaskableInterrupt()

void BaseKvmCPU::kvmNonMaskableInterrupt ( )
protected

Send a non-maskable interrupt to the guest.

Note
The presence of this call depends on Kvm::capUserNMI().

Definition at line 782 of file base.cc.

References BaseKvmCPU::ioctl(), BaseKvmCPU::StatGroup::numInterrupts, panic, and BaseKvmCPU::stats.

Referenced by X86KvmCPU::deliverInterrupts().

◆ setIRQLine()

void KvmVM::setIRQLine ( uint32_t  irq,
bool  high 
)

Set the status of an IRQ line using KVM_IRQ_LINE.

Note
This ioctl is usually only used if the interrupt controller is emulated by the kernel (i.e., after calling createIRQChip()). Some architectures (e.g., ARM) use it instead of BaseKvmCPU::kvmInterrupt().
Parameters
irqInterrupt number
highLine level (true for high, false for low)

Definition at line 501 of file vm.cc.

References KvmVM::ioctl(), ArmISA::irq, and panic.

Referenced by BaseArmKvmCPU::kvmRun(), ArmKvmCPU::kvmRun(), and KvmKernelGicV2::setIntState().


Generated on Wed Sep 30 2020 14:02:19 for gem5 by doxygen 1.8.17