Xu Yilun wrote: > > > > + > > > > +/* collect TSM capable devices to rendezvous with the tsm driver */ > > > > +static DEFINE_XARRAY(pci_tsm_devs); > > > > > > imho either this or pci_dev::tsm is enough but not necessarily both. > > > > You mean: > > > > s/pci_tsm_devs/tsm_devs/ > > > > ? > > I don't think the concern is just a renaming. My understanding is, we > already have a struct pci_tsm embedded in struct pci_dev, we could loop > and find all TSM capable devices by: > > for_each_pci_dev(pdev) { > if (pdev->tsm) > pci_tsm_add/del(pdev); > } > A dedicated list for TSM capable devices seems not necessary. Not the first time this criticism has been raised against pci_tsm_devs. I think for_each_pci_dev() is potentially wasteful, but it is trivial to add back if for_each_pci_dev() scanning becomes too expensive. > But my concern is about VFs. VFs are as well TSM capable but not > applicable for tsm_ops->exec(TSM_EXEC_CONNECT), maybe not applicable > for tsm_ops->add() either. One way to distinguish PF/VFs is we only > collect PFs in pci_tsm_devs, but all TSM capable devices have > valid pci_dev::tsm pointer. > > TSM capable devices in Guest should not been collected in pci_tsm_devs > either. Yes, for this initial phase of the enabling only PF operations are relevant.