[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC 6/6] acpi:arm64: Add support for parsing IORT table
On 6/9/2017 5:15 AM, Robin Murphy wrote: > On 08/06/17 20:30, Sameer Goel wrote: > [...] >> /** >> - * iort_iommu_configure - Set-up IOMMU configuration for a device. >> + * iort_iommu_configure - Set-up IOMMU configuration for a device. This >> + * function sets up the fwspec as needed for a given device. Only PCI >> + * devices are supported for now. >> * >> * @dev: device to configure >> * >> - * Returns: iommu_ops pointer on configuration success >> - * NULL on configuration failure >> + * Returns: Appropriate acpi_status >> */ >> -const struct iommu_ops *iort_iommu_configure(struct device *dev) >> +acpi_status iort_iommu_configure(struct device *dev) >> { >> struct acpi_iort_node *node, *parent; >> - const struct iommu_ops *ops = NULL; >> u32 streamid = 0; >> + acpi_status status = AE_OK; >> >> if (dev_is_pci(dev)) { >> - struct pci_bus *bus = to_pci_dev(dev)->bus; >> + struct pci_dev *pci_device = to_pci_dev(dev); >> u32 rid; >> >> - pci_for_each_dma_alias(to_pci_dev(dev), __get_pci_rid, >> - &rid); >> + rid = PCI_BDF2(pci_device->bus,pci_device->devfn); > > Beware that the Linux code isn't actually correct to begin with[1]. I > don't know how much Xen deals with PCI bridges and quirks, but as it > stands you should be able to trivially expose the flaw here by plugging > in a Marvell 88SE912x-based SATA card and watching either DMA or MSIs > (or even both) kick up stream table faults. > Appreciate the feedback Robin. I will try to incorporate the new IORT changes when I release the first patch set. > Robin. > > [1]:http://www.spinics.net/lists/linux-acpi/msg74844.html > >> >> node = iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX, >> - iort_match_node_callback, &bus->dev); >> + iort_match_node_callback, dev); >> if (!node) >> - return NULL; >> + return AE_NOT_FOUND; >> >> parent = iort_node_map_rid(node, rid, &streamid, >> IORT_IOMMU_TYPE); >> >> - ops = iort_iommu_xlate(dev, parent, streamid); >> + status = iort_iommu_xlate(dev, parent, streamid); >> + >> + status = status ? AE_ERROR : AE_OK; >> >> } else { >> + status = AE_NOT_IMPLEMENTED; >> +#if 0 >> int i = 0; >> >> node = iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT, >> @@ -616,11 +655,17 @@ const struct iommu_ops *iort_iommu_configure(struct >> device *dev) >> parent = iort_node_get_id(node, &streamid, >> IORT_IOMMU_TYPE, i++); >> } >> +#endif >> } >> >> - return ops; >> + return status; >> } > -- Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |