From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH v3 06/10] x86/vMSI-X: cleanup Date: Fri, 05 Jun 2015 12:23:24 +0100 Message-ID: <5571A2CC020000780008146A@mail.emea.novell.com> References: <55719F9D0200007800081425@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part76425FBC.1__=" Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Z0pih-0003or-C7 for xen-devel@lists.xenproject.org; Fri, 05 Jun 2015 11:23:27 +0000 In-Reply-To: <55719F9D0200007800081425@mail.emea.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel Cc: Andrew Cooper , Keir Fraser List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part76425FBC.1__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Fold msixtbl_addr_to_virt() + virt_to_msi_desc() into simplified msixtbl_addr_to_desc(), as the callers don't need the virtual address anymore. Signed-off-by: Jan Beulich --- a/xen/arch/x86/hvm/vmsi.c +++ b/xen/arch/x86/hvm/vmsi.c @@ -181,36 +181,23 @@ static struct msixtbl_entry *msixtbl_fin return NULL; } =20 -static struct msi_desc *virt_to_msi_desc(struct pci_dev *dev, void *virt) +static struct msi_desc *msixtbl_addr_to_desc( + const struct msixtbl_entry *entry, unsigned long addr) { + unsigned int nr_entry; struct msi_desc *desc; =20 - list_for_each_entry( desc, &dev->msi_list, list ) - if ( desc->msi_attrib.type =3D=3D PCI_CAP_ID_MSIX && - virt >=3D desc->mask_base && - virt < desc->mask_base + PCI_MSIX_ENTRY_SIZE )=20 - return desc; - - return NULL; -} - -static void __iomem *msixtbl_addr_to_virt( - struct msixtbl_entry *entry, unsigned long addr) -{ - unsigned int idx, nr_page; - if ( !entry || !entry->pdev ) return NULL; =20 - nr_page =3D (addr >> PAGE_SHIFT) - - (entry->gtable >> PAGE_SHIFT); + nr_entry =3D (addr - entry->gtable) / PCI_MSIX_ENTRY_SIZE; =20 - idx =3D entry->pdev->msix->table_idx[nr_page]; - if ( !idx ) - return NULL; + list_for_each_entry( desc, &entry->pdev->msi_list, list ) + if ( desc->msi_attrib.type =3D=3D PCI_CAP_ID_MSIX && + desc->msi_attrib.entry_nr =3D=3D nr_entry ) + return desc; =20 - return (void *)(fix_to_virt(idx) + - (addr & ((1UL << PAGE_SHIFT) - 1))); + return NULL; } =20 static int msixtbl_read( @@ -243,12 +230,8 @@ static int msixtbl_read( } else=20 { - const struct msi_desc *msi_desc; - void *virt =3D msixtbl_addr_to_virt(entry, address); + const struct msi_desc *msi_desc =3D msixtbl_addr_to_desc(entry, = address); =20 - if ( !virt ) - goto out; - msi_desc =3D virt_to_msi_desc(entry->pdev, virt); if ( !msi_desc ) goto out; *pval =3D MASK_INSR(msi_desc->msi_attrib.guest_masked, @@ -267,7 +250,6 @@ static int msixtbl_write(struct vcpu *v, unsigned long offset; struct msixtbl_entry *entry; const struct msi_desc *msi_desc; - void *virt; unsigned int nr_entry, index; int r =3D X86EMUL_UNHANDLEABLE; unsigned long flags; @@ -304,11 +286,7 @@ static int msixtbl_write(struct vcpu *v, goto out; } =20 - virt =3D msixtbl_addr_to_virt(entry, address); - if ( !virt ) - goto out; - - msi_desc =3D virt_to_msi_desc(entry->pdev, virt); + msi_desc =3D msixtbl_addr_to_desc(entry, address); if ( !msi_desc || msi_desc->irq < 0 ) goto out; =20 @@ -336,17 +314,13 @@ out: =20 static int msixtbl_range(struct vcpu *v, unsigned long addr) { - struct msixtbl_entry *entry; - void *virt; + const struct msi_desc *desc; =20 rcu_read_lock(&msixtbl_rcu_lock); - - entry =3D msixtbl_find_entry(v, addr); - virt =3D msixtbl_addr_to_virt(entry, addr); - + desc =3D msixtbl_addr_to_desc(msixtbl_find_entry(v, addr), addr); rcu_read_unlock(&msixtbl_rcu_lock); =20 - return !!virt; + return !!desc; } =20 const struct hvm_mmio_handler msixtbl_mmio_handler =3D { --=__Part76425FBC.1__= Content-Type: text/plain; name="x86-vMSI-X-cleanup.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="x86-vMSI-X-cleanup.patch" x86/vMSI-X: cleanup=0A=0AFold msixtbl_addr_to_virt() + virt_to_msi_desc() = into simplified=0Amsixtbl_addr_to_desc(), as the callers don't need the = virtual address=0Aanymore.=0A=0ASigned-off-by: Jan Beulich =0A=0A--- a/xen/arch/x86/hvm/vmsi.c=0A+++ b/xen/arch/x86/hvm/vmsi.c=0A@@= -181,36 +181,23 @@ static struct msixtbl_entry *msixtbl_fin=0A return = NULL;=0A }=0A =0A-static struct msi_desc *virt_to_msi_desc(struct pci_dev = *dev, void *virt)=0A+static struct msi_desc *msixtbl_addr_to_desc(=0A+ = const struct msixtbl_entry *entry, unsigned long addr)=0A {=0A+ = unsigned int nr_entry;=0A struct msi_desc *desc;=0A =0A- list_for_ea= ch_entry( desc, &dev->msi_list, list )=0A- if ( desc->msi_attrib.typ= e =3D=3D PCI_CAP_ID_MSIX &&=0A- virt >=3D desc->mask_base = &&=0A- virt < desc->mask_base + PCI_MSIX_ENTRY_SIZE ) =0A- = return desc;=0A-=0A- return NULL;=0A-}=0A-=0A-static void = __iomem *msixtbl_addr_to_virt(=0A- struct msixtbl_entry *entry, = unsigned long addr)=0A-{=0A- unsigned int idx, nr_page;=0A-=0A if ( = !entry || !entry->pdev )=0A return NULL;=0A =0A- nr_page =3D = (addr >> PAGE_SHIFT) -=0A- (entry->gtable >> PAGE_SHIFT);=0A+ = nr_entry =3D (addr - entry->gtable) / PCI_MSIX_ENTRY_SIZE;=0A =0A- = idx =3D entry->pdev->msix->table_idx[nr_page];=0A- if ( !idx )=0A- = return NULL;=0A+ list_for_each_entry( desc, &entry->pdev->msi_list, = list )=0A+ if ( desc->msi_attrib.type =3D=3D PCI_CAP_ID_MSIX &&=0A+ = desc->msi_attrib.entry_nr =3D=3D nr_entry )=0A+ = return desc;=0A =0A- return (void *)(fix_to_virt(idx) +=0A- = (addr & ((1UL << PAGE_SHIFT) - 1)));=0A+ return NULL;=0A }=0A = =0A static int msixtbl_read(=0A@@ -243,12 +230,8 @@ static int msixtbl_read= (=0A }=0A else =0A {=0A- const struct msi_desc = *msi_desc;=0A- void *virt =3D msixtbl_addr_to_virt(entry, = address);=0A+ const struct msi_desc *msi_desc =3D msixtbl_addr_to_de= sc(entry, address);=0A =0A- if ( !virt )=0A- goto = out;=0A- msi_desc =3D virt_to_msi_desc(entry->pdev, virt);=0A = if ( !msi_desc )=0A goto out;=0A *pval =3D MASK_INSR(= msi_desc->msi_attrib.guest_masked,=0A@@ -267,7 +250,6 @@ static int = msixtbl_write(struct vcpu *v,=0A unsigned long offset;=0A struct = msixtbl_entry *entry;=0A const struct msi_desc *msi_desc;=0A- void = *virt;=0A unsigned int nr_entry, index;=0A int r =3D X86EMUL_UNHAND= LEABLE;=0A unsigned long flags;=0A@@ -304,11 +286,7 @@ static int = msixtbl_write(struct vcpu *v,=0A goto out;=0A }=0A =0A- = virt =3D msixtbl_addr_to_virt(entry, address);=0A- if ( !virt )=0A- = goto out;=0A-=0A- msi_desc =3D virt_to_msi_desc(entry->pdev, = virt);=0A+ msi_desc =3D msixtbl_addr_to_desc(entry, address);=0A if = ( !msi_desc || msi_desc->irq < 0 )=0A goto out;=0A =0A@@ = -336,17 +314,13 @@ out:=0A =0A static int msixtbl_range(struct vcpu *v, = unsigned long addr)=0A {=0A- struct msixtbl_entry *entry;=0A- void = *virt;=0A+ const struct msi_desc *desc;=0A =0A rcu_read_lock(&msixtb= l_rcu_lock);=0A-=0A- entry =3D msixtbl_find_entry(v, addr);=0A- virt = =3D msixtbl_addr_to_virt(entry, addr);=0A-=0A+ desc =3D msixtbl_addr_to_= desc(msixtbl_find_entry(v, addr), addr);=0A rcu_read_unlock(&msixtbl_rc= u_lock);=0A =0A- return !!virt;=0A+ return !!desc;=0A }=0A =0A const = struct hvm_mmio_handler msixtbl_mmio_handler =3D {=0A --=__Part76425FBC.1__= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --=__Part76425FBC.1__=--