[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [v8][PATCH 06/16] hvmloader/pci: disable all pci devices conflicting with rdm
- To: Jan Beulich <JBeulich@xxxxxxxx>
- From: "Chen, Tiejun" <tiejun.chen@xxxxxxxxx>
- Date: Thu, 16 Jul 2015 23:20:26 +0800
- Cc: Wei Liu <wei.liu2@xxxxxxxxxx>, Ian Campbell <ian.campbell@xxxxxxxxxx>, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>, George Dunlap <George.Dunlap@xxxxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Ian Jackson <ian.jackson@xxxxxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxx>, Keir Fraser <keir@xxxxxxx>
- Delivery-date: Thu, 16 Jul 2015 15:20:38 +0000
- List-id: Xen developer discussion <xen-devel.lists.xen.org>
What about this?
Looks reasonable (but don't forget that I continue to be unconvinced
that the patch as a whole makes sense).
Yes, I always keep this in my mind as I mentioned in patch #00. Any risk
you're still concerning? Is it that case if guest OS force enabling
these devices again? IMO, at this point there are two cases:
#1. Without passing through a RMRR device
Those emulated devices don't create 1:1 mapping so its safe, right?
#2. With passing through a RMRR device
This just probably cause these associated devices not to work well, but
still don't bring any impact to other Domains, right? I mean this isn't
going to worsen the preexisting situation.
If I'm wrong please correct me.
Thanks
Tiejun
Jan
+ bool is_conflict = false;
for ( devfn = 0; devfn < 256; devfn++ )
{
@@ -60,7 +61,7 @@ static void disable_conflicting_devices(void)
continue;
/* Check all bars */
- for ( bar = 0; bar < 7; bar++ )
+ for ( bar = 0; bar < 7 && !is_conflict; bar++ )
{
bar_reg = PCI_BASE_ADDRESS_0 + 4*bar;
if ( bar == 6 )
@@ -89,7 +90,7 @@ static void disable_conflicting_devices(void)
bar_sz = pci_readl(devfn, bar_reg);
bar_sz &= PCI_BASE_ADDRESS_MEM_MASK;
- for ( i = 0; i < memory_map.nr_map ; i++ )
+ for ( i = 0; i < memory_map.nr_map && !is_conflict; i++ )
{
if ( memory_map.map[i].type == E820_RESERVED )
{
@@ -105,13 +106,13 @@ static void disable_conflicting_devices(void)
devfn>>3, devfn&7, bar_reg, bar_data);
cmd = pci_readw(devfn, PCI_COMMAND);
pci_writew(devfn, PCI_COMMAND, ~cmd);
- /* Jump next device. */
- goto check_next_device;
+ /* So need to jump next device. */
+ is_conflict = true;
}
}
}
}
- check_next_device:
+ is_conflict = false;
}
}
Thanks
Tiejun
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|