From 66a01f1158cf5dbe18dd2d5db7bb24080363ae21 Mon Sep 17 00:00:00 2001 From: Aaron Sierra Date: Mon, 9 Dec 2013 10:05:40 -0600 Subject: [PATCH] vme_user: Update API to work in mixed environments This patch updates the vme_master and vme_slave structures to use types with well defined size and to prevent the compiler from inserting padding (between enable and vme_addr for one). The original vme_master and vme_slave structs would be different sizes and have different layouts depending on whether they were built for a 32-bit or 64-bit system. On x86 it is possible to have a 32-bit userspace and a 64-bit kernel. In this type of environment, the userspace and kernel vme_user APIs would disagree and prevent ioctls from executing (based on ioctl signatures from _IOR and _IOW). Signed-off-by: Aaron Sierra Acked-by: Martyn Welch Signed-off-by: Greg Kroah-Hartman --- drivers/staging/vme/devices/vme_user.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/staging/vme/devices/vme_user.h b/drivers/staging/vme/devices/vme_user.h index 280ccc7f26bb..c3b496413211 100644 --- a/drivers/staging/vme/devices/vme_user.h +++ b/drivers/staging/vme/devices/vme_user.h @@ -7,10 +7,10 @@ * VMEbus Master Window Configuration Structure */ struct vme_master { - int enable; /* State of Window */ - unsigned long long vme_addr; /* Starting Address on the VMEbus */ - unsigned long long size; /* Window Size */ - u32 aspace; /* Address Space */ + u32 enable; /* State of Window */ + u64 vme_addr; /* Starting Address on the VMEbus */ + u64 size; /* Window Size */ + u32 aspace; /* Address Space */ u32 cycle; /* Cycle properties */ u32 dwidth; /* Maximum Data Width */ #if 0 @@ -18,7 +18,7 @@ struct vme_master { int prefetchsize; /* Prefetch Read Size (Cache Lines) */ char wrpostenable; /* Write Post State */ #endif -}; +} __packed; /* @@ -31,17 +31,17 @@ struct vme_master { /* VMEbus Slave Window Configuration Structure */ struct vme_slave { - int enable; /* State of Window */ - unsigned long long vme_addr; /* Starting Address on the VMEbus */ - unsigned long long size; /* Window Size */ - u32 aspace; /* Address Space */ + u32 enable; /* State of Window */ + u64 vme_addr; /* Starting Address on the VMEbus */ + u64 size; /* Window Size */ + u32 aspace; /* Address Space */ u32 cycle; /* Cycle properties */ #if 0 char wrpostenable; /* Write Post State */ char rmwlock; /* Lock PCI during RMW Cycles */ char data64bitcapable; /* non-VMEbus capable of 64-bit Data */ #endif -}; +} __packed; struct vme_irq_id { __u8 level; -- 2.39.5