Performance improvement to vga arbitration
Henry Zhao
henry.zhao at oracle.com
Wed Jun 16 19:56:01 PDT 2010
On 06/14/10 10:53, Vignatti Tiago (Nokia-D/Helsinki) wrote:
> Hi Henry,
>
> On Sat, Jun 12, 2010 at 04:38:14AM +0200, ext Henry Zhao wrote:
>
>> On 06/11/10 04:56, Tiago Vignatti wrote:
>>
>>> http://people.freedesktop.org/~vignatti/tmp/0001-xfree86-vgaarb-disable-VGA-decoding-after-POST.patch
>>>
>>> At this point on the X server, we already POSTed all cards and we could be
>>> optimistic, letting the drivers say when we actually need VGA legacy. Right
>>> now, as you said, we're assuming legacy access as default whenever the system
>>> has more than one card, not driven by DRI (DRI and VGA legacy conflict with
>>> the current design. Dave preferred to let this away).
>>>
>> The patch didn't go to git master yet ?
>>
> not yet. Do you mind to do a proper review and insert your review tag there?
>
> For the X, we have a strict and rigorous development process now, trying to
> minimize the amount of errors being pushed upstream trees. For this we needed
> to set up a way get patches reviewed by stamping a review tag. In general it's
> not so different from what linux kernel is being doing. You may want to take a
> look on these wiki pages:
>
> http://www.x.org/wiki/XServer
> http://wiki.x.org/wiki/Development/Documentation/SubmittingPatches
>
>> We still need arbitration once a
>> device gets "graphics mode". Say devices "a" and "b" are working in
>> "graphics mode", then
>>
>> (1) A new device "c" may start, which does legacy accesses during
>> initialization;
>> (2) While "b" is still running, device "a" may exit, which also involves
>> legacy accesses.
>>
>> Therefore we need to use another lock ("locks2"), in addition to the
>> current "locks"
>> (for legacy accesses), for non-legacy accesses such that "locks2" and
>> "locks" are in
>> conflict, but "locks2"s themselves are not.
>>
>> Besides, we cannot rule out possibilities that some drivers may use legacy
>> access in some operations in "graphics mode" in certain cases, therefore
>> we need
>> to give drivers a final say on kind of accesses they use for the
>> operations, although
>> the default is non-legacy access.
>>
> right, I was missing the hotplug case. It makes perfect sense for me. And yes,
> I'd prefer to keep VGA decoding disabled by default after the session is up,
> exactly as my patch is doing.
>
>
>
>>> Also, I posted two patches to fix the userspace decoding interface on the
>>> mailing list some days ago. If you're carrying about remove cards from
>>> arbitration and stop decoding then definitely you'll want to take a look on
>>> those:
>>>
>>> http://lists.x.org/archives/xorg-devel/2010-June/009559.html
>>>
>>>
>> I had this fixed in my patch.
>>
> can you please put your reviewing tags please?
>
I noticed you have two patches lately:
[PATCH pciaccess 2/2] vgaarb: read back vga count when setting new
decoding <http://lists.x.org/archives/xorg-devel/2010-June/009558.html>
[PATCH pciaccess resent 1/2] vgaarb: decode should send new information
to the kernel <http://lists.x.org/archives/xorg-devel/2010-June/009559.html>
Can you send me them in email so that I can review them ?
>
>
>> 3 patches are posted.
>>
>
> Your explanation was good enough and clear for me. However, in all of the three
> patches, you're inserting more modifications than you described here. It makes
> the review difficult and tough.
>
Actually the important change is in-kernel vgaarb driver where an
arbitration
on locks2 (for non-legacy access) is introduced. The other two patches,
though with a lot of code changes, only deal with the interface changes
that add requesting resource (rsrc) as an argument to the lock/unlock
functions such that:
* In libpciaccess layer, we will have
pci_device_vgaarb_lock(int rsrc);
pci_device_vgaarb_trylock(int rsrc);
pci_device_vgaarb_unlock(int rsrc);
* In X server, VGAGet(x), VGAPut(x), and etc, will pass the right
operation resource mask for each wrap function. This operation
resource mask is used for lock/unlock before/after the execution
of the function. The default is non-legacy access, but drivers can
call xf86VGAarbiterDeviceOpsMask() to redefine.
So should be straightforward.
> A good habit is to split one in a series in which each patch has a different
> semantical meaning - one for cleaning up only, another introducing a hook
> function, another for the actual changes and so on. If possible, if each patch
> is independent from the other (able to compile) then it would also ease the
> search for some possible errors (using git-bisect)
>
> I'd please ask you to take a look on this page and re-send the patches, using
> a proper git-format-patch style:
>
> http://wiki.x.org/wiki/Development/Documentation/SubmittingPatches
>
>
> I have to admit that there are some parts of your kernel patch that simply
> goes being the scope of my knowledge. I'm pretty sure if you follow this tips
> on the wiki we're gonna be able to bring other guys from the community to do
> the review.
>
Thank you for pointing that, I will do it.
>
> Thank you,
>
> Tiago
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list