Skip to content

Commit 00e9e66

Browse files
author
Martin Schwidefsky
committed
s390/pfault: do not use stack buffers for hardware data
With CONFIG_VMAP_STACK=y the stack is allocated from the vmalloc space. Data structures passed to a hardware or a hypervisor interface that requires V=R can not be allocated on the stack anymore. Make the init and fini pfault parameter blocks static variables. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
1 parent c0f07ff commit 00e9e66

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

arch/s390/mm/fault.c

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -636,17 +636,19 @@ struct pfault_refbk {
636636
u64 reserved;
637637
} __attribute__ ((packed, aligned(8)));
638638

639+
static struct pfault_refbk pfault_init_refbk = {
640+
.refdiagc = 0x258,
641+
.reffcode = 0,
642+
.refdwlen = 5,
643+
.refversn = 2,
644+
.refgaddr = __LC_LPP,
645+
.refselmk = 1ULL << 48,
646+
.refcmpmk = 1ULL << 48,
647+
.reserved = __PF_RES_FIELD
648+
};
649+
639650
int pfault_init(void)
640651
{
641-
struct pfault_refbk refbk = {
642-
.refdiagc = 0x258,
643-
.reffcode = 0,
644-
.refdwlen = 5,
645-
.refversn = 2,
646-
.refgaddr = __LC_LPP,
647-
.refselmk = 1ULL << 48,
648-
.refcmpmk = 1ULL << 48,
649-
.reserved = __PF_RES_FIELD };
650652
int rc;
651653

652654
if (pfault_disable)
@@ -658,18 +660,20 @@ int pfault_init(void)
658660
"1: la %0,8\n"
659661
"2:\n"
660662
EX_TABLE(0b,1b)
661-
: "=d" (rc) : "a" (&refbk), "m" (refbk) : "cc");
663+
: "=d" (rc)
664+
: "a" (&pfault_init_refbk), "m" (pfault_init_refbk) : "cc");
662665
return rc;
663666
}
664667

668+
static struct pfault_refbk pfault_fini_refbk = {
669+
.refdiagc = 0x258,
670+
.reffcode = 1,
671+
.refdwlen = 5,
672+
.refversn = 2,
673+
};
674+
665675
void pfault_fini(void)
666676
{
667-
struct pfault_refbk refbk = {
668-
.refdiagc = 0x258,
669-
.reffcode = 1,
670-
.refdwlen = 5,
671-
.refversn = 2,
672-
};
673677

674678
if (pfault_disable)
675679
return;
@@ -678,7 +682,7 @@ void pfault_fini(void)
678682
" diag %0,0,0x258\n"
679683
"0: nopr %%r7\n"
680684
EX_TABLE(0b,0b)
681-
: : "a" (&refbk), "m" (refbk) : "cc");
685+
: : "a" (&pfault_fini_refbk), "m" (pfault_fini_refbk) : "cc");
682686
}
683687

684688
static DEFINE_SPINLOCK(pfault_lock);

0 commit comments

Comments
 (0)