mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
KVM: s390: Properly lock mm context allow_gmap_hpage_1m setting
We have to do down_write on the mm semaphore to set a bitfield in the
mm context.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Fixes: a4499382
("KVM: s390: Add huge page enablement control")
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
204c972456
commit
df88f3181f
2 changed files with 9 additions and 1 deletions
|
@ -16,7 +16,13 @@ typedef struct {
|
||||||
unsigned long asce;
|
unsigned long asce;
|
||||||
unsigned long asce_limit;
|
unsigned long asce_limit;
|
||||||
unsigned long vdso_base;
|
unsigned long vdso_base;
|
||||||
/* The mmu context allocates 4K page tables. */
|
/*
|
||||||
|
* The following bitfields need a down_write on the mm
|
||||||
|
* semaphore when they are written to. As they are only
|
||||||
|
* written once, they can be read without a lock.
|
||||||
|
*
|
||||||
|
* The mmu context allocates 4K page tables.
|
||||||
|
*/
|
||||||
unsigned int alloc_pgste:1;
|
unsigned int alloc_pgste:1;
|
||||||
/* The mmu context uses extended page tables. */
|
/* The mmu context uses extended page tables. */
|
||||||
unsigned int has_pgste:1;
|
unsigned int has_pgste:1;
|
||||||
|
|
|
@ -695,7 +695,9 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
else {
|
else {
|
||||||
r = 0;
|
r = 0;
|
||||||
|
down_write(&kvm->mm->mmap_sem);
|
||||||
kvm->mm->context.allow_gmap_hpage_1m = 1;
|
kvm->mm->context.allow_gmap_hpage_1m = 1;
|
||||||
|
up_write(&kvm->mm->mmap_sem);
|
||||||
/*
|
/*
|
||||||
* We might have to create fake 4k page
|
* We might have to create fake 4k page
|
||||||
* tables. To avoid that the hardware works on
|
* tables. To avoid that the hardware works on
|
||||||
|
|
Loading…
Reference in a new issue