23 May, 2020

1 commit

  • init_vp_index() uses the (per-node) hv_numa_map[] masks to record the
    CPUs allocated for channel interrupts at a given time, and distribute
    the performance-critical channels across the available CPUs: in part.,
    the mask of "candidate" target CPUs in a given NUMA node, for a newly
    offered channel, is determined by XOR-ing the node's CPU mask and the
    node's hv_numa_map. This operation/mechanism assumes that no offline
    CPUs is set in the hv_numa_map mask, an assumption that does not hold
    since such mask is currently not updated when a channel is removed or
    assigned to a different CPU.

    To address the issues described above, this adds hooks in the channel
    removal path (hv_process_channel_removal()) and in target_cpu_store()
    in order to clear, resp. to update, the hv_numa_map[] masks as needed.
    This also adds a (missed) update of the masks in init_vp_index() (cf.,
    e.g., the memory-allocation failure path in this function).

    Like in the case of init_vp_index(), such hooks require to determine
    if the given channel is performance critical. init_vp_index() does
    this by parsing the channel's offer, it can not rely on the device
    data structure (device_obj) to retrieve such information because the
    device data structure has not been allocated/linked with the channel
    by the time that init_vp_index() executes. A similar situation may
    hold in hv_is_alloced_cpu() (defined below); the adopted approach is
    to "cache" the device type of the channel, as computed by parsing the
    channel's offer, in the channel structure itself.

    Fixes: 7527810573436f ("Drivers: hv: vmbus: Introduce the CHANNELMSG_MODIFYCHANNEL message type")
    Signed-off-by: Andrea Parri (Microsoft)
    Reviewed-by: Michael Kelley
    Link: https://lore.kernel.org/r/20200522171901.204127-3-parri.andrea@gmail.com
    Signed-off-by: Wei Liu

    Andrea Parri (Microsoft)
     

23 Apr, 2020

4 commits

  • The fcopy and vss callback functions could be running in a tasklet
    at the same time they are called in hv_poll_channel(). Current code
    serializes the invocations of these functions, and their accesses to
    the channel ring buffer, by sending an IPI to the CPU that is allowed
    to access the ring buffer, cf. hv_poll_channel(). This IPI mechanism
    becomes infeasible if we allow changing the CPU that a channel will
    interrupt. Instead modify the callback wrappers to always execute
    the fcopy and vss callbacks in a tasklet, thus mirroring the solution
    for the kvp callback functions adopted since commit a3ade8cc474d8
    ("HV: properly delay KVP packets when negotiation is in progress").
    This will ensure that the callback function can't run on two CPUs at
    the same time.

    Suggested-by: Michael Kelley
    Signed-off-by: Andrea Parri (Microsoft)
    Link: https://lore.kernel.org/r/20200406001514.19876-6-parri.andrea@gmail.com
    Reviewed-by: Michael Kelley
    Signed-off-by: Wei Liu

    Andrea Parri (Microsoft)
     
  • When Hyper-V sends an interrupt to the guest, the guest has to figure
    out which channel the interrupt is associated with. Hyper-V sets a bit
    in a memory page that is shared with the guest, indicating a particular
    "relid" that the interrupt is associated with. The current Linux code
    then uses a set of per-CPU linked lists to map a given "relid" to a
    pointer to a channel structure.

    This design introduces a synchronization problem if the CPU that Hyper-V
    will interrupt for a certain channel is changed. If the interrupt comes
    on the "old CPU" and the channel was already moved to the per-CPU list
    of the "new CPU", then the relid -> channel mapping will fail and the
    interrupt is dropped. Similarly, if the interrupt comes on the new CPU
    but the channel was not moved to the per-CPU list of the new CPU, then
    the mapping will fail and the interrupt is dropped.

    Relids are integers ranging from 0 to 2047. The mapping from relids to
    channel structures can be done by setting up an array with 2048 entries,
    each entry being a pointer to a channel structure (hence total size ~16K
    bytes, which is not a problem). The array is global, so there are no
    per-CPU linked lists to update. The array can be searched and updated
    by loading from/storing to the array at the specified index. With no
    per-CPU data structures, the above mentioned synchronization problem is
    avoided and the relid2channel() function gets simpler.

    Suggested-by: Michael Kelley
    Signed-off-by: Andrea Parri (Microsoft)
    Link: https://lore.kernel.org/r/20200406001514.19876-4-parri.andrea@gmail.com
    Reviewed-by: Michael Kelley
    Signed-off-by: Wei Liu

    Andrea Parri (Microsoft)
     
  • A Linux guest have to pick a "connect CPU" to communicate with the
    Hyper-V host. This CPU can not be taken offline because Hyper-V does
    not provide a way to change that CPU assignment.

    Current code sets the connect CPU to whatever CPU ends up running the
    function vmbus_negotiate_version(), and this will generate problems if
    that CPU is taken offine.

    Establish CPU0 as the connect CPU, and add logics to prevents the
    connect CPU from being taken offline. We could pick some other CPU,
    and we could pick that "other CPU" dynamically if there was a reason to
    do so at some point in the future. But for now, #defining the connect
    CPU to 0 is the most straightforward and least complex solution.

    While on this, add inline comments explaining "why" offer and rescind
    messages should not be handled by a same serialized work queue.

    Suggested-by: Dexuan Cui
    Signed-off-by: Andrea Parri (Microsoft)
    Reviewed-by: Vitaly Kuznetsov
    Link: https://lore.kernel.org/r/20200406001514.19876-2-parri.andrea@gmail.com
    Reviewed-by: Michael Kelley
    Signed-off-by: Wei Liu

    Andrea Parri (Microsoft)
     
  • VMBus message handlers (channel_message_table) receive a pointer to
    'struct vmbus_channel_message_header' and cast it to a structure of their
    choice, which is sometimes longer than the header. We, however, don't check
    that the message is long enough so in case hypervisor screws up we'll be
    accessing memory beyond what was allocated for temporary buffer.

    Previously, we used to always allocate and copy 256 bytes from message page
    to temporary buffer but this is hardly better: in case the message is
    shorter than we expect we'll be trying to consume garbage as some real
    data and no memory guarding technique will be able to identify an issue.

    Introduce 'min_payload_len' to 'struct vmbus_channel_message_table_entry'
    and check against it in vmbus_on_msg_dpc(). Note, we can't require the
    exact length as new hypervisor versions may add extra fields to messages,
    we only check that the message is not shorter than we expect.

    Signed-off-by: Vitaly Kuznetsov
    Reviewed-by: Michael Kelley
    Link: https://lore.kernel.org/r/20200406104326.45361-1-vkuznets@redhat.com
    Signed-off-by: Wei Liu

    Vitaly Kuznetsov
     

22 Mar, 2020

1 commit

  • The current codebase makes use of the zero-length array language
    extension to the C90 standard, but the preferred mechanism to declare
    variable-length types such as these ones is a flexible array member[1][2],
    introduced in C99:

    struct foo {
    int stuff;
    struct boo array[];
    };

    By making use of the mechanism above, we will get a compiler warning
    in case the flexible array does not occur last in the structure, which
    will help us prevent some kind of undefined behavior bugs from being
    inadvertently introduced[3] to the codebase from now on.

    Also, notice that, dynamic memory allocations won't be affected by
    this change:

    "Flexible array members have incomplete type, and so the sizeof operator
    may not be applied. As a quirk of the original implementation of
    zero-length arrays, sizeof evaluates to zero."[1]

    This issue was found with the help of Coccinelle.

    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Wei Liu

    Gustavo A. R. Silva
     

27 Jan, 2020

