From: Ian Campbell Date: Mon, 14 Jan 2008 15:52:23 +0000 (+0000) Subject: Avoid allocations causing swap activity on the resume path by allowing X-Git-Tag: xen-3.2.0~36 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=906204d0293f6f1bed0b461870e0e57922d5fb23;p=legacy%2Flinux-2.6.18-xen.git Avoid allocations causing swap activity on the resume path by allowing such allocations to access the emergency pools otherwise a save/restore/migration of a guest which is low on memory can deadlock. Signed-off-by: Ian Campbell --- diff --git a/drivers/xen/blkfront/blkfront.c b/drivers/xen/blkfront/blkfront.c index 5fc9c4d1..9b569ca8 100644 --- a/drivers/xen/blkfront/blkfront.c +++ b/drivers/xen/blkfront/blkfront.c @@ -219,7 +219,7 @@ static int setup_blkring(struct xenbus_device *dev, info->ring_ref = GRANT_INVALID_REF; - sring = (blkif_sring_t *)__get_free_page(GFP_KERNEL); + sring = (blkif_sring_t *)__get_free_page(GFP_KERNEL|__GFP_HIGH); if (!sring) { xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring"); return -ENOMEM; diff --git a/drivers/xen/netfront/netfront.c b/drivers/xen/netfront/netfront.c index 59155c74..8abe6473 100644 --- a/drivers/xen/netfront/netfront.c +++ b/drivers/xen/netfront/netfront.c @@ -475,7 +475,7 @@ static int setup_device(struct xenbus_device *dev, struct netfront_info *info) info->tx.sring = NULL; info->irq = 0; - txs = (struct netif_tx_sring *)get_zeroed_page(GFP_KERNEL); + txs = (struct netif_tx_sring *)get_zeroed_page(GFP_KERNEL|__GFP_HIGH); if (!txs) { err = -ENOMEM; xenbus_dev_fatal(dev, err, "allocating tx ring page"); @@ -491,7 +491,7 @@ static int setup_device(struct xenbus_device *dev, struct netfront_info *info) } info->tx_ring_ref = err; - rxs = (struct netif_rx_sring *)get_zeroed_page(GFP_KERNEL); + rxs = (struct netif_rx_sring *)get_zeroed_page(GFP_KERNEL|__GFP_HIGH); if (!rxs) { err = -ENOMEM; xenbus_dev_fatal(dev, err, "allocating rx ring page"); diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c index 4f530130..10b8d9b7 100644 --- a/drivers/xen/xenbus/xenbus_client.c +++ b/drivers/xen/xenbus/xenbus_client.c @@ -87,7 +87,7 @@ int xenbus_watch_path2(struct xenbus_device *dev, const char *path, const char **, unsigned int)) { int err; - char *state = kasprintf(GFP_KERNEL, "%s/%s", path, path2); + char *state = kasprintf(GFP_KERNEL|__GFP_HIGH, "%s/%s", path, path2); if (!state) { xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch"); return -ENOMEM; diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c index 702e8f76..f72714da 100644 --- a/drivers/xen/xenbus/xenbus_xs.c +++ b/drivers/xen/xenbus/xenbus_xs.c @@ -291,9 +291,9 @@ static char *join(const char *dir, const char *name) char *buffer; if (strlen(name) == 0) - buffer = kasprintf(GFP_KERNEL, "%s", dir); + buffer = kasprintf(GFP_KERNEL|__GFP_HIGH, "%s", dir); else - buffer = kasprintf(GFP_KERNEL, "%s/%s", dir, name); + buffer = kasprintf(GFP_KERNEL|__GFP_HIGH, "%s/%s", dir, name); return (!buffer) ? ERR_PTR(-ENOMEM) : buffer; } @@ -305,7 +305,7 @@ static char **split(char *strings, unsigned int len, unsigned int *num) *num = count_strings(strings, len); /* Transfer to one big alloc for easy freeing. */ - ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL); + ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL|__GFP_HIGH); if (!ret) { kfree(strings); return ERR_PTR(-ENOMEM); @@ -506,7 +506,7 @@ int xenbus_printf(struct xenbus_transaction t, #define PRINTF_BUFFER_SIZE 4096 char *printf_buffer; - printf_buffer = kmalloc(PRINTF_BUFFER_SIZE, GFP_KERNEL); + printf_buffer = kmalloc(PRINTF_BUFFER_SIZE, GFP_KERNEL|__GFP_HIGH); if (printf_buffer == NULL) return -ENOMEM; @@ -775,7 +775,7 @@ static int process_msg(void) } - msg = kmalloc(sizeof(*msg), GFP_KERNEL); + msg = kmalloc(sizeof(*msg), GFP_KERNEL|__GFP_HIGH); if (msg == NULL) { err = -ENOMEM; goto out; @@ -787,7 +787,7 @@ static int process_msg(void) goto out; } - body = kmalloc(msg->hdr.len + 1, GFP_KERNEL); + body = kmalloc(msg->hdr.len + 1, GFP_KERNEL|__GFP_HIGH); if (body == NULL) { kfree(msg); err = -ENOMEM;