Merge tag 'for-linus-4.20a-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 30 Oct 2018 16:31:07 +0000 (09:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 30 Oct 2018 16:31:07 +0000 (09:31 -0700)
Pull xen fixes from Juergen Gross:
 "Only several small fixes and cleanups this time"

* tag 'for-linus-4.20a-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  xen: drop writing error messages to xenstore
  xen/pvh: don't try to unplug emulated devices
  add myself as reviewer for Xen support in Linux
  xen: remove redundant 'default n' from Kconfig
  xen/balloon: Support xend-based toolstack
  xen/pvh: increase early stack size
  xen: make xen_qlock_wait() nestable
  xen: fix race in xen_qlock_wait()
  xen/balloon: Grammar s/Is it/It is/
  xen: Make XEN_BACKEND selectable by DomU

MAINTAINERS
arch/x86/xen/platform-pci-unplug.c
arch/x86/xen/spinlock.c
arch/x86/xen/xen-pvh.S
drivers/xen/Kconfig
drivers/xen/xen-balloon.c
drivers/xen/xenbus/xenbus_client.c

index 49ee13372e5bbb883568dc96e41ff7f51ab22752..e8e1d86bd5058f25f1c7f9e3b0e6a1b046b3c20e 100644 (file)
@@ -16317,6 +16317,7 @@ F:      arch/arm64/include/asm/xen/
 XEN HYPERVISOR INTERFACE
 M:     Boris Ostrovsky <boris.ostrovsky@oracle.com>
 M:     Juergen Gross <jgross@suse.com>
+R:     Stefano Stabellini <sstabellini@kernel.org>
 L:     xen-devel@lists.xenproject.org (moderated for non-subscribers)
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git
 S:     Supported