1 commit

  • Add util_pre_suspend() and util_pre_resume() for some hv_utils devices
    (e.g. kvp/vss/fcopy), because they need special handling before
    util_suspend() calls vmbus_close().

    For kvp, all the possible pending work items should be cancelled.

    For vss and fcopy, some extra clean-up needs to be done, i.e. fake a
    THAW message for hv_vss_daemon and fake a CANCEL_FCOPY message for
    hv_fcopy_daemon, otherwise when the VM resums back, the daemons
    can end up in an inconsistent state (i.e. the file systems are
    frozen but will never be thawed; the file transmitted via fcopy
    may not be complete). Note: there is an extra patch for the daemons:
    "Tools: hv: Reopen the devices if read() or write() returns errors",
    because the hv_utils driver can not guarantee the whole transaction
    finishes completely once util_suspend() starts to run (at this time,
    all the userspace processes are frozen).

    util_probe() disables channel->callback_event to avoid the race with
    the channel callback.

    Signed-off-by: Dexuan Cui
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Dexuan Cui
     

22 Nov, 2019

1 commit

  • Introduce user specified latency in the packet reception path
    By exposing the test parameters as part of the debugfs channel
    attributes. We will control the testing state via these attributes.

    Signed-off-by: Branden Bonaby
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Branden Bonaby
     

25 Sep, 2019

1 commit

  • Pull Hyper-V updates from Sasha Levin:

    - first round of vmbus hibernation support (Dexuan Cui)

    - remove dependencies on PAGE_SIZE (Maya Nakamura)

    - move the hyper-v tools/ code into the tools build system (Andy
    Shevchenko)

    - hyper-v balloon cleanups (Dexuan Cui)

    * tag 'hyperv-next-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux:
    Drivers: hv: vmbus: Resume after fixing up old primary channels
    Drivers: hv: vmbus: Suspend after cleaning up hv_sock and sub channels
    Drivers: hv: vmbus: Clean up hv_sock channels by force upon suspend
    Drivers: hv: vmbus: Suspend/resume the vmbus itself for hibernation
    Drivers: hv: vmbus: Ignore the offers when resuming from hibernation
    Drivers: hv: vmbus: Implement suspend/resume for VSC drivers for hibernation
    Drivers: hv: vmbus: Add a helper function is_sub_channel()
    Drivers: hv: vmbus: Suspend/resume the synic for hibernation
    Drivers: hv: vmbus: Break out synic enable and disable operations
    HID: hv: Remove dependencies on PAGE_SIZE for ring buffer
    Tools: hv: move to tools buildsystem
    hv_balloon: Reorganize the probe function
    hv_balloon: Use a static page for the balloon_up send buffer

    Linus Torvalds
     

17 Sep, 2019

1 commit


07 Sep, 2019

4 commits

  • When the host re-offers the primary channels upon resume, the host only
    guarantees the Instance GUID doesn't change, so vmbus_bus_suspend()
    should invalidate channel->offermsg.child_relid and figure out the
    number of primary channels that need to be fixed up upon resume.

    Upon resume, vmbus_onoffer() finds the old channel structs, and maps
    the new offers to the old channels, and fixes up the old structs,
    and finally the resume callbacks of the VSC drivers will re-open
    the channels.

    Signed-off-by: Dexuan Cui
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Dexuan Cui
     
  • Before suspend, Linux must make sure all the hv_sock channels have been
    properly cleaned up, because a hv_sock connection can not persist across
    hibernation, and the user-space app must be properly notified of the
    state change of the connection.

    Before suspend, Linux also must make sure all the sub-channels have been
    destroyed, i.e. the related channel structs of the sub-channels must be
    properly removed, otherwise they would cause a conflict when the
    sub-channels are recreated upon resume.

    Add a counter to track such channels, and vmbus_bus_suspend() should wait
    for the counter to drop to zero.

    Signed-off-by: Dexuan Cui
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Dexuan Cui
     
  • Before Linux enters hibernation, it sends the CHANNELMSG_UNLOAD message to
    the host so all the offers are gone. After hibernation, Linux needs to
    re-negotiate with the host using the same vmbus protocol version (which
    was in use before hibernation), and ask the host to re-offer the vmbus
    devices.

    Signed-off-by: Dexuan Cui
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Dexuan Cui
     
  • Break out synic enable and disable operations into separate
    hv_synic_disable_regs() and hv_synic_enable_regs() functions for use by a
    later patch to support hibernation.

    There is no functional change except the unnecessary check
    "if (sctrl.enable != 1) return -EFAULT;" which is removed, because when
    we're in hv_synic_cleanup(), we're absolutely sure sctrl.enable must be 1.

    Signed-off-by: Dexuan Cui
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Dexuan Cui
     

20 Aug, 2019

1 commit

  • This field is no longer used after the commit
    63ed4e0c67df ("Drivers: hv: vmbus: Consolidate all Hyper-V specific clocksource code")
    , because it's replaced by the global variable
    "struct ms_hyperv_tsc_page *tsc_pg;" (now, the variable is in
    drivers/clocksource/hyperv_timer.c).

    Fixes: 63ed4e0c67df ("Drivers: hv: vmbus: Consolidate all Hyper-V specific clocksource code")
    Signed-off-by: Dexuan Cui
    Signed-off-by: Sasha Levin

    Dexuan Cui
     

22 Jul, 2019

1 commit

  • Replace PAGE_SIZE with HV_HYP_PAGE_SIZE because the guest page size may not
    be 4096 on all architectures and Hyper-V always runs with a page size of
    4096.

    Signed-off-by: Maya Nakamura
    Signed-off-by: Thomas Gleixner
    Reviewed-by: Michael Kelley
    Reviewed-by: Vitaly Kuznetsov
    Acked-by: Sasha Levin
    Link: https://lkml.kernel.org/r/0d9e80ecabcc950dc279fdd2e39bea4060123ba4.1562916939.git.m.maya.nakamura@gmail.com

    Maya Nakamura
     

03 Jul, 2019

1 commit

  • Hyper-V clock/timer code and data structures are currently mixed
    in with other code in the ISA independent drivers/hv directory as
    well as the ISA dependent Hyper-V code under arch/x86.

    Consolidate this code and data structures into a Hyper-V clocksource driver
    to better follow the Linux model. In doing so, separate out the ISA
    dependent portions so the new clocksource driver works for x86 and for the
    in-process Hyper-V on ARM64 code.

    To start, move the existing clockevents code to create the new clocksource
    driver. Update the VMbus driver to call initialization and cleanup routines
    since the Hyper-V synthetic timers are not independently enumerated in
    ACPI.

    No behavior is changed and no new functionality is added.

    Suggested-by: Marc Zyngier
    Signed-off-by: Michael Kelley
    Signed-off-by: Thomas Gleixner
    Reviewed-by: Vitaly Kuznetsov
    Cc: "bp@alien8.de"
    Cc: "will.deacon@arm.com"
    Cc: "catalin.marinas@arm.com"
    Cc: "mark.rutland@arm.com"
    Cc: "linux-arm-kernel@lists.infradead.org"
    Cc: "gregkh@linuxfoundation.org"
    Cc: "linux-hyperv@vger.kernel.org"
    Cc: "olaf@aepfle.de"
    Cc: "apw@canonical.com"
    Cc: "jasowang@redhat.com"
    Cc: "marcelo.cerri@canonical.com"
    Cc: Sunil Muthuswamy
    Cc: KY Srinivasan
    Cc: "sashal@kernel.org"
    Cc: "vincenzo.frascino@arm.com"
    Cc: "linux-arch@vger.kernel.org"
    Cc: "linux-mips@vger.kernel.org"
    Cc: "linux-kselftest@vger.kernel.org"
    Cc: "arnd@arndb.de"
    Cc: "linux@armlinux.org.uk"
    Cc: "ralf@linux-mips.org"
    Cc: "paul.burton@mips.com"
    Cc: "daniel.lezcano@linaro.org"
    Cc: "salyzyn@android.com"
    Cc: "pcc@google.com"
    Cc: "shuah@kernel.org"
    Cc: "0x7f454c46@gmail.com"
    Cc: "linux@rasmusvillemoes.dk"
    Cc: "huw@codeweavers.com"
    Cc: "sfr@canb.auug.org.au"
    Cc: "pbonzini@redhat.com"
    Cc: "rkrcmar@redhat.com"
    Cc: "kvm@vger.kernel.org"
    Link: https://lkml.kernel.org/r/1561955054-1838-2-git-send-email-mikelley@microsoft.com

    Michael Kelley
     

05 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms and conditions of the gnu general public license
    version 2 as published by the free software foundation this program
    is distributed in the hope it will be useful but without any
    warranty without even the implied warranty of merchantability or
    fitness for a particular purpose see the gnu general public license
    for more details you should have received a copy of the gnu general
    public license along with this program if not write to the free
    software foundation inc 59 temple place suite 330 boston ma 02111
    1307 usa

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 33 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Kate Stewart
    Reviewed-by: Alexios Zavras
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190530000435.254582722@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

11 Apr, 2019

1 commit

  • Fix a race condition that can result in a ring buffer pointer being set
    to null while a "_show" function is reading the ring buffer's data. This
    problem was discussed here: https://lkml.org/lkml/2018/10/18/779

    To fix the race condition, add a new mutex lock to the
    "hv_ring_buffer_info" struct. Add a new function,
    "hv_ringbuffer_pre_init()", where a channel's inbound and outbound
    ring_buffer_info mutex locks are initialized.

    Acquire/release the locks in the "hv_ringbuffer_cleanup()" function,
    which is where the ring buffer pointers are set to null.

    Acquire/release the locks in the four channel-level "_show" functions
    that access ring buffer data. Remove the "const" qualifier from the
    "vmbus_channel" parameter and the "rbi" variable of the channel-level
    "_show" functions so that the locks can be acquired/released in these
    functions.

    Acquire/release the locks in hv_ringbuffer_get_debuginfo(). Remove the
    "const" qualifier from the "hv_ring_buffer_info" parameter so that the
    locks can be acquired/released in this function.

    Signed-off-by: Kimberly Brown
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Kimberly Brown
     

21 Mar, 2019

1 commit

  • There are two methods for signaling the host: the monitor page mechanism
    and hypercalls. The monitor page mechanism is used by performance
    critical channels (storage, networking, etc.) because it provides
    improved throughput. However, latency is increased. Monitor pages are
    allocated to these channels.

    Monitor pages are not allocated to channels that do not use the monitor
    page mechanism. Therefore, these channels do not have a valid monitor id
    or valid monitor page data. In these cases, some of the "_show"
    functions return incorrect data. They return an invalid monitor id and
    data that is beyond the bounds of the hv_monitor_page array fields.

    The "channel->offermsg.monitor_allocated" value can be used to determine
    whether monitor pages have been allocated to a channel.

    Add "is_visible()" callback functions for the device-level and
    channel-level attribute groups. These functions will hide the monitor
    sysfs files when the monitor mechanism is not used.

    Remove ".default_attributes" from "vmbus_chan_attrs" and create a
    channel-level attribute group. These changes allow the new
    "is_visible()" callback function to be applied to the channel-level
    attributes.

    Call "sysfs_create_group()" in "vmbus_add_channel_kobj()" to create the
    channel's sysfs files. Add a new function,
    “vmbus_remove_channel_attr_group()”, and call it in "free_channel()" to
    remove the channel's sysfs files when the channel is closed.

    Signed-off-by: Kimberly Brown
    Reviewed-by: Greg Kroah-Hartman
    Reviewed-by: Michael Kelley
    Signed-off-by: Sasha Levin

    Kimberly Brown
     

15 Feb, 2019

1 commit

  • There are new types and helpers that are supposed to be used in new code.

    As a preparation to get rid of legacy types and API functions do
    the conversion here.

    Cc: "K. Y. Srinivasan"
    Cc: Haiyang Zhang
    Cc: Stephen Hemminger
    Cc: devel@linuxdriverproject.org
    Signed-off-by: Andy Shevchenko
    Reviewed-by: Michael Kelley
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Sasha Levin

    Andy Shevchenko
     

29 Dec, 2018

1 commit

  • Pull char/misc driver updates from Greg KH:
    "Here is the big set of char and misc driver patches for 4.21-rc1.

    Lots of different types of driver things in here, as this tree seems
    to be the "collection of various driver subsystems not big enough to
    have their own git tree" lately.

    Anyway, some highlights of the changes in here:

    - binderfs: is it a rule that all driver subsystems will eventually
    grow to have their own filesystem? Binder now has one to handle the
    use of it in containerized systems.

    This was discussed at the Plumbers conference a few months ago and
    knocked into mergable shape very fast by Christian Brauner. Who
    also has signed up to be another binder maintainer, showing a
    distinct lack of good judgement :)

    - binder updates and fixes

    - mei driver updates

    - fpga driver updates and additions

    - thunderbolt driver updates

    - soundwire driver updates

    - extcon driver updates

    - nvmem driver updates

    - hyper-v driver updates

    - coresight driver updates

    - pvpanic driver additions and reworking for more device support

    - lp driver updates. Yes really, it's _finally_ moved to the proper
    parallal port driver model, something I never thought I would see
    happen. Good stuff.

    - other tiny driver updates and fixes.

    All of these have been in linux-next for a while with no reported
    issues"

    * tag 'char-misc-4.21-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (116 commits)
    MAINTAINERS: add another Android binder maintainer
    intel_th: msu: Fix an off-by-one in attribute store
    stm class: Add a reference to the SyS-T document
    stm class: Fix a module refcount leak in policy creation error path
    char: lp: use new parport device model
    char: lp: properly count the lp devices
    char: lp: use first unused lp number while registering
    char: lp: detach the device when parallel port is removed
    char: lp: introduce list to save port number
    bus: qcom: remove duplicated include from qcom-ebi2.c
    VMCI: Use memdup_user() rather than duplicating its implementation
    char/rtc: Use of_node_name_eq for node name comparisons
    misc: mic: fix a DMA pool free failure
    ptp: fix an IS_ERR() vs NULL check
    genwqe: Fix size check
    binder: implement binderfs
    binder: fix use-after-free due to ksys_close() during fdget()
    bus: fsl-mc: remove duplicated include files
    bus: fsl-mc: explicitly define the fsl_mc_command endianness
    misc: ti-st: make array read_ver_cmd static, shrinks object size
    ...

    Linus Torvalds
     

15 Dec, 2018

1 commit


10 Dec, 2018

1 commit


03 Dec, 2018

1 commit

  • vmbus_process_offer() mustn't call channel->sc_creation_callback()
    directly for sub-channels, because sc_creation_callback() ->
    vmbus_open() may never get the host's response to the
    OPEN_CHANNEL message (the host may rescind a channel at any time,
    e.g. in the case of hot removing a NIC), and vmbus_onoffer_rescind()
    may not wake up the vmbus_open() as it's blocked due to a non-zero
    vmbus_connection.offer_in_progress, and finally we have a deadlock.

    The above is also true for primary channels, if the related device
    drivers use sync probing mode by default.

    And, usually the handling of primary channels and sub-channels can
    depend on each other, so we should offload them to different
    workqueues to avoid possible deadlock, e.g. in sync-probing mode,
    NIC1's netvsc_subchan_work() can race with NIC2's netvsc_probe() ->
    rtnl_lock(), and causes deadlock: the former gets the rtnl_lock
    and waits for all the sub-channels to appear, but the latter
    can't get the rtnl_lock and this blocks the handling of sub-channels.

    The patch can fix the multiple-NIC deadlock described above for
    v3.x kernels (e.g. RHEL 7.x) which don't support async-probing
    of devices, and v4.4, v4.9, v4.14 and v4.18 which support async-probing
    but don't enable async-probing for Hyper-V drivers (yet).

    The patch can also fix the hang issue in sub-channel's handling described
    above for all versions of kernels, including v4.19 and v4.20-rc4.

    So actually the patch should be applied to all the existing kernels,
    not only the kernels that have 8195b1396ec8.

    Fixes: 8195b1396ec8 ("hv_netvsc: fix deadlock on hotplug")
    Cc: stable@vger.kernel.org
    Cc: Stephen Hemminger
    Cc: K. Y. Srinivasan
    Cc: Haiyang Zhang
    Signed-off-by: Dexuan Cui
    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: Greg Kroah-Hartman

    Dexuan Cui
     

