Please do not reply to this email: if you want to comment on the bug, go to
the URL shown below and enter yourcomments there.
https://bugs.freedesktop.org/show_bug.cgi?id=943
------- Additional Comments From [EMAIL PROTECTED] 2005-04-11 11:55 -------
> I still don't see any reason why the ABI needs to be changed. The comment
> "data structures shared between kernel, Xserver and clients have different
> sizes" is too vague to be useful - which data structures, and what stops them
> being converted?
Let me give you two examples:
1. mga_dri.h MGADRIRec is a data structure that is private to the Matrox DRI
driver. It gets initialized in the DRI X driver.
A DRI client (better to say the dri client module) can obtain this data
structure from the Xserver thru the DRI extension request
X_XF86DRIGetDeviceInfo.
Usually X Request structures are carefully designed to be machine
independent. Not in this case however: Since DRI assumes that communication
happens locally it simply copies over the entire structure.
If you look at the above structure it contains drmRegion elements.
drmRegion contains a pointer and this is 32bit on a 32bit system or for a
32bit client on a 64bit system and 64bit if the binary is 64 bit.
Therefore the last element of the MGADRIRec sarea_priv_offset comes at a
different offset depending if your client is 32 or 64 bit. If you connect
to a 64bit Xserver from a 32bit client your sarea_priv_offset value read by
the client is probably wrong.
Why should do the conversion? There is no way for the client to know if the
structure has been sent by a 32bit or 64bit server. Also the server doesn't
know what client is connected. (Only endianess information is transmitted in
the X connection block).
2. The SAREA also contains a driver private structure (in case of the matrox
driver contained in mga_sarea.h:MGASAREAPrivRec
(drm: mga_drm.h:drm_mga_sarea_t). Its data is shared between the kernel and
a
DRI client. On 64bit systems it's conceivable that the kernel runs 64bit.
How can the kernel and a DRI client share data thru a structure with
different size?
Converting the data structures of the ioctls is the easy part. You can simply
write 'wrappers'.
The only exception is where the kernel hands over 64bit 'handles' to user space
which are used as offsets in mmap(). This doesn't work in 32bit user space.
I've solved this problem without changing the ABI. However the handle is no real
pointer any more which could cause issues to some drivers.
--
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel