diff options
Diffstat (limited to 'drivers/firewire/core-cdev.c')
| -rw-r--r-- | drivers/firewire/core-cdev.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index e6d63849e78e..ecd0a4d81abf 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/firewire.h> | 25 | #include <linux/firewire.h> |
| 26 | #include <linux/firewire-cdev.h> | 26 | #include <linux/firewire-cdev.h> |
| 27 | #include <linux/idr.h> | 27 | #include <linux/idr.h> |
| 28 | #include <linux/irqflags.h> | ||
| 28 | #include <linux/jiffies.h> | 29 | #include <linux/jiffies.h> |
| 29 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
| 30 | #include <linux/kref.h> | 31 | #include <linux/kref.h> |
| @@ -32,7 +33,6 @@ | |||
| 32 | #include <linux/module.h> | 33 | #include <linux/module.h> |
| 33 | #include <linux/mutex.h> | 34 | #include <linux/mutex.h> |
| 34 | #include <linux/poll.h> | 35 | #include <linux/poll.h> |
| 35 | #include <linux/preempt.h> | ||
| 36 | #include <linux/sched.h> | 36 | #include <linux/sched.h> |
| 37 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
| 38 | #include <linux/time.h> | 38 | #include <linux/time.h> |
| @@ -1013,21 +1013,19 @@ static int ioctl_get_cycle_timer(struct client *client, void *buffer) | |||
| 1013 | { | 1013 | { |
| 1014 | struct fw_cdev_get_cycle_timer *request = buffer; | 1014 | struct fw_cdev_get_cycle_timer *request = buffer; |
| 1015 | struct fw_card *card = client->device->card; | 1015 | struct fw_card *card = client->device->card; |
| 1016 | unsigned long long bus_time; | ||
| 1017 | struct timeval tv; | 1016 | struct timeval tv; |
| 1018 | unsigned long flags; | 1017 | u32 cycle_time; |
| 1019 | 1018 | ||
| 1020 | preempt_disable(); | 1019 | local_irq_disable(); |
| 1021 | local_irq_save(flags); | ||
| 1022 | 1020 | ||
| 1023 | bus_time = card->driver->get_bus_time(card); | 1021 | cycle_time = card->driver->get_bus_time(card); |
| 1024 | do_gettimeofday(&tv); | 1022 | do_gettimeofday(&tv); |
| 1025 | 1023 | ||
| 1026 | local_irq_restore(flags); | 1024 | local_irq_enable(); |
| 1027 | preempt_enable(); | ||
| 1028 | 1025 | ||
| 1029 | request->local_time = tv.tv_sec * 1000000ULL + tv.tv_usec; | 1026 | request->local_time = tv.tv_sec * 1000000ULL + tv.tv_usec; |
| 1030 | request->cycle_timer = bus_time & 0xffffffff; | 1027 | request->cycle_timer = cycle_time; |
| 1028 | |||
| 1031 | return 0; | 1029 | return 0; |
| 1032 | } | 1030 | } |
| 1033 | 1031 | ||
