|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 2/2] VT-d: Fix vt-d flush timeout issue.
> On 15.12.2015 at 8:30pm, <JBeulich@xxxxxxxx> wrote:
> >>> On 15.12.15 at 13:23, <quan.xu@xxxxxxxxx> wrote:
> >> On 15.12.2015 at 5:17pm, <JBeulich@xxxxxxxx> wrote:
> >> >>> On 15.12.15 at 09:15, <quan.xu@xxxxxxxxx> wrote:
> >> >> On 14.12.2015 at 5:28pm, <JBeulich@xxxxxxxx> wrote:
> >> >> >>> On 12.12.15 at 14:21, <quan.xu@xxxxxxxxx> wrote:
> >> >> > @@ -88,6 +89,16 @@ struct pci_dev { #define
> >> >> > for_each_pdev(domain,
> >> >> > pdev) \
> >> >> > list_for_each_entry(pdev, &(domain->arch.pdev_list),
> >> >> > domain_list)
> >> >> >
> >> >> > +static inline void mark_pdev_unassignable(struct pci_dev *pdev) {
> >> >> > + pdev->info.is_unassignable = 1; }
> >> >> > +
> >> >> > +static inline bool_t is_pdev_unassignable(const struct pci_dev
> >> >> > +*pdev) {
> >> >> > + return pdev->info.is_unassignable; }
> >> >>
> >> >> Are you aware that we already have a mechanism to prevent
> >> >> assignment (via pci_{ro,hide}_device())? I think at the very least
> >> >> this check should
> >> > consider both
> >> >> variants. Whether fully using the existing mechanism for your
> >> >> purpose is feasible I can't immediately tell (since the ownership
> >> >> change may be problematic at the points where you want the flagging to
> happen).
> >> >
> >> > pci_{ro,hide}_device() is dangerous, and it makes xen crash when I tried
> >> > it.
> >> > for this case, IMO I think a flag is a better solution.
> >>
> >> I can't really judge on this without know details of the crash. As
> >> said, I'd prefer to have just a single mechanism, and would accept a
> >> second one only with proper justification (i.e. more than "is
> >> dangerous" or "makes xen crash" - after all that may also be a result of
> >> the
> functions not being used as necessary).
> >
> > Jan, one question, do pci_{ro,hide}_device() work to hide pci devices?
>
> Not sure I understand the question - the place they're used in they do work,
> yes.
Copy from pci_hide_device(), which is actually add device to dom_xen and
add pdev->domain_list to dom_xen->arch.pdev_list.
Quite similar, a second one only with proper justification, I can reassign
Device form _domain to dom_xen directly. The below is the how to deal
With device_tlb ( is it acceptable? ). It is working to hide device.
+void device_tlb_invalidate_timeout(struct iommu *iommu, u16 did,
+ u16 seg, u8 bus, u8 devfn)
+{
+ struct domain *d;
+ struct pci_dev *pdev;
+ struct hvm_iommu *hd;
+ int rc;
+
+ d = rcu_lock_domain_by_id(iommu->domid_map[did]);
+ ASSERT(d);
+ for_each_pdev(d, pdev)
+ if ( (pdev->seg == seg) &&
+ (pdev->bus == bus) &&
+ (pdev->devfn == devfn) )
+ {
+ if ( pdev->domain )
+ {
+ hd = domain_hvm_iommu(d);
+ rc = hd->platform_ops->reassign_device(d,
+ dom_xen, devfn, pdev);
+ if ( rc )
+ continue;
+ }
+ break;
+ }
+
+ if ( !is_hardware_domain(d) )
+ domain_crash(d);
+ rcu_unlock_domain(d);
+}
Quan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |