All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: mst@redhat.com, kvm@vger.kernel.org, pbonzini@redhat.com
Subject: [PATCH 2/5] vhost: extend memory regions allocation to vmalloc
Date: Tue, 16 Jun 2015 18:33:36 +0200	[thread overview]
Message-ID: <1434472419-148742-3-git-send-email-imammedo@redhat.com> (raw)
In-Reply-To: <1434472419-148742-1-git-send-email-imammedo@redhat.com>

with large number of memory regions we could end up with
high order allocations and kmalloc could fail if
host is under memory pressure.
Considering that memory regions array is used on hot path
try harder to allocate using kmalloc and if it fails resort
to vmalloc.
It's still better than just failing vhost_set_memory() and
causing guest crash due to it when a new memory hotplugged
to guest.

I'll still look at QEMU side solution to reduce amount of
memory regions it feeds to vhost to make things even better,
but it doesn't hurt for kernel to behave smarter and don't
crash older QEMU's which could use large amount of memory
regions.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
---
 drivers/vhost/vhost.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index a22f8c3..99931a0 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -471,7 +471,7 @@ void vhost_dev_cleanup(struct vhost_dev *dev, bool locked)
 		fput(dev->log_file);
 	dev->log_file = NULL;
 	/* No one will access memory at this point */
-	kfree(dev->memory);
+	kvfree(dev->memory);
 	dev->memory = NULL;
 	WARN_ON(!list_empty(&dev->work_list));
 	if (dev->worker) {
@@ -601,6 +601,18 @@ static int vhost_memory_reg_sort_cmp(const void *p1, const void *p2)
 	return 0;
 }
 
+static void *vhost_kvzalloc(unsigned long size)
+{
+	void *n = kzalloc(size, GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT);
+
+	if (!n) {
+		n = vzalloc(size);
+		if (!n)
+			return ERR_PTR(-ENOMEM);
+	}
+	return n;
+}
+
 static long vhost_set_memory(struct vhost_dev *d, struct vhost_memory __user *m)
 {
 	struct vhost_memory mem, *newmem, *oldmem;
@@ -613,7 +625,7 @@ static long vhost_set_memory(struct vhost_dev *d, struct vhost_memory __user *m)
 		return -EOPNOTSUPP;
 	if (mem.nregions > VHOST_MEMORY_MAX_NREGIONS)
 		return -E2BIG;
-	newmem = kmalloc(size + mem.nregions * sizeof *m->regions, GFP_KERNEL);
+	newmem = vhost_kvzalloc(size + mem.nregions * sizeof(*m->regions));
 	if (!newmem)
 		return -ENOMEM;
 
@@ -627,7 +639,7 @@ static long vhost_set_memory(struct vhost_dev *d, struct vhost_memory __user *m)
 		vhost_memory_reg_sort_cmp, NULL);
 
 	if (!memory_access_ok(d, newmem, 0)) {
-		kfree(newmem);
+		kvfree(newmem);
 		return -EFAULT;
 	}
 	oldmem = d->memory;
@@ -639,7 +651,7 @@ static long vhost_set_memory(struct vhost_dev *d, struct vhost_memory __user *m)
 		d->vqs[i]->memory = newmem;
 		mutex_unlock(&d->vqs[i]->mutex);
 	}
-	kfree(oldmem);
+	kvfree(oldmem);
 	return 0;
 }
 
