Re: [PATCH vfio 2/2] vfio: Split migration ops from main device ops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 24 Jun 2022 11:12:37 -0300
Jason Gunthorpe <jgg@xxxxxxxxxx> wrote:

> On Tue, Jun 21, 2022 at 10:41:46AM -0600, Alex Williamson wrote:
> > On Mon, 20 Jun 2022 00:49:09 -0300
> > Jason Gunthorpe <jgg@xxxxxxxxxx> wrote:
> >   
> > > On Sun, Jun 19, 2022 at 12:25:50PM +0300, Yishai Hadas wrote:
> > >   
> > > > Means, staying with a single device_ops but just inline a check whether
> > > > migration is really supported inside the migration get/set state callbacks
> > > > and let the core call it unconditionally.    
> > > 
> > > I find it much cleaner to have op == NULL means unsupported.
> > > 
> > > As soon as you start linking supported/unsupported to other flags it
> > > can get very complicated fairly fast. I have this experiance from RDMA
> > > where we've spent a long time now ripping out hundreds of flag tests
> > > and replacing them with NULL op checks. Many bugs were fixed doing
> > > this as drivers never fully understood what the flags mean and ended
> > > up with flags set that their driver doesn't properly implement.
> > > 
> > > The mistake we made in RDMA was not splitting the ops, instead the ops
> > > were left mutable so the driver could load the right combination based
> > > on HW ability.  
> > 
> > I don't really have an issue with splitting the ops, but what
> > techniques have you learned from RDMA to make drivers setting ops less
> > ad-hoc than proposed here?  Are drivers expected to set ops before a
> > formally defined registration point?    
> 
> Yes, the flow is the same three step process as in VFIO:
> 
>  vfio_init_group_dev()
>  [driver continues to prepare the vfio_device]
>  vfio_register_group_dev()
> 
> I included the 'ops' as an argument to vfio_init_group_dev() as a code
> reduction not a statement that the ops must be fully set before
> vfio_init_group_dev() returns.
> 
> The entire point of the init step is to allow the core and driver to
> co-operate and fully initialize the object before moving to register.
> 
> So I don't view it as ad-hoc that the object needs further setup after
> vfio_init_group_dev().
> 
> > Is there an API for setting ops or is it open coded per driver?  
> 
> RDMA uses a function ib_set_device_ops() but that is only because
> there is alot of code in that function to do the copying of ops
> pointers. Splitting avoids the copying so we don't really need a
> function.

So maybe we just need a comment in the definition of the
vfio_migration_ops that vfio_device.mig_ops is a static property of the
vfio_device which must be set prior to registering the vfio_device.
Thanks,

Alex




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux