From 2afb01726c50c8d7364565b4d80bd98cdc94d46e Mon Sep 17 00:00:00 2001 From: Heiko Carstens Date: Mon, 25 Oct 2010 16:10:18 +0200 Subject: [PATCH] --- yaml --- r: 216749 b: refs/heads/master c: fdb6d070effba1871f0bb980cf3c3b8738803414 h: refs/heads/master i: 216747: 442ebb51cb11c6e9322dd8adaab9ff257a650557 v: v3 --- [refs] | 2 +- trunk/arch/s390/include/asm/system.h | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 3a2ff3e6270c..a95bc9ff789e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f861e4057263033ad9134bfd6745f91b2165b351 +refs/heads/master: fdb6d070effba1871f0bb980cf3c3b8738803414 diff --git a/trunk/arch/s390/include/asm/system.h b/trunk/arch/s390/include/asm/system.h index 1f2ebc4afd82..c35d0a383f00 100644 --- a/trunk/arch/s390/include/asm/system.h +++ b/trunk/arch/s390/include/asm/system.h @@ -85,14 +85,18 @@ static inline void restore_access_regs(unsigned int *acrs) asm volatile("lam 0,15,%0" : : "Q" (*acrs)); } -#define switch_to(prev,next,last) do { \ - if (prev == next) \ - break; \ - save_fp_regs(&prev->thread.fp_regs); \ - restore_fp_regs(&next->thread.fp_regs); \ - save_access_regs(&prev->thread.acrs[0]); \ - restore_access_regs(&next->thread.acrs[0]); \ - prev = __switch_to(prev,next); \ +#define switch_to(prev,next,last) do { \ + if (prev == next) \ + break; \ + if (prev->mm) { \ + save_fp_regs(&prev->thread.fp_regs); \ + save_access_regs(&prev->thread.acrs[0]); \ + } \ + if (next->mm) { \ + restore_fp_regs(&next->thread.fp_regs); \ + restore_access_regs(&next->thread.acrs[0]); \ + } \ + prev = __switch_to(prev,next); \ } while (0) extern void account_vtime(struct task_struct *, struct task_struct *);