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:
Jan Beulich committed 2016-06-22 11:58:31 +02:00
1 parent c6f7d21747
commit 74c6dc2d0a
3 files changed
+6 -4

No files matched your search

-2
View File
@@ -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 )
+3 -2
View File
@@ -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() */
+3
View File
@@ -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)) )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.