ppr_entry_t *log, *log_base;
struct guest_iommu *iommu;
+ if ( !is_hvm_domain(d) )
+ return;
+
iommu = domain_iommu(d);
+ if ( !iommu )
+ return;
+
tail = iommu_get_rb_pointer(iommu->ppr_log.reg_tail.lo);
head = iommu_get_rb_pointer(iommu->ppr_log.reg_head.lo);
event_entry_t *log, *log_base;
struct guest_iommu *iommu;
+ if ( !is_hvm_domain(d) )
+ return;
+
iommu = domain_iommu(d);
+ if ( !iommu )
+ return;
+
tail = iommu_get_rb_pointer(iommu->event_log.reg_tail.lo);
head = iommu_get_rb_pointer(iommu->event_log.reg_head.lo);
p2m_type_t t;
struct guest_iommu *iommu = domain_iommu(d);
+ if ( !iommu )
+ return -EACCES;
+
iommu->mmio_base = base;
base >>= PAGE_SHIFT;
return;
iommu = domain_iommu(d);
+ if ( !iommu )
+ return;
tasklet_kill(&iommu->cmd_buffer_tasklet);
xfree(iommu);
{
struct guest_iommu *iommu = vcpu_iommu(v);
- return addr >= iommu->mmio_base &&
+ return iommu && addr >= iommu->mmio_base &&
addr < iommu->mmio_base + IOMMU_MMIO_SIZE;
}
local_irq_enable();
spin_lock(&pcidevs_lock);
- pdev = pci_get_pdev(0, bus, devfn);
+ pdev = pci_get_pdev(iommu->seg, bus, devfn);
spin_unlock(&pcidevs_lock);
local_irq_disable();