Hi,

Daniele Nicolodi wrote:
> Alexis Berlemont wrote:
> > Daniele Nicolodi wrote:
> >> After fixing analogy to permit continuous acquisition, I discovered that
> >> ongoing commands are not canceled when a device is closed (I obtain a
> >> DMA buffer owerwrite warning in the kernel log when I abruptly terminate
> >>  my acquisition program).
> >>
> >> I think this is quite a surprising behavior. I would expect that the
> >> commands are canceled when there isn't a data consumer any more. Would
> >> it be possible to cancel any ongoing command on device close? If there
> >> is agreement on this, I can look into providing a patch.
> >>
> > The close should indeed stop any occurring acquisition. I implemented
> > this behaviour. It is in my git repository.
> 
> Hi Alexis. I have been working with analogy from your git three and I
> should say that the new behavior, in my use case, is worst than the
> previous.
> 
> Now, when a device is closed, all accurring acquisition are terminated,
> also the ones that haven't been started by the current process. While it
> is possible to use at the same time two different subdevices, from two
> different processes, now it is not possible to terminate one process and
> leave the other one running. I think that the correct behavior would be
> to terminate just the acquisitions started by the current process.
> However, I have no idea on how difficult this would be.
> 

We had two alternatives: either stopping nothing or cancelling "any
ongoing command" related with the device. Cancelling only acquisitions
initiated by a specific process implies the implementation of some
tricky mechanism above the file approach (open, ioctl, close). I am
afraid that we will create some complex code for an issue which should
be solved by a suitable device file organization (maybe many dev files
instead of a single one). 

I will have a look at what you asked but I cannot ensure anything, I
have no clear solution in mind.

> This bring me also to the fact that there isn't currently a way to
> prevent two concurrent processes to access the same subdevice,
> interfering each other. Would it possible to have a lock() method, as
> comedi has?

There is a lock mechanism but it is not exposed as it is in
comedi. The lock system is at the subdevice level: you cannot initiate
an instruction if a command is occuring (the reverse is true of
course). This is handled with a subdevice status bitfield atomically
accessed. Have a look at a4l_reserve_transfer() and tell me if I miss
something. 

> 
> Thanks. Cheers,
> -- 
> Daniele
> 
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@gna.org
> https://mail.gna.org/listinfo/xenomai-core

-- 
Alexis.

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to