scope = start;
if ( scope->length < MIN_SCOPE_LEN )
{
- dprintk(XENLOG_WARNING VTDPREFIX, "Invalid device scope.\n");
+ printk(XENLOG_WARNING VTDPREFIX "Invalid device scope\n");
return -EINVAL;
}
sub_bus = pci_conf_read8(seg, bus, path->dev, path->fn,
PCI_SUBORDINATE_BUS);
if ( iommu_verbose )
- dprintk(VTDPREFIX,
- " bridge: %04x:%02x:%02x.%u start=%x sec=%x sub=%x\n",
- seg, bus, path->dev, path->fn,
- acpi_scope->bus, sec_bus, sub_bus);
+ printk(VTDPREFIX
+ " bridge: %04x:%02x:%02x.%u start=%x sec=%x sub=%x\n",
+ seg, bus, path->dev, path->fn,
+ acpi_scope->bus, sec_bus, sub_bus);
dmar_scope_add_buses(scope, sec_bus, sub_bus);
break;
case ACPI_DMAR_SCOPE_TYPE_HPET:
if ( iommu_verbose )
- dprintk(VTDPREFIX, " MSI HPET: %04x:%02x:%02x.%u\n",
- seg, bus, path->dev, path->fn);
+ printk(VTDPREFIX " MSI HPET: %04x:%02x:%02x.%u\n",
+ seg, bus, path->dev, path->fn);
if ( drhd )
{
case ACPI_DMAR_SCOPE_TYPE_ENDPOINT:
if ( iommu_verbose )
- dprintk(VTDPREFIX, " endpoint: %04x:%02x:%02x.%u\n",
- seg, bus, path->dev, path->fn);
+ printk(VTDPREFIX " endpoint: %04x:%02x:%02x.%u\n",
+ seg, bus, path->dev, path->fn);
if ( drhd )
{
case ACPI_DMAR_SCOPE_TYPE_IOAPIC:
if ( iommu_verbose )
- dprintk(VTDPREFIX, " IOAPIC: %04x:%02x:%02x.%u\n",
- seg, bus, path->dev, path->fn);
+ printk(VTDPREFIX " IOAPIC: %04x:%02x:%02x.%u\n",
+ seg, bus, path->dev, path->fn);
if ( drhd )
{
{
if ( h->length >= min_len )
return 0;
- dprintk(XENLOG_ERR VTDPREFIX,
- "Invalid ACPI DMAR entry length: %#x\n",
- h->length);
+ printk(XENLOG_ERR VTDPREFIX "Invalid ACPI DMAR entry length: %#x\n",
+ h->length);
return -EINVAL;
}
INIT_LIST_HEAD(&dmaru->ioapic_list);
INIT_LIST_HEAD(&dmaru->hpet_list);
if ( iommu_verbose )
- dprintk(VTDPREFIX, " dmaru->address = %"PRIx64"\n",
- dmaru->address);
+ printk(VTDPREFIX " dmaru->address = %"PRIx64"\n", dmaru->address);
ret = iommu_alloc(dmaru);
if ( ret )
if ( dmaru->include_all )
{
if ( iommu_verbose )
- dprintk(VTDPREFIX, " flags: INCLUDE_ALL\n");
+ printk(VTDPREFIX " flags: INCLUDE_ALL\n");
/* Only allow one INCLUDE_ALL */
if ( drhd->segment == 0 && include_all )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- "Only one INCLUDE_ALL device scope is allowed\n");
+ printk(XENLOG_WARNING VTDPREFIX
+ "Only one INCLUDE_ALL device scope is allowed\n");
ret = -EINVAL;
}
if ( drhd->segment == 0 )
if ( !pci_device_detect(drhd->segment, b, d, f) )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- " Non-existent device (%04x:%02x:%02x.%u) is reported"
- " in this DRHD's scope!\n", drhd->segment, b, d, f);
+ printk(XENLOG_WARNING VTDPREFIX
+ " Non-existent device (%04x:%02x:%02x.%u) in this DRHD's scope!\n",
+ drhd->segment, b, d, f);
invalid_cnt++;
}
}
if ( iommu_workaround_bios_bug &&
invalid_cnt == dmaru->scope.devices_cnt )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- " Workaround BIOS bug: ignore the DRHD due to all "
- "devices under its scope are not PCI discoverable!\n");
+ printk(XENLOG_WARNING VTDPREFIX
+ " Workaround BIOS bug: ignoring DRHD (no devices in its scope are PCI discoverable)\n");
scope_devices_free(&dmaru->scope);
iommu_free(dmaru);
}
else
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- " The DRHD is invalid due to there are devices under "
- "its scope are not PCI discoverable! Pls try option "
- "iommu=force or iommu=workaround_bios_bug if you "
- "really want VT-d\n");
+ printk(XENLOG_WARNING VTDPREFIX
+ " DRHD is invalid (some devices in its scope are not PCI discoverable)\n");
+ printk(XENLOG_WARNING VTDPREFIX
+ " Try \"iommu=force\" or \"iommu=workaround_bios_bug\" if you really want VT-d\n");
ret = -EINVAL;
}
}
if ( (!page_is_ram_type(paddr_to_pfn(base_addr), RAM_TYPE_RESERVED)) ||
(!page_is_ram_type(paddr_to_pfn(end_addr), RAM_TYPE_RESERVED)) )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- " RMRR address range not in reserved memory "
- "base = %"PRIx64" end = %"PRIx64"; "
- "iommu_inclusive_mapping=1 parameter may be needed.\n",
+ printk(XENLOG_WARNING VTDPREFIX
+ " RMRR address range %"PRIx64"..%"PRIx64" not in reserved memory;"
+ " need \"iommu_inclusive_mapping=1\"?\n",
base_addr, end_addr);
}
if ( !pci_device_detect(rmrr->segment, b, d, f) )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- " Non-existent device (%04x:%02x:%02x.%u) is reported"
- " in RMRR (%"PRIx64", %"PRIx64")'s scope!\n",
- rmrr->segment, b, d, f,
- rmrru->base_address, rmrru->end_address);
+ printk(XENLOG_WARNING VTDPREFIX
+ " Non-existent device (%04x:%02x:%02x.%u) reported in RMRR (%"PRIx64", %"PRIx64")'s scope!\n",
+ rmrr->segment, b, d, f,
+ rmrru->base_address, rmrru->end_address);
ignore = 1;
}
else
if ( ignore )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- " Ignore the RMRR (%"PRIx64", %"PRIx64") due to "
- "devices under its scope are not PCI discoverable!\n",
- rmrru->base_address, rmrru->end_address);
+ printk(XENLOG_WARNING VTDPREFIX
+ " Ignore RMRR (%"PRIx64", %"PRIx64") (some devices in its scope are not PCI discoverable)\n",
+ rmrru->base_address, rmrru->end_address);
scope_devices_free(&rmrru->scope);
xfree(rmrru);
}
else if ( base_addr > end_addr )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- " The RMRR (%"PRIx64", %"PRIx64") is incorrect!\n",
- rmrru->base_address, rmrru->end_address);
+ printk(XENLOG_WARNING VTDPREFIX
+ " RMRR (%"PRIx64", %"PRIx64") is incorrect\n",
+ rmrru->base_address, rmrru->end_address);
scope_devices_free(&rmrru->scope);
xfree(rmrru);
ret = -EFAULT;
else
{
if ( iommu_verbose )
- dprintk(VTDPREFIX,
- " RMRR region: base_addr %"PRIx64
- " end_address %"PRIx64"\n",
- rmrru->base_address, rmrru->end_address);
+ printk(VTDPREFIX
+ " RMRR region: base_addr %"PRIx64" end_address %"PRIx64"\n",
+ rmrru->base_address, rmrru->end_address);
acpi_register_rmrr_unit(rmrru);
}
}
atsru->segment = atsr->segment;
atsru->all_ports = atsr->flags & ACPI_DMAR_ALL_PORTS;
if ( iommu_verbose )
- dprintk(VTDPREFIX,
- " atsru->all_ports: %x\n", atsru->all_ports);
+ printk(VTDPREFIX " atsru->all_ports: %x\n", atsru->all_ports);
if ( !atsru->all_ports )
{
dev_scope_start = (void *)(atsr + 1);
else
{
if ( iommu_verbose )
- dprintk(VTDPREFIX, " flags: ALL_PORTS\n");
+ printk(VTDPREFIX " flags: ALL_PORTS\n");
/* Only allow one ALL_PORTS */
if ( atsr->segment == 0 && all_ports )
{
- dprintk(XENLOG_WARNING VTDPREFIX,
- "Only one ALL_PORTS device scope is allowed\n");
+ printk(XENLOG_WARNING VTDPREFIX
+ "Only one ALL_PORTS device scope is allowed\n");
ret = -EINVAL;
}
if ( atsr->segment == 0 )
rhsau->proximity_domain = rhsa->proximity_domain;
list_add_tail(&rhsau->list, &acpi_rhsa_units);
if ( iommu_verbose )
- dprintk(VTDPREFIX,
- " rhsau->address: %"PRIx64
- " rhsau->proximity_domain: %"PRIx32"\n",
- rhsau->address, rhsau->proximity_domain);
+ printk(VTDPREFIX
+ " rhsau->address: %"PRIx64" rhsau->proximity_domain: %"PRIx32"\n",
+ rhsau->address, rhsau->proximity_domain);
return ret;
}
if ( !dmar->width )
{
- dprintk(XENLOG_WARNING VTDPREFIX, "Zero: Invalid DMAR width\n");
+ printk(XENLOG_WARNING VTDPREFIX "Zero: Invalid DMAR width\n");
ret = -EINVAL;
goto out;
}
dmar_host_address_width = dmar->width + 1;
if ( iommu_verbose )
- dprintk(VTDPREFIX, "Host address width %d\n",
- dmar_host_address_width);
+ printk(VTDPREFIX "Host address width %d\n", dmar_host_address_width);
entry_header = (void *)(dmar + 1);
while ( ((unsigned long)entry_header) <
{
case ACPI_DMAR_TYPE_HARDWARE_UNIT:
if ( iommu_verbose )
- dprintk(VTDPREFIX, "found ACPI_DMAR_DRHD:\n");
+ printk(VTDPREFIX "found ACPI_DMAR_DRHD:\n");
ret = acpi_parse_one_drhd(entry_header);
break;
case ACPI_DMAR_TYPE_RESERVED_MEMORY:
if ( iommu_verbose )
- dprintk(VTDPREFIX, "found ACPI_DMAR_RMRR:\n");
+ printk(VTDPREFIX "found ACPI_DMAR_RMRR:\n");
ret = acpi_parse_one_rmrr(entry_header);
break;
case ACPI_DMAR_TYPE_ATSR:
if ( iommu_verbose )
- dprintk(VTDPREFIX, "found ACPI_DMAR_ATSR:\n");
+ printk(VTDPREFIX "found ACPI_DMAR_ATSR:\n");
ret = acpi_parse_one_atsr(entry_header);
break;
case ACPI_DMAR_HARDWARE_AFFINITY:
if ( iommu_verbose )
- dprintk(VTDPREFIX, "found ACPI_DMAR_RHSA:\n");
+ printk(VTDPREFIX "found ACPI_DMAR_RHSA:\n");
ret = acpi_parse_one_rhsa(entry_header);
break;
default:
{
if ( force_iommu )
panic("BIOS did not enable IGD for VT properly, crash Xen for security purpose");
- else
- {
- dprintk(XENLOG_WARNING VTDPREFIX,
- "BIOS did not enable IGD for VT properly. Disabling IGD VT-d engine.\n");
- return;
- }
+
+ printk(XENLOG_WARNING VTDPREFIX
+ "BIOS did not enable IGD for VT properly. Disabling IGD VT-d engine.\n");
+ return;
}
/* apply platform specific errata workarounds */
vtd_ops_preamble_quirk(iommu);
if ( iommu_verbose )
- dprintk(VTDPREFIX,
- "iommu_enable_translation: iommu->reg = %p\n", iommu->reg);
+ printk(VTDPREFIX "iommu_enable_translation: iommu->reg = %p\n",
+ iommu->reg);
spin_lock_irqsave(&iommu->register_lock, flags);
sts = dmar_readl(iommu->reg, DMAR_GSTS_REG);
dmar_writel(iommu->reg, DMAR_GCMD_REG, sts | DMA_GCMD_TE);
if ( iommu_verbose )
{
- dprintk(VTDPREFIX,
- "drhd->address = %"PRIx64" iommu->reg = %p\n",
- drhd->address, iommu->reg);
- dprintk(VTDPREFIX,
- "cap = %"PRIx64" ecap = %"PRIx64"\n", iommu->cap, iommu->ecap);
+ printk(VTDPREFIX "drhd->address = %"PRIx64" iommu->reg = %p\n",
+ drhd->address, iommu->reg);
+ printk(VTDPREFIX "cap = %"PRIx64" ecap = %"PRIx64"\n",
+ iommu->cap, iommu->ecap);
}
if ( !(iommu->cap + 1) || !(iommu->ecap + 1) )
return -ENODEV;
cap_num_fault_regs(iommu->cap) * PRIMARY_FAULT_REG_LEN >= PAGE_SIZE ||
ecap_iotlb_offset(iommu->ecap) >= PAGE_SIZE )
{
- dprintk(XENLOG_ERR VTDPREFIX, "IOMMU: unsupported\n");
+ printk(XENLOG_ERR VTDPREFIX "IOMMU: unsupported\n");
print_iommu_regs(drhd);
return -ENODEV;
}
break;
if ( agaw < 0 )
{
- dprintk(XENLOG_ERR VTDPREFIX,
- "IOMMU: unsupported sagaw %lx\n", sagaw);
+ printk(XENLOG_ERR VTDPREFIX "IOMMU: unsupported sagaw %lx\n", sagaw);
print_iommu_regs(drhd);
return -ENODEV;
}
switch ( pdev->type )
{
case DEV_TYPE_PCI_HOST_BRIDGE:
- if ( iommu_verbose )
- dprintk(VTDPREFIX, "d%d:Hostbridge: skip %04x:%02x:%02x.%u map\n",
- domain->domain_id, seg, bus,
- PCI_SLOT(devfn), PCI_FUNC(devfn));
+ if ( iommu_debug )
+ printk(VTDPREFIX "d%d:Hostbridge: skip %04x:%02x:%02x.%u map\n",
+ domain->domain_id, seg, bus,
+ PCI_SLOT(devfn), PCI_FUNC(devfn));
if ( !is_hardware_domain(domain) )
return -EPERM;
break;
break;
case DEV_TYPE_PCIe_ENDPOINT:
- if ( iommu_verbose )
- dprintk(VTDPREFIX, "d%d:PCIe: map %04x:%02x:%02x.%u\n",
- domain->domain_id, seg, bus,
- PCI_SLOT(devfn), PCI_FUNC(devfn));
+ if ( iommu_debug )
+ printk(VTDPREFIX "d%d:PCIe: map %04x:%02x:%02x.%u\n",
+ domain->domain_id, seg, bus,
+ PCI_SLOT(devfn), PCI_FUNC(devfn));
ret = domain_context_mapping_one(domain, drhd->iommu, bus, devfn,
pdev);
if ( !ret && devfn == pdev->devfn && ats_device(pdev, drhd) > 0 )
break;
case DEV_TYPE_PCI:
- if ( iommu_verbose )
- dprintk(VTDPREFIX, "d%d:PCI: map %04x:%02x:%02x.%u\n",
- domain->domain_id, seg, bus,
- PCI_SLOT(devfn), PCI_FUNC(devfn));
+ if ( iommu_debug )
+ printk(VTDPREFIX "d%d:PCI: map %04x:%02x:%02x.%u\n",
+ domain->domain_id, seg, bus,
+ PCI_SLOT(devfn), PCI_FUNC(devfn));
ret = domain_context_mapping_one(domain, drhd->iommu, bus, devfn,
pdev);
switch ( pdev->type )
{
case DEV_TYPE_PCI_HOST_BRIDGE:
- if ( iommu_verbose )
- dprintk(VTDPREFIX, "d%d:Hostbridge: skip %04x:%02x:%02x.%u unmap\n",
- domain->domain_id, seg, bus,
- PCI_SLOT(devfn), PCI_FUNC(devfn));
+ if ( iommu_debug )
+ printk(VTDPREFIX "d%d:Hostbridge: skip %04x:%02x:%02x.%u unmap\n",
+ domain->domain_id, seg, bus,
+ PCI_SLOT(devfn), PCI_FUNC(devfn));
if ( !is_hardware_domain(domain) )
return -EPERM;
goto out;
goto out;
case DEV_TYPE_PCIe_ENDPOINT:
- if ( iommu_verbose )
- dprintk(VTDPREFIX, "d%d:PCIe: unmap %04x:%02x:%02x.%u\n",
- domain->domain_id, seg, bus,
- PCI_SLOT(devfn), PCI_FUNC(devfn));
+ if ( iommu_debug )
+ printk(VTDPREFIX "d%d:PCIe: unmap %04x:%02x:%02x.%u\n",
+ domain->domain_id, seg, bus,
+ PCI_SLOT(devfn), PCI_FUNC(devfn));
ret = domain_context_unmap_one(domain, iommu, bus, devfn);
if ( !ret && devfn == pdev->devfn && ats_device(pdev, drhd) > 0 )
disable_ats_device(seg, bus, devfn);
break;
case DEV_TYPE_PCI:
- if ( iommu_verbose )
- dprintk(VTDPREFIX, "d%d:PCI: unmap %04x:%02x:%02x.%u\n",
- domain->domain_id, seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
+ if ( iommu_debug )
+ printk(VTDPREFIX "d%d:PCI: unmap %04x:%02x:%02x.%u\n",
+ domain->domain_id, seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
ret = domain_context_unmap_one(domain, iommu, bus, devfn);
if ( ret )
break;