31 Jan, 2019

1 commit

  • commit 867cefb4cb1012f42cada1c7d1f35ac8dd276071 upstream.

    Commit f94c8d11699759 ("sched/clock, x86/tsc: Rework the x86 'unstable'
    sched_clock() interface") broke Xen guest time handling across
    migration:

    [ 187.249951] Freezing user space processes ... (elapsed 0.001 seconds) done.
    [ 187.251137] OOM killer disabled.
    [ 187.251137] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
    [ 187.252299] suspending xenstore...
    [ 187.266987] xen:grant_table: Grant tables using version 1 layout
    [18446743811.706476] OOM killer enabled.
    [18446743811.706478] Restarting tasks ... done.
    [18446743811.720505] Setting capacity to 16777216

    Fix that by setting xen_sched_clock_offset at resume time to ensure a
    monotonic clock value.

    [boris: replaced pr_info() with pr_info_once() in xen_callback_vector()
    to avoid printing with incorrect timestamp during resume (as we
    haven't re-adjusted the clock yet)]

    Fixes: f94c8d11699759 ("sched/clock, x86/tsc: Rework the x86 'unstable' sched_clock() interface")
    Cc: # 4.11
    Reported-by: Hans van Kranenburg
    Signed-off-by: Juergen Gross
    Tested-by: Hans van Kranenburg
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross
    Signed-off-by: Greg Kroah-Hartman

    Juergen Gross
     

17 Dec, 2018

2 commits

  • [ Upstream commit 123664101aa2156d05251704fc63f9bcbf77741a ]

    This reverts commit b3cf8528bb21febb650a7ecbf080d0647be40b9f.

    That commit unintentionally broke Xen balloon memory hotplug with
    "hotplug_unpopulated" set to 1. As long as "System RAM" resource
    got assigned under a new "Unusable memory" resource in IO/Mem tree
    any attempt to online this memory would fail due to general kernel
    restrictions on having "System RAM" resources as 1st level only.

    The original issue that commit has tried to workaround fa564ad96366
    ("x86/PCI: Enable a 64bit BAR on AMD Family 15h (Models 00-1f, 30-3f,
    60-7f)") also got amended by the following 03a551734 ("x86/PCI: Move
    and shrink AMD 64-bit window to avoid conflict") which made the
    original fix to Xen ballooning unnecessary.

    Signed-off-by: Igor Druzhinin
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin

    Igor Druzhinin
     
  • [ Upstream commit 72791ac854fea36034fa7976b748fde585008e78 ]

    Add a missing header otherwise compiler warns about missed prototype:

    drivers/xen/xlate_mmu.c:183:5: warning: no previous prototype for 'xen_xlate_unmap_gfn_range?' [-Wmissing-prototypes]
    int xen_xlate_unmap_gfn_range(struct vm_area_struct *vma,
    ^~~~~~~~~~~~~~~~~~~~~~~~~

    Signed-off-by: Srikanth Boddepalli
    Reviewed-by: Boris Ostrovsky
    Reviewed-by: Joey Pabalinas
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin

    Srikanth Boddepalli
     

14 Nov, 2018

2 commits

  • commit 3aa6c19d2f38be9c6e9a8ad5fa8e3c9d29ee3c35 upstream.

    Xend-based toolstacks don't have static-max entry in xenstore. The
    equivalent node for those toolstacks is memory_static_max.

    Fixes: 5266b8e4445c (xen: fix booting ballooned down hvm guest)
    Signed-off-by: Boris Ostrovsky
    Cc: # 4.13
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross
    Signed-off-by: Greg Kroah-Hartman

    Boris Ostrovsky
     
  • commit 7250f422da0480d8512b756640f131b9b893ccda upstream.

    xen_swiotlb_{alloc,free}_coherent() allocate/free memory based on the
    order of the pages and not size argument (bytes). This is inconsistent with
    range_straddles_page_boundary and memset which use the 'size' value,
    which may lead to not exchanging memory with Xen (range_straddles_page_boundary()
    returned true). And then the call to xen_swiotlb_free_coherent() would
    actually try to exchange the memory with Xen, leading to the kernel
    hitting an BUG (as the hypercall returned an error).

    This patch fixes it by making the 'size' variable be of the same size
    as the amount of memory allocated.

    CC: stable@vger.kernel.org
    Signed-off-by: Joe Jin
    Cc: Konrad Rzeszutek Wilk
    Cc: Boris Ostrovsky
    Cc: Christoph Helwig
    Cc: Dongli Zhang
    Cc: John Sobecki
    Signed-off-by: Konrad Rzeszutek Wilk
    Signed-off-by: Greg Kroah-Hartman

    Joe Jin
     

10 Oct, 2018

3 commits

  • [ Upstream commit 4dca864b59dd150a221730775e2f21f49779c135 ]

    This patch removes duplicate macro useage in events_base.c.

    It also fixes gcc warning:
    variable ‘col’ set but not used [-Wunused-but-set-variable]

    Signed-off-by: Joshua Abraham
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Josh Abraham
     
  • [ Upstream commit 3366cdb6d350d95466ee430ac50f3c8415ca8f46 ]

    The command 'xl vcpu-set 0 0', issued in dom0, will crash dom0:

    BUG: unable to handle kernel NULL pointer dereference at 00000000000002d8
    PGD 0 P4D 0
    Oops: 0000 [#1] PREEMPT SMP NOPTI
    CPU: 7 PID: 65 Comm: xenwatch Not tainted 4.19.0-rc2-1.ga9462db-default #1 openSUSE Tumbleweed (unreleased)
    Hardware name: Intel Corporation S5520UR/S5520UR, BIOS S5500.86B.01.00.0050.050620101605 05/06/2010
    RIP: e030:device_offline+0x9/0xb0
    Code: 77 24 00 e9 ce fe ff ff 48 8b 13 e9 68 ff ff ff 48 8b 13 e9 29 ff ff ff 48 8b 13 e9 ea fe ff ff 90 66 66 66 66 90 41 54 55 53 87 d8 02 00 00 01 0f 85 88 00 00 00 48 c7 c2 20 09 60 81 31 f6
    RSP: e02b:ffffc90040f27e80 EFLAGS: 00010203
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
    RDX: ffff8801f3800000 RSI: ffffc90040f27e70 RDI: 0000000000000000
    RBP: 0000000000000000 R08: ffffffff820e47b3 R09: 0000000000000000
    R10: 0000000000007ff0 R11: 0000000000000000 R12: ffffffff822e6d30
    R13: dead000000000200 R14: dead000000000100 R15: ffffffff8158b4e0
    FS: 00007ffa595158c0(0000) GS:ffff8801f39c0000(0000) knlGS:0000000000000000
    CS: e033 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00000000000002d8 CR3: 00000001d9602000 CR4: 0000000000002660
    Call Trace:
    handle_vcpu_hotplug_event+0xb5/0xc0
    xenwatch_thread+0x80/0x140
    ? wait_woken+0x80/0x80
    kthread+0x112/0x130
    ? kthread_create_worker_on_cpu+0x40/0x40
    ret_from_fork+0x3a/0x50

    This happens because handle_vcpu_hotplug_event is called twice. In the
    first iteration cpu_present is still true, in the second iteration
    cpu_present is false which causes get_cpu_device to return NULL.
    In case of cpu#0, cpu_online is apparently always true.

    Fix this crash by checking if the cpu can be hotplugged, which is false
    for a cpu that was just removed.

    Also check if the cpu was actually offlined by device_remove, otherwise
    leave the cpu_present state as it is.

    Rearrange to code to do all work with device_hotplug_lock held.

    Signed-off-by: Olaf Hering
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Olaf Hering
     
  • [ Upstream commit 87dffe86d406bee8782cac2db035acb9a28620a7 ]

    When guest receives a sysrq request from the host it acknowledges it by
    writing '\0' to control/sysrq xenstore node. This, however, make xenstore
    watch fire again but xenbus_scanf() fails to parse empty value with "%c"
    format string:

    sysrq: SysRq : Emergency Sync
    Emergency Sync complete
    xen:manage: Error -34 reading sysrq code in control/sysrq

    Ignore -ERANGE the same way we already ignore -ENOENT, empty value in
    control/sysrq is totally legal.

    Signed-off-by: Vitaly Kuznetsov
    Reviewed-by: Wei Liu
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Vitaly Kuznetsov
     

15 Sep, 2018

1 commit

  • [ Upstream commit 3596924a233e45aa918c961a902170fc4916461b ]

    The current balloon code tries to calculate a delta factor for the
    balloon target when running in HVM mode in order to account for memory
    used by the firmware.

    This workaround for memory accounting doesn't work properly on a PVH
    Dom0, that has a static-max value different from the target value even
    at startup. Note that this is not a problem for DomUs because guests are
    started with a static-max value that matches the amount of RAM in the
    memory map.

    Fix this by forcefully setting target_diff for Dom0, regardless of
    it's mode.

    Reported-by: Gabriel Bercarug
    Signed-off-by: Roger Pau Monné
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Roger Pau Monne
     

24 Aug, 2018

2 commits

  • [ Upstream commit 7c63ca24c878e0051c91904b72174029320ef4bd ]

    When xenbus_printf fails, the lack of error-handling code may
    cause unexpected results.

    This patch adds error-handling code after calling xenbus_printf.

    Signed-off-by: Zhouyang Jia
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Zhouyang Jia
     
  • [ Upstream commit 84c029a73327cef571eaa61c7d6e67e8031b52ec ]

    When xenbus_printf fails, the lack of error-handling code may
    cause unexpected results.

    This patch adds error-handling code after calling xenbus_printf.

    Signed-off-by: Zhouyang Jia
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Zhouyang Jia
     

03 Jul, 2018

1 commit

  • commit eef04c7b3786ff0c9cb1019278b6c6c2ea0ad4ff upstream.

    Commit 910f8befdf5b ("xen/pirq: fix error path cleanup when binding
    MSIs") fixed a couple of errors in error cleanup path of
    xen_bind_pirq_msi_to_irq(). This cleanup allowed a call to
    __unbind_from_irq() with an unbound irq, which would result in
    triggering the BUG_ON there.

    Since there is really no reason for the BUG_ON (xen_free_irq() can
    operate on unbound irqs) we can remove it.

    Reported-by: Ben Hutchings
    Signed-off-by: Boris Ostrovsky
    Cc: stable@vger.kernel.org
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross
    Signed-off-by: Greg Kroah-Hartman

    Boris Ostrovsky
     

21 Jun, 2018

1 commit

  • [ Upstream commit ebf04f331fa15a966262341a7dc6b1a0efd633e4 ]

    xenbus_command_reply() did not actually copy the response string and
    leaked stack content instead.

    Fixes: 9a6161fe73bd ("xen: return xenstore command failures via response instead of rc")
    Signed-off-by: Simon Gaiser
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Simon Gaiser
     

30 May, 2018

5 commits

  • [ Upstream commit c37a3c94775855567b90f91775b9691e10bd2806 ]

    If acpi_id is == nr_acpi_bits, then we access one element beyond the end
    of the acpi_psd[] array or we set one bit beyond the end of the bit map
    when we do __set_bit(acpi_id, acpi_id_present);

    Fixes: 59a568029181 ("xen/acpi-processor: C and P-state driver that uploads said data to hypervisor.")
    Signed-off-by: Dan Carpenter
    Reviewed-by: Joao Martins
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Dan Carpenter
     
  • [ Upstream commit 351b2bccede1cb673ec7957b35ea997ea24c8884 ]

    Never directly free @dev after calling device_register(), even
    if it returned an error! Always use put_device() to give up the
    reference initialized.

    Signed-off-by: Arvind Yadav
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Arvind Yadav
     
  • [ Upstream commit 910f8befdf5bccf25287d9f1743e3e546bcb7ce0 ]

    Current cleanup in the error path of xen_bind_pirq_msi_to_irq is
    wrong. First of all there's an off-by-one in the cleanup loop, which
    can lead to unbinding wrong IRQs.

    Secondly IRQs not bound won't be freed, thus leaking IRQ numbers.

    Note that there's no need to differentiate between bound and unbound
    IRQs when freeing them, __unbind_from_irq will deal with both of them
    correctly.

    Fixes: 4892c9b4ada9f9 ("xen: add support for MSI message groups")
    Reported-by: Hooman Mirhadi
    Signed-off-by: Roger Pau Monné
    Reviewed-by: Amit Shah
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Roger Pau Monne
     
  • [ Upstream commit 68d2059be660944152ba667e43c3b4ec225974bc ]

    Currently if map is null then a potential null pointer deference
    occurs when calling sock_release on map->sock. I believe the
    actual intention was to call sock_release on sock instead. Fix
    this.

    Fixes: 5db4d286a8ef ("xen/pvcalls: implement connect command")
    Signed-off-by: Colin Ian King
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Colin Ian King
     
  • commit 4855c92dbb7b3b85c23e88ab7ca04f99b9677b41 upstream.

    When run raidconfig from Dom0 we found that the Xen DMA heap is reduced,
    but Dom Heap is increased by the same size. Tracing raidconfig we found
    that the related ioctl() in megaraid_sas will call dma_alloc_coherent()
    to apply memory. If the memory allocated by Dom0 is not in the DMA area,
    it will exchange memory with Xen to meet the requiment. Later drivers
    call dma_free_coherent() to free the memory, on xen_swiotlb_free_coherent()
    the check condition (dev_addr + size - 1
    Tested-by: John Sobecki
    Reviewed-by: Rzeszutek Wilk
    Cc: stable@vger.kernel.org
    Signed-off-by: Konrad Rzeszutek Wilk
    Signed-off-by: Greg Kroah-Hartman

    Joe Jin
     

26 Apr, 2018

1 commit

  • [ Upstream commit 3ac7292a25db1c607a50752055a18aba32ac2176 ]

    The page given to gnttab_end_foreign_access() to free could be a
    compound page so use put_page() instead of free_page() since it can
    handle both compound and single pages correctly.

    This bug was discovered when migrating a Xen VM with several VIFs and
    CONFIG_DEBUG_VM enabled. It hits a BUG usually after fewer than 10
    iterations. All netfront devices disconnect from the backend during a
    suspend/resume and this will call gnttab_end_foreign_access() if a
    netfront queue has an outstanding skb. The mismatch between calling
    get_page() and free_page() on a compound page causes a reference
    counting error which is detected when DEBUG_VM is enabled.

    Signed-off-by: Ross Lagerwall
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ross Lagerwall
     

19 Apr, 2018

1 commit

  • commit 2a22ee6c3ab1d761bc9c04f1e4117edd55b82f09 upstream.

    Commit fd8aa9095a95 ("xen: optimize xenbus driver for multiple
    concurrent xenstore accesses") made a subtle change to the semantic of
    xenbus_dev_request_and_reply() and xenbus_transaction_end().

    Before on an error response to XS_TRANSACTION_END
    xenbus_dev_request_and_reply() would not decrement the active
    transaction counter. But xenbus_transaction_end() has always counted the
    transaction as finished regardless of the response.

    The new behavior is that xenbus_dev_request_and_reply() and
    xenbus_transaction_end() will always count the transaction as finished
    regardless the response code (handled in xs_request_exit()).

    But xenbus_dev_frontend tries to end a transaction on closing of the
    device if the XS_TRANSACTION_END failed before. Trying to close the
    transaction twice corrupts the reference count. So fix this by also
    considering a transaction closed if we have sent XS_TRANSACTION_END once
    regardless of the return code.

    Cc: # 4.11
    Fixes: fd8aa9095a95 ("xen: optimize xenbus driver for multiple concurrent xenstore accesses")
    Signed-off-by: Simon Gaiser
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Greg Kroah-Hartman

    Simon Gaiser
     

03 Mar, 2018

3 commits

  • [ Upstream commit cf2acf66ad43abb39735568f55e1f85f9844e990 ]

    When cleaning up after a partially successful gntdev_mmap(), unmap the
    successfully mapped grant pages otherwise Xen will kill the domain if
    in debug mode (Attempt to implicitly unmap a granted PTE) or Linux will
    kill the process and emit "BUG: Bad page map in process" if Xen is in
    release mode.

    This is only needed when use_ptemod is true because gntdev_put_map()
    will unmap grant pages itself when use_ptemod is false.

    Signed-off-by: Ross Lagerwall
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ross Lagerwall
     
  • [ Upstream commit 951a010233625b77cde3430b4b8785a9a22968d1 ]

    If the requested range has a hole, the calculation of the number of
    pages to unmap is off by one. Fix it.

    Signed-off-by: Ross Lagerwall
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ross Lagerwall
     
  • [ Upstream commit b3cf8528bb21febb650a7ecbf080d0647be40b9f ]

    Commit f5775e0b6116 ("x86/xen: discard RAM regions above the maximum
    reservation") left host memory not assigned to dom0 as available for
    memory hotplug.

    Unfortunately this also meant that those regions could be used by
    others. Specifically, commit fa564ad96366 ("x86/PCI: Enable a 64bit BAR
    on AMD Family 15h (Models 00-1f, 30-3f, 60-7f)") may try to map those
    addresses as MMIO.

    To prevent this mark unallocated host memory as E820_TYPE_UNUSABLE (thus
    effectively reverting f5775e0b6116) and keep track of that region as
    a hostmem resource that can be used for the hotplug.

    Signed-off-by: Boris Ostrovsky
    Reviewed-by: Juergen Gross
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Boris Ostrovsky
     

28 Feb, 2018

1 commit

  • commit 7ba716698cc53f8d5367766c93c538c7da6c68ce upstream.

    It was reported by Sergey Senozhatsky that if THP (Transparent Huge
    Page) and frontswap (via zswap) are both enabled, when memory goes low
    so that swap is triggered, segfault and memory corruption will occur in
    random user space applications as follow,

    kernel: urxvt[338]: segfault at 20 ip 00007fc08889ae0d sp 00007ffc73a7fc40 error 6 in libc-2.26.so[7fc08881a000+1ae000]
    #0 0x00007fc08889ae0d _int_malloc (libc.so.6)
    #1 0x00007fc08889c2f3 malloc (libc.so.6)
    #2 0x0000560e6004bff7 _Z14rxvt_wcstoutf8PKwi (urxvt)
    #3 0x0000560e6005e75c n/a (urxvt)
    #4 0x0000560e6007d9f1 _ZN16rxvt_perl_interp6invokeEP9rxvt_term9hook_typez (urxvt)
    #5 0x0000560e6003d988 _ZN9rxvt_term9cmd_parseEv (urxvt)
    #6 0x0000560e60042804 _ZN9rxvt_term6pty_cbERN2ev2ioEi (urxvt)
    #7 0x0000560e6005c10f _Z17ev_invoke_pendingv (urxvt)
    #8 0x0000560e6005cb55 ev_run (urxvt)
    #9 0x0000560e6003b9b9 main (urxvt)
    #10 0x00007fc08883af4a __libc_start_main (libc.so.6)
    #11 0x0000560e6003f9da _start (urxvt)

    After bisection, it was found the first bad commit is bd4c82c22c36 ("mm,
    THP, swap: delay splitting THP after swapped out").

    The root cause is as follows:

    When the pages are written to swap device during swapping out in
    swap_writepage(), zswap (fontswap) is tried to compress the pages to
    improve performance. But zswap (frontswap) will treat THP as a normal
    page, so only the head page is saved. After swapping in, tail pages
    will not be restored to their original contents, causing memory
    corruption in the applications.

    This is fixed by refusing to save page in the frontswap store functions
    if the page is a THP. So that the THP will be swapped out to swap
    device.

    Another choice is to split THP if frontswap is enabled. But it is found
    that the frontswap enabling isn't flexible. For example, if
    CONFIG_ZSWAP=y (cannot be module), frontswap will be enabled even if
    zswap itself isn't enabled.

    Frontswap has multiple backends, to make it easy for one backend to
    enable THP support, the THP checking is put in backend frontswap store
    functions instead of the general interfaces.

    Link: http://lkml.kernel.org/r/20180209084947.22749-1-ying.huang@intel.com
    Fixes: bd4c82c22c367e068 ("mm, THP, swap: delay splitting THP after swapped out")
    Signed-off-by: "Huang, Ying"
    Reported-by: Sergey Senozhatsky
    Tested-by: Sergey Senozhatsky
    Suggested-by: Minchan Kim [put THP checking in backend]
    Cc: Konrad Rzeszutek Wilk
    Cc: Dan Streetman
    Cc: Seth Jennings
    Cc: Tetsuo Handa
    Cc: Shaohua Li
    Cc: Michal Hocko
    Cc: Johannes Weiner
    Cc: Mel Gorman
    Cc: Shakeel Butt
    Cc: Boris Ostrovsky
    Cc: Juergen Gross
    Cc: [4.14]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Huang Ying
     

25 Feb, 2018

1 commit

  • [ Upstream commit c4f9d9cb2c29ff04c6b4bb09b72802d8aedfc7cb ]

    Add a respective dependency.

    Signed-off-by: Jan Beulich
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jan Beulich
     

22 Feb, 2018

1 commit

  • commit 29fee6eed2811ff1089b30fc579a2d19d78016ab upstream.

    Commit fd8aa9095a95 ("xen: optimize xenbus driver for multiple concurrent
    xenstore accesses") optimized xenbus concurrent accesses but in doing so
    broke UABI of /dev/xen/xenbus. Through /dev/xen/xenbus applications are in
    charge of xenbus message exchange with the correct header and body. Now,
    after the mentioned commit the replies received by application will no
    longer have the header req_id echoed back as it was on request (see
    specification below for reference), because that particular field is being
    overwritten by kernel.

    struct xsd_sockmsg
    {
    uint32_t type; /* XS_??? */
    uint32_t req_id;/* Request identifier, echoed in daemon's response. */
    uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */
    uint32_t len; /* Length of data following this. */

    /* Generally followed by nul-terminated string(s). */
    };

    Before there was only one request at a time so req_id could simply be
    forwarded back and forth. To allow simultaneous requests we need a
    different req_id for each message thus kernel keeps a monotonic increasing
    counter for this field and is written on every request irrespective of
    userspace value.

    Forwarding again the req_id on userspace requests is not a solution because
    we would open the possibility of userspace-generated req_id colliding with
    kernel ones. So this patch instead takes another route which is to
    artificially keep user req_id while keeping the xenbus logic as is. We do
    that by saving the original req_id before xs_send(), use the private kernel
    counter as req_id and then once reply comes and was validated, we restore
    back the original req_id.

    Cc: # 4.11
    Fixes: fd8aa9095a ("xen: optimize xenbus driver for multiple concurrent xenstore accesses")
    Reported-by: Bhavesh Davda
    Signed-off-by: Joao Martins
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross
    Signed-off-by: Greg Kroah-Hartman

    Joao Martins
     

03 Nov, 2017

1 commit

  • …el/git/gregkh/driver-core

    Pull initial SPDX identifiers from Greg KH:
    "License cleanup: add SPDX license identifiers to some files

    Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the
    'GPL-2.0' SPDX license identifier. The SPDX identifier is a legally
    binding shorthand, which can be used instead of the full boiler plate
    text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart
    and Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset
    of the use cases:

    - file had no licensing information it it.

    - file was a */uapi/* one with no licensing information in it,

    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to
    license had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied
    to a file was done in a spreadsheet of side by side results from of
    the output of two independent scanners (ScanCode & Windriver)
    producing SPDX tag:value files created by Philippe Ombredanne.
    Philippe prepared the base worksheet, and did an initial spot review
    of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537
    files assessed. Kate Stewart did a file by file comparison of the
    scanner results in the spreadsheet to determine which SPDX license
    identifier(s) to be applied to the file. She confirmed any
    determination that was not immediately clear with lawyers working with
    the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:

    - Files considered eligible had to be source code files.

    - Make and config files were included as candidates if they contained
    >5 lines of source

    - File already had some variant of a license header in it (even if <5
    lines).

    All documentation files were explicitly excluded.

    The following heuristics were used to determine which SPDX license
    identifiers to apply.

    - when both scanners couldn't find any license traces, file was
    considered to have no license information in it, and the top level
    COPYING file license applied.

    For non */uapi/* files that summary was:

    SPDX license identifier # files
    ---------------------------------------------------|-------
    GPL-2.0 11139

    and resulted in the first patch in this series.

    If that file was a */uapi/* path one, it was "GPL-2.0 WITH
    Linux-syscall-note" otherwise it was "GPL-2.0". Results of that
    was:

    SPDX license identifier # files
    ---------------------------------------------------|-------
    GPL-2.0 WITH Linux-syscall-note 930

    and resulted in the second patch in this series.

    - if a file had some form of licensing information in it, and was one
    of the */uapi/* ones, it was denoted with the Linux-syscall-note if
    any GPL family license was found in the file or had no licensing in
    it (per prior point). Results summary:

    SPDX license identifier # files
    ---------------------------------------------------|------
    GPL-2.0 WITH Linux-syscall-note 270
    GPL-2.0+ WITH Linux-syscall-note 169
    ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) 21
    ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 17
    LGPL-2.1+ WITH Linux-syscall-note 15
    GPL-1.0+ WITH Linux-syscall-note 14
    ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) 5
    LGPL-2.0+ WITH Linux-syscall-note 4
    LGPL-2.1 WITH Linux-syscall-note 3
    ((GPL-2.0 WITH Linux-syscall-note) OR MIT) 3
    ((GPL-2.0 WITH Linux-syscall-note) AND MIT) 1

    and that resulted in the third patch in this series.

    - when the two scanners agreed on the detected license(s), that
    became the concluded license(s).

    - when there was disagreement between the two scanners (one detected
    a license but the other didn't, or they both detected different
    licenses) a manual inspection of the file occurred.

    - In most cases a manual inspection of the information in the file
    resulted in a clear resolution of the license that should apply
    (and which scanner probably needed to revisit its heuristics).

    - When it was not immediately clear, the license identifier was
    confirmed with lawyers working with the Linux Foundation.

    - If there was any question as to the appropriate license identifier,
    the file was flagged for further research and to be revisited later
    in time.

    In total, over 70 hours of logged manual review was done on the
    spreadsheet to determine the SPDX license identifiers to apply to the
    source files by Kate, Philippe, Thomas and, in some cases,
    confirmation by lawyers working with the Linux Foundation.

    Kate also obtained a third independent scan of the 4.13 code base from
    FOSSology, and compared selected files where the other two scanners
    disagreed against that SPDX file, to see if there was new insights.
    The Windriver scanner is based on an older version of FOSSology in
    part, so they are related.

    Thomas did random spot checks in about 500 files from the spreadsheets
    for the uapi headers and agreed with SPDX license identifier in the
    files he inspected. For the non-uapi files Thomas did random spot
    checks in about 15000 files.

    In initial set of patches against 4.14-rc6, 3 files were found to have
    copy/paste license identifier errors, and have been fixed to reflect
    the correct identifier.

    Additionally Philippe spent 10 hours this week doing a detailed manual
    inspection and review of the 12,461 patched files from the initial
    patch version early this week with:

    - a full scancode scan run, collecting the matched texts, detected
    license ids and scores

    - reviewing anything where there was a license detected (about 500+
    files) to ensure that the applied SPDX license was correct

    - reviewing anything where there was no detection but the patch
    license was not GPL-2.0 WITH Linux-syscall-note to ensure that the
    applied SPDX license was correct

    This produced a worksheet with 20 files needing minor correction. This
    worksheet was then exported into 3 different .csv files for the
    different types of files to be modified.

    These .csv files were then reviewed by Greg. Thomas wrote a script to
    parse the csv files and add the proper SPDX tag to the file, in the
    format that the file expected. This script was further refined by Greg
    based on the output to detect more types of files automatically and to
    distinguish between header and source .c files (which need different
    comment types.) Finally Greg ran the script using the .csv files to
    generate the patches.

    Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
    Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
    Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>"

    * tag 'spdx_identifiers-4.14-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
    License cleanup: add SPDX license identifier to uapi header files with a license
    License cleanup: add SPDX license identifier to uapi header files with no license
    License cleanup: add SPDX GPL-2.0 license identifier to files with no license

    Linus Torvalds
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

28 Oct, 2017

1 commit

  • Pull xen fixes from Juergen Gross:

    - a fix for the Xen gntdev device repairing an issue in case of partial
    failure of mapping multiple pages of another domain

    - a fix of a regression in the Xen balloon driver introduced in 4.13

    - a build fix for Xen on ARM which will trigger e.g. for Linux RT

    - a maintainers update for pvops (not really Xen, but carrying through
    this tree just for convenience)

    * tag 'for-linus-4.14c-rc7-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
    maintainers: drop Chris Wright from pvops
    arm/xen: don't inclide rwlock.h directly.
    xen: fix booting ballooned down hvm guest
    xen/gntdev: avoid out of bounds access in case of partial gntdev_mmap()

    Linus Torvalds
     

26 Oct, 2017

2 commits

  • Commit 96edd61dcf44362d3ef0bed1a5361e0ac7886a63 ("xen/balloon: don't
    online new memory initially") introduced a regression when booting a
    HVM domain with memory less than mem-max: instead of ballooning down
    immediately the system would try to use the memory up to mem-max
    resulting in Xen crashing the domain.

    For HVM domains the current size will be reflected in Xenstore node
    memory/static-max instead of memory/target.

    Additionally we have to trigger the ballooning process at once.

    Cc: # 4.13
    Fixes: 96edd61dcf44362d3ef0bed1a5361e0ac7886a63 ("xen/balloon: don't
    online new memory initially")

    Reported-by: Simon Gaiser
    Suggested-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Juergen Gross
     
  • In case gntdev_mmap() succeeds only partially in mapping grant pages
    it will leave some vital information uninitialized needed later for
    cleanup. This will lead to an out of bounds array access when unmapping
    the already mapped pages.

    So just initialize the data needed for unmapping the pages a little bit
    earlier.

    Cc:
    Reported-by: Arthur Borsboom
    Signed-off-by: Juergen Gross
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Juergen Gross
     

30 Sep, 2017

1 commit


28 Sep, 2017

1 commit

  • Just like done in d2bd05d88d ("xen-pciback: return proper values during
    BAR sizing") for the ROM BAR, ordinary ones also shouldn't compare the
    written value directly against ~0, but consider the r/o bits at the
    bottom (if any).

    Signed-off-by: Jan Beulich
    Reviewed-by: Juergen Gross
    Signed-off-by: Boris Ostrovsky

    Jan Beulich
     

23 Sep, 2017

1 commit


18 Sep, 2017

1 commit


14 Sep, 2017

1 commit

  • GFP_TEMPORARY was introduced by commit e12ba74d8ff3 ("Group short-lived
    and reclaimable kernel allocations") along with __GFP_RECLAIMABLE. It's
    primary motivation was to allow users to tell that an allocation is
    short lived and so the allocator can try to place such allocations close
    together and prevent long term fragmentation. As much as this sounds
    like a reasonable semantic it becomes much less clear when to use the
    highlevel GFP_TEMPORARY allocation flag. How long is temporary? Can the
    context holding that memory sleep? Can it take locks? It seems there is
    no good answer for those questions.

    The current implementation of GFP_TEMPORARY is basically GFP_KERNEL |
    __GFP_RECLAIMABLE which in itself is tricky because basically none of
    the existing caller provide a way to reclaim the allocated memory. So
    this is rather misleading and hard to evaluate for any benefits.

    I have checked some random users and none of them has added the flag
    with a specific justification. I suspect most of them just copied from
    other existing users and others just thought it might be a good idea to
    use without any measuring. This suggests that GFP_TEMPORARY just
    motivates for cargo cult usage without any reasoning.

    I believe that our gfp flags are quite complex already and especially
    those with highlevel semantic should be clearly defined to prevent from
    confusion and abuse. Therefore I propose dropping GFP_TEMPORARY and
    replace all existing users to simply use GFP_KERNEL. Please note that
    SLAB users with shrinkers will still get __GFP_RECLAIMABLE heuristic and
    so they will be placed properly for memory fragmentation prevention.

    I can see reasons we might want some gfp flag to reflect shorterm
    allocations but I propose starting from a clear semantic definition and
    only then add users with proper justification.

    This was been brought up before LSF this year by Matthew [1] and it
    turned out that GFP_TEMPORARY really doesn't have a clear semantic. It
    seems to be a heuristic without any measured advantage for most (if not
    all) its current users. The follow up discussion has revealed that
    opinions on what might be temporary allocation differ a lot between
    developers. So rather than trying to tweak existing users into a
    semantic which they haven't expected I propose to simply remove the flag
    and start from scratch if we really need a semantic for short term
    allocations.

    [1] http://lkml.kernel.org/r/20170118054945.GD18349@bombadil.infradead.org

    [akpm@linux-foundation.org: fix typo]
    [akpm@linux-foundation.org: coding-style fixes]
    [sfr@canb.auug.org.au: drm/i915: fix up]
    Link: http://lkml.kernel.org/r/20170816144703.378d4f4d@canb.auug.org.au
    Link: http://lkml.kernel.org/r/20170728091904.14627-1-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Signed-off-by: Stephen Rothwell
    Acked-by: Mel Gorman
    Acked-by: Vlastimil Babka
    Cc: Matthew Wilcox
    Cc: Neil Brown
    Cc: "Theodore Ts'o"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     

08 Sep, 2017

1 commit

  • Pull xen updates from Juergen Gross:

    - the new pvcalls backend for routing socket calls from a guest to dom0

    - some cleanups of Xen code

    - a fix for wrong usage of {get,put}_cpu()

    * tag 'for-linus-4.14b-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: (27 commits)
    xen/mmu: set MMU_NORMAL_PT_UPDATE in remap_area_mfn_pte_fn
    xen: Don't try to call xen_alloc_p2m_entry() on autotranslating guests
    xen/events: events_fifo: Don't use {get,put}_cpu() in xen_evtchn_fifo_init()
    xen/pvcalls: use WARN_ON(1) instead of __WARN()
    xen: remove not used trace functions
    xen: remove unused function xen_set_domain_pte()
    xen: remove tests for pvh mode in pure pv paths
    xen-platform: constify pci_device_id.
    xen: cleanup xen.h
    xen: introduce a Kconfig option to enable the pvcalls backend
    xen/pvcalls: implement write
    xen/pvcalls: implement read
    xen/pvcalls: implement the ioworker functions
    xen/pvcalls: disconnect and module_exit
    xen/pvcalls: implement release command
    xen/pvcalls: implement poll command
    xen/pvcalls: implement accept command
    xen/pvcalls: implement listen command
    xen/pvcalls: implement bind command
    xen/pvcalls: implement connect command
    ...

    Linus Torvalds
     

06 Sep, 2017

1 commit

  • Pull driver core update from Greg KH:
    "Here is the "big" driver core update for 4.14-rc1.

    It's really not all that big, the largest thing here being some
    firmware tests to help ensure that that crazy api is working properly.

    There's also a new uevent for when a driver is bound or unbound from a
    device, fixing a hole in the driver model that's been there since the
    very beginning. Many thanks to Dmitry for being persistent and
    pointing out how wrong I was about this all along :)

    Patches for the new uevents are already in the systemd tree, if people
    want to play around with them.

    Otherwise just a number of other small api changes and updates here,
    nothing major. All of these patches have been in linux-next for a
    while with no reported issues"

    * tag 'driver-core-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (28 commits)
    driver core: bus: Fix a potential double free
    Do not disable driver and bus shutdown hook when class shutdown hook is set.
    base: topology: constify attribute_group structures.
    base: Convert to using %pOF instead of full_name
    kernfs: Clarify lockdep name for kn->count
    fbdev: uvesafb: remove DRIVER_ATTR() usage
    xen: xen-pciback: remove DRIVER_ATTR() usage
    driver core: Document struct device:dma_ops
    mod_devicetable: Remove excess description from structured comment
    test_firmware: add batched firmware tests
    firmware: enable a debug print for batched requests
    firmware: define pr_fmt
    firmware: send -EINTR on signal abort on fallback mechanism
    test_firmware: add test case for SIGCHLD on sync fallback
    initcall_debug: add deferred probe times
    Input: axp20x-pek - switch to using devm_device_add_group()
    Input: synaptics_rmi4 - use devm_device_add_group() for attributes in F01
    Input: gpio_keys - use devm_device_add_group() for attributes
    driver core: add devm_device_add_group() and friends
    driver core: add device_{add|remove}_group() helpers
    ...

    Linus Torvalds
     

05 Sep, 2017

1 commit

  • Pull x86 apic updates from Thomas Gleixner:
    "This update provides:

    - Cleanup of the IDT management including the removal of the extra
    tracing IDT. A first step to cleanup the vector management code.

    - The removal of the paravirt op adjust_exception_frame. This is a
    XEN specific issue, but merged through this branch to avoid nasty
    merge collisions

    - Prevent dmesg spam about the TSC DEADLINE bug, when the CPU has
    disabled the TSC DEADLINE timer in CPUID.

    - Adjust a debug message in the ioapic code to print out the
    information correctly"

    * 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (51 commits)
    x86/idt: Fix the X86_TRAP_BP gate
    x86/xen: Get rid of paravirt op adjust_exception_frame
    x86/eisa: Add missing include
    x86/idt: Remove superfluous ALIGNment
    x86/apic: Silence "FW_BUG TSC_DEADLINE disabled due to Errata" on CPUs without the feature
    x86/idt: Remove the tracing IDT leftovers
    x86/idt: Hide set_intr_gate()
    x86/idt: Simplify alloc_intr_gate()
    x86/idt: Deinline setup functions
    x86/idt: Remove unused functions/inlines
    x86/idt: Move interrupt gate initialization to IDT code
    x86/idt: Move APIC gate initialization to tables
    x86/idt: Move regular trap init to tables
    x86/idt: Move IST stack based traps to table init
    x86/idt: Move debug stack init to table based
    x86/idt: Switch early trap init to IDT tables
    x86/idt: Prepare for table based init
    x86/idt: Move early IDT setup out of 32-bit asm
    x86/idt: Move early IDT handler setup to IDT code
    x86/idt: Consolidate IDT invalidation
    ...

    Linus Torvalds
     

01 Sep, 2017

1 commit

  • Calls to mmu_notifier_invalidate_page() were replaced by calls to
    mmu_notifier_invalidate_range() and are now bracketed by calls to
    mmu_notifier_invalidate_range_start()/end()

    Remove now useless invalidate_page callback.

    Signed-off-by: Jérôme Glisse
    Reviewed-by: Boris Ostrovsky
    Cc: Konrad Rzeszutek Wilk
    Cc: Roger Pau Monné
    Cc: xen-devel@lists.xenproject.org (moderated for non-subscribers)
    Cc: Kirill A. Shutemov
    Cc: Andrew Morton
    Cc: Andrea Arcangeli
    Signed-off-by: Linus Torvalds

    Jérôme Glisse