Lines Matching defs:dev_data
75 /* List of all available dev_data structures */
188 struct iommu_dev_data *dev_data;
190 dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
191 if (!dev_data)
194 spin_lock_init(&dev_data->lock);
195 dev_data->devid = devid;
196 ratelimit_default_init(&dev_data->rs);
198 llist_add(&dev_data->dev_data_list, &dev_data_list);
199 return dev_data;
204 struct iommu_dev_data *dev_data;
211 llist_for_each_entry(dev_data, node, dev_data_list) {
212 if (dev_data->devid == devid)
213 return dev_data;
275 struct iommu_dev_data *dev_data;
278 dev_data = search_dev_data(devid);
280 if (dev_data == NULL) {
281 dev_data = alloc_dev_data(devid);
282 if (!dev_data)
286 dev_data->defer_attach = true;
289 return dev_data;
339 struct iommu_dev_data *dev_data;
341 dev_data = dev_iommu_priv_get(&pdev->dev);
343 return dev_data->errata & (1 << erratum) ? true : false;
373 struct iommu_dev_data *dev_data;
383 dev_data = find_dev_data(devid);
384 if (!dev_data)
387 dev_data->pdev = setup_aliases(dev);
399 iommu = amd_iommu_rlookup_table[dev_data->devid];
400 dev_data->iommu_v2 = iommu->is_iommu_v2;
403 dev_iommu_priv_set(dev, dev_data);
424 struct iommu_dev_data *dev_data;
426 dev_data = dev_iommu_priv_get(dev);
427 if (!dev_data)
430 if (dev_data->domain)
436 * We keep dev_data around for unplugged devices and reuse it when the
490 struct iommu_dev_data *dev_data = NULL;
503 dev_data = dev_iommu_priv_get(&pdev->dev);
505 if (dev_data && __ratelimit(&dev_data->rs)) {
520 struct iommu_dev_data *dev_data = NULL;
534 dev_data = dev_iommu_priv_get(&pdev->dev);
536 if (dev_data && __ratelimit(&dev_data->rs)) {
552 struct iommu_dev_data *dev_data = NULL;
558 dev_data = dev_iommu_priv_get(&pdev->dev);
560 if (dev_data && __ratelimit(&dev_data->rs)) {
1249 static int device_flush_iotlb(struct iommu_dev_data *dev_data,
1256 qdep = dev_data->ats.qdep;
1257 iommu = amd_iommu_rlookup_table[dev_data->devid];
1259 build_inv_iotlb_pages(&cmd, dev_data->devid, qdep, address, size);
1274 static int device_flush_dte(struct iommu_dev_data *dev_data)
1280 iommu = amd_iommu_rlookup_table[dev_data->devid];
1282 if (dev_data->pdev)
1283 ret = pci_for_each_dma_alias(dev_data->pdev,
1286 ret = iommu_flush_dte(iommu, dev_data->devid);
1290 alias = amd_iommu_alias_table[dev_data->devid];
1291 if (alias != dev_data->devid) {
1297 if (dev_data->ats.enabled)
1298 ret = device_flush_iotlb(dev_data, 0, ~0UL);
1311 struct iommu_dev_data *dev_data;
1328 list_for_each_entry(dev_data, &domain->dev_list, list) {
1330 if (!dev_data->ats.enabled)
1333 ret |= device_flush_iotlb(dev_data, address, size);
1387 struct iommu_dev_data *dev_data;
1389 list_for_each_entry(dev_data, &domain->dev_list, list)
1390 device_flush_dte(dev_data);
1989 static void do_attach(struct iommu_dev_data *dev_data,
1996 iommu = amd_iommu_rlookup_table[dev_data->devid];
1997 ats = dev_data->ats.enabled;
2000 dev_data->domain = domain;
2001 list_add(&dev_data->list, &domain->dev_list);
2009 set_dte_entry(dev_data->devid, domain, &pgtable,
2010 ats, dev_data->iommu_v2);
2011 clone_aliases(dev_data->pdev);
2013 device_flush_dte(dev_data);
2016 static void do_detach(struct iommu_dev_data *dev_data)
2018 struct protection_domain *domain = dev_data->domain;
2021 iommu = amd_iommu_rlookup_table[dev_data->devid];
2024 dev_data->domain = NULL;
2025 list_del(&dev_data->list);
2026 clear_dte_entry(dev_data->devid);
2027 clone_aliases(dev_data->pdev);
2030 device_flush_dte(dev_data);
2119 struct iommu_dev_data *dev_data;
2126 dev_data = dev_iommu_priv_get(dev);
2128 spin_lock(&dev_data->lock);
2131 if (dev_data->domain != NULL)
2145 if (dev_data->iommu_v2) {
2149 dev_data->ats.enabled = true;
2150 dev_data->ats.qdep = pci_ats_queue_depth(pdev);
2151 dev_data->pri_tlp = pci_prg_resp_pasid_required(pdev);
2155 dev_data->ats.enabled = true;
2156 dev_data->ats.qdep = pci_ats_queue_depth(pdev);
2162 do_attach(dev_data, domain);
2174 spin_unlock(&dev_data->lock);
2187 struct iommu_dev_data *dev_data;
2190 dev_data = dev_iommu_priv_get(dev);
2191 domain = dev_data->domain;
2195 spin_lock(&dev_data->lock);
2203 if (WARN_ON(!dev_data->domain))
2206 do_detach(dev_data);
2211 if (domain->flags & PD_IOMMUV2_MASK && dev_data->iommu_v2)
2213 else if (dev_data->ats.enabled)
2216 dev_data->ats.enabled = false;
2219 spin_unlock(&dev_data->lock);
2319 struct iommu_dev_data *dev_data;
2321 list_for_each_entry(dev_data, &domain->dev_list, list) {
2322 set_dte_entry(dev_data->devid, domain, pgtable,
2323 dev_data->ats.enabled, dev_data->iommu_v2);
2324 clone_aliases(dev_data->pdev);
2524 struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev);
2535 if (dev_data->domain != NULL)
2545 dev_data->use_vapic = 0;
2555 struct iommu_dev_data *dev_data;
2562 dev_data = dev_iommu_priv_get(dev);
2563 dev_data->defer_attach = false;
2565 iommu = amd_iommu_rlookup_table[dev_data->devid];
2569 if (dev_data->domain)
2577 dev_data->use_vapic = 1;
2579 dev_data->use_vapic = 0;
2721 struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev);
2723 return dev_data->defer_attach;
2746 struct iommu_dev_data *dev_data;
2748 dev_data = dev_iommu_priv_get(dev);
2749 if (!dev_data)
2757 if (!mem_encrypt_active() && dev_data->iommu_v2)
2882 struct iommu_dev_data *dev_data;
2908 list_for_each_entry(dev_data, &domain->dev_list, list) {
2916 if (!dev_data->ats.enabled)
2919 qdep = dev_data->ats.qdep;
2920 iommu = amd_iommu_rlookup_table[dev_data->devid];
2922 build_inv_iotlb_pasid(&cmd, dev_data->devid, pasid,
3082 struct iommu_dev_data *dev_data;
3086 dev_data = dev_iommu_priv_get(&pdev->dev);
3087 iommu = amd_iommu_rlookup_table[dev_data->devid];
3089 build_complete_ppr(&cmd, dev_data->devid, pasid, status,
3090 tag, dev_data->pri_tlp);
3099 struct iommu_dev_data *dev_data;
3106 dev_data = dev_iommu_priv_get(&pdev->dev);
3107 pdomain = dev_data->domain;
3110 if (pdomain == NULL && dev_data->defer_attach) {
3111 dev_data->defer_attach = false;
3132 struct iommu_dev_data *dev_data;
3137 dev_data = dev_iommu_priv_get(&pdev->dev);
3138 dev_data->errata |= (1 << erratum);
3975 struct iommu_dev_data *dev_data = search_dev_data(irte_info->devid);
3981 if (!dev_data || !dev_data->use_vapic)