forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move _irqfd_resampler and _irqfd struct declarations in a new public header: kvm_irqfd.h. They are respectively renamed into kvm_kernel_irqfd_resampler and kvm_kernel_irqfd. Those datatypes will be used by architecture specific code, in the context of IRQ bypass manager integration. Signed-off-by: Eric Auger <eric.auger@linaro.org> Signed-off-by: Feng Wu <feng.wu@intel.com> Reviewed-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
- Loading branch information
Showing
2 changed files
with
92 additions
and
72 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* irqfd: Allows an fd to be used to inject an interrupt to the guest | ||
* Credit goes to Avi Kivity for the original idea. | ||
*/ | ||
|
||
#ifndef __LINUX_KVM_IRQFD_H | ||
#define __LINUX_KVM_IRQFD_H | ||
|
||
#include <linux/kvm_host.h> | ||
#include <linux/poll.h> | ||
|
||
/* | ||
* Resampling irqfds are a special variety of irqfds used to emulate | ||
* level triggered interrupts. The interrupt is asserted on eventfd | ||
* trigger. On acknowledgment through the irq ack notifier, the | ||
* interrupt is de-asserted and userspace is notified through the | ||
* resamplefd. All resamplers on the same gsi are de-asserted | ||
* together, so we don't need to track the state of each individual | ||
* user. We can also therefore share the same irq source ID. | ||
*/ | ||
struct kvm_kernel_irqfd_resampler { | ||
struct kvm *kvm; | ||
/* | ||
* List of resampling struct _irqfd objects sharing this gsi. | ||
* RCU list modified under kvm->irqfds.resampler_lock | ||
*/ | ||
struct list_head list; | ||
struct kvm_irq_ack_notifier notifier; | ||
/* | ||
* Entry in list of kvm->irqfd.resampler_list. Use for sharing | ||
* resamplers among irqfds on the same gsi. | ||
* Accessed and modified under kvm->irqfds.resampler_lock | ||
*/ | ||
struct list_head link; | ||
}; | ||
|
||
struct kvm_kernel_irqfd { | ||
/* Used for MSI fast-path */ | ||
struct kvm *kvm; | ||
wait_queue_t wait; | ||
/* Update side is protected by irqfds.lock */ | ||
struct kvm_kernel_irq_routing_entry irq_entry; | ||
seqcount_t irq_entry_sc; | ||
/* Used for level IRQ fast-path */ | ||
int gsi; | ||
struct work_struct inject; | ||
/* The resampler used by this irqfd (resampler-only) */ | ||
struct kvm_kernel_irqfd_resampler *resampler; | ||
/* Eventfd notified on resample (resampler-only) */ | ||
struct eventfd_ctx *resamplefd; | ||
/* Entry in list of irqfds for a resampler (resampler-only) */ | ||
struct list_head resampler_link; | ||
/* Used for setup/shutdown */ | ||
struct eventfd_ctx *eventfd; | ||
struct list_head list; | ||
poll_table pt; | ||
struct work_struct shutdown; | ||
}; | ||
|
||
#endif /* __LINUX_KVM_IRQFD_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters