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@lists.xen.org
http://lists.xen.org/xen-devel