Commit:     f4d2781731e846c2f01dd85e71883d120860c6dd
Parent:     de7f928ca460005086a8296be07c217aac4b625d
Author:     David Woodhouse <[EMAIL PROTECTED]>
AuthorDate: Sat Jun 16 10:48:19 2007 +0100
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sat Jun 16 09:39:05 2007 -0700

    fix radeon setparam on 32/64 systems, harder.
    Commit 9b01bd5b284bbf519b726b39f1352023cb5e9e69 introduced a
    compat_ioctl handler for RADEON_SETPARAM, the sole purpose of which was
    to handle the fact that on i386, alignof(uint64_t)==4.
    Unfortunately, this handler was installed for _all_ 64-bit
    architectures, instead of only x86_64 and ia64.  And thus it breaks
    32-bit compatibility on every other arch, where 64-bit integers are
    aligned to 8 bytes in 32-bit mode just the same as in 64-bit mode.
    Arnd has a cunning plan to use 'compat_u64' with appropriate alignment
    attributes according to the 32-bit ABI, but for now let's just make the
    compat_radeon_cp_setparam routine entirely disappear on 64-bit machines
    whose 32-bit compat support isn't for i386.  It would be a no-op with
    compat_u64 anyway.
    Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>
    Acked-by: Arnd Bergmann <[EMAIL PROTECTED]>
    Cc: Benjamin Herrenschmidt <[EMAIL PROTECTED]>
    Cc: Dave Airlie <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 drivers/char/drm/radeon_ioc32.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/char/drm/radeon_ioc32.c b/drivers/char/drm/radeon_ioc32.c
index 04126c2..56decda 100644
--- a/drivers/char/drm/radeon_ioc32.c
+++ b/drivers/char/drm/radeon_ioc32.c
@@ -349,6 +349,8 @@ static int compat_radeon_irq_emit(struct file *file, 
unsigned int cmd,
                         DRM_IOCTL_RADEON_IRQ_EMIT, (unsigned long)request);
+/* The two 64-bit arches where alignof(u64)==4 in 32-bit code */
+#if defined (CONFIG_X86_64) || defined(CONFIG_IA64)
 typedef struct drm_radeon_setparam32 {
        int param;
        u64 value;
@@ -373,6 +375,9 @@ static int compat_radeon_cp_setparam(struct file *file, 
unsigned int cmd,
        return drm_ioctl(file->f_dentry->d_inode, file,
                         DRM_IOCTL_RADEON_SETPARAM, (unsigned long) request);
+#define compat_radeon_cp_setparam NULL
+#endif /* X86_64 || IA64 */
 drm_ioctl_compat_t *radeon_compat_ioctls[] = {
        [DRM_RADEON_CP_INIT] = compat_radeon_cp_init,
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to