diff options
| author | Christoph Hellwig <hch@lst.de> | 2005-11-17 16:40:31 -0500 |
|---|---|---|
| committer | Kyle McMartin <kyle@parisc-linux.org> | 2005-11-17 16:40:31 -0500 |
| commit | ad7dd338fbb82ea54a866b369c4c9a78cfd16234 (patch) | |
| tree | 7ce26e37c8b37c31a600649e6cc64a9d095e1a55 /arch/parisc | |
| parent | a137ce8536f6124c42ac300be01b9b611c7db5a1 (diff) | |
[PARISC] move PA perf driver over to ->compat_ioctl
Move PA perf driver over to ->compat_ioctl.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Randolph Chung <tausq@parisc-linux.org>
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
Diffstat (limited to 'arch/parisc')
| -rw-r--r-- | arch/parisc/kernel/ioctl32.c | 5 | ||||
| -rw-r--r-- | arch/parisc/kernel/perf.c | 33 |
2 files changed, 20 insertions, 18 deletions
diff --git a/arch/parisc/kernel/ioctl32.c b/arch/parisc/kernel/ioctl32.c index 0a331104ad56..5da44c3d62ec 100644 --- a/arch/parisc/kernel/ioctl32.c +++ b/arch/parisc/kernel/ioctl32.c | |||
| @@ -561,11 +561,6 @@ IOCTL_TABLE_START | |||
| 561 | #define DECLARES | 561 | #define DECLARES |
| 562 | #include "compat_ioctl.c" | 562 | #include "compat_ioctl.c" |
| 563 | 563 | ||
| 564 | /* PA-specific ioctls */ | ||
| 565 | COMPATIBLE_IOCTL(PA_PERF_ON) | ||
| 566 | COMPATIBLE_IOCTL(PA_PERF_OFF) | ||
| 567 | COMPATIBLE_IOCTL(PA_PERF_VERSION) | ||
| 568 | |||
| 569 | /* And these ioctls need translation */ | 564 | /* And these ioctls need translation */ |
| 570 | HANDLE_IOCTL(SIOCGPPPSTATS, dev_ifsioc) | 565 | HANDLE_IOCTL(SIOCGPPPSTATS, dev_ifsioc) |
| 571 | HANDLE_IOCTL(SIOCGPPPCSTATS, dev_ifsioc) | 566 | HANDLE_IOCTL(SIOCGPPPCSTATS, dev_ifsioc) |
diff --git a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c index 44670d6e06f4..f6fec62b6a2f 100644 --- a/arch/parisc/kernel/perf.c +++ b/arch/parisc/kernel/perf.c | |||
| @@ -196,8 +196,7 @@ static int perf_open(struct inode *inode, struct file *file); | |||
| 196 | static ssize_t perf_read(struct file *file, char __user *buf, size_t cnt, loff_t *ppos); | 196 | static ssize_t perf_read(struct file *file, char __user *buf, size_t cnt, loff_t *ppos); |
| 197 | static ssize_t perf_write(struct file *file, const char __user *buf, size_t count, | 197 | static ssize_t perf_write(struct file *file, const char __user *buf, size_t count, |
| 198 | loff_t *ppos); | 198 | loff_t *ppos); |
| 199 | static int perf_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | 199 | static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
| 200 | unsigned long arg); | ||
| 201 | static void perf_start_counters(void); | 200 | static void perf_start_counters(void); |
| 202 | static int perf_stop_counters(uint32_t *raddr); | 201 | static int perf_stop_counters(uint32_t *raddr); |
| 203 | static struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num); | 202 | static struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num); |
| @@ -438,48 +437,56 @@ static void perf_patch_images(void) | |||
| 438 | * must be running on the processor that you wish to change. | 437 | * must be running on the processor that you wish to change. |
| 439 | */ | 438 | */ |
| 440 | 439 | ||
| 441 | static int perf_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | 440 | static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 442 | unsigned long arg) | ||
| 443 | { | 441 | { |
| 444 | long error_start; | 442 | long error_start; |
| 445 | uint32_t raddr[4]; | 443 | uint32_t raddr[4]; |
| 444 | int error = 0; | ||
| 446 | 445 | ||
| 446 | lock_kernel(); | ||
| 447 | switch (cmd) { | 447 | switch (cmd) { |
| 448 | 448 | ||
| 449 | case PA_PERF_ON: | 449 | case PA_PERF_ON: |
| 450 | /* Start the counters */ | 450 | /* Start the counters */ |
| 451 | perf_start_counters(); | 451 | perf_start_counters(); |
| 452 | return 0; | 452 | break; |
| 453 | 453 | ||
| 454 | case PA_PERF_OFF: | 454 | case PA_PERF_OFF: |
| 455 | error_start = perf_stop_counters(raddr); | 455 | error_start = perf_stop_counters(raddr); |
| 456 | if (error_start != 0) { | 456 | if (error_start != 0) { |
| 457 | printk(KERN_ERR "perf_off: perf_stop_counters = %ld\n", error_start); | 457 | printk(KERN_ERR "perf_off: perf_stop_counters = %ld\n", error_start); |
| 458 | return -EFAULT; | 458 | error = -EFAULT; |
| 459 | break; | ||
| 459 | } | 460 | } |
| 460 | 461 | ||
| 461 | /* copy out the Counters */ | 462 | /* copy out the Counters */ |
| 462 | if (copy_to_user((void __user *)arg, raddr, | 463 | if (copy_to_user((void __user *)arg, raddr, |
| 463 | sizeof (raddr)) != 0) { | 464 | sizeof (raddr)) != 0) { |
| 464 | return -EFAULT; | 465 | error = -EFAULT; |
| 466 | break; | ||
| 465 | } | 467 | } |
| 466 | return 0; | 468 | break; |
| 467 | 469 | ||
| 468 | case PA_PERF_VERSION: | 470 | case PA_PERF_VERSION: |
| 469 | /* Return the version # */ | 471 | /* Return the version # */ |
| 470 | return put_user(PERF_VERSION, (int *)arg); | 472 | error = put_user(PERF_VERSION, (int *)arg); |
| 473 | break; | ||
| 471 | 474 | ||
| 472 | default: | 475 | default: |
| 473 | break; | 476 | error = -ENOTTY; |
| 474 | } | 477 | } |
| 475 | return -ENOTTY; | 478 | |
| 479 | unlock_kernel(); | ||
| 480 | |||
| 481 | return error; | ||
| 476 | } | 482 | } |
| 477 | 483 | ||
| 478 | static struct file_operations perf_fops = { | 484 | static struct file_operations perf_fops = { |
| 479 | .llseek = no_llseek, | 485 | .llseek = no_llseek, |
| 480 | .read = perf_read, | 486 | .read = perf_read, |
| 481 | .write = perf_write, | 487 | .write = perf_write, |
| 482 | .ioctl = perf_ioctl, | 488 | .unlocked_ioctl = perf_ioctl, |
| 489 | .compat_ioctl = perf_ioctl, | ||
| 483 | .open = perf_open, | 490 | .open = perf_open, |
| 484 | .release = perf_release | 491 | .release = perf_release |
| 485 | }; | 492 | }; |
