@@ -457,7 +457,7 @@ void hvm_migrate_pirqs(struct vcpu *v)
{
struct domain *d = v->domain;
- if ( !iommu_enabled || !d->arch.hvm_domain.irq.dpci )
+ if ( !iommu_enabled || !hvm_domain_irq(d)->dpci )
return;
spin_lock(&d->event_lock);
@@ -60,7 +60,7 @@ static void deassert_irq(struct domain *d, unsigned isa_irq)
static void __hvm_pci_intx_assert(
struct domain *d, unsigned int device, unsigned int intx)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int gsi, link, isa_irq;
ASSERT((device <= 31) && (intx <= 3));
@@ -90,7 +90,7 @@ void hvm_pci_intx_assert(
static void __hvm_pci_intx_deassert(
struct domain *d, unsigned int device, unsigned int intx)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int gsi, link, isa_irq;
ASSERT((device <= 31) && (intx <= 3));
@@ -119,7 +119,7 @@ void hvm_pci_intx_deassert(
void hvm_isa_irq_assert(
struct domain *d, unsigned int isa_irq)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int gsi = hvm_isa_irq_to_gsi(isa_irq);
ASSERT(isa_irq <= 15);
@@ -136,7 +136,7 @@ void hvm_isa_irq_assert(
void hvm_isa_irq_deassert(
struct domain *d, unsigned int isa_irq)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int gsi = hvm_isa_irq_to_gsi(isa_irq);
ASSERT(isa_irq <= 15);
@@ -153,7 +153,7 @@ void hvm_isa_irq_deassert(
static void hvm_set_callback_irq_level(struct vcpu *v)
{
struct domain *d = v->domain;
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int gsi, pdev, pintx, asserted;
ASSERT(v->vcpu_id == 0);
@@ -201,7 +201,7 @@ static void hvm_set_callback_irq_level(struct vcpu *v)
void hvm_maybe_deassert_evtchn_irq(void)
{
struct domain *d = current->domain;
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
if ( hvm_irq->callback_via_asserted &&
!vcpu_info(d->vcpu[0], evtchn_upcall_pending) )
@@ -230,7 +230,7 @@ void hvm_assert_evtchn_irq(struct vcpu *v)
int hvm_set_pci_link_route(struct domain *d, u8 link, u8 isa_irq)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
u8 old_isa_irq;
int i;
@@ -323,7 +323,7 @@ int hvm_inject_msi(struct domain *d, uint64_t addr, uint32_t data)
void hvm_set_callback_via(struct domain *d, uint64_t via)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int gsi=0, pdev=0, pintx=0;
uint8_t via_type;
@@ -486,7 +486,7 @@ void arch_evtchn_inject(struct vcpu *v)
static void irq_dump(struct domain *d)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
int i;
printk("Domain %d:\n", d->domain_id);
printk("PCI 0x%16.16"PRIx64"%16.16"PRIx64
@@ -541,7 +541,7 @@ __initcall(dump_irq_info_key_init);
static int irq_save_pci(struct domain *d, hvm_domain_context_t *h)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int asserted, pdev, pintx;
int rc;
@@ -573,7 +573,7 @@ static int irq_save_pci(struct domain *d, hvm_domain_context_t *h)
static int irq_save_isa(struct domain *d, hvm_domain_context_t *h)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
/* Save ISA IRQ lines */
return ( hvm_save_entry(ISA_IRQ, 0, h, &hvm_irq->isa_irq) );
@@ -581,7 +581,7 @@ static int irq_save_isa(struct domain *d, hvm_domain_context_t *h)
static int irq_save_link(struct domain *d, hvm_domain_context_t *h)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
/* Save PCI-ISA link state */
return ( hvm_save_entry(PCI_LINK, 0, h, &hvm_irq->pci_link) );
@@ -589,7 +589,7 @@ static int irq_save_link(struct domain *d, hvm_domain_context_t *h)
static int irq_load_pci(struct domain *d, hvm_domain_context_t *h)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
int link, dev, intx, gsi;
/* Load the PCI IRQ lines */
@@ -622,7 +622,7 @@ static int irq_load_pci(struct domain *d, hvm_domain_context_t *h)
static int irq_load_isa(struct domain *d, hvm_domain_context_t *h)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
int irq;
/* Load the ISA IRQ lines */
@@ -641,7 +641,7 @@ static int irq_load_isa(struct domain *d, hvm_domain_context_t *h)
static int irq_load_link(struct domain *d, hvm_domain_context_t *h)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
int link, gsi;
/* Load the PCI-ISA IRQ link routing table */
@@ -123,7 +123,7 @@ static void vioapic_write_redirent(
int top_word, uint32_t val)
{
struct domain *d = vioapic_domain(vioapic);
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
union vioapic_redir_entry *pent, ent;
int unmasked = 0;
@@ -389,7 +389,7 @@ void vioapic_irq_positive_edge(struct domain *d, unsigned int irq)
void vioapic_update_EOI(struct domain *d, u8 vector)
{
struct hvm_vioapic *vioapic = domain_vioapic(d);
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
union vioapic_redir_entry *ent;
int gsi;
@@ -373,7 +373,7 @@ struct vlapic *vlapic_lowest_prio(
struct domain *d, const struct vlapic *source,
int short_hand, uint32_t dest, bool_t dest_mode)
{
- int old = d->arch.hvm_domain.irq.round_robin_prev_vcpu;
+ int old = hvm_domain_irq(d)->round_robin_prev_vcpu;
uint32_t ppr, target_ppr = UINT_MAX;
struct vlapic *vlapic, *target = NULL;
struct vcpu *v;
@@ -394,8 +394,8 @@ struct vlapic *vlapic_lowest_prio(
} while ( v->vcpu_id != old );
if ( target != NULL )
- d->arch.hvm_domain.irq.round_robin_prev_vcpu =
- vlapic_vcpu(target)->vcpu_id;
+ hvm_domain_irq(d)->round_robin_prev_vcpu =
+ vlapic_vcpu(target)->vcpu_id;
return target;
}
@@ -317,7 +317,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
if ( is_hvm_domain(currd) &&
domain_pirq_to_emuirq(currd, eoi.irq) > 0 )
{
- struct hvm_irq *hvm_irq = &currd->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(currd);
int gsi = domain_pirq_to_emuirq(currd, eoi.irq);
/* if this is a level irq and count > 0, send another
@@ -195,7 +195,7 @@ struct hvm_irq_dpci *domain_get_irq_dpci(const struct domain *d)
if ( !d || !is_hvm_domain(d) )
return NULL;
- return d->arch.hvm_domain.irq.dpci;
+ return hvm_domain_irq(d)->dpci;
}
void free_hvm_irq_dpci(struct hvm_irq_dpci *dpci)
@@ -333,7 +333,7 @@ int pt_irq_create_bind(
for ( i = 0; i < NR_HVM_IRQS; i++ )
INIT_LIST_HEAD(&hvm_irq_dpci->girq[i]);
- d->arch.hvm_domain.irq.dpci = hvm_irq_dpci;
+ hvm_domain_irq(d)->dpci = hvm_irq_dpci;
}
info = pirq_get_info(d, pirq);
@@ -788,7 +788,7 @@ static int _hvm_dpci_msi_eoi(struct domain *d,
void hvm_dpci_msi_eoi(struct domain *d, int vector)
{
- if ( !iommu_enabled || !d->arch.hvm_domain.irq.dpci )
+ if ( !iommu_enabled || !hvm_domain_irq(d)->dpci )
return;
spin_lock(&d->event_lock);
@@ -798,7 +798,7 @@ void hvm_dpci_msi_eoi(struct domain *d, int vector)
static void hvm_dirq_assist(struct domain *d, struct hvm_pirq_dpci *pirq_dpci)
{
- if ( unlikely(!d->arch.hvm_domain.irq.dpci) )
+ if ( unlikely(!hvm_domain_irq(d)->dpci) )
{
ASSERT_UNREACHABLE();
return;
@@ -815,7 +815,7 @@ static int pci_clean_dpci_irqs(struct domain *d)
return ret;
}
- d->arch.hvm_domain.irq.dpci = NULL;
+ hvm_domain_irq(d)->dpci = NULL;
free_hvm_irq_dpci(hvm_irq_dpci);
}
spin_unlock(&d->event_lock);
@@ -66,7 +66,7 @@ void flush_all_cache()
static int _hvm_dpci_isairq_eoi(struct domain *d,
struct hvm_pirq_dpci *pirq_dpci, void *arg)
{
- struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
+ struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int isairq = (long)arg;
const struct dev_intx_gsi_link *digl;
@@ -95,6 +95,7 @@ struct hvm_irq {
(((((dev)<<2) + ((dev)>>3) + (intx)) & 31) + 16)
#define hvm_pci_intx_link(dev, intx) \
(((dev) + (intx)) & 3)
+#define hvm_domain_irq(d) (&(d)->arch.hvm_domain.irq)
#define hvm_isa_irq_to_gsi(isa_irq) ((isa_irq) ? : 2)
Introduce a macro to get a pointer to the hvm_irq for a HVM domain. No functional change. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- Cc: Jan Beulich <jbeulich@suse.com> Cc: Andrew Cooper <andrew.cooper3@citrix.com> Cc: Kevin Tian <kevin.tian@intel.com> --- Changes since v2: - Switch d->arch.hvm_domain.irq.dpci accesses to use the macro also. --- NB: this is a pre-patch in order to make patch #3 smaller. --- xen/arch/x86/hvm/hvm.c | 2 +- xen/arch/x86/hvm/irq.c | 30 +++++++++++++++--------------- xen/arch/x86/hvm/vioapic.c | 4 ++-- xen/arch/x86/hvm/vlapic.c | 6 +++--- xen/arch/x86/physdev.c | 2 +- xen/drivers/passthrough/io.c | 8 ++++---- xen/drivers/passthrough/pci.c | 2 +- xen/drivers/passthrough/vtd/x86/vtd.c | 2 +- xen/include/asm-x86/hvm/irq.h | 1 + 9 files changed, 29 insertions(+), 28 deletions(-)