summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2016-02-12 12:40:31 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-02-17 09:05:04 +0100
commit52499d93d6dec3872de3b982219af6d4c182a452 (patch)
tree4565561ab51516a02a27bf26438b5de2bd2fc5db
parentf6c9b160233f9b5afe926b91b55589b706076640 (diff)
downloadlinux-52499d93d6dec3872de3b982219af6d4c182a452.tar.bz2
s390/maccess: reduce stnsm instructions
When fixing the DAT off bug ("s390: fix DAT off memory access, e.g. on kdump") both Christian and I missed that we can save an additional stnsm instruction. This saves us a couple of cycles which could improve the speed of memcpy_real. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/mm/maccess.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
index 350b0acd7f52..792f9c63fbca 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
@@ -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;