Hi,

Sorry for the late reply.

Daniele Nicolodi wrote:
> Daniele Nicolodi wrote:
> > Alexis Berlemont wrote:
> >> If you want to test infinite acquisitions right now, you can clone my
> >> git repository. I just pushed the modifications on it. I have not made
> >> a pull request yet because I want to be sure there is no regression. 
> > 
> > Thanks! I'll test it as soon as possible.
> 
> I'm testing it now.
> 
> > I think I just stumbled into the ring buffer bug you fixed in your
> > repository :-) It took me a while to understand if the problem was in
> > the hardware, in my code, or somewhere else in the stack...
> 
> Unfortunately my ring buffer problem is not fixed by you patch. What I'm
> experiencing is exposed by this (pseudo) code:
> 
> a4l_open(dsc, device)
> a4l_mmap(dsc, subdevice, bufsize, &map)
> a4l_snd_command(dsc, cmd)
> 
> /* preload buffer */
> written = write_to_buffer(map, bufsize)
> 
> /* send internal trigger */
> a4l_snd_insn(dsc,
> 
> cnt = 0;
> while (1)
>   a4l_mark_bufrw(dsc, subdevice, written, towrite);
>   cnt += written;
>   /* 1 */
>   written = write_buffer(map + (cnt % bufsize), towrite)
> 
> 
> The problem is that at the place marked with (1) the total extension of
> the buffer region that gets written exceeds the ring buffer allocated
> memory. That is ((cnt % bufsize) + towrite) > bufsize !
> 
> I do not know if this should be handled in my code, or in the driver.
> This situation is not handled in the cmd_write example code (where a
> simple memcpy() is done).

There is a bug in cmd_write and cmd_read. I have should have taken
into account the buffers edges. I will fix it. The function
a4l_mark_bufrw() is not designed to handle boundaries, that is why its
arguments represent data size not addresses.

> 
> What do you think?
> 
> Cheers,
> -- 
> Daniele

-- 
Alexis.

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

Reply via email to