All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Zhao Yakui <yakui.zhao@intel.com>
Cc: "intel-gfx@lists.freedesktop.org" <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 0/5] drm/i915: Add the support of dual BSD rings on BDW GT3
Date: Thu, 10 Apr 2014 08:58:25 +0200	[thread overview]
Message-ID: <20140410065825.GI9262@phenom.ffwll.local> (raw)
In-Reply-To: <1397100526.2039.137.camel@genxdev-ykzhao.sh.intel.com>

On Thu, Apr 10, 2014 at 11:28:46AM +0800, Zhao Yakui wrote:
> On Wed, 2014-04-09 at 08:45 -0600, Daniel Vetter wrote:
> > On Wed, Apr 09, 2014 at 09:59:51AM +0800, Zhao Yakui wrote:
> > > 
> > > This is the patch set that tries to add the support of dual BSD rings on BDW
> > > GT3. Based on hardware spec, the BDW GT3 has two independent BSD rings, which
> > > can be used to process the video commands. To be simpler, it is transparent 
> > > to user-space driver/middleware. In such case the kernel driver will decide
> > > which ring is to dispatch the BSD video command.
> > > 
> > > As every BSD ring is powerful, it is enough to dispatch the BSD video command
> > > based on the drm fd. In such case the different BSD ring is used for video playing
> > > back and encoding. At the same time the coarse dispatch mechanism can help to avoid
> > > the object synchronization between the BSD rings.
> > 
> > Ok, I've quickly read through it all and commented on a few things. Imo
> > the last patch should be massively simplified, at least for the first
> > round. Other things look small.
> > 
> Hi, Daniel
> 
> Thanks for your review.
> 
> > What's still missing are testcases, and I have two things in mind here:
> > - Exercise the 2nd ring dispatch and sync a bit. Since the 2nd bsd ring is
> >   hidden within the kernel I think the right approach would be to open a
> >   few drm fds (10 or so) and then randomly use them with a dummy reloc. We
> >   have two testcases which can be used as blueprints that need
> >   adjustement:
> > 
> >   - gem_ring_sync_loop: Probably easiest to copy it to a new file as
> >     gem_multi_bsd_sync_loop. This test exercises semaphores.
> >   - gem_dummy_reloc_loop, subtest mixed: Almost the same as the above, but
> >     the sync is done _inside_ the loop and hence this exercises gpu/cpu
> >     sync. We need both tests adjusted, for for this we need a new
> >     multi-bsd test.
> 
> Agree with your concerns. I will try to add the
> gem_multi_bsd_sync_loop/dummy_reloc_loop test case so that it can test
> the sync with multi-BSD.
> 
> BTW: How about if I directly add multiple fds in gem_ring_sync_loop test
> case and then test the sync among the different rings?  In such case the
> user-application doesn't need to know the existence of multi-BSD rings.

We don't need it for the other rings, so I think it's better to leave the
existing tests as-is to avoid introducing bugs. Testing testcase is always
fairly hard, since you have to break your kernel to make sure the test
still catches bugs ;-)

Also for testing VCS1 and VCS2 we need to have multiple fd using the
_same_ logical ring exposed to userspace, so the test logic will look a
bit different anyway.

> > - New testcase to fully test main execbuffer flags. This is simply
> >   something that's we don't yet have. The next guy to touch execbuf code
> >   needs to add it, and it looks like that's you ;-) I've done a JIRA task
> >   for the resource streamer work, but I think the resource streamer wont
> >   be merged anytime soon. So I'll reassign to you. Jira task is VIZ-3129.
> 
> For the new testcase of execbuffer flag:  Do you have any idea about
> which kind of exec flag needs to be checked? Do you have any idea about
> the expected failure/successful behavour for the flags?
>    For example: I915_EXEC_PINNED : If one object is not pinned and
> submitted, what behavour is expected? Fail or wrong?

I've clarified the JIRA, the test is just for the flags/values in the main
execbuf structure. And the idea is to do the basic api sanity checking as
outlined in my blog post

http://blog.ffwll.ch/2013/11/botching-up-ioctls.html

i.e. go through all fields in struct drm_i915_gem_execbuffer2 and write a
test which checks that the kernel correctly rejects invalid input data. So
e.g. for pointer you can supply NULL or a pointer to invalid memory,
buffer count is already checked with the overflow tests, but also invalid
flags and also making sure that if reserved fields aren't 0 the kernel
rejects the batch.

Of course to be able to check this you first need to construct a valid
no-op batch (e.g. copy from gem_exec_nop.c) and submit it (to make sure no
one breaks the test later on). Then each subtest only changes the relevant
field to make sure the kernel really did check the field (and not just
returned -EINVAL due to something else).

Some execbuf fields are special and e.g. contexts are not valid when
there's no hw context support.

If you want to look for examples check out the basic api tests for
recently added ioctls like in gem_reset_stats.c. Execbuffer ioctl is
simply a bit more complex.

Cheers, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

  reply	other threads:[~2014-04-10  6:58 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-09  1:59 [PATCH 0/5] drm/i915: Add the support of dual BSD rings on BDW GT3 Zhao Yakui
2014-04-09  1:59 ` [PATCH 1/5] drm/i915: Split the BDW device definition to prepare for " Zhao Yakui
2014-04-09 14:27   ` Daniel Vetter
2014-04-10  0:44     ` Zhao Yakui
2014-04-09  1:59 ` [PATCH 2/5] drm/i915:Initialize the second BSD ring on BDW GT3 machine Zhao Yakui
2014-04-09  1:59 ` [PATCH 3/5] drm/i915:Handle the irq interrupt for the second BSD ring Zhao Yakui
2014-04-09  1:59 ` [PATCH 4/5] drm/i915:Add the VCS2 switch in Intel_ring_setup_status_page for Gen7 to remove the switch check warning Zhao Yakui
2014-04-09 14:29   ` Daniel Vetter
2014-04-10  0:45     ` Zhao Yakui
2014-04-09  1:59 ` [PATCH 5/5] drm/i915:Use the coarse mechanism based on drm fd to dispatch the BSD command on BDW GT3 Zhao Yakui
2014-04-09 14:34   ` Daniel Vetter
2014-04-10  2:24     ` Zhao Yakui
2014-04-10  6:48       ` Daniel Vetter
2014-04-10  8:04         ` Zhao Yakui
2014-04-10  9:03           ` Daniel Vetter
2014-04-11  0:53             ` Zhao Yakui
2014-04-09 14:45 ` [PATCH 0/5] drm/i915: Add the support of dual BSD rings " Daniel Vetter
2014-04-10  3:28   ` Zhao Yakui
2014-04-10  6:58     ` Daniel Vetter [this message]
2014-04-10  8:28       ` Zhao Yakui
2014-04-10  9:04         ` Daniel Vetter
2014-04-11  0:56           ` Zhao Yakui
2014-04-11  8:57             ` Daniel Vetter
2014-04-14  1:05               ` Zhao Yakui

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140410065825.GI9262@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=yakui.zhao@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.