Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 669c7433 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'stable/for-linus-3.10-rc1-tag' of...

Merge tag 'stable/for-linus-3.10-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen

Pull Xen fixes from Konrad Rzeszutek Wilk:
 - Regression fix in xen privcmd fixing a memory leak.
 - Add Documentation for tmem driver.
 - Simplify and remove code in the tmem driver.
 - Cleanups.

* tag 'stable/for-linus-3.10-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
  xen: Fixed assignment error in if statement
  xen/xenbus: Fixed over 80 character limit issue
  xen/xenbus: Fixed indentation error in switch case
  xen/tmem: Don't use self[ballooning|shrinking] if frontswap is off.
  xen/tmem: Remove the usage of '[no|]selfballoon' and use 'tmem.selfballooning' bool instead.
  xen/tmem: Remove the usage of 'noselfshrink' and use 'tmem.selfshrink' bool instead.
  xen/tmem: Remove the boot options and fold them in the tmem.X parameters.
  xen/tmem: s/disable_// and change the logic.
  xen/tmem: Fix compile warning.
  xen/tmem: Split out the different module/boot options.
  xen/tmem: Move all of the boot and module parameters to the top of the file.
  xen/tmem: Cleanup. Remove the parts that say temporary.
  xen/privcmd: fix condition in privcmd_close()
parents 622f2234 fce92683
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -3005,6 +3005,27 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
			Force threading of all interrupt handlers except those
			marked explicitly IRQF_NO_THREAD.

	tmem		[KNL,XEN]
			Enable the Transcendent memory driver if built-in.

	tmem.cleancache=0|1 [KNL, XEN]
			Default is on (1). Disable the usage of the cleancache
			API to send anonymous pages to the hypervisor.

	tmem.frontswap=0|1 [KNL, XEN]
			Default is on (1). Disable the usage of the frontswap
			API to send swap pages to the hypervisor. If disabled
			the selfballooning and selfshrinking are force disabled.

	tmem.selfballooning=0|1 [KNL, XEN]
			Default is on (1). Disable the driving of swap pages
			to the hypervisor.

	tmem.selfshrinking=0|1 [KNL, XEN]
			Default is on (1). Partial swapoff that immediately
			transfers pages from Xen hypervisor back to the
			kernel based on different criteria.

	topology=	[S390]
			Format: {off | on}
			Specify if the kernel should make use of the cpu
+3 −4
Original line number Diff line number Diff line
@@ -19,11 +19,10 @@ config XEN_SELFBALLOONING
	  by the current usage of anonymous memory ("committed AS") and
	  controlled by various sysfs-settable parameters.  Configuring
	  FRONTSWAP is highly recommended; if it is not configured, self-
	  ballooning is disabled by default but can be enabled with the
	  'selfballooning' kernel boot parameter.  If FRONTSWAP is configured,
	  ballooning is disabled by default. If FRONTSWAP is configured,
	  frontswap-selfshrinking is enabled by default but can be disabled
	  with the 'noselfshrink' kernel boot parameter; and self-ballooning
	  is enabled by default but can be disabled with the 'noselfballooning'
	  with the 'tmem.selfshrink=0' kernel boot parameter; and self-ballooning
	  is enabled by default but can be disabled with the 'tmem.selfballooning=0'
	  kernel boot parameter.  Note that systems without a sufficiently
	  large swap device should not enable self-ballooning.

+2 −1
Original line number Diff line number Diff line
@@ -407,7 +407,8 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
		nr_pages = ARRAY_SIZE(frame_list);

	for (i = 0; i < nr_pages; i++) {
		if ((page = alloc_page(gfp)) == NULL) {
		page = alloc_page(gfp);
		if (page == NULL) {
			nr_pages = i;
			state = BP_EAGAIN;
			break;
+1 −1
Original line number Diff line number Diff line
@@ -504,7 +504,7 @@ static void privcmd_close(struct vm_area_struct *vma)
	struct page **pages = vma->vm_private_data;
	int numpgs = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;

	if (!xen_feature(XENFEAT_auto_translated_physmap || !numpgs || !pages))
	if (!xen_feature(XENFEAT_auto_translated_physmap) || !numpgs || !pages)
		return;

	xen_unmap_domain_mfn_range(vma, numpgs, pages);
+39 −48
Original line number Diff line number Diff line
@@ -11,11 +11,7 @@
#include <linux/init.h>
#include <linux/pagemap.h>
#include <linux/cleancache.h>

/* temporary ifdef until include/linux/frontswap.h is upstream */
#ifdef CONFIG_FRONTSWAP
#include <linux/frontswap.h>
#endif

#include <xen/xen.h>
#include <xen/interface/xen.h>
@@ -24,6 +20,34 @@
#include <asm/xen/hypervisor.h>
#include <xen/tmem.h>

#ifndef CONFIG_XEN_TMEM_MODULE
bool __read_mostly tmem_enabled = false;

static int __init enable_tmem(char *s)
{
	tmem_enabled = true;
	return 1;
}
__setup("tmem", enable_tmem);
#endif

#ifdef CONFIG_CLEANCACHE
static bool cleancache __read_mostly = true;
module_param(cleancache, bool, S_IRUGO);
static bool selfballooning __read_mostly = true;
module_param(selfballooning, bool, S_IRUGO);
#endif /* CONFIG_CLEANCACHE */

#ifdef CONFIG_FRONTSWAP
static bool frontswap __read_mostly = true;
module_param(frontswap, bool, S_IRUGO);
#endif /* CONFIG_FRONTSWAP */

#ifdef CONFIG_XEN_SELFBALLOONING
static bool selfshrinking __read_mostly = true;
module_param(selfshrinking, bool, S_IRUGO);
#endif /* CONFIG_XEN_SELFBALLOONING */

#define TMEM_CONTROL               0
#define TMEM_NEW_POOL              1
#define TMEM_DESTROY_POOL          2
@@ -129,16 +153,6 @@ static int xen_tmem_flush_object(u32 pool_id, struct tmem_oid oid)
	return xen_tmem_op(TMEM_FLUSH_OBJECT, pool_id, oid, 0, 0, 0, 0, 0);
}

#ifndef CONFIG_XEN_TMEM_MODULE
bool __read_mostly tmem_enabled = false;

static int __init enable_tmem(char *s)
{
	tmem_enabled = true;
	return 1;
}
__setup("tmem", enable_tmem);
#endif

#ifdef CONFIG_CLEANCACHE
static int xen_tmem_destroy_pool(u32 pool_id)
@@ -230,20 +244,6 @@ static int tmem_cleancache_init_shared_fs(char *uuid, size_t pagesize)
	return xen_tmem_new_pool(shared_uuid, TMEM_POOL_SHARED, pagesize);
}

static bool disable_cleancache __read_mostly;
static bool disable_selfballooning __read_mostly;
#ifdef CONFIG_XEN_TMEM_MODULE
module_param(disable_cleancache, bool, S_IRUGO);
module_param(disable_selfballooning, bool, S_IRUGO);
#else
static int __init no_cleancache(char *s)
{
	disable_cleancache = true;
	return 1;
}
__setup("nocleancache", no_cleancache);
#endif

static struct cleancache_ops tmem_cleancache_ops = {
	.put_page = tmem_cleancache_put_page,
	.get_page = tmem_cleancache_get_page,
@@ -361,20 +361,6 @@ static void tmem_frontswap_init(unsigned ignored)
		    xen_tmem_new_pool(private, TMEM_POOL_PERSIST, PAGE_SIZE);
}

static bool disable_frontswap __read_mostly;
static bool disable_frontswap_selfshrinking __read_mostly;
#ifdef CONFIG_XEN_TMEM_MODULE
module_param(disable_frontswap, bool, S_IRUGO);
module_param(disable_frontswap_selfshrinking, bool, S_IRUGO);
#else
static int __init no_frontswap(char *s)
{
	disable_frontswap = true;
	return 1;
}
__setup("nofrontswap", no_frontswap);
#endif

static struct frontswap_ops tmem_frontswap_ops = {
	.store = tmem_frontswap_store,
	.load = tmem_frontswap_load,
@@ -382,8 +368,6 @@ static struct frontswap_ops tmem_frontswap_ops = {
	.invalidate_area = tmem_frontswap_flush_area,
	.init = tmem_frontswap_init
};
#else	/* CONFIG_FRONTSWAP */
#define disable_frontswap_selfshrinking 1
#endif

static int xen_tmem_init(void)
@@ -391,7 +375,7 @@ static int xen_tmem_init(void)
	if (!xen_domain())
		return 0;
#ifdef CONFIG_FRONTSWAP
	if (tmem_enabled && !disable_frontswap) {
	if (tmem_enabled && frontswap) {
		char *s = "";
		struct frontswap_ops *old_ops =
			frontswap_register_ops(&tmem_frontswap_ops);
@@ -408,7 +392,7 @@ static int xen_tmem_init(void)
#endif
#ifdef CONFIG_CLEANCACHE
	BUG_ON(sizeof(struct cleancache_filekey) != sizeof(struct tmem_oid));
	if (tmem_enabled && !disable_cleancache) {
	if (tmem_enabled && cleancache) {
		char *s = "";
		struct cleancache_ops *old_ops =
			cleancache_register_ops(&tmem_cleancache_ops);
@@ -419,8 +403,15 @@ static int xen_tmem_init(void)
	}
#endif
#ifdef CONFIG_XEN_SELFBALLOONING
	xen_selfballoon_init(!disable_selfballooning,
				!disable_frontswap_selfshrinking);
	/*
	 * There is no point of driving pages to the swap system if they
	 * aren't going anywhere in tmem universe.
	 */
	if (!frontswap) {
		selfshrinking = false;
		selfballooning = false;
	}
	xen_selfballoon_init(selfballooning, selfshrinking);
#endif
	return 0;
}
Loading