mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
x86/vMSI-X: defer intercept handler registration
There's no point in registering the internal MSI-X table intercept functions on all domains - it is sufficient to do so once a domain gets an MSI-X capable device assigned. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
c6f7d21747
commit
74c6dc2d0a
3 files changed
+6
-4
No files matched your search
@@ -644,8 +644,6 @@ int hvm_domain_initialise(struct domain *d)
|
||||
|
||||
rtc_init(d);
|
||||
|
||||
msixtbl_init(d);
|
||||
|
||||
register_portio_handler(d, 0xe9, 1, hvm_print_line);
|
||||
|
||||
if ( hvm_tsc_scaling_supported )
|
||||
|
||||
@@ -553,7 +553,8 @@ found:
|
||||
|
||||
void msixtbl_init(struct domain *d)
|
||||
{
|
||||
if ( !has_vlapic(d) )
|
||||
if ( !has_hvm_container_domain(d) || !has_vlapic(d) ||
|
||||
d->arch.hvm_domain.msixtbl_list.next )
|
||||
return;
|
||||
|
||||
INIT_LIST_HEAD(&d->arch.hvm_domain.msixtbl_list);
|
||||
@@ -567,7 +568,7 @@ void msixtbl_pt_cleanup(struct domain *d)
|
||||
struct msixtbl_entry *entry, *temp;
|
||||
unsigned long flags;
|
||||
|
||||
if ( !has_vlapic(d) )
|
||||
if ( !d->arch.hvm_domain.msixtbl_list.next )
|
||||
return;
|
||||
|
||||
/* msixtbl_list_lock must be acquired with irq_disabled for check_lock() */
|
||||
|
||||
@@ -1380,6 +1380,9 @@ static int assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn, u32 flag)
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ( pdev->msix )
|
||||
msixtbl_init(d);
|
||||
|
||||
pdev->fault.count = 0;
|
||||
|
||||
if ( (rc = hd->platform_ops->assign_device(d, devfn, pci_to_dev(pdev), flag)) )
|
||||
|
||||