05/12/2017 16:13, Ananyev, Konstantin:
> 
> Hi Thomas,
> 
> > Hi,
>  
> > I will give my view on locking and synchronization in a different email.
> > Let's discuss about the API here.
>  
> > 05/12/2017 12:12, Ananyev, Konstantin:
> > >> From: Matan Azrad [mailto:ma...@mellanox.com]
> >> > From: Ananyev, Konstantin [mailto:konstantin.anan...@intel.com]
>  
> > > > > If the goal is just to have an ability to recognize is that device is 
> > > > > managed by
> > > > > another device (failsafe, bonding, etc.), then I think all we need is 
> > > > > a pointer
> > > > > to rte_eth_dev_data of the owner (NULL would mean no owner).
> > > > 
> > > > I think string is better than a pointer from the next reasons:
> > > > 1. It is more human friendly than pointers for debug and printing.
> > > 
> > > We can have a function that would take an owner pointer and produce nice
> > > pretty formatted text explanation: "owned by fail-safe device at port X" 
> > > or so.
>  
> > I don't think it is possible or convenient to have such function.
> 
> Why do you think it is not possible?
Because of applications being the owner (discussion below).

> > Keep in mind that the owner can be an application thread.
> > If you prefer using a single function pointer (may help for
> > atomic implementation), we can allocate an owner structure containing
> > a name as a string to identify the owner in human readable format.
> > Then we just have to set the pointer of this struct to rte_eth_dev_data.
> 
> Basically you'd like to have an ability to set something different then
> pointer to rte_eth_dev_data as an owner, right?

No, it can be a pointer, or an id, I don't care.

> I think this is possible too, just not sure it will useful.
>  
> > > What I meant - this api to set/get ownership should be sort of internal 
> > > to ethdev layer.
> > > Let say it would be used for failsafe/bonding (any other compound) device 
> > > that needs
> > > to own/manage several low-level devices.
> > > So in normal situation user wouldn't need to use that API directly at all.
>  
> > Again, the application may use this API to declare its ownership.
> 
> Could you explain that a bit: what would mean 'application declares an 
> ownership on device'?
> Does it mean that no other application will be allowed to do any control op 
> on that device
> till application will clear its ownership?
> I.E. make sure that at each moment only one particular thread can modify 
> device configuration?
> Or would it be totally informal and second application will be free to ignore 
> it?

It is an information.
It will avoid a library taking ownership on a port controlled by the app.

> If it will be the second one - I personally don't see much point in it.
> If it the first one - then simplest and most straightforward way would be -
> introduce a mutex (either per device or just per whole rte_eth_dev[]) and 
> force
> each control op to grab it at entrance release at exit.

No, a mutex does not provide any information.

> > And anwyway, it may be interesting from an application point of view
> > to be able to list every devices and their internal owners.
> 
> Yes sure application is free to call 'get' to retrieve information etc.
> What I am saying for normal operation - application don't have to call that 
> API.
> I.E. - we don't need to change testpmd, etc. apps because that API was 
> introduced.

Yes the ports can stay without any owner if the application does not fill it.

Reply via email to