pdom_dev_data
#define for_each_pdom_dev_data(pdom_dev_data, pdom) \
list_for_each_entry(pdom_dev_data, &pdom->dev_data_list, list)
#define for_each_pdom_dev_data_safe(pdom_dev_data, next, pdom) \
list_for_each_entry_safe((pdom_dev_data), (next), &pdom->dev_data_list, list)
struct pdom_dev_data *pdom_dev_data;
pdom_dev_data = kzalloc_obj(*pdom_dev_data);
if (pdom_dev_data == NULL)
pdom_dev_data->pasid = pasid;
pdom_dev_data->dev_data = dev_data;
kfree(pdom_dev_data);
list_add(&pdom_dev_data->list, &sva_pdom->dev_data_list);
static void remove_dev_pasid(struct pdom_dev_data *pdom_dev_data)
amd_iommu_clear_gcr3(pdom_dev_data->dev_data, pdom_dev_data->pasid);
list_del(&pdom_dev_data->list);
kfree(pdom_dev_data);
struct pdom_dev_data *pdom_dev_data;
for_each_pdom_dev_data(pdom_dev_data, pdom) {
if (pdom_dev_data->dev_data == dev_data &&
pdom_dev_data->pasid == pasid) {
remove_dev_pasid(pdom_dev_data);
struct pdom_dev_data *pdom_dev_data;
for_each_pdom_dev_data(pdom_dev_data, sva_pdom) {
amd_iommu_dev_flush_pasid_pages(pdom_dev_data->dev_data,
pdom_dev_data->pasid,
struct pdom_dev_data *pdom_dev_data, *next;
for_each_pdom_dev_data_safe(pdom_dev_data, next, sva_pdom)
remove_dev_pasid(pdom_dev_data);