|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/MSI-X: cleanup
commit 43147e03e8f4d82d1eb8c2324336b720d43fc6fd
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri Jun 19 11:00:36 2015 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Jun 19 11:00:36 2015 +0200
x86/MSI-X: cleanup
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 <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/hvm/vmsi.c | 54 ++++++++++++----------------------------------
1 files changed, 14 insertions(+), 40 deletions(-)
diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c
index fef1ca8..3dbbe37 100644
--- a/xen/arch/x86/hvm/vmsi.c
+++ b/xen/arch/x86/hvm/vmsi.c
@@ -181,36 +181,23 @@ static struct msixtbl_entry *msixtbl_find_entry(
return NULL;
}
-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;
- list_for_each_entry( desc, &dev->msi_list, list )
- if ( desc->msi_attrib.type == PCI_CAP_ID_MSIX &&
- virt >= desc->mask_base &&
- virt < desc->mask_base + PCI_MSIX_ENTRY_SIZE )
- 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;
- nr_page = (addr >> PAGE_SHIFT) -
- (entry->gtable >> PAGE_SHIFT);
+ nr_entry = (addr - entry->gtable) / PCI_MSIX_ENTRY_SIZE;
- idx = 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 == PCI_CAP_ID_MSIX &&
+ desc->msi_attrib.entry_nr == nr_entry )
+ return desc;
- return (void *)(fix_to_virt(idx) +
- (addr & ((1UL << PAGE_SHIFT) - 1)));
+ return NULL;
}
static int msixtbl_read(
@@ -252,12 +239,8 @@ static int msixtbl_read(
}
if ( offset == PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET )
{
- const struct msi_desc *msi_desc;
- void *virt = msixtbl_addr_to_virt(entry, address);
+ const struct msi_desc *msi_desc = msixtbl_addr_to_desc(entry, address);
- if ( !virt )
- goto out;
- msi_desc = virt_to_msi_desc(entry->pdev, virt);
if ( !msi_desc )
goto out;
if ( len == 4 )
@@ -280,7 +263,6 @@ static int msixtbl_write(struct vcpu *v, unsigned long
address,
unsigned long offset;
struct msixtbl_entry *entry;
const struct msi_desc *msi_desc;
- void *virt;
unsigned int nr_entry, index;
int r = X86EMUL_UNHANDLEABLE;
unsigned long flags;
@@ -324,11 +306,7 @@ static int msixtbl_write(struct vcpu *v, unsigned long
address,
goto out;
}
- virt = msixtbl_addr_to_virt(entry, address);
- if ( !virt )
- goto out;
-
- msi_desc = virt_to_msi_desc(entry->pdev, virt);
+ msi_desc = msixtbl_addr_to_desc(entry, address);
if ( !msi_desc || msi_desc->irq < 0 )
goto out;
@@ -357,17 +335,13 @@ out:
static int msixtbl_range(struct vcpu *v, unsigned long addr)
{
- struct msixtbl_entry *entry;
- void *virt;
+ const struct msi_desc *desc;
rcu_read_lock(&msixtbl_rcu_lock);
-
- entry = msixtbl_find_entry(v, addr);
- virt = msixtbl_addr_to_virt(entry, addr);
-
+ desc = msixtbl_addr_to_desc(msixtbl_find_entry(v, addr), addr);
rcu_read_unlock(&msixtbl_rcu_lock);
- return !!virt;
+ return !!desc;
}
const struct hvm_mmio_handler msixtbl_mmio_handler = {
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |