19 Aug, 2018

1 commit

  • Pull input updates from Dmitry Torokhov:

    - a new driver for Rohm BU21029 touch controller

    - new bitmap APIs: bitmap_alloc, bitmap_zalloc and bitmap_free

    - updates to Atmel, eeti. pxrc and iforce drivers

    - assorted driver cleanups and fixes.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (57 commits)
    MAINTAINERS: Add PhoenixRC Flight Controller Adapter
    Input: do not use WARN() in input_alloc_absinfo()
    Input: mark expected switch fall-throughs
    Input: raydium_i2c_ts - use true and false for boolean values
    Input: evdev - switch to bitmap API
    Input: gpio-keys - switch to bitmap_zalloc()
    Input: elan_i2c_smbus - cast sizeof to int for comparison
    bitmap: Add bitmap_alloc(), bitmap_zalloc() and bitmap_free()
    md: Avoid namespace collision with bitmap API
    dm: Avoid namespace collision with bitmap API
    Input: pm8941-pwrkey - add resin entry
    Input: pm8941-pwrkey - abstract register offsets and event code
    Input: iforce - reorganize joystick configuration lists
    Input: atmel_mxt_ts - move completion to after config crc is updated
    Input: atmel_mxt_ts - don't report zero pressure from T9
    Input: atmel_mxt_ts - zero terminate config firmware file
    Input: atmel_mxt_ts - refactor config update code to add context struct
    Input: atmel_mxt_ts - config CRC may start at T71
    Input: atmel_mxt_ts - remove unnecessary debug on ENOMEM
    Input: atmel_mxt_ts - remove duplicate setup of ABS_MT_PRESSURE
    ...

    Linus Torvalds
     

27 Jul, 2018

3 commits

  • Extend grant table module API to allow allocating buffers that can
    be used for DMA operations and mapping foreign grant references
    on top of those.
    The resulting buffer is similar to the one allocated by the balloon
    driver in that proper memory reservation is made by
    ({increase|decrease}_reservation and VA mappings are updated if
    needed).
    This is useful for sharing foreign buffers with HW drivers which
    cannot work with scattered buffers provided by the balloon driver,
    but require DMAable memory instead.

    Signed-off-by: Oleksandr Andrushchenko
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Oleksandr Andrushchenko
     
  • Memory {increase|decrease}_reservation and VA mappings update/reset
    code used in balloon driver can be made common, so other drivers can
    also re-use the same functionality without open-coding.
    Create a dedicated file for the shared code and export corresponding
    symbols for other kernel modules.

    Signed-off-by: Oleksandr Andrushchenko
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Oleksandr Andrushchenko
     
  • Make set/clear page private code shared and accessible to
    other kernel modules which can re-use these instead of open-coding.

    Signed-off-by: Oleksandr Andrushchenko
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Oleksandr Andrushchenko
     

23 Jun, 2018

1 commit

  • Pull xen fixes from Juergen Gross:
    "This contains the following fixes/cleanups:

    - the removal of a BUG_ON() which wasn't necessary and which could
    trigger now due to a recent change

    - a correction of a long standing bug happening very rarely in Xen
    dom0 when a hypercall buffer from user land was not accessible by
    the hypervisor for very short periods of time due to e.g. page
    migration or compaction

    - usage of EXPORT_SYMBOL_GPL() instead of EXPORT_SYMBOL() in a
    Xen-related driver (no breakage possible as using those symbols
    without others already exported via EXPORT-SYMBOL_GPL() wouldn't
    make any sense)

    - a simplification for Xen PVH or Xen ARM guests

    - some additional error handling for callers of xenbus_printf()"

    * tag 'for-linus-4.18-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
    xen: Remove unnecessary BUG_ON from __unbind_from_irq()
    xen: add new hypercall buffer mapping device
    xen/scsiback: add error handling for xenbus_printf
    scsi: xen-scsifront: add error handling for xenbus_printf
    xen/grant-table: Export gnttab_{alloc|free}_pages as GPL
    xen: add error handling for xenbus_printf
    xen: share start flags between PV and PVH

    Linus Torvalds
     

19 Jun, 2018

1 commit

  • Use a global variable to store the start flags for both PV and PVH.
    This allows the xen_initial_domain macro to work properly on PVH.

    Note that ARM is also switched to use the new variable.

    Signed-off-by: Boris Ostrovsky
    Signed-off-by: Roger Pau Monné
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Roger Pau Monne
     

16 Jun, 2018

1 commit

  • As we move stuff around, some doc references are broken. Fix some of
    them via this script:
    ./scripts/documentation-file-ref-check --fix

    Manually checked if the produced result is valid, removing a few
    false-positives.

    Acked-by: Takashi Iwai
    Acked-by: Masami Hiramatsu
    Acked-by: Stephen Boyd
    Acked-by: Charles Keepax
    Acked-by: Mathieu Poirier
    Reviewed-by: Coly Li
    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Jonathan Corbet

    Mauro Carvalho Chehab
     

13 Jun, 2018

1 commit

  • This is the sync up with the canonical definitions of the input,
    sound and display protocols in Xen.

    Changes to kbdif:
    1. Add missing string constants for {feature|request}-raw-pointer
    to align with the rest of the interface file.

    2. Add new XenStore feature fields, so it is possible to individually
    control set of exposed virtual devices for each guest OS:
    - set feature-disable-keyboard to 1 if no keyboard device needs
    to be created
    - set feature-disable-pointer to 1 if no pointer device needs
    to be created

    3. Move multi-touch device parameters to backend nodes: these are
    described as a part of frontend's XenBus configuration nodes
    while they belong to backend's configuration. Fix this by moving
    the parameters to the proper section.

    Unique-id field:
    1. Add unique-id XenBus entry for virtual input and display.

    2. Change type of unique-id field to string for sndif to align with
    display and input protocols.

    Signed-off-by: Oleksandr Andrushchenko
    Reviewed-by: Juergen Gross
    Signed-off-by: Dmitry Torokhov

    Oleksandr Andrushchenko
     

14 May, 2018

1 commit

  • My recent Xen patch series introduces a new HYPERVISOR_memory_op to
    support direct priv-mapping of certain guest resources (such as ioreq
    pages, used by emulators) by a tools domain, rather than having to access
    such resources via the guest P2M.

    This patch adds the necessary infrastructure to the privcmd driver and
    Xen MMU code to support direct resource mapping.

    NOTE: The adjustment in the MMU code is partially cosmetic. Xen will now
    allow a PV tools domain to map guest pages either by GFN or MFN, thus
    the term 'mfn' has been swapped for 'pfn' in the lower layers of the
    remap code.

    Signed-off-by: Paul Durrant
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross

    Paul Durrant
     

17 Apr, 2018

1 commit

  • This is the sync up with the canonical definition of the sound
    protocol in Xen:

    1. Protocol version was referenced in the protocol description,
    but missed its definition. Fixed by adding a constant
    for current protocol version.

    2. Some of the request descriptions have "reserved" fields
    missed: fixed by adding corresponding entries.

    3. Extend the size of the requests and responses to 64 octets.
    Bump protocol version to 2.

    4. Add explicit back and front synchronization
    In order to provide explicit synchronization between backend and
    frontend the following changes are introduced in the protocol:
    - add new ring buffer for sending asynchronous events from
    backend to frontend to report number of bytes played by the
    frontend (XENSND_EVT_CUR_POS)
    - introduce trigger events for playback control: start/stop/pause/resume
    - add "req-" prefix to event-channel and ring-ref to unify naming
    of the Xen event channels for requests and events

    5. Add explicit back and front parameter negotiation
    In order to provide explicit stream parameter negotiation between
    backend and frontend the following changes are introduced in the protocol:
    add XENSND_OP_HW_PARAM_QUERY request to read/update
    configuration space for the parameters given: request passes
    desired parameter's intervals/masks and the response to this request
    returns allowed min/max intervals/masks to be used.

    Signed-off-by: Oleksandr Andrushchenko
    Signed-off-by: Oleksandr Grytsov
    Reviewed-by: Konrad Rzeszutek Wilk
    Reviewed-by: Boris Ostrovsky
    Cc: Konrad Rzeszutek Wilk
    Cc: Takashi Iwai
    Signed-off-by: Boris Ostrovsky

    Oleksandr Andrushchenko
     

10 Apr, 2018

1 commit

  • Pre-4.17 kernels ignored start_info's rsdp_paddr pointer and instead
    relied on finding RSDP in standard location in BIOS RO memory. This
    has worked since that's where Xen used to place it.

    However, with recent Xen change (commit 4a5733771e6f ("libxl: put RSDP
    for PVH guest near 4GB")) it prefers to keep RSDP at a "non-standard"
    address. Even though as of commit b17d9d1df3c3 ("x86/xen: Add pvh
    specific rsdp address retrieval function") Linux is able to find RSDP,
    for back-compatibility reasons we need to indicate to Xen that we can
    handle this, an we do so by setting XENFEAT_linux_rsdp_unrestricted
    flag in ELF notes.

    (Also take this opportunity and sync features.h header file with Xen)

    Signed-off-by: Boris Ostrovsky
    Reviewed-by: Juergen Gross
    Reviewed-by: Wei Liu

    Boris Ostrovsky
     

23 Dec, 2017

1 commit


21 Dec, 2017

1 commit

  • 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

    Boris Ostrovsky
     

17 Nov, 2017

1 commit

  • Pull xen updates from Juergen Gross:
    "Xen features and fixes for v4.15-rc1

    Apart from several small fixes it contains the following features:

    - a series by Joao Martins to add vdso support of the pv clock
    interface

    - a series by Juergen Gross to add support for Xen pv guests to be
    able to run on 5 level paging hosts

    - a series by Stefano Stabellini adding the Xen pvcalls frontend
    driver using a paravirtualized socket interface"

    * tag 'for-linus-4.15-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: (34 commits)
    xen/pvcalls: fix potential endless loop in pvcalls-front.c
    xen/pvcalls: Add MODULE_LICENSE()
    MAINTAINERS: xen, kvm: track pvclock-abi.h changes
    x86/xen/time: setup vcpu 0 time info page
    x86/xen/time: set pvclock flags on xen_time_init()
    x86/pvclock: add setter for pvclock_pvti_cpu0_va
    ptp_kvm: probe for kvm guest availability
    xen/privcmd: remove unused variable pageidx
    xen: select grant interface version
    xen: update arch/x86/include/asm/xen/cpuid.h
    xen: add grant interface version dependent constants to gnttab_ops
    xen: limit grant v2 interface to the v1 functionality
    xen: re-introduce support for grant v2 interface
    xen: support priv-mapping in an HVM tools domain
    xen/pvcalls: remove redundant check for irq >= 0
    xen/pvcalls: fix unsigned less than zero error check
    xen/time: Return -ENODEV from xen_get_wallclock()
    xen/pvcalls-front: mark expected switch fall-through
    xen: xenbus_probe_frontend: mark expected switch fall-throughs
    xen/time: do not decrease steal time after live migration on xen
    ...

    Linus Torvalds
     

09 Nov, 2017

1 commit

  • In order to support pvclock vdso on xen we need to setup the time
    info page for vcpu 0 and register the page with Xen using the
    VCPUOP_register_vcpu_time_memory_area hypercall. This hypercall
    will also forcefully update the pvti which will set some of the
    necessary flags for vdso. Afterwards we check if it supports the
    PVCLOCK_TSC_STABLE_BIT flag which is mandatory for having
    vdso/vsyscall support. And if so, it will set the cpu 0 pvti that
    will be later on used when mapping the vdso image.

    The xen headers are also updated to include the new hypercall for
    registering the secondary vcpu_time_info struct.

    Signed-off-by: Joao Martins
    Reviewed-by: Juergen Gross
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Joao Martins
     

07 Nov, 2017

2 commits

  • As there is currently no user for sub-page grants or transient grants
    remove that functionality. This at once makes it possible to switch
    from grant v2 to grant v1 without restrictions, as there is no loss of
    functionality other than the limited frame number width related to
    the switch.

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

    Juergen Gross
     
  • The grant v2 support was removed from the kernel with
    commit 438b33c7145ca8a5131a30c36d8f59bce119a19a ("xen/grant-table:
    remove support for V2 tables") as the higher memory footprint of v2
    grants resulted in less grants being possible for a kernel compared
    to the v1 grant interface.

    As machines with more than 16TB of memory are expected to be more
    common in the near future support of grant v2 is mandatory in order
    to be able to run a Xen pv domain at any memory location.

    So re-add grant v2 support basically by reverting above commit.

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

    Juergen Gross
     

04 Nov, 2017

1 commit

  • If the domain has XENFEAT_auto_translated_physmap then use of the PV-
    specific HYPERVISOR_mmu_update hypercall is clearly incorrect.

    This patch adds checks in xen_remap_domain_gfn_array() and
    xen_unmap_domain_gfn_array() which call through to the approprate
    xlate_mmu function if the feature is present. A check is also added
    to xen_remap_domain_gfn_range() to fail with -EOPNOTSUPP since this
    should not be used in an HVM tools domain.

    Signed-off-by: Paul Durrant
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Paul Durrant
     

03 Nov, 2017

1 commit

  • After guest live migration on xen, steal time in /proc/stat
    (cpustat[CPUTIME_STEAL]) might decrease because steal returned by
    xen_steal_lock() might be less than this_rq()->prev_steal_time which is
    derived from previous return value of xen_steal_clock().

    For instance, steal time of each vcpu is 335 before live migration.

    cpu 198 0 368 200064 1962 0 0 1340 0 0
    cpu0 38 0 81 50063 492 0 0 335 0 0
    cpu1 65 0 97 49763 634 0 0 335 0 0
    cpu2 38 0 81 50098 462 0 0 335 0 0
    cpu3 56 0 107 50138 374 0 0 335 0 0

    After live migration, steal time is reduced to 312.

    cpu 200 0 370 200330 1971 0 0 1248 0 0
    cpu0 38 0 82 50123 500 0 0 312 0 0
    cpu1 65 0 97 49832 634 0 0 312 0 0
    cpu2 39 0 82 50167 462 0 0 312 0 0
    cpu3 56 0 107 50207 374 0 0 312 0 0

    Since runstate times are cumulative and cleared during xen live migration
    by xen hypervisor, the idea of this patch is to accumulate runstate times
    to global percpu variables before live migration suspend. Once guest VM is
    resumed, xen_get_runstate_snapshot_cpu() would always return the sum of new
    runstate times and previously accumulated times stored in global percpu
    variables.

    Comment above HYPERVISOR_suspend() has been removed as it is inaccurate:
    the call can return an error code (e.g., possibly -EPERM in the future).

    Similar and more severe issue would impact prior linux 4.8-4.10 as
    discussed by Michael Las at
    https://0xstubs.org/debugging-a-flaky-cpu-steal-time-counter-on-a-paravirtualized-xen-guest,
    which would overflow steal time and lead to 100% st usage in top command
    for linux 4.8-4.10. A backport of this patch would fix that issue.

    [boris: added linux/slab.h to driver/xen/time.c, slightly reformatted
    commit message]

    References: https://0xstubs.org/debugging-a-flaky-cpu-steal-time-counter-on-a-paravirtualized-xen-guest
    Signed-off-by: Dongli Zhang
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Boris Ostrovsky

    Dongli Zhang
     

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
     

19 Sep, 2017

1 commit


31 Aug, 2017

2 commits

  • The macros for testing domain types are more complicated then they
    need to. Simplify them.

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

    Juergen Gross
     
  • Introduce the C header file which defines the PV Calls interface. It is
    imported from xen/include/public/io/pvcalls.h.

    Signed-off-by: Stefano Stabellini
    Reviewed-by: Boris Ostrovsky
    Reviewed-by: Juergen Gross
    CC: konrad.wilk@oracle.com
    CC: boris.ostrovsky@oracle.com
    CC: jgross@suse.com
    Signed-off-by: Boris Ostrovsky

    Stefano Stabellini
     

23 Jul, 2017

1 commit

  • When setting up the Xenstore watch for the memory target size the new
    watch will fire at once. Don't try to reach the configured target size
    by onlining new memory in this case, as the current memory size will
    be smaller in almost all cases due to e.g. BIOS reserved pages.

    Onlining new memory will lead to more problems e.g. undesired conflicts
    with NVMe devices meant to be operated as block devices.

    Instead remember the difference between target size and current size
    when the watch fires for the first time and apply it to any further
    size changes, too.

    In order to avoid races between balloon.c and xen-balloon.c init calls
    do the xen-balloon.c initialization from balloon.c.

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

    Juergen Gross
     

07 Jul, 2017

1 commit

  • Pull dma-mapping infrastructure from Christoph Hellwig:
    "This is the first pull request for the new dma-mapping subsystem

    In this new subsystem we'll try to properly maintain all the generic
    code related to dma-mapping, and will further consolidate arch code
    into common helpers.

    This pull request contains:

    - removal of the DMA_ERROR_CODE macro, replacing it with calls to
    ->mapping_error so that the dma_map_ops instances are more self
    contained and can be shared across architectures (me)

    - removal of the ->set_dma_mask method, which duplicates the
    ->dma_capable one in terms of functionality, but requires more
    duplicate code.

    - various updates for the coherent dma pool and related arm code
    (Vladimir)

    - various smaller cleanups (me)"

    * tag 'dma-mapping-4.13' of git://git.infradead.org/users/hch/dma-mapping: (56 commits)
    ARM: dma-mapping: Remove traces of NOMMU code
    ARM: NOMMU: Set ARM_DMA_MEM_BUFFERABLE for M-class cpus
    ARM: NOMMU: Introduce dma operations for noMMU
    drivers: dma-mapping: allow dma_common_mmap() for NOMMU
    drivers: dma-coherent: Introduce default DMA pool
    drivers: dma-coherent: Account dma_pfn_offset when used with device tree
    dma: Take into account dma_pfn_offset
    dma-mapping: replace dmam_alloc_noncoherent with dmam_alloc_attrs
    dma-mapping: remove dmam_free_noncoherent
    crypto: qat - avoid an uninitialized variable warning
    au1100fb: remove a bogus dma_free_nonconsistent call
    MAINTAINERS: add entry for dma mapping helpers
    powerpc: merge __dma_set_mask into dma_set_mask
    dma-mapping: remove the set_dma_mask method
    powerpc/cell: use the dma_supported method for ops switching
    powerpc/cell: clean up fixed mapping dma_ops initialization
    tile: remove dma_supported and mapping_error methods
    xen-swiotlb: remove xen_swiotlb_set_dma_mask
    arm: implement ->dma_supported instead of ->set_dma_mask
    mips/loongson64: implement ->dma_supported instead of ->set_dma_mask
    ...

    Linus Torvalds
     

20 Jun, 2017

1 commit

  • ARM and x86 had duplicated versions of the dma_ops structure, the
    only difference is that x86 hasn't wired up the set_dma_mask,
    mmap, and get_sgtable ops yet. On x86 all of them are identical
    to the generic version, so they aren't needed but harmless.

    All the symbols used only for xen_swiotlb_dma_ops can now be marked
    static as well.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Konrad Rzeszutek Wilk

    Christoph Hellwig
     

15 Jun, 2017

1 commit


13 Jun, 2017

2 commits

  • When Xen restores a PVHVM or PVH guest, its shared_info only holds
    up to 32 CPUs. The hypercall VCPUOP_register_vcpu_info allows
    us to setup per-page areas for VCPUs. This means we can boot
    PVH* guests with more than 32 VCPUs. During restore the per-cpu
    structure is allocated freshly by the hypervisor (vcpu_info_mfn is
    set to INVALID_MFN) so that the newly restored guest can make a
    VCPUOP_register_vcpu_info hypercall.

    However, we end up triggering this condition in Xen:
    /* Run this command on yourself or on other offline VCPUS. */
    if ( (v != current) && !test_bit(_VPF_down, &v->pause_flags) )

    which means we are unable to setup the per-cpu VCPU structures
    for running VCPUS. The Linux PV code paths makes this work by
    iterating over cpu_possible in xen_vcpu_restore() with:

    1) is target CPU up (VCPUOP_is_up hypercall?)
    2) if yes, then VCPUOP_down to pause it
    3) VCPUOP_register_vcpu_info
    4) if it was down, then VCPUOP_up to bring it back up

    With Xen commit 192df6f9122d ("xen/x86: allow HVM guests to use
    hypercalls to bring up vCPUs") this is available for non-PV guests.
    As such first check if VCPUOP_is_up is actually possible before
    trying this dance.

    As most of this dance code is done already in xen_vcpu_restore()
    let's make it callable on PV, PVH and PVHVM.

    Based-on-patch-by: Konrad Wilk
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Ankur Arora
    Signed-off-by: Juergen Gross

    Ankur Arora
     
  • A HVM domian booting generates around 200K (evtchn:qemu-dm xen-dyn)
    interrupts,in a short period of time. All these evtchn:qemu-dm are bound
    to VCPU 0, until irqbalance sees these IRQ and moves it to a different VCPU.
    In one configuration, irqbalance runs every 10 seconds, which means
    irqbalance doesn't get to see these burst of interrupts and doesn't
    re-balance interrupts most of the time, making all evtchn:qemu-dm to be
    processed by VCPU0. This cause VCPU0 to spend most of time processing
    hardirq and very little time on softirq. Moreover, if dom0 kernel PREEMPTION
    is disabled, VCPU0 never runs watchdog (process context), triggering a
    softlockup detection code to panic.

    Binding evtchn:qemu-dm to next online VCPU, will spread hardirq
    processing evenly across different CPU. Later, irqbalance will try to balance
    evtchn:qemu-dm, if required.

    Signed-off-by: Anoob Soman
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross

    Anoob Soman
     

09 Jun, 2017

1 commit

  • Change the third parameter to be the required struct xen_dm_op_buf *
    instead of a generic void * (which blindly accepts any pointer).

    Signed-off-by: Sergey Dyasli
    Reviewed-by: Juergen Gross
    Reviewed-by: Stefano Stabellini
    Signed-off-by: Juergen Gross

    Sergey Dyasli
     

02 May, 2017

10 commits

  • When rebooting DOM0 with ACPI on ARM64, the kernel is crashing with the stack
    trace [1].

    This is happening because when EFI runtimes are enabled, the reset code
    (see machine_restart) will first try to use EFI restart method.

    However, the EFI restart code is expecting the reset_system callback to
    be always set. This is not the case for Xen and will lead to crash.

    The EFI restart helper is used in multiple places and some of them don't
    not have fallback (see machine_power_off). So implement reset_system
    callback as a call to xen_reboot when using EFI Xen.

    [ 36.999270] reboot: Restarting system
    [ 37.002921] Internal error: Attempting to execute userspace memory: 86000004 [#1] PREEMPT SMP
    [ 37.011460] Modules linked in:
    [ 37.014598] CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted 4.11.0-rc1-00003-g1e248b60a39b-dirty #506
    [ 37.023903] Hardware name: (null) (DT)
    [ 37.027734] task: ffff800902068000 task.stack: ffff800902064000
    [ 37.033739] PC is at 0x0
    [ 37.036359] LR is at efi_reboot+0x94/0xd0
    [ 37.040438] pc : [] lr : [] pstate: 404001c5
    [ 37.047920] sp : ffff800902067cf0
    [ 37.051314] x29: ffff800902067cf0 x28: ffff800902068000
    [ 37.056709] x27: ffff000008992000 x26: 000000000000008e
    [ 37.062104] x25: 0000000000000123 x24: 0000000000000015
    [ 37.067499] x23: 0000000000000000 x22: ffff000008e6e250
    [ 37.072894] x21: ffff000008e6e000 x20: 0000000000000000
    [ 37.078289] x19: ffff000008e5d4c8 x18: 0000000000000010
    [ 37.083684] x17: 0000ffffa7c27470 x16: 00000000deadbeef
    [ 37.089079] x15: 0000000000000006 x14: ffff000088f42bef
    [ 37.094474] x13: ffff000008f42bfd x12: ffff000008e706c0
    [ 37.099870] x11: ffff000008e70000 x10: 0000000005f5e0ff
    [ 37.105265] x9 : ffff800902067a50 x8 : 6974726174736552
    [ 37.110660] x7 : ffff000008cc6fb8 x6 : ffff000008cc6fb0
    [ 37.116055] x5 : ffff000008c97dd8 x4 : 0000000000000000
    [ 37.121453] x3 : 0000000000000000 x2 : 0000000000000000
    [ 37.126845] x1 : 0000000000000000 x0 : 0000000000000000
    [ 37.132239]
    [ 37.133808] Process systemd-shutdow (pid: 1, stack limit = 0xffff800902064000)
    [ 37.141118] Stack: (0xffff800902067cf0 to 0xffff800902068000)
    [ 37.146949] 7ce0: ffff800902067d40 ffff000008085334
    [ 37.154869] 7d00: 0000000000000000 ffff000008f3b000 ffff800902067d40 ffff0000080852e0
    [ 37.162787] 7d20: ffff000008cc6fb0 ffff000008cc6fb8 ffff000008c7f580 ffff000008c97dd8
    [ 37.170706] 7d40: ffff800902067d60 ffff0000080e2c2c 0000000000000000 0000000001234567
    [ 37.178624] 7d60: ffff800902067d80 ffff0000080e2ee8 0000000000000000 ffff0000080e2df4
    [ 37.186544] 7d80: 0000000000000000 ffff0000080830f0 0000000000000000 00008008ff1c1000
    [ 37.194462] 7da0: ffffffffffffffff 0000ffffa7c4b1cc 0000000000000000 0000000000000024
    [ 37.202380] 7dc0: ffff800902067dd0 0000000000000005 0000fffff24743c8 0000000000000004
    [ 37.210299] 7de0: 0000fffff2475f03 0000000000000010 0000fffff2474418 0000000000000005
    [ 37.218218] 7e00: 0000fffff2474578 000000000000000a 0000aaaad6b722c0 0000000000000001
    [ 37.226136] 7e20: 0000000000000123 0000000000000038 ffff800902067e50 ffff0000081e7294
    [ 37.234055] 7e40: ffff800902067e60 ffff0000081e935c ffff800902067e60 ffff0000081e9388
    [ 37.241973] 7e60: ffff800902067eb0 ffff0000081ea388 0000000000000000 00008008ff1c1000
    [ 37.249892] 7e80: ffffffffffffffff 0000ffffa7c4a79c 0000000000000000 ffff000000020000
    [ 37.257810] 7ea0: 0000010000000004 0000000000000000 0000000000000000 ffff0000080830f0
    [ 37.265729] 7ec0: fffffffffee1dead 0000000028121969 0000000001234567 0000000000000000
    [ 37.273651] 7ee0: ffffffffffffffff 8080000000800000 0000800000008080 feffa9a9d4ff2d66
    [ 37.281567] 7f00: 000000000000008e feffa9a9d5b60e0f 7f7fffffffff7f7f 0101010101010101
    [ 37.289485] 7f20: 0000000000000010 0000000000000008 000000000000003a 0000ffffa7ccf588
    [ 37.297404] 7f40: 0000aaaad6b87d00 0000ffffa7c4b1b0 0000fffff2474be0 0000aaaad6b88000
    [ 37.305326] 7f60: 0000fffff2474fb0 0000000001234567 0000000000000000 0000000000000000
    [ 37.313240] 7f80: 0000000000000000 0000000000000001 0000aaaad6b70d4d 0000000000000000
    [ 37.321159] 7fa0: 0000000000000001 0000fffff2474ea0 0000aaaad6b5e2e0 0000fffff2474e80
    [ 37.329078] 7fc0: 0000ffffa7c4b1cc 0000000000000000 fffffffffee1dead 000000000000008e
    [ 37.336997] 7fe0: 0000000000000000 0000000000000000 9ce839cffee77eab fafdbf9f7ed57f2f
    [ 37.344911] Call trace:
    [ 37.347437] Exception stack(0xffff800902067b20 to 0xffff800902067c50)
    [ 37.353970] 7b20: ffff000008e5d4c8 0001000000000000 0000000080f82000 0000000000000000
    [ 37.361883] 7b40: ffff800902067b60 ffff000008e17000 ffff000008f44c68 00000001081081b4
    [ 37.369802] 7b60: ffff800902067bf0 ffff000008108478 0000000000000000 ffff000008c235b0
    [ 37.377721] 7b80: ffff800902067ce0 0000000000000000 0000000000000000 0000000000000015
    [ 37.385643] 7ba0: 0000000000000123 000000000000008e ffff000008992000 ffff800902068000
    [ 37.393557] 7bc0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    [ 37.401477] 7be0: 0000000000000000 ffff000008c97dd8 ffff000008cc6fb0 ffff000008cc6fb8
    [ 37.409396] 7c00: 6974726174736552 ffff800902067a50 0000000005f5e0ff ffff000008e70000
    [ 37.417318] 7c20: ffff000008e706c0 ffff000008f42bfd ffff000088f42bef 0000000000000006
    [ 37.425234] 7c40: 00000000deadbeef 0000ffffa7c27470
    [ 37.430190] [< (null)>] (null)
    [ 37.434982] [] machine_restart+0x6c/0x70
    [ 37.440550] [] kernel_restart+0x6c/0x78
    [ 37.446030] [] SyS_reboot+0x130/0x228
    [ 37.451337] [] el0_svc_naked+0x24/0x28
    [ 37.456737] Code: bad PC value
    [ 37.459891] ---[ end trace 76e2fc17e050aecd ]---

    Signed-off-by: Julien Grall

    --

    Cc: Boris Ostrovsky
    Cc: Juergen Gross
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: x86@kernel.org

    The x86 code has theoritically a similar issue, altought EFI does not
    seem to be the preferred method. I have only built test it on x86.

    This should also probably be fixed in stable tree.

    Changes in v2:
    - Implement xen_efi_reset_system using xen_reboot
    - Move xen_efi_reset_system in drivers/xen/efi.c
    Signed-off-by: Juergen Gross

    Julien Grall
     
  • The helper xen_reboot will be called by the EFI code in a later patch.

    Note that the ARM version does not yet exist and will be added in a
    later patch too.

    Signed-off-by: Julien Grall
    Signed-off-by: Juergen Gross

    Julien Grall
     
  • Now that __generic_dma_ops is a xen specific function, rename it to
    xen_get_dma_ops. Change all the call sites appropriately.

    Signed-off-by: Stefano Stabellini
    Reviewed-by: Boris Ostrovsky
    Acked-by: Konrad Rzeszutek Wilk
    CC: linux@armlinux.org.uk
    CC: catalin.marinas@arm.com
    CC: will.deacon@arm.com
    CC: boris.ostrovsky@oracle.com
    CC: jgross@suse.com
    CC: Julien Grall

    Stefano Stabellini
     
  • The following commit:

    commit 815dd18788fe0d41899f51b91d0560279cf16b0d
    Author: Bart Van Assche
    Date: Fri Jan 20 13:04:04 2017 -0800

    treewide: Consolidate get_dma_ops() implementations

    rearranges get_dma_ops in a way that xen_dma_ops are not returned when
    running on Xen anymore, dev->dma_ops is returned instead (see
    arch/arm/include/asm/dma-mapping.h:get_arch_dma_ops and
    include/linux/dma-mapping.h:get_dma_ops).

    Fix the problem by storing dev->dma_ops in dev_archdata, and setting
    dev->dma_ops to xen_dma_ops. This way, xen_dma_ops is returned naturally
    by get_dma_ops. The Xen code can retrieve the original dev->dma_ops from
    dev_archdata when needed. It also allows us to remove __generic_dma_ops
    from common headers.

    Signed-off-by: Stefano Stabellini
    Tested-by: Julien Grall
    Suggested-by: Catalin Marinas
    Reviewed-by: Catalin Marinas
    Cc: [4.11+]
    CC: linux@armlinux.org.uk
    CC: catalin.marinas@arm.com
    CC: will.deacon@arm.com
    CC: boris.ostrovsky@oracle.com
    CC: jgross@suse.com
    CC: Julien Grall

    Stefano Stabellini
     
  • This is the ABI for the two halves of a para-virtualized
    display driver.

    This protocol aims to provide a unified protocol which fits more
    sophisticated use-cases than a framebuffer device can handle. At the
    moment basic functionality is supported with the intention to extend:
    o multiple dynamically allocated/destroyed framebuffers
    o buffers of arbitrary sizes
    o better configuration options including multiple display support

    Note: existing fbif can be used together with displif running at the
    same time, e.g. on Linux one provides framebuffer and another DRM/KMS

    Future extensions to the existing protocol may include:
    o allow display/connector cloning
    o allow allocating objects other than display buffers
    o add planes/overlays support
    o support scaling
    o support rotation

    Note, that this protocol doesn't use ring macros for
    bi-directional exchange (PV calls/9pfs) bacause:
    o it statically defines the use of a single page
    for the ring buffer
    o it uses direct memory access to ring's contents
    w/o memory copying
    o re-uses the same idea that kbdif/fbif use
    which for this use-case seems to be appropriate

    ==================================================
    Rationale for introducing this protocol instead of
    using the existing fbif:
    ==================================================

    1. In/out event sizes
    o fbif - 40 octets
    o displif - 40 octets
    This is only the initial version of the displif protocol
    which means that there could be requests which will not fit
    (WRT introducing some GPU related functionality
    later on). In that case we cannot alter fbif sizes as we need to
    be backward compatible an will be forced to handle those
    apart of fbif.

    2. Shared page
    Displif doesn't use anything like struct xenfb_page, but
    DEFINE_RING_TYPES(xen_displif, struct xendispl_req, struct
    xendispl_resp) which is a better and more common way.
    Output events use a shared page which only has in_cons and in_prod
    and all the rest is used for incoming events. Here struct xenfb_page
    could probably be used as is despite the fact that it only has a half
    of a page for incoming events which is only 50 events. (consider
    something like 60Hz display)

    3. Amount of changes.
    fbif only provides XENFB_TYPE_UPDATE and XENFB_TYPE_RESIZE
    events, so it looks like it is easier to get fb support into displif
    than vice versa. displif at the moment has 6 requests and 1 event,
    multiple connector support, etc.

    Signed-off-by: Oleksandr Grytsov
    Signed-off-by: Oleksandr Andrushchenko
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Oleksandr Andrushchenko
     
  • Add ABI for the two halves of a para-virtualized
    sound driver to communicate with each other.

    The ABI allows implementing audio playback and capture as
    well as volume control and possibility to mute/unmute
    audio sources.

    Note: depending on the use-case backend can expose more sound
    cards and PCM devices/streams than the underlying HW physically
    has by employing SW mixers, configuring virtual sound streams,
    channels etc. Thus, allowing fine tunned configurations per
    frontend.

    Signed-off-by: Oleksandr Andrushchenko
    Signed-off-by: Oleksandr Grytsov
    Signed-off-by: Oleksandr Dmytryshyn
    Signed-off-by: Iurii Konovalenko
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Oleksandr Andrushchenko
     
  • Multi-touch fields re-use the page that is used by the other features
    which means that you can interleave multi-touch, motion, and key
    events.

    Signed-off-by: Oleksandr Andrushchenko
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Oleksandr Andrushchenko
     
  • The patch clarifies the protocol that is used by the PV keyboard
    drivers.

    Signed-off-by: Oleksandr Andrushchenko
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Oleksandr Andrushchenko
     
  • It uses the new ring.h macros to declare rings and interfaces.

    CC: konrad.wilk@oracle.com
    CC: boris.ostrovsky@oracle.com
    CC: jgross@suse.com
    CC: groug@kaod.org

    Signed-off-by: Stefano Stabellini
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Stefano Stabellini
     
  • Sync the ring.h file with upstream Xen, to introduce the new ring macros.
    They will be used by the Xen transport for 9pfs.

    CC: konrad.wilk@oracle.com
    CC: boris.ostrovsky@oracle.com
    CC: jgross@suse.com
    CC: groug@kaod.org

    Signed-off-by: Stefano Stabellini
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Stefano Stabellini