Paul Mackerras writes:
> Egbert Eich writes:
>
> > Exactly. If we want 32 and 64-bit pices to work together we need 32bit
> > handles. If you pass a 64bit handle to a 32-bit client it's useless
> > as mmap() cannot deal with a value in offset that doesn't fit into
> > 32 bit. - at least unless we set -D_FILE_OFFSET_BITS=64. However this
> > may have other undesireable side effects.
> > If we abandon the idea that handles might be real physical addresses
> > then we can use handles that fit into 32 bit
>
> My point is that if we are going to use 32-bit handles, we have to
> convert handles to 32 bits for 64-bit processes as well as 32-bit
> processes. I don't see your patch doing that.
>
>From
https://bugs.freedesktop.org/attachment.cgi?id=2691
@@ -285,16 +324,18 @@
list->map = map;
down(&dev->struct_sem);
+ map->pub_handle = (map->type == _DRM_SHM
+ ? HandleID((unsigned long)map->handle,dev)
+ : HandleID(map->offset,dev));
list_add(&list->head, &dev->maplist->head);
up(&dev->struct_sem);
This conversion happens in HandleID().
Yes, pub_handle is unsigned long' and thus has the same size
as void *handle, but the value it contains is 32bit.
For userland the following patch takes care of a lot of
cases where an map handle is involved.
--- shared/drm.h 12 Apr 2005 17:46:45 -0000 1.1.1.1
+++ shared/drm.h 12 Apr 2005 17:48:19 -0000 1.1.1.2
@@ -126,7 +126,7 @@
#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
-typedef unsigned long drm_handle_t; /**< To mapped regions */
+typedef unsigned int drm_handle_t; /**< To mapped regions */
typedef unsigned int drm_context_t; /**< GLXContext handle */
typedef unsigned int drm_drawable_t;
typedef unsigned int drm_magic_t; /**< Magic for authentication */
This should take care of all the instances where drm_handle_t is
used.
In the patches to the Xserver and the dri drivers I had to replace
a couple of 'unsigned long' with 'drm_handle_t'.
Also Alan came across the problem with drmAddress. This should
probably be changed to
typedef drm_handle_t drmAddress;
Non of the drivers that I looked at used drmAddress, though.
I'm not saying that I haven't missed anything. I have tested things
with three different drivers and I'm pretty sure I caught everything
that matters for these drivers.
Egbert.
-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel