linux/drivers/xen
Vlastimil Babka 8ea1d2a198 mm, frontswap: convert frontswap_enabled to static key
I have noticed that frontswap.h first declares "frontswap_enabled" as
extern bool variable, and then overrides it with "#define
frontswap_enabled (1)" for CONFIG_FRONTSWAP=Y or (0) when disabled.  The
bool variable isn't actually instantiated anywhere.

This all looks like an unfinished attempt to make frontswap_enabled
reflect whether a backend is instantiated.  But in the current state,
all frontswap hooks call unconditionally into frontswap.c just to check
if frontswap_ops is non-NULL.  This should at least be checked inline,
but we can further eliminate the overhead when CONFIG_FRONTSWAP is
enabled and no backend registered, using a static key that is initially
disabled, and gets enabled only upon first backend registration.

Thus, checks for "frontswap_enabled" are replaced with
"frontswap_enabled()" wrapping the static key check.  There are two
exceptions:

- xen's selfballoon_process() was testing frontswap_enabled in code guarded
  by #ifdef CONFIG_FRONTSWAP, which was effectively always true when reachable.
  The patch just removes this check. Using frontswap_enabled() does not sound
  correct here, as this can be true even without xen's own backend being
  registered.

- in SYSCALL_DEFINE2(swapon), change the check to IS_ENABLED(CONFIG_FRONTSWAP)
  as it seems the bitmap allocation cannot currently be postponed until a
  backend is registered. This means that frontswap will still have some
  memory overhead by being configured, but without a backend.

After the patch, we can expect that some functions in frontswap.c are
called only when frontswap_ops is non-NULL.  Change the checks there to
VM_BUG_ONs.  While at it, convert other BUG_ONs to VM_BUG_ONs as
frontswap has been stable for some time.

[akpm@linux-foundation.org: coding-style fixes]
Link: http://lkml.kernel.org/r/1463152235-9717-1-git-send-email-vbabka@suse.cz
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-07-26 16:19:19 -07:00
..
events xen/events: Don't move disabled irqs 2016-05-24 12:58:54 +01:00
xen-pciback xen-pciback: return proper values during BAR sizing 2016-06-24 10:53:03 +01:00
xenbus xenbus: simplify xenbus_dev_request_and_reply() 2016-07-08 11:50:29 +01:00
xenfs
acpi.c
balloon.c xen/balloon: Fix declared-but-not-defined warning 2016-06-23 11:36:15 +01:00
biomerge.c
cpu_hotplug.c
dbgp.c
efi.c efi: Remove unnecessary (and buggy) .memmap initialization from the Xen EFI driver 2016-04-29 11:06:15 +02:00
evtchn.c xen/evtchn: fix ring resize when binding new events 2016-05-04 16:37:01 +01:00
fallback.c
features.c
gntalloc.c
gntdev.c xen/gntdev: reduce copy batch size to 16 2016-05-24 12:58:17 +01:00
grant-table.c
Kconfig
Makefile Xen: don't warn about 2-byte wchar_t in efi 2016-05-24 12:58:18 +01:00
manage.c
mcelog.c
pci.c
pcpu.c
platform-pci.c
preempt.c
privcmd.c
privcmd.h
swiotlb-xen.c
sys-hypervisor.c
time.c
tmem.c
xen-acpi-cpuhotplug.c
xen-acpi-memhotplug.c
xen-acpi-pad.c
xen-acpi-processor.c xen/acpi: allow xen-acpi-processor driver to load on Xen 4.7 2016-07-08 14:53:13 +01:00
xen-balloon.c
xen-scsiback.c target: make close_session optional 2016-05-10 01:19:26 -07:00
xen-selfballoon.c mm, frontswap: convert frontswap_enabled to static key 2016-07-26 16:19:19 -07:00
xen-stub.c
xlate_mmu.c