[linux-dvb] [PATCH] 2/3: implement DMX_SET_BUFFER_SIZE for dvr

Oliver Endriss o.endriss at gmx.de
Sat Apr 12 02:35:52 CEST 2008


Andrea wrote:
> linux-dvb-request at linuxtv.org wrote:
huh?

>  > What about this fragment:
>  > 	...
>  > 	if (!size)
>  > 		return -EINVAL;
>  >
>  > 	mem = vmalloc(size);
>  > 	if (!mem)
>  > 		return -ENOMEM;
>  >
>  > 	mem2 = buf->data;
>  >
>  >       spin_lock_irqsave(&dmxdev->lock);
>  >       buf->pread = buf->pwrite = 0;
>  > 	buf->data = mem;
>  > 	buf->size = size;
>  > 	spin_unlock_irqrestore(&dmxdev->lock);
>  >
>  > 	vfree(mem2);
>  > 	return 0;
> 
> Maybe I can think of one reason while the current code is not implemented this way:
> 
> In your version the new buffer is allocated before the old one is released.

Yes, this is intentional. See below.

> In the current implementation the old buffer is released and afterwards the new one allocated.
> 
> One could argue that the new implementation has a maximum memory requirement higher than the old one.
> It's not much but I am not too familiar with kernel development, so I don't know how important that 
> could be.
> 
> What do you think?

- With your code the demux becomes unusable if the memory allocation
  failes for some reason. This should be avoided. It is better have a
  working demux with a smaller buffer than to have an defunct demux.

- If there is not enough memory for both buffers, your machine has a problem
  anyway, and you should not increase buffer size.

> About the spin_lock_irqsave: currently it is not used anywhere in the code for the demux in dmxdev.c.
> I am always a bit scared when I introduce something new, maybe I am missing the current logic.

I'm sorry, spin_lock_irqsave/spin_unlock_irqrestore was a typo.
We have to use spin_[un]lock_irq because buffer writing _might_ occur
in interrupt context. So the '_irq' is very important!

CU
Oliver

-- 
----------------------------------------------------------------
VDR Remote Plugin 0.4.0: http://www.escape-edv.de/endriss/vdr/
----------------------------------------------------------------



More information about the linux-dvb mailing list