Hey all!
So I'm that annoying guy who keeps asking questions on the irc channel about VT
switching and KMS. I suppose I am now moving that discussion here so as to
(hopefully) get more responses.
So I made a kernel patch which allows (at least as far as the VT subsystem is
concerned) a VT switch to happen even if the VT being switched away from is
managed by a process. Since this new VT mode is basically a cross between
VT_AUTO and VT_PROCESS, I just called it VT_PROCESS_AUTO. My impression (and
the impression of a couple of other people who I've asked) is that this is now
safe to do with KMS.
However, I'd like to confirm some of my impressions as well as get help on how
to use the new mode in X. So:
Question #1 is to the developers of the xf86 video drivers which can use KMS (I
think this is currently intel + ati + nouveau, but please correct me if I'm
wrong), as well as to the developers of KMS itself:
When using KMS, is it safe for the {Enter,Leave}VT callbacks to not be called
exactly prior to entering/leaving a VT? Obviously if the drivers didn't
register these callbacks then it would be pretty easy to tell, but all three of
the drivers listed above DO register these callbacks, whether in the KMS
context or otherwise. So since I assume that these callbacks do have some
purpose, I guess my question is really: what sort of effect would not executing
them have? Would it cause text VTs to not work? Would it cause subsequent usage
of X to not work? Would it have some other problematic effect? I'd just like to
get as many opinions about this as possible, because it's a pretty crucial
point in all this.
Question #2 is directed at the developers who work on the X server:
Even if the answer to question #1 is yes, the X server still needs to be able
to decide whether to use VT_PROCESS_AUTO, i.e. it needs to be able to check
whether KMS is being used. Not having done any X hacking, this is proving to
have quite a learning curve for me. Here are some of the preliminary
assumptions I'm making and some of the things I've determined by grepping
through the code (lots of these things will be obvious to most of you, just
bear with me):
1. At least at first, I'm only going to try to get this working for the xfree86
server (i.e. not the kdrive or dmx servers, which I think(?) will also need
some modification, assuming they're still maintained?).
2. It looks like all of the information needed to make the KMS determination is
stored in global variables (xf86Screens, etc), so I won't need to modify a
bunch of functions so that they can pass more information around. This should
make it easier.
3. The check would have to be done for all screens, because the VT callbacks
are executed for all of them on leave/enter (this would probably be obvious to
me if I had ever used more than one screen, but I never have). Alternatively,
maybe the check could just be done for all devices in use, if this is more
efficient?
4. There seem to me to be two different ways of accomplishing the check itself:
a. The check would be done completely in the X server, i.e. the X server does
all of the KMS detection itself. I think I could use something like the
i830_kernel_mode_enabled function in the intel driver, minus the module loading
functions. I guess the downside of this is that the X server would have to link
with libdrm.
b. The video drivers could set a field in the ScrnInfoPtr that they are given
(or wherever) which specifies whether switching before calling the callbacks is
allowed. The downside of this approach is that it would probably cause an
ABI-level incompatibility, and also drivers which can use KMS would have to
modified. However, it might be more correct because the drivers could say
whether they are actually using KMS, instead of just whether KMS is supported
(or is KMS always being used when it is supported?). Also, the drivers could
set this field during the course of their own initialization, which would
resulting in very little new code. The X server could set this field to FALSE
by default, so that non-KMS drivers wouldn't have to be modified.
How does this sound? Does most of this sound right? Which way should I perform
the check?
Also, I'm curious if there's actually really any interest in this change. I
don't know if it's just that I've been asking at the wrong times or what, but
responses to my queries about this stuff on the irc channel seem to be a bit
apathetic. Is this not something people want/care about?
Thanks!
Ari
_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel