On 11/09/2018 10:34 PM, Dmitry Vyukov wrote:
>>> What would be a good improvement is if you add this to the kernel command 
>>> options:
>>> "vivid.n_devs=2 vivid.multiplanar=1,2"
>>>
>>> This will create two vivid instances, one using the single planar API and 
>>> one using
>>> the multiplanar API. That will improve the test coverage.
>>
>> Re this and collisions between multiple test processes. We actually
>> would like to have moar devices and partition them between test
>> processes. Say if we need need devices for 8 test processes, will it
>> work to specify something like "vivid.n_devs=16
>> vivid.multiplanar=1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2" and then use
>> devices 0/1 in the first test process, 2/3 in the second and so on?
>>
>> Without giving any flags, I see 8 /dev/video* devices, does
>> vivid.n_devs defaults to 8?
> 
> I am a bit lost.
> 
> vivid.n_devs=16 vivid.multiplanar=1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2
> creates 32 /dev/video* devices.

I see 38 /dev/video* devices: the first 3 are from vimc, then 2 * 16 = 32
vivid devices (2 video nodes for each instance), then a vim2m device and
finally two vicodec devices.

So you should always see 6 + n_devs * 2 video devices.

> 
> but vivid.n_devs=8 vivid.multiplanar=1,2,1,2,1,2,1,2 creates 24
> /dev/video* devices.
> 
> These parameters also affect /dev/{vbi,radio,swradio} in strange ways
> 
> Also, by default there is /dev/radio0 and /dev/radio1, are these
> different types of devices, e.g. "source" and "sink"? Or they are
> identical? And the same question for other types of devices?

vivid creates two radio devices per instance: one emulates a radio tuner,
one emulates a radio modulator (so yes, source and sink). Same for vbi
(one source, one sink) and one swradio device. It also creates two cec
devices (source and sink).

> 
> How can I create 8 independent partitions of devices? What devices
> will belong to each partition?

Exactly as you did above. Instance X (starting at 0) uses video nodes
3+2*X and 4+2*X.

> 
> 
>>> I also noticed that you appear to test only video devices. But vivid also 
>>> creates
>>> vbi, radio and swradio devices. It would be nice to have those tested as 
>>> well.
>>
>> Will do.
>> FTR, this is these devices:
>>
>> # ls -l /dev/{vbi,radio,swradio}*
>> crw-rw---- 1 root video 81, 14 Nov  9 21:07 /dev/radio0
>> crw-rw---- 1 root video 81, 15 Nov  9 21:07 /dev/radio1
>> crw-rw---- 1 root video 81, 13 Nov  9 21:07 /dev/swradio0
>> crw-rw---- 1 root video 81, 11 Nov  9 21:07 /dev/vbi0
>> crw-rw---- 1 root video 81, 12 Nov  9 21:07 /dev/vbi1
>>
>> Why are there 2 radio and vbi? Are they different? Is it possible to
>> also create more of them? Are there any other useful command line args
>> for them?

As mentioned: the first is capture, the second output. It's per vivid
instance.

<snip>

>>>> CREATE_BUFS privatization is somewhat unfortunate, but I guess we can
>>>> live with it for now.
>>>
>>> Sorry, I'm not sure what you mean.
>>
>> You said:
>>
>>>> But after calling REQBUFS or CREATE_BUFS the filehandle that
>>>> called those ioctls becomes owner of the device until the buffers are
>>>> released. So other filehandles cannot do any streaming operations (EBUSY
>>>> will be returned).
>>
>> This semantics are somewhat unfortunate for syzkaller because one test
>> process will affect/block other test processes, and we try to make
>> them as independent as possible. E.g. If this can affect syzkaller
>> ability to create reproducers, because in one run of a test if was
>> affected by an unrelated test and crashed, but if we try to reproduce
>> the crash on the same test it won't crash again because now it's not
>> affected by the unrelated test.
>>
>> But if we create more devices and partition them across test
>> processes, it will resolve this problem?

I think it will help, yes.

>>
>>
>>>> I assume that when the process dies it will release everything at
>>>> least, because fuzzer will sure not pair create with release all the
>>>> time.

Reply via email to