[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4] x86/msi: fix locking for SR-IOV devices
On 09.10.2024 21:44, Stewart Hildebrand wrote: > On 8/28/24 06:36, Jan Beulich wrote: >> On 27.08.2024 05:59, Stewart Hildebrand wrote: >>> --- a/xen/drivers/passthrough/pci.c >>> +++ b/xen/drivers/passthrough/pci.c >>> @@ -341,6 +341,8 @@ static struct pci_dev *alloc_pdev(struct pci_seg *pseg, >>> u8 bus, u8 devfn) >>> >>> list_add(&pdev->alldevs_list, &pseg->alldevs_list); >>> >>> + INIT_LIST_HEAD(&pdev->physfn.vf_list); >> >> There is a certain risk with doing such uniformly when the field is part >> of a union. Yes, little initialization has happened up to here, but I'm >> still concerned. (One of the reasons I don't like the struct list_head >> instances to be split, despite your legitimate point regarding naming.) >> At the very least this wants moving yet earlier in the function, before >> the new struct is passed anywhere else. > > Understood. I personally have a slight preference for keeping the entry > and head names distinct, so I'll plan to move the initialization > earlier. However, I could easily be convinced to un-split the struct > list_head instances if that's your preference. Let me know. I indicated before that this would be my preference, without meaning to insist on this folding. >>> + list_for_each_entry_safe(vf_pdev, tmp, >>> &pdev->physfn.vf_list, >>> + virtfn.entry) >>> + ret = pci_remove_device(vf_pdev->sbdf.seg, >>> + vf_pdev->sbdf.bus, >>> + vf_pdev->sbdf.devfn) ?: ret; >> >> And if this fails, the VF will still remain orphaned. I think in the >> model I had suggested no such risk would exist. >> >> Misra also isn't going to like the recursion here. > > With the ASSERTs being addressed directly, there's no need to remove > the VFs right away with the PF. > > BTW, I don't think refusing a removal "request" would be a good idea. > Dom0 isn't really requesting the device to be removed. Dom0 has already > removed the device (e.g. in response to hot-unplug or SR-IOV disable), > and is merely informing Xen of the removal. Just to clarify: I don't mean returning an error here to indicate "refusal". As you say, this is merely a notification. Yet I think it's still legitimate to pass back an error. Whether the Dom0 kernel can do anything useful with that error is a separate question. > So during PF removal, I'll plan (for v5) to unlink the the VFs from the > PF, and continue to rely on dom0 to inform Xen of PF and VF removal > individually. By unlink, I mean set vf_pdev->virtfn.pf_pdev = NULL and > remove the VFs from the list. Probably also set vf_pdev->broken = true. As to the latter - yes. For the rest I guess I need to see the new code. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |