static DEFINE_SPINLOCK(pd_bitmap_lock);
 
-/* List of all available dev_data structures */
-static LLIST_HEAD(dev_data_list);
-
 LIST_HEAD(ioapic_map);
 LIST_HEAD(hpet_map);
 LIST_HEAD(acpihid_map);
        return container_of(dom, struct protection_domain, domain);
 }
 
-static struct iommu_dev_data *alloc_dev_data(u16 devid)
+static struct iommu_dev_data *alloc_dev_data(struct amd_iommu *iommu, u16 devid)
 {
        struct iommu_dev_data *dev_data;
+       struct amd_iommu_pci_seg *pci_seg = iommu->pci_seg;
 
        dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
        if (!dev_data)
        dev_data->devid = devid;
        ratelimit_default_init(&dev_data->rs);
 
-       llist_add(&dev_data->dev_data_list, &dev_data_list);
+       llist_add(&dev_data->dev_data_list, &pci_seg->dev_data_list);
        return dev_data;
 }
 
-static struct iommu_dev_data *search_dev_data(u16 devid)
+static struct iommu_dev_data *search_dev_data(struct amd_iommu *iommu, u16 devid)
 {
        struct iommu_dev_data *dev_data;
        struct llist_node *node;
+       struct amd_iommu_pci_seg *pci_seg = iommu->pci_seg;
 
-       if (llist_empty(&dev_data_list))
+       if (llist_empty(&pci_seg->dev_data_list))
                return NULL;
 
-       node = dev_data_list.first;
+       node = pci_seg->dev_data_list.first;
        llist_for_each_entry(dev_data, node, dev_data_list) {
                if (dev_data->devid == devid)
                        return dev_data;
        struct iommu_dev_data *dev_data;
        struct amd_iommu *iommu = amd_iommu_rlookup_table[devid];
 
-       dev_data = search_dev_data(devid);
+       dev_data = search_dev_data(iommu, devid);
 
        if (dev_data == NULL) {
-               dev_data = alloc_dev_data(devid);
+               dev_data = alloc_dev_data(iommu, devid);
                if (!dev_data)
                        return NULL;
 
        struct vcpu_data *vcpu_pi_info = pi_data->vcpu_data;
        struct amd_ir_data *ir_data = data->chip_data;
        struct irq_2_irte *irte_info = &ir_data->irq_2_irte;
-       struct iommu_dev_data *dev_data = search_dev_data(irte_info->devid);
+       struct iommu_dev_data *dev_data = search_dev_data(NULL, irte_info->devid);
 
        /* Note:
         * This device has never been set up for guest mode.