12 Nov, 2018

1 commit


14 May, 2018

1 commit

  • With VMBus protocol 5.0, we're able to better support new features, e.g.
    running two or more VMBus drivers simultaneously in a single VM -- note:
    we can't simply load the current VMBus driver twice, instead, a secondary
    VMBus driver must be implemented.

    This patch adds the support for the new VMBus protocol, which is available
    on new Windows hosts, by:

    1) We still use SINT2 for compatibility;
    2) We must use Connection ID 4 for the Initiate Contact Message, and for
    subsequent messages, we must use the Message Connection ID field in
    the host-returned VersionResponse Message.

    Notes for developers of the secondary VMBus driver:
    1) Must use VMBus protocol 5.0 as well;
    2) Must use a different SINT number that is not in use.
    3) Must use Connection ID 4 for the Initiate Contact Message, and for
    subsequent messages, must use the Message Connection ID field in
    the host-returned VersionResponse Message.
    4) It's possible that the primary VMBus driver using protocol version 4.0
    can work with a secondary VMBus driver using protocol version 5.0, but it's
    recommended that both should use 5.0 for new Hyper-V features in the future.

    Signed-off-by: Dexuan Cui
    Cc: Stephen Hemminger
    Cc: K. Y. Srinivasan
    Cc: Michael Kelley
    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: Greg Kroah-Hartman

    Dexuan Cui
     

10 Apr, 2018

1 commit

  • Pull kvm updates from Paolo Bonzini:
    "ARM:
    - VHE optimizations

    - EL2 address space randomization

    - speculative execution mitigations ("variant 3a", aka execution past
    invalid privilege register access)

    - bugfixes and cleanups

    PPC:
    - improvements for the radix page fault handler for HV KVM on POWER9

    s390:
    - more kvm stat counters

    - virtio gpu plumbing

    - documentation

    - facilities improvements

    x86:
    - support for VMware magic I/O port and pseudo-PMCs

    - AMD pause loop exiting

    - support for AMD core performance extensions

    - support for synchronous register access

    - expose nVMX capabilities to userspace

    - support for Hyper-V signaling via eventfd

    - use Enlightened VMCS when running on Hyper-V

    - allow userspace to disable MWAIT/HLT/PAUSE vmexits

    - usual roundup of optimizations and nested virtualization bugfixes

    Generic:
    - API selftest infrastructure (though the only tests are for x86 as
    of now)"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (174 commits)
    kvm: x86: fix a prototype warning
    kvm: selftests: add sync_regs_test
    kvm: selftests: add API testing infrastructure
    kvm: x86: fix a compile warning
    KVM: X86: Add Force Emulation Prefix for "emulate the next instruction"
    KVM: X86: Introduce handle_ud()
    KVM: vmx: unify adjacent #ifdefs
    x86: kvm: hide the unused 'cpu' variable
    KVM: VMX: remove bogus WARN_ON in handle_ept_misconfig
    Revert "KVM: X86: Fix SMRAM accessing even if VM is shutdown"
    kvm: Add emulation for movups/movupd
    KVM: VMX: raise internal error for exception during invalid protected mode state
    KVM: nVMX: Optimization: Dont set KVM_REQ_EVENT when VMExit with nested_run_pending
    KVM: nVMX: Require immediate-exit when event reinjected to L2 and L1 event pending
    KVM: x86: Fix misleading comments on handling pending exceptions
    KVM: x86: Rename interrupt.pending to interrupt.injected
    KVM: VMX: No need to clear pending NMI/interrupt on inject realmode interrupt
    x86/kvm: use Enlightened VMCS when running on Hyper-V
    x86/hyper-v: detect nested features
    x86/hyper-v: define struct hv_enlightened_vmcs and clean field bits
    ...

    Linus Torvalds
     

