diff options
Diffstat (limited to 'arch/i386/kernel/time.c')
-rw-r--r-- | arch/i386/kernel/time.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index 316421a7f56f..edd00f6cee37 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c | |||
@@ -135,7 +135,7 @@ unsigned long profile_pc(struct pt_regs *regs) | |||
135 | { | 135 | { |
136 | unsigned long pc = instruction_pointer(regs); | 136 | unsigned long pc = instruction_pointer(regs); |
137 | 137 | ||
138 | if (in_lock_functions(pc)) | 138 | if (!user_mode_vm(regs) && in_lock_functions(pc)) |
139 | return *(unsigned long *)(regs->ebp + 4); | 139 | return *(unsigned long *)(regs->ebp + 4); |
140 | 140 | ||
141 | return pc; | 141 | return pc; |
@@ -206,15 +206,16 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
206 | unsigned long get_cmos_time(void) | 206 | unsigned long get_cmos_time(void) |
207 | { | 207 | { |
208 | unsigned long retval; | 208 | unsigned long retval; |
209 | unsigned long flags; | ||
209 | 210 | ||
210 | spin_lock(&rtc_lock); | 211 | spin_lock_irqsave(&rtc_lock, flags); |
211 | 212 | ||
212 | if (efi_enabled) | 213 | if (efi_enabled) |
213 | retval = efi_get_time(); | 214 | retval = efi_get_time(); |
214 | else | 215 | else |
215 | retval = mach_get_cmos_time(); | 216 | retval = mach_get_cmos_time(); |
216 | 217 | ||
217 | spin_unlock(&rtc_lock); | 218 | spin_unlock_irqrestore(&rtc_lock, flags); |
218 | 219 | ||
219 | return retval; | 220 | return retval; |
220 | } | 221 | } |