index 66ab96a4e2b3e28a41c78fa7bbbbef0bc2e85064..96d7f7d39cb917a0957403aaf59ec8d6339af9a4 100644 (file)
@@ -134,6 +134,10 @@ void xen_unplug_emulated_devices(void)
 {
        int r;
 
+       /* PVH guests don't have emulated devices. */
+       if (xen_pvh_domain())
+               return;
+
        /* user explicitly requested no unplug */
        if (xen_emul_unplug & XEN_UNPLUG_NEVER)
                return;
index 23f6793af88aa75629c2c73a903568b4a68627ac..441c8826216982a4fb9532b68d68a37cbb0d3e05 100644 (file)
@@ -39,34 +39,25 @@ static void xen_qlock_kick(int cpu)
  */
 static void xen_qlock_wait(u8 *byte, u8 val)
 {
+       unsigned long flags;
        int irq = __this_cpu_read(lock_kicker_irq);
 
        /* If kicker interrupts not initialized yet, just spin */
-       if (irq == -1)
+       if (irq == -1 || in_nmi())
                return;
 
-       /* clear pending */
-       xen_clear_irq_pending(irq);
-       barrier();
-
-       /*
-        * We check the byte value after clearing pending IRQ to make sure
-        * that we won't miss a wakeup event because of the clearing.
-        *
-        * The sync_clear_bit() call in xen_clear_irq_pending() is atomic.
-        * So it is effectively a memory barrier for x86.
-        */
-       if (READ_ONCE(*byte) != val)
-               return;
+       /* Guard against reentry. */
+       local_irq_save(flags);
 
-       /*
-        * If an interrupt happens here, it will leave the wakeup irq
-        * pending, which will cause xen_poll_irq() to return
-        * immediately.
-        */
+       /* If irq pending already clear it. */
+       if (xen_test_irq_pending(irq)) {
+               xen_clear_irq_pending(irq);
+       } else if (READ_ONCE(*byte) == val) {
+               /* Block until irq becomes pending (or a spurious wakeup) */
+               xen_poll_irq(irq);
+       }
 
-       /* Block until irq becomes pending (or perhaps a spurious wakeup) */
-       xen_poll_irq(irq);
+       local_irq_restore(flags);
 }
 
 static irqreturn_t dummy_handler(int irq, void *dev_id)
index b0e471506cd8adcb06b3b0f620df5df41b83399b..1f8825bbaffbf7b87557de9ad1f6f1a67823cc4d 100644 (file)
@@ -170,7 +170,7 @@ canary:
        .fill 48, 1, 0
 
 early_stack:
-       .fill 256, 1, 0
+       .fill BOOT_STACK_SIZE, 1, 0
 early_stack_end:
 
        ELFNOTE(Xen, XEN_ELFNOTE_PHYS32_ENTRY,
index 90d387b50ab747f505597e87b439f1dcfe5f489f..815b9e9bb9757e899f64da4994dbe428c6da133e 100644 (file)
@@ -12,7 +12,6 @@ config XEN_BALLOON
 config XEN_SELFBALLOONING
        bool "Dynamically self-balloon kernel memory to target"
        depends on XEN && XEN_BALLOON && CLEANCACHE && SWAP && XEN_TMEM
-       default n
        help
          Self-ballooning dynamically balloons available kernel memory driven
          by the current usage of anonymous memory ("committed AS") and
@@ -27,7 +26,6 @@ config XEN_SELFBALLOONING
 
 config XEN_BALLOON_MEMORY_HOTPLUG
        bool "Memory hotplug support for Xen balloon driver"
-       default n
        depends on XEN_BALLOON && MEMORY_HOTPLUG
        help
          Memory hotplug support for Xen balloon driver allows expanding memory
@@ -86,7 +84,7 @@ config XEN_SCRUB_PAGES_DEFAULT
        help
          Scrub pages before returning them to the system for reuse by
          other domains.  This makes sure that any confidential data
-         is not accidentally visible to other domains.  Is it more
+         is not accidentally visible to other domains.  It is more
          secure, but slightly less efficient. This can be controlled with
          xen_scrub_pages=0 parameter and
          /sys/devices/system/xen_memory/xen_memory0/scrub_pages.
@@ -105,8 +103,7 @@ config XEN_DEV_EVTCHN
 
 config XEN_BACKEND
        bool "Backend driver support"
-       depends on XEN_DOM0
-       default y
+       default XEN_DOM0
        help
          Support for backend device drivers that provide I/O services
          to other virtual machines.
@@ -227,7 +224,6 @@ config XEN_PCIDEV_BACKEND
 config XEN_PVCALLS_FRONTEND
        tristate "XEN PV Calls frontend driver"
        depends on INET && XEN
-       default n
        select XEN_XENBUS_FRONTEND
        help
          Experimental frontend for the Xen PV Calls protocol
@@ -238,7 +234,6 @@ config XEN_PVCALLS_FRONTEND
 config XEN_PVCALLS_BACKEND
        bool "XEN PV Calls backend driver"
        depends on INET && XEN && XEN_BACKEND
-       default n
        help
          Experimental backend for the Xen PV Calls protocol
          (https://xenbits.xen.org/docs/unstable/misc/pvcalls.html). It
@@ -264,7 +259,6 @@ config XEN_PRIVCMD
 config XEN_STUB
        bool "Xen stub drivers"
        depends on XEN && X86_64 && BROKEN
-       default n
        help
          Allow kernel to install stub drivers, to reserve space for Xen drivers,
          i.e. memory hotplug and cpu hotplug, and to block native drivers loaded,
@@ -275,7 +269,6 @@ config XEN_STUB
 config XEN_ACPI_HOTPLUG_MEMORY
        tristate "Xen ACPI memory hotplug"
        depends on XEN_DOM0 && XEN_STUB && ACPI
-       default n
        help
          This is Xen ACPI memory hotplug.
 
@@ -287,7 +280,6 @@ config XEN_ACPI_HOTPLUG_CPU
        tristate "Xen ACPI cpu hotplug"
        depends on XEN_DOM0 && XEN_STUB && ACPI
        select ACPI_CONTAINER
-       default n
        help
          Xen ACPI cpu enumerating and hotplugging
 
@@ -316,7 +308,6 @@ config XEN_ACPI_PROCESSOR
 config XEN_MCE_LOG
        bool "Xen platform mcelog"
        depends on XEN_DOM0 && X86_64 && X86_MCE
-       default n
        help
          Allow kernel fetching MCE error from Xen platform and
          converting it into Linux mcelog format for mcelog tools
index 63c1494a8d73bf2f53f0f0a1887290f338ae454a..2acbfe104e464ab0d8e59bb5ff1862ce08411ed0 100644 (file)
@@ -76,12 +76,15 @@ static void watch_target(struct xenbus_watch *watch,
 
        if (!watch_fired) {
                watch_fired = true;
-               err = xenbus_scanf(XBT_NIL, "memory", "static-max", "%llu",
-                                  &static_max);
-               if (err != 1)
-                       static_max = new_target;
-               else
+
+               if ((xenbus_scanf(XBT_NIL, "memory", "static-max",
+                                 "%llu", &static_max) == 1) ||
+                   (xenbus_scanf(XBT_NIL, "memory", "memory_static_max",
+                                 "%llu", &static_max) == 1))
                        static_max >>= PAGE_SHIFT - 10;
+               else
+                       static_max = new_target;
+
                target_diff = (xen_pv_domain() || xen_initial_domain()) ? 0
                                : static_max - balloon_stats.target_pages;
        }
index a1c17000129ba1cb4465df0bc679a0756f8937a3..e17ca8156171318394bd41f08a7e27ef8683d70a 100644 (file)
@@ -278,10 +278,8 @@ static void xenbus_va_dev_error(struct xenbus_device *dev, int err,
        dev_err(&dev->dev, "%s\n", printf_buffer);
 
        path_buffer = kasprintf(GFP_KERNEL, "error/%s", dev->nodename);
-       if (!path_buffer ||
-           xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer))
-               dev_err(&dev->dev, "failed to write error node for %s (%s)\n",
-                       dev->nodename, printf_buffer);
+       if (path_buffer)
+               xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer);
 
        kfree(printf_buffer);
        kfree(path_buffer);