29 Mar, 2018

1 commit

  • hyperv.h is not part of uapi, there are no (known) users outside of kernel.
    We are making changes to this file to match current Hyper-V Hypervisor
    Top-Level Functional Specification (TLFS, see:
    https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/tlfs)
    and we don't want to maintain backwards compatibility.

    Move the file renaming to hyperv-tlfs.h to avoid confusing it with
    mshyperv.h. In future, all definitions from TLFS should go to it and
    all kernel objects should go to mshyperv.h or include/linux/hyperv.h.

    Signed-off-by: Vitaly Kuznetsov
    Acked-by: Thomas Gleixner
    Signed-off-by: Radim Krčmář

    Vitaly Kuznetsov
     

07 Mar, 2018

1 commit

  • The 2016 version of Hyper-V offers the option to operate the guest VM
    per-vcpu stimer's in Direct Mode, which means the timer interupts on its
    own vector rather than queueing a VMbus message. Direct Mode reduces
    timer processing overhead in both the hypervisor and the guest, and
    avoids having timer interrupts pollute the VMbus interrupt stream for
    the synthetic NIC and storage. This patch enables Direct Mode by
    default on stimer0 when running on a version of Hyper-V that supports
    it.

    In prep for coming support of Hyper-V on ARM64, the arch independent
    portion of the code contains calls to routines that will be populated
    on ARM64 but are not needed and do nothing on x86.

    Signed-off-by: Michael Kelley
    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: Greg Kroah-Hartman

    Michael Kelley
     

04 Nov, 2017

1 commit

  • Add tracing subsystem to Hyper-V VMBus module and add tracepoint
    to vmbus_on_msg_dpc() which is called when we receive a message from host.

    Signed-off-by: Vitaly Kuznetsov
    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: Greg Kroah-Hartman

    Vitaly Kuznetsov
     

04 Oct, 2017

1 commit

  • This extends existing vmbus related sysfs structure to provide per-channel
    state information. This is useful when diagnosing issues with multiple
    queues in networking and storage.

    The existing sysfs only displayed information about the primary
    channel. The one place it reported multiple channels was the
    channel_vp_mapping file which violated the sysfs convention
    of one value per file.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: Greg Kroah-Hartman

    Stephen Hemminger
     

10 Aug, 2017

1 commit

  • To support implementing remote TLB flushing on Hyper-V with a hypercall
    we need to make vp_index available outside of vmbus module. Rename and
    globalize.

    Signed-off-by: Vitaly Kuznetsov
    Reviewed-by: Andy Shevchenko
    Reviewed-by: Stephen Hemminger
    Cc: Andy Lutomirski
    Cc: Haiyang Zhang
    Cc: Jork Loeser
    Cc: K. Y. Srinivasan
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Simon Xiao
    Cc: Steven Rostedt
    Cc: Thomas Gleixner
    Cc: devel@linuxdriverproject.org
    Link: http://lkml.kernel.org/r/20170802160921.21791-7-vkuznets@redhat.com
    Signed-off-by: Ingo Molnar

    Vitaly Kuznetsov
     

18 May, 2017

2 commits

  • Fix the rescind handling. This patch addresses the following rescind
    scenario that is currently not handled correctly:

    If a rescind were to be received while the offer is still being
    peocessed, we will be blocked indefinitely since the rescind message
    is handled on the same work element as the offer message. Fix this
    issue.

    I would like to thank Dexuan Cui and
    Long Li for working with me on this patch.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: Greg Kroah-Hartman

    K. Y. Srinivasan
     
  • The current code unconditionally sends an IPI. If we are running on the
    correct CPU and are in interrupt level, we don't need an IPI.
    Make this adjustment.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: Greg Kroah-Hartman

    K. Y. Srinivasan
     

17 Mar, 2017

3 commits


15 Feb, 2017

2 commits