diff options
| author | Rafael J. Wysocki <rjw@sisk.pl> | 2007-10-25 19:03:33 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2008-02-01 18:30:53 -0500 |
| commit | cc5d207c85b9a6fafebe2856ead0a9360978c8cd (patch) | |
| tree | 1a7c45b4ffb44a02a76ccd60ec318c796687d568 /kernel | |
| parent | 96f737490cfc368fdafe49769f52fc8460f9349f (diff) | |
Hibernation: Correct definitions of some ioctls (rev. 2)
Three ioctl numbers belonging to the hibernation userland interface,
SNAPSHOT_ATOMIC_SNAPSHOT, SNAPSHOT_AVAIL_SWAP, SNAPSHOT_GET_SWAP_PAGE,
are defined in a wrong way (eg. not portable). Provide new ioctl numbers for
these ioctls and mark the existing ones as deprecated.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/power/power.h | 10 | ||||
| -rw-r--r-- | kernel/power/user.c | 18 |
2 files changed, 21 insertions, 7 deletions
diff --git a/kernel/power/power.h b/kernel/power/power.h index 8837ea334e33..0dd66fabd393 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h | |||
| @@ -147,12 +147,8 @@ struct resume_swap_area { | |||
| 147 | #define SNAPSHOT_IOC_MAGIC '3' | 147 | #define SNAPSHOT_IOC_MAGIC '3' |
| 148 | #define SNAPSHOT_FREEZE _IO(SNAPSHOT_IOC_MAGIC, 1) | 148 | #define SNAPSHOT_FREEZE _IO(SNAPSHOT_IOC_MAGIC, 1) |
| 149 | #define SNAPSHOT_UNFREEZE _IO(SNAPSHOT_IOC_MAGIC, 2) | 149 | #define SNAPSHOT_UNFREEZE _IO(SNAPSHOT_IOC_MAGIC, 2) |
| 150 | #define SNAPSHOT_ATOMIC_SNAPSHOT _IOW(SNAPSHOT_IOC_MAGIC, 3, void *) | ||
| 151 | #define SNAPSHOT_ATOMIC_RESTORE _IO(SNAPSHOT_IOC_MAGIC, 4) | 150 | #define SNAPSHOT_ATOMIC_RESTORE _IO(SNAPSHOT_IOC_MAGIC, 4) |
| 152 | #define SNAPSHOT_FREE _IO(SNAPSHOT_IOC_MAGIC, 5) | 151 | #define SNAPSHOT_FREE _IO(SNAPSHOT_IOC_MAGIC, 5) |
| 153 | #define SNAPSHOT_SET_IMAGE_SIZE _IOW(SNAPSHOT_IOC_MAGIC, 6, unsigned long) | ||
| 154 | #define SNAPSHOT_AVAIL_SWAP _IOR(SNAPSHOT_IOC_MAGIC, 7, void *) | ||
| 155 | #define SNAPSHOT_GET_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 8, void *) | ||
| 156 | #define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) | 152 | #define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) |
| 157 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) | 153 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) |
| 158 | #define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \ | 154 | #define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \ |
| @@ -160,7 +156,11 @@ struct resume_swap_area { | |||
| 160 | #define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t) | 156 | #define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t) |
| 161 | #define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15) | 157 | #define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15) |
| 162 | #define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16) | 158 | #define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16) |
| 163 | #define SNAPSHOT_IOC_MAXNR 16 | 159 | #define SNAPSHOT_CREATE_IMAGE _IOW(SNAPSHOT_IOC_MAGIC, 17, int) |
| 160 | #define SNAPSHOT_PREF_IMAGE_SIZE _IO(SNAPSHOT_IOC_MAGIC, 18) | ||
| 161 | #define SNAPSHOT_AVAIL_SWAP_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 19, loff_t) | ||
| 162 | #define SNAPSHOT_ALLOC_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 20, loff_t) | ||
| 163 | #define SNAPSHOT_IOC_MAXNR 20 | ||
| 164 | 164 | ||
| 165 | /* If unset, the snapshot device cannot be open. */ | 165 | /* If unset, the snapshot device cannot be open. */ |
| 166 | extern atomic_t snapshot_device_available; | 166 | extern atomic_t snapshot_device_available; |
diff --git a/kernel/power/user.c b/kernel/power/user.c index 5e866e078550..b902a7e3bd12 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c | |||
| @@ -40,6 +40,16 @@ | |||
| 40 | #define PMOPS_ENTER 2 | 40 | #define PMOPS_ENTER 2 |
| 41 | #define PMOPS_FINISH 3 | 41 | #define PMOPS_FINISH 3 |
| 42 | 42 | ||
| 43 | /* | ||
| 44 | * NOTE: The following ioctl definitions are wrong and have been replaced with | ||
| 45 | * correct ones. They are only preserved here for compatibility with existing | ||
| 46 | * userland utilities and will be removed in the future. | ||
| 47 | */ | ||
| 48 | #define SNAPSHOT_ATOMIC_SNAPSHOT _IOW(SNAPSHOT_IOC_MAGIC, 3, void *) | ||
| 49 | #define SNAPSHOT_SET_IMAGE_SIZE _IOW(SNAPSHOT_IOC_MAGIC, 6, unsigned long) | ||
| 50 | #define SNAPSHOT_AVAIL_SWAP _IOR(SNAPSHOT_IOC_MAGIC, 7, void *) | ||
| 51 | #define SNAPSHOT_GET_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 8, void *) | ||
| 52 | |||
| 43 | 53 | ||
| 44 | #define SNAPSHOT_MINOR 231 | 54 | #define SNAPSHOT_MINOR 231 |
| 45 | 55 | ||
| @@ -191,6 +201,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
| 191 | data->frozen = 0; | 201 | data->frozen = 0; |
| 192 | break; | 202 | break; |
| 193 | 203 | ||
| 204 | case SNAPSHOT_CREATE_IMAGE: | ||
| 194 | case SNAPSHOT_ATOMIC_SNAPSHOT: | 205 | case SNAPSHOT_ATOMIC_SNAPSHOT: |
| 195 | if (data->mode != O_RDONLY || !data->frozen || data->ready) { | 206 | if (data->mode != O_RDONLY || !data->frozen || data->ready) { |
| 196 | error = -EPERM; | 207 | error = -EPERM; |
| @@ -198,7 +209,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
| 198 | } | 209 | } |
| 199 | error = hibernation_snapshot(data->platform_support); | 210 | error = hibernation_snapshot(data->platform_support); |
| 200 | if (!error) | 211 | if (!error) |
| 201 | error = put_user(in_suspend, (unsigned int __user *)arg); | 212 | error = put_user(in_suspend, (int __user *)arg); |
| 202 | if (!error) | 213 | if (!error) |
| 203 | data->ready = 1; | 214 | data->ready = 1; |
| 204 | break; | 215 | break; |
| @@ -219,6 +230,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
| 219 | data->ready = 0; | 230 | data->ready = 0; |
| 220 | break; | 231 | break; |
| 221 | 232 | ||
| 233 | case SNAPSHOT_PREF_IMAGE_SIZE: | ||
| 222 | case SNAPSHOT_SET_IMAGE_SIZE: | 234 | case SNAPSHOT_SET_IMAGE_SIZE: |
| 223 | image_size = arg; | 235 | image_size = arg; |
| 224 | break; | 236 | break; |
| @@ -233,12 +245,14 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
| 233 | error = put_user(size, (loff_t __user *)arg); | 245 | error = put_user(size, (loff_t __user *)arg); |
| 234 | break; | 246 | break; |
| 235 | 247 | ||
| 248 | case SNAPSHOT_AVAIL_SWAP_SIZE: | ||
| 236 | case SNAPSHOT_AVAIL_SWAP: | 249 | case SNAPSHOT_AVAIL_SWAP: |
| 237 | size = count_swap_pages(data->swap, 1); | 250 | size = count_swap_pages(data->swap, 1); |
| 238 | size <<= PAGE_SHIFT; | 251 | size <<= PAGE_SHIFT; |
| 239 | error = put_user(size, (loff_t __user *)arg); | 252 | error = put_user(size, (loff_t __user *)arg); |
| 240 | break; | 253 | break; |
| 241 | 254 | ||
| 255 | case SNAPSHOT_ALLOC_SWAP_PAGE: | ||
| 242 | case SNAPSHOT_GET_SWAP_PAGE: | 256 | case SNAPSHOT_GET_SWAP_PAGE: |
| 243 | if (data->swap < 0 || data->swap >= MAX_SWAPFILES) { | 257 | if (data->swap < 0 || data->swap >= MAX_SWAPFILES) { |
| 244 | error = -ENODEV; | 258 | error = -ENODEV; |
| @@ -247,7 +261,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
| 247 | offset = alloc_swapdev_block(data->swap); | 261 | offset = alloc_swapdev_block(data->swap); |
| 248 | if (offset) { | 262 | if (offset) { |
| 249 | offset <<= PAGE_SHIFT; | 263 | offset <<= PAGE_SHIFT; |
| 250 | error = put_user(offset, (sector_t __user *)arg); | 264 | error = put_user(offset, (loff_t __user *)arg); |
| 251 | } else { | 265 | } else { |
| 252 | error = -ENOSPC; | 266 | error = -ENOSPC; |
| 253 | } | 267 | } |