-- 
1.8.3.1


  parent reply	other threads:[~2015-06-16 16:34 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-16 16:33 [PATCH 0/5] vhost: support upto 509 memory regions Igor Mammedov
2015-06-16 16:33 ` [PATCH 1/5] vhost: use binary search instead of linear in find_region() Igor Mammedov
2015-06-16 21:07   ` Michael S. Tsirkin
2015-06-16 21:13     ` Igor Mammedov
2015-06-16 16:33 ` Igor Mammedov [this message]
2015-06-16 16:33 ` [PATCH 3/5] vhost: support upto 509 memory regions Igor Mammedov
2015-06-16 21:14   ` Michael S. Tsirkin
2015-06-16 22:00     ` Igor Mammedov
2015-06-17  6:34       ` Michael S. Tsirkin
2015-06-17  7:28         ` Igor Mammedov
2015-06-17  7:39           ` Michael S. Tsirkin
2015-06-17  8:54             ` Igor Mammedov
2015-06-17 10:11               ` Michael S. Tsirkin
2015-06-17 10:37                 ` Igor Mammedov
2015-06-17 10:46                   ` Michael S. Tsirkin
2015-06-17 11:48                     ` Igor Mammedov
2015-06-17 11:51                       ` Michael S. Tsirkin
2015-06-17 12:23                         ` Igor Mammedov
2015-06-17 13:13                           ` Michael S. Tsirkin
2015-06-17 13:20                             ` Paolo Bonzini
2015-06-17 14:32                               ` Michael S. Tsirkin
2015-06-17 15:12                                 ` Igor Mammedov
2015-06-17 15:38                                   ` Michael S. Tsirkin
2015-06-17 16:09                                     ` Igor Mammedov
2015-06-17 16:30                                       ` Michael S. Tsirkin
2015-06-17 16:31                                         ` Paolo Bonzini
2015-06-17 16:34                                           ` Michael S. Tsirkin
2015-06-17 16:38                                             ` Paolo Bonzini
2015-06-17 16:41                                               ` Michael S. Tsirkin
2015-06-17 16:47                                                 ` Paolo Bonzini
2015-06-17 17:32                                                   ` Igor Mammedov
2015-06-17 19:11                                                   ` Michael S. Tsirkin
2015-06-17 17:30                                         ` Igor Mammedov
2015-06-18  9:12                                         ` Igor Mammedov
2015-06-18  9:50                                           ` Michael S. Tsirkin
2015-06-18 10:03                                             ` Paolo Bonzini
2015-06-18 11:39                                             ` Igor Mammedov
2015-06-18 11:41                                               ` Michael S. Tsirkin
2015-06-18 11:50                                                 ` Paolo Bonzini
2015-06-18 13:19                                                   ` Michael S. Tsirkin
2015-06-18 13:46                                                     ` Paolo Bonzini
2015-06-18 14:47                                                       ` Michael S. Tsirkin
2015-06-18 15:54                                                         ` Igor Mammedov
2015-06-18 16:02                                                         ` Paolo Bonzini
2015-06-19  7:56                                                           ` Michael S. Tsirkin
2015-06-19  7:57                                                             ` Paolo Bonzini
2015-06-19  8:05                                                               ` Michael S. Tsirkin
2015-06-19  8:52                                                                 ` Paolo Bonzini
2015-06-19 10:14                                                                   ` Michael S. Tsirkin
2015-06-19 10:44                                                                     ` Paolo Bonzini
2015-06-19 13:34                                                                       ` Michael S. Tsirkin
2015-06-19 13:34                                                                         ` Michael S. Tsirkin
2015-06-19 15:19                                                                         ` Paolo Bonzini
2015-06-19 15:19                                                                           ` Paolo Bonzini
2015-06-19 16:20                                                                           ` Michael S. Tsirkin
2015-06-19 16:20                                                                             ` Michael S. Tsirkin
2015-06-19 16:26                                                                             ` Paolo Bonzini
2015-06-19 16:26                                                                               ` Paolo Bonzini
2015-06-19 16:33                                                                               ` Michael S. Tsirkin
2015-06-19 16:33                                                                                 ` Michael S. Tsirkin
2015-06-19 16:44                                                                                 ` Paolo Bonzini
2015-06-19 16:44                                                                                   ` Paolo Bonzini
2015-06-22  7:10                                                                                 ` Igor Mammedov
2015-06-22  7:10                                                                                   ` Igor Mammedov
2015-06-22  9:45                                                                                   ` Paolo Bonzini
2015-06-22  9:45                                                                                     ` Paolo Bonzini
2015-06-19 16:45                                                                   ` Michael S. Tsirkin
2015-06-19 16:45                                                                     ` Michael S. Tsirkin
2015-06-19 16:50                                                                     ` Paolo Bonzini
2015-06-19 16:50                                                                       ` Paolo Bonzini
2015-06-18 12:02                                                 ` Igor Mammedov
2015-06-17  8:53         ` Paolo Bonzini
2015-06-16 16:33 ` [PATCH 4/5] vhost: add per VQ memory region caching Igor Mammedov
2015-06-16 16:33 ` [PATCH 5/5] vhost: translate_desc: optimization for desc.len < region size Igor Mammedov
2015-06-16 21:11   ` Michael S. Tsirkin
2015-06-16 21:16 ` [PATCH 0/5] vhost: support upto 509 memory regions Michael S. Tsirkin
2015-06-16 22:19   ` Igor Mammedov
2015-06-17  6:31     ` Michael S. Tsirkin
2015-06-17  7:33       ` Igor Mammedov
2015-06-17  7:40         ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1434472419-148742-3-git-send-email-imammedo@redhat.com \
    --to=imammedo@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.