From patchwork Mon Mar 27 10:18:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 9646343 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A84A8602D6 for ; Mon, 27 Mar 2017 10:20:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A5C1B28364 for ; Mon, 27 Mar 2017 10:20:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9766E28387; Mon, 27 Mar 2017 10:20:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 045AC28364 for ; Mon, 27 Mar 2017 10:20:57 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1csRjW-000726-Mw; Mon, 27 Mar 2017 10:18:42 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1csRjV-00070v-Ex for xen-devel@lists.xenproject.org; Mon, 27 Mar 2017 10:18:41 +0000 Received: from [193.109.254.147] by server-1.bemta-6.messagelabs.com id B5/31-27678-007E8D85; Mon, 27 Mar 2017 10:18:40 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrBIsWRWlGSWpSXmKPExsWyU9JRQvf/sxs RBi/f6Vh83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBmPDm5gLdjsXrG/bRJ7A+NPyy5GTg4JAT+J 0zs/s4LYbAI6Ehfn7mTrYuTgEBFQkbi916CLkYuDWWAWo8Sro32MIDXCAvYSjQ39LCA2i4Cqx ML1y8DivAKWEtdWgvSCzJSXeLTpEdgcTgEribP7KkDCQkAlnfu62CHKBSVOznwCNoZZQFOidf tvdghbXqJ562xmiHpFif55D6BGpktMfNbDMoGRfxaS9llI2mchaV/AyLyKUaM4tagstUjXyEI vqSgzPaMkNzEzR9fQwEwvN7W4ODE9NScxqVgvOT93EyMwBBmAYAfj+bWBhxglOZiURHk/nL4R IcSXlJ9SmZFYnBFfVJqTWnyIUYaDQ0mCN/spUE6wKDU9tSItMwcYDTBpCQ4eJRHeA0+A0rzFB Ym5xZnpEKlTjIpS4ryFIH0CIImM0jy4NlgEXmKUlRLmZQQ6RIinILUoN7MEVf4VozgHo5Iw72 aQKTyZeSVw018BLWYCWnx4PtjikkSElFQD4zY3oWy+4186fy0SCHuu9krs1Arj3mPS9x0UYnf 85ZguNKM7yFhO+MulI6VmJg3L5U6ln5zy8ASj+YplnyIlD278voentW4ic5z+MdvphvUs3Gdi LTpXH405ck7z+fYEK/0PmqcKum5cv9tpsSTk2Y75e//5GKR4nP9q8Ol2rO++tfomR5wnLVdiK c5INNRiLipOBAB20U2VuwIAAA== X-Env-Sender: prvs=25239713d=roger.pau@citrix.com X-Msg-Ref: server-8.tower-27.messagelabs.com!1490609913!83588185!3 X-Originating-IP: [185.25.65.24] X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 25678 invoked from network); 27 Mar 2017 10:18:39 -0000 Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24) by server-8.tower-27.messagelabs.com with RC4-SHA encrypted SMTP; 27 Mar 2017 10:18:39 -0000 X-IronPort-AV: E=Sophos;i="5.36,231,1486425600"; d="scan'208";a="43158872" From: Roger Pau Monne To: Date: Mon, 27 Mar 2017 11:18:18 +0100 Message-ID: <20170327101823.99368-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.12.1 In-Reply-To: <20170327101823.99368-1-roger.pau@citrix.com> References: <20170327101823.99368-1-roger.pau@citrix.com> MIME-Version: 1.0 X-ClientProxiedBy: AMSPEX02CAS02.citrite.net (10.69.22.113) To AMSPEX02CL02.citrite.net (10.69.22.126) Cc: Andrew Cooper , Kevin Tian , Jan Beulich , Roger Pau Monne Subject: [Xen-devel] [PATCH v2 2/7] x86/hvm: introduce hvm_domain_irq macro X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Introduce a macro to get a pointer to the hvm_irq for a HVM domain. No functional change. Signed-off-by: Roger Pau Monné --- Cc: Jan Beulich Cc: Andrew Cooper Cc: Kevin Tian --- 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/vtd/x86/vtd.c | 2 +- xen/include/asm-x86/hvm/irq.h | 1 + 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c index a774ed7450..c2951ccf8a 100644 --- a/xen/arch/x86/hvm/irq.c +++ b/xen/arch/x86/hvm/irq.c @@ -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 */ diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 84139a3b7d..39dbf832b3 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -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; diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 14356a78fe..0590d6c69d 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -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; } diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c index 81cd6c94e7..6c15f9bf49 100644 --- a/xen/arch/x86/physdev.c +++ b/xen/arch/x86/physdev.c @@ -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 diff --git a/xen/drivers/passthrough/vtd/x86/vtd.c b/xen/drivers/passthrough/vtd/x86/vtd.c index 8a89f3471f..88a60b3307 100644 --- a/xen/drivers/passthrough/vtd/x86/vtd.c +++ b/xen/drivers/passthrough/vtd/x86/vtd.c @@ -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; diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/include/asm-x86/hvm/irq.h index 73b8fb0457..17a957d4b5 100644 --- a/xen/include/asm-x86/hvm/irq.h +++ b/xen/include/asm-x86/hvm/irq.h @@ -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)