|
@@ -93,15 +93,17 @@ static int __memcpy_real(void *dest, void *src, size_t count)
|
|
|
*/
|
|
|
int memcpy_real(void *dest, void *src, size_t count)
|
|
|
{
|
|
|
+ int irqs_disabled, rc;
|
|
|
unsigned long flags;
|
|
|
- int rc;
|
|
|
|
|
|
if (!count)
|
|
|
return 0;
|
|
|
- local_irq_save(flags);
|
|
|
- __arch_local_irq_stnsm(0xfbUL);
|
|
|
+ flags = __arch_local_irq_stnsm(0xf8UL);
|
|
|
+ irqs_disabled = arch_irqs_disabled_flags(flags);
|
|
|
+ if (!irqs_disabled)
|
|
|
+ trace_hardirqs_off();
|
|
|
rc = __memcpy_real(dest, src, count);
|
|
|
- if (!arch_irqs_disabled_flags(flags))
|
|
|
+ if (!irqs_disabled)
|
|
|
trace_hardirqs_on();
|
|
|
__arch_local_irq_ssm(flags);
|
|
|
return rc;
|