return radix_tree_lookup(&pci_segments, seg);
}
+bool_t pci_known_segment(u16 seg)
+{
+ return get_pseg(seg) != NULL;
+}
+
static struct pci_seg *alloc_pseg(u16 seg)
{
struct pci_seg *pseg = get_pseg(seg);
else
{
u8 b, d, f;
- int i, invalid_cnt = 0;
+ unsigned int i = 0, invalid_cnt = 0;
void *p;
- for ( i = 0, p = dev_scope_start; i < dmaru->scope.devices_cnt;
+ /* Skip checking if segment is not accessible yet. */
+ if ( !pci_known_segment(drhd->segment) )
+ i = UINT_MAX;
+
+ for ( p = dev_scope_start; i < dmaru->scope.devices_cnt;
i++, p += ((struct acpi_dev_scope *)p)->length )
{
if ( ((struct acpi_dev_scope *)p)->dev_type == ACPI_DEV_IOAPIC ||
else
{
u8 b, d, f;
- int i, ignore = 0;
+ bool_t ignore = 0;
+ unsigned int i = 0;
+
+ /* Skip checking if segment is not accessible yet. */
+ if ( !pci_known_segment(rmrr->segment) )
+ i = UINT_MAX;
for ( i = 0; i < rmrru->scope.devices_cnt; i++ )
{
DEV_TYPE_PCI,
};
+bool_t pci_known_segment(u16 seg);
int pci_device_detect(u16 seg, u8 bus, u8 dev, u8 func);
int scan_pci_devices(void);
int pdev_type(u16 seg, u8 bus, u8 devfn);