On 11/17/20 4:10 PM, Christian Borntraeger wrote: > Almost all kvm allocations in the s390x KVM code can be attributed to > process that triggers the allocation (in other words, no global > allocation for other guests). This will help the memcg controller to do > the right decisions. > > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > Acked-by: Heiko Carstens <hca@xxxxxxxxxxxxx> Acked-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > --- > arch/s390/kvm/guestdbg.c | 8 ++++---- > arch/s390/kvm/intercept.c | 2 +- > arch/s390/kvm/interrupt.c | 10 +++++----- > arch/s390/kvm/kvm-s390.c | 20 ++++++++++---------- > arch/s390/kvm/priv.c | 4 ++-- > arch/s390/kvm/pv.c | 6 +++--- > arch/s390/kvm/vsie.c | 4 ++-- > 7 files changed, 27 insertions(+), 27 deletions(-) > > diff --git a/arch/s390/kvm/guestdbg.c b/arch/s390/kvm/guestdbg.c > index 394a5f53805b..3765c4223bf9 100644 > --- a/arch/s390/kvm/guestdbg.c > +++ b/arch/s390/kvm/guestdbg.c > @@ -184,7 +184,7 @@ static int __import_wp_info(struct kvm_vcpu *vcpu, > if (wp_info->len < 0 || wp_info->len > MAX_WP_SIZE) > return -EINVAL; > > - wp_info->old_data = kmalloc(bp_data->len, GFP_KERNEL); > + wp_info->old_data = kmalloc(bp_data->len, GFP_KERNEL_ACCOUNT); > if (!wp_info->old_data) > return -ENOMEM; > /* try to backup the original value */ > @@ -234,7 +234,7 @@ int kvm_s390_import_bp_data(struct kvm_vcpu *vcpu, > if (nr_wp > 0) { > wp_info = kmalloc_array(nr_wp, > sizeof(*wp_info), > - GFP_KERNEL); > + GFP_KERNEL_ACCOUNT); > if (!wp_info) { > ret = -ENOMEM; > goto error; > @@ -243,7 +243,7 @@ int kvm_s390_import_bp_data(struct kvm_vcpu *vcpu, > if (nr_bp > 0) { > bp_info = kmalloc_array(nr_bp, > sizeof(*bp_info), > - GFP_KERNEL); > + GFP_KERNEL_ACCOUNT); > if (!bp_info) { > ret = -ENOMEM; > goto error; > @@ -349,7 +349,7 @@ static struct kvm_hw_wp_info_arch *any_wp_changed(struct kvm_vcpu *vcpu) > if (!wp_info || !wp_info->old_data || wp_info->len <= 0) > continue; > > - temp = kmalloc(wp_info->len, GFP_KERNEL); > + temp = kmalloc(wp_info->len, GFP_KERNEL_ACCOUNT); > if (!temp) > continue; > > diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c > index e7a7c499a73f..72b25b7cc6ae 100644 > --- a/arch/s390/kvm/intercept.c > +++ b/arch/s390/kvm/intercept.c > @@ -398,7 +398,7 @@ int handle_sthyi(struct kvm_vcpu *vcpu) > if (!kvm_s390_pv_cpu_is_protected(vcpu) && (addr & ~PAGE_MASK)) > return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); > > - sctns = (void *)get_zeroed_page(GFP_KERNEL); > + sctns = (void *)get_zeroed_page(GFP_KERNEL_ACCOUNT); > if (!sctns) > return -ENOMEM; > > diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c > index 2f177298c663..e3183bd05910 100644 > --- a/arch/s390/kvm/interrupt.c > +++ b/arch/s390/kvm/interrupt.c > @@ -1792,7 +1792,7 @@ struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm, > goto out; > } > gisa_out: > - tmp_inti = kzalloc(sizeof(*inti), GFP_KERNEL); > + tmp_inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT); > if (tmp_inti) { > tmp_inti->type = KVM_S390_INT_IO(1, 0, 0, 0); > tmp_inti->io.io_int_word = isc_to_int_word(isc); > @@ -2015,7 +2015,7 @@ int kvm_s390_inject_vm(struct kvm *kvm, > struct kvm_s390_interrupt_info *inti; > int rc; > > - inti = kzalloc(sizeof(*inti), GFP_KERNEL); > + inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT); > if (!inti) > return -ENOMEM; > > @@ -2414,7 +2414,7 @@ static int enqueue_floating_irq(struct kvm_device *dev, > return -EINVAL; > > while (len >= sizeof(struct kvm_s390_irq)) { > - inti = kzalloc(sizeof(*inti), GFP_KERNEL); > + inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT); > if (!inti) > return -ENOMEM; > > @@ -2462,7 +2462,7 @@ static int register_io_adapter(struct kvm_device *dev, > if (dev->kvm->arch.adapters[adapter_info.id] != NULL) > return -EINVAL; > > - adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); > + adapter = kzalloc(sizeof(*adapter), GFP_KERNEL_ACCOUNT); > if (!adapter) > return -ENOMEM; > > @@ -3290,7 +3290,7 @@ int kvm_s390_gib_init(u8 nisc) > goto out; > } > > - gib = (struct kvm_s390_gib *)get_zeroed_page(GFP_KERNEL | GFP_DMA); > + gib = (struct kvm_s390_gib *)get_zeroed_page(GFP_KERNEL_ACCOUNT | GFP_DMA); > if (!gib) { > rc = -ENOMEM; > goto out; > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index 425d3d75320b..282a13ece554 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -1254,7 +1254,7 @@ static int kvm_s390_set_processor(struct kvm *kvm, struct kvm_device_attr *attr) > ret = -EBUSY; > goto out; > } > - proc = kzalloc(sizeof(*proc), GFP_KERNEL); > + proc = kzalloc(sizeof(*proc), GFP_KERNEL_ACCOUNT); > if (!proc) { > ret = -ENOMEM; > goto out; > @@ -1416,7 +1416,7 @@ static int kvm_s390_get_processor(struct kvm *kvm, struct kvm_device_attr *attr) > struct kvm_s390_vm_cpu_processor *proc; > int ret = 0; > > - proc = kzalloc(sizeof(*proc), GFP_KERNEL); > + proc = kzalloc(sizeof(*proc), GFP_KERNEL_ACCOUNT); > if (!proc) { > ret = -ENOMEM; > goto out; > @@ -1444,7 +1444,7 @@ static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr) > struct kvm_s390_vm_cpu_machine *mach; > int ret = 0; > > - mach = kzalloc(sizeof(*mach), GFP_KERNEL); > + mach = kzalloc(sizeof(*mach), GFP_KERNEL_ACCOUNT); > if (!mach) { > ret = -ENOMEM; > goto out; > @@ -1812,7 +1812,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args) > if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX) > return -EINVAL; > > - keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL); > + keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL_ACCOUNT); > if (!keys) > return -ENOMEM; > > @@ -1857,7 +1857,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args) > if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX) > return -EINVAL; > > - keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL); > + keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL_ACCOUNT); > if (!keys) > return -ENOMEM; > > @@ -2625,7 +2625,7 @@ static void sca_dispose(struct kvm *kvm) > > int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) > { > - gfp_t alloc_flags = GFP_KERNEL; > + gfp_t alloc_flags = GFP_KERNEL_ACCOUNT; > int i, rc; > char debug_name[16]; > static unsigned long sca_offset; > @@ -2670,7 +2670,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) > > BUILD_BUG_ON(sizeof(struct sie_page2) != 4096); > kvm->arch.sie_page2 = > - (struct sie_page2 *) get_zeroed_page(GFP_KERNEL | GFP_DMA); > + (struct sie_page2 *) get_zeroed_page(GFP_KERNEL_ACCOUNT | GFP_DMA); > if (!kvm->arch.sie_page2) > goto out_err; > > @@ -2900,7 +2900,7 @@ static int sca_switch_to_extended(struct kvm *kvm) > if (kvm->arch.use_esca) > return 0; > > - new_sca = alloc_pages_exact(sizeof(*new_sca), GFP_KERNEL|__GFP_ZERO); > + new_sca = alloc_pages_exact(sizeof(*new_sca), GFP_KERNEL_ACCOUNT | __GFP_ZERO); > if (!new_sca) > return -ENOMEM; > > @@ -3133,7 +3133,7 @@ void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu) > > int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu) > { > - vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL); > + vcpu->arch.sie_block->cbrlo = get_zeroed_page(GFP_KERNEL_ACCOUNT); > if (!vcpu->arch.sie_block->cbrlo) > return -ENOMEM; > return 0; > @@ -3243,7 +3243,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) > int rc; > > BUILD_BUG_ON(sizeof(struct sie_page) != 4096); > - sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL); > + sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL_ACCOUNT); > if (!sie_page) > return -ENOMEM; > > diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c > index cd74989ce0b0..9928f785c677 100644 > --- a/arch/s390/kvm/priv.c > +++ b/arch/s390/kvm/priv.c > @@ -879,7 +879,7 @@ static int handle_stsi(struct kvm_vcpu *vcpu) > switch (fc) { > case 1: /* same handling for 1 and 2 */ > case 2: > - mem = get_zeroed_page(GFP_KERNEL); > + mem = get_zeroed_page(GFP_KERNEL_ACCOUNT); > if (!mem) > goto out_no_data; > if (stsi((void *) mem, fc, sel1, sel2)) > @@ -888,7 +888,7 @@ static int handle_stsi(struct kvm_vcpu *vcpu) > case 3: > if (sel1 != 2 || sel2 != 2) > goto out_no_data; > - mem = get_zeroed_page(GFP_KERNEL); > + mem = get_zeroed_page(GFP_KERNEL_ACCOUNT); > if (!mem) > goto out_no_data; > handle_stsi_3_2_2(vcpu, (void *) mem); > diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c > index f5847f9dec7c..813b6e93dc83 100644 > --- a/arch/s390/kvm/pv.c > +++ b/arch/s390/kvm/pv.c > @@ -60,7 +60,7 @@ int kvm_s390_pv_create_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc) > if (kvm_s390_pv_cpu_get_handle(vcpu)) > return -EINVAL; > > - vcpu->arch.pv.stor_base = __get_free_pages(GFP_KERNEL, > + vcpu->arch.pv.stor_base = __get_free_pages(GFP_KERNEL_ACCOUNT, > get_order(uv_info.guest_cpu_stor_len)); > if (!vcpu->arch.pv.stor_base) > return -ENOMEM; > @@ -72,7 +72,7 @@ int kvm_s390_pv_create_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc) > uvcb.stor_origin = (u64)vcpu->arch.pv.stor_base; > > /* Alloc Secure Instruction Data Area Designation */ > - vcpu->arch.sie_block->sidad = __get_free_page(GFP_KERNEL | __GFP_ZERO); > + vcpu->arch.sie_block->sidad = __get_free_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO); > if (!vcpu->arch.sie_block->sidad) { > free_pages(vcpu->arch.pv.stor_base, > get_order(uv_info.guest_cpu_stor_len)); > @@ -120,7 +120,7 @@ static int kvm_s390_pv_alloc_vm(struct kvm *kvm) > struct kvm_memory_slot *memslot; > > kvm->arch.pv.stor_var = NULL; > - kvm->arch.pv.stor_base = __get_free_pages(GFP_KERNEL, get_order(base)); > + kvm->arch.pv.stor_base = __get_free_pages(GFP_KERNEL_ACCOUNT, get_order(base)); > if (!kvm->arch.pv.stor_base) > return -ENOMEM; > > diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c > index 4f3cbf6003a9..c5d0a58b2c29 100644 > --- a/arch/s390/kvm/vsie.c > +++ b/arch/s390/kvm/vsie.c > @@ -1234,7 +1234,7 @@ static struct vsie_page *get_vsie_page(struct kvm *kvm, unsigned long addr) > > mutex_lock(&kvm->arch.vsie.mutex); > if (kvm->arch.vsie.page_count < nr_vcpus) { > - page = alloc_page(GFP_KERNEL | __GFP_ZERO | GFP_DMA); > + page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO | GFP_DMA); > if (!page) { > mutex_unlock(&kvm->arch.vsie.mutex); > return ERR_PTR(-ENOMEM); > @@ -1336,7 +1336,7 @@ int kvm_s390_handle_vsie(struct kvm_vcpu *vcpu) > void kvm_s390_vsie_init(struct kvm *kvm) > { > mutex_init(&kvm->arch.vsie.mutex); > - INIT_RADIX_TREE(&kvm->arch.vsie.addr_to_page, GFP_KERNEL); > + INIT_RADIX_TREE(&kvm->arch.vsie.addr_to_page, GFP_KERNEL_ACCOUNT); > } > > /* Destroy the vsie data structures. To be called when a vm is destroyed. */ >
Attachment:
OpenPGP_0xE354E6B8E238B9F8.asc
Description: application/pgp-keys
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature