diff options
Diffstat (limited to 'arch/arm/include/asm/assembler.h')
-rw-r--r-- | arch/arm/include/asm/assembler.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index a91177043467..3ae0eda5e64f 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h | |||
@@ -446,15 +446,45 @@ THUMB( orr \reg , \reg , #PSR_T_BIT ) | |||
446 | .endm | 446 | .endm |
447 | 447 | ||
448 | .macro uaccess_disable, tmp, isb=1 | 448 | .macro uaccess_disable, tmp, isb=1 |
449 | #ifdef CONFIG_CPU_SW_DOMAIN_PAN | ||
450 | /* | ||
451 | * Whenever we re-enter userspace, the domains should always be | ||
452 | * set appropriately. | ||
453 | */ | ||
454 | mov \tmp, #DACR_UACCESS_DISABLE | ||
455 | mcr p15, 0, \tmp, c3, c0, 0 @ Set domain register | ||
456 | .if \isb | ||
457 | instr_sync | ||
458 | .endif | ||
459 | #endif | ||
449 | .endm | 460 | .endm |
450 | 461 | ||
451 | .macro uaccess_enable, tmp, isb=1 | 462 | .macro uaccess_enable, tmp, isb=1 |
463 | #ifdef CONFIG_CPU_SW_DOMAIN_PAN | ||
464 | /* | ||
465 | * Whenever we re-enter userspace, the domains should always be | ||
466 | * set appropriately. | ||
467 | */ | ||
468 | mov \tmp, #DACR_UACCESS_ENABLE | ||
469 | mcr p15, 0, \tmp, c3, c0, 0 | ||
470 | .if \isb | ||
471 | instr_sync | ||
472 | .endif | ||
473 | #endif | ||
452 | .endm | 474 | .endm |
453 | 475 | ||
454 | .macro uaccess_save, tmp | 476 | .macro uaccess_save, tmp |
477 | #ifdef CONFIG_CPU_SW_DOMAIN_PAN | ||
478 | mrc p15, 0, \tmp, c3, c0, 0 | ||
479 | str \tmp, [sp, #S_FRAME_SIZE] | ||
480 | #endif | ||
455 | .endm | 481 | .endm |
456 | 482 | ||
457 | .macro uaccess_restore | 483 | .macro uaccess_restore |
484 | #ifdef CONFIG_CPU_SW_DOMAIN_PAN | ||
485 | ldr r0, [sp, #S_FRAME_SIZE] | ||
486 | mcr p15, 0, r0, c3, c0, 0 | ||
487 | #endif | ||
458 | .endm | 488 | .endm |
459 | 489 | ||
460 | .macro uaccess_save_and_disable, tmp | 490 | .macro uaccess_save_and_disable, tmp |