pmu: add compat_pmu_ioctl
PATCH 1/1 pmu: add compat_pmu_ioctl
The ioctls are actually compatible, but due to historical mistake the numbers differ between 32bit and 64bit.
--- drivers/macintosh/via-pmu.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-)
drivers/macintosh/via-pmu.c +41 -0
@@ -2349,11 +2349,52 @@ static long pmu_unlocked_ioctl(struct file *filp,return ret; } +#ifdef CONFIG_COMPAT +#define PMU_IOC_GET_BACKLIGHT32 _IOR('B', 1, u32) +#define PMU_IOC_SET_BACKLIGHT32 _IOW('B', 2, u32) +#define PMU_IOC_GET_MODEL32 _IOR('B', 3, u32) +#define PMU_IOC_HAS_ADB32 _IOR('B', 4, u32) +#define PMU_IOC_CAN_SLEEP32 _IOR('B', 5, u32) +#define PMU_IOC_GRAB_BACKLIGHT32 _IOR('B', 6, u32) + +static long compat_pmu_ioctl (struct file *filp,u_int cmd,u_long arg) +{ +switch (cmd) { +case PMU_IOC_SLEEP : +break ; +case PMU_IOC_GET_BACKLIGHT32 : + cmd =PMU_IOC_GET_BACKLIGHT ; +break ; +case PMU_IOC_SET_BACKLIGHT32 : + cmd =PMU_IOC_SET_BACKLIGHT ; +break ; +case PMU_IOC_GET_MODEL32 : + cmd =PMU_IOC_GET_MODEL ; +break ; +case PMU_IOC_HAS_ADB32 : + cmd =PMU_IOC_HAS_ADB ; +break ; +case PMU_IOC_CAN_SLEEP32 : + cmd =PMU_IOC_CAN_SLEEP ; +break ; +case PMU_IOC_GRAB_BACKLIGHT32 : + cmd =PMU_IOC_GRAB_BACKLIGHT ; +break ; +default : +return -ENOIOCTLCMD ; + } +return pmu_unlocked_ioctl (filp, cmd, arg); +} +#endif +static const struct file_operations pmu_device_fops = { .read = pmu_read, .write = pmu_write, .poll = pmu_fpoll, .unlocked_ioctl = pmu_unlocked_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = compat_pmu_ioctl, +#endif .open = pmu_open, .release = pmu_release, };
Signature · 7 lines
1.7.2.2 -- Andreas Schwab, [email protected] GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
Quoted 2 lines · On Saturday 21 August 2010 23:32:23 Andreas Schwab wrote:
The ioctls are actually compatible, but due to historical mistake the numbers differ between 32bit and 64bit.
Looks good to me, but
drivers/macintosh/via-pmu.c static long pmu_unlocked_ioctl(struct file *filp, · line 2358
Quoted 7 lines
drivers/macintosh/via-pmu.c +7
-0+#ifdef CONFIG_COMPAT +#define PMU_IOC_GET_BACKLIGHT32 _IOR('B', 1, u32) +#define PMU_IOC_SET_BACKLIGHT32 _IOW('B', 2, u32) +#define PMU_IOC_GET_MODEL32 _IOR('B', 3, u32) +#define PMU_IOC_HAS_ADB32 _IOR('B', 4, u32) +#define PMU_IOC_CAN_SLEEP32 _IOR('B', 5, u32) +#define PMU_IOC_GRAB_BACKLIGHT32 _IOR('B', 6, u32)
It would be nicer to use compat_size_t instead of u32 for annotation purposes. Obviously both of them are defined as unsigned int, so that is no functional change.
drivers/macintosh/via-pmu.c static long pmu_unlocked_ioctl(struct file *filp, · line 2386
Quoted 1 line
drivers/macintosh/via-pmu.c +1
-0+return pmu_unlocked_ioctl (filp, cmd, arg);
This should ideally use "(unsigned long)compat_ptr(arg)" instead of just arg. Also doesn't matter on powerpc, but it's better to do it the strict way.
Arnd
[PATCH/v2] via-pmu: add compat_pmu_ioctl
The ioctls are actually compatible, but due to historical mistake the numbers differ between 32bit and 64bit.
--- drivers/macintosh/via-pmu.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-)
drivers/macintosh/via-pmu.c +42 -0
@@ -45,6 +45,7 @@#include <linux/syscalls.h> #include <linux/suspend.h> #include <linux/cpu.h> +#include <linux/compat.h> #include <asm/prom.h> #include <asm/machdep.h> #include <asm/io.h>
@@ -2349,11 +2350,52 @@ static long pmu_unlocked_ioctl(struct file *filp,return ret; } +#ifdef CONFIG_COMPAT +#define PMU_IOC_GET_BACKLIGHT32 _IOR('B', 1, compat_size_t) +#define PMU_IOC_SET_BACKLIGHT32 _IOW('B', 2, compat_size_t) +#define PMU_IOC_GET_MODEL32 _IOR('B', 3, compat_size_t) +#define PMU_IOC_HAS_ADB32 _IOR('B', 4, compat_size_t) +#define PMU_IOC_CAN_SLEEP32 _IOR('B', 5, compat_size_t) +#define PMU_IOC_GRAB_BACKLIGHT32 _IOR('B', 6, compat_size_t) + +static long compat_pmu_ioctl (struct file *filp,u_int cmd,u_long arg) +{ +switch (cmd) { +case PMU_IOC_SLEEP : +break ; +case PMU_IOC_GET_BACKLIGHT32 : + cmd =PMU_IOC_GET_BACKLIGHT ; +break ; +case PMU_IOC_SET_BACKLIGHT32 : + cmd =PMU_IOC_SET_BACKLIGHT ; +break ; +case PMU_IOC_GET_MODEL32 : + cmd =PMU_IOC_GET_MODEL ; +break ; +case PMU_IOC_HAS_ADB32 : + cmd =PMU_IOC_HAS_ADB ; +break ; +case PMU_IOC_CAN_SLEEP32 : + cmd =PMU_IOC_CAN_SLEEP ; +break ; +case PMU_IOC_GRAB_BACKLIGHT32 : + cmd =PMU_IOC_GRAB_BACKLIGHT ; +break ; +default : +return -ENOIOCTLCMD ; + } +return pmu_unlocked_ioctl (filp, cmd, (unsigned long )compat_ptr (arg)); +} +#endif +static const struct file_operations pmu_device_fops = { .read = pmu_read, .write = pmu_write, .poll = pmu_fpoll, .unlocked_ioctl = pmu_unlocked_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = compat_pmu_ioctl, +#endif .open = pmu_open, .release = pmu_release, };
Signature · 7 lines
1.7.2.2 -- Andreas Schwab, [email protected] GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
Arnd Bergmann
Acked-byRe: [PATCH/v2] via-pmu: add compat_pmu_ioctl
Quoted 4 lines · Andreas Schwab
The ioctls are actually compatible, but due to historical mistake the numbers differ between 32bit and 64bit.
Signed-off-by Andreas Schwab <[email protected]>