From: Jeff H. <jha...@pr...> - 2000-03-17 00:47:51
|
A V Naga Muni Reddy wrote: > > Hi, > > Still in agpgart module the start of pages to insert in GTT > is passed by the user through bind ioctl. > > If one has to insert pages he needs to check for -EBUSY > errors and loop through the entire GTT. Would it be better if > the driver fills up pg_start of agp_bind structure instead of > user filling up. All this allocation should be done by only one process. If you need memory in the GTT you should be asking the Xserver for it (or whatever your controlling process is). Things are implemented this way so that the controlling process can know intimate details of how memory is laid out. This is very important for the I810, since you want to set tiled memory on certain regions of the aperture. If you made the kernel do the layout, then you would have to create device specific code in the kernel to make sure that the backbuffer/dcache are aligned for tiled memory. This adds complexity to the kernel that doesn't need to be there, and imposes restrictions on what you can do with agp memory. Also, the current Xserver implementation (4.0) actually locks out other applications from adding to the GTT. While the Xserver is active, the Xserver is the only one who can add memory. Only the controlling process may add things to the GTT, and while a controlling process is active, no other application can be the controlling process. Microsoft's VGART does things like you are describing I believe. I think its bad design. It enforces a policy on whoever uses it, and is not flexible. When you are designing low level system routines I think it is very important to make sure your design has the minimum of policy. Otherwise when you want to do something different you have to change the interface, or create custom drivers for each application that needs to do things differently. -Jeff |