Messages in this thread | | | Date | Tue, 9 Apr 2019 17:52:39 +0300 | From | Andriy Shevchenko <> | Subject | Re: [PATCH 15/18] iommu/vt-d: Add bind guest PASID support |
| |
On Mon, Apr 08, 2019 at 04:59:30PM -0700, Jacob Pan wrote: > When supporting guest SVA with emulated IOMMU, the guest PASID > table is shadowed in VMM. Updates to guest vIOMMU PASID table > will result in PASID cache flush which will be passed down to > the host as bind guest PASID calls. > > For the SL page tables, it will be harvested from device's > default domain (request w/o PASID), or aux domain in case of > mediated device. > > .-------------. .---------------------------. > | vIOMMU | | Guest process CR3, FL only| > | | '---------------------------' > .----------------/ > | PASID Entry |--- PASID cache flush - > '-------------' | > | | V > | | CR3 in GPA > '-------------' > Guest > ------| Shadow |--------------------------|-------- > v v v > Host > .-------------. .----------------------. > | pIOMMU | | Bind FL for GVA-GPA | > | | '----------------------' > .----------------/ | > | PASID Entry | V (Nested xlate) > '----------------\.------------------------------. > | | |SL for GPA-HPA, default domain| > | | '------------------------------' > '-------------' > Where: > - FL = First level/stage one page tables > - SL = Second level/stage two page tables
> + list_for_each_entry(sdev, &svm->devs, list) { > + if (dev == sdev->dev) { ... > + } > + }
This pattern occurs at least twice, perhaps something like
#define for_each_svm_dev() \ list_for_each_entry() \ if (dev != sdev->dev) {} else
?
-- With Best Regards, Andy Shevchenko
| |