<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/hv/hv.c, branch linux-5.9.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.9.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.9.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2020-11-24T12:39:13Z</updated>
<entry>
<title>Drivers: hv: vmbus: Allow cleanup of VMBUS_CONNECT_CPU if disconnected</title>
<updated>2020-11-24T12:39:13Z</updated>
<author>
<name>Chris Co</name>
</author>
<published>2020-11-10T19:01:18Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=aab158bb1368ba98f8d30978a1154a1c530d8638'/>
<id>urn:sha1:aab158bb1368ba98f8d30978a1154a1c530d8638</id>
<content type='text'>
commit 92e4dc8b05663d6539b1b8375f3b1cf7b204cfe9 upstream.

When invoking kexec() on a Linux guest running on a Hyper-V host, the
kernel panics.

    RIP: 0010:cpuhp_issue_call+0x137/0x140
    Call Trace:
    __cpuhp_remove_state_cpuslocked+0x99/0x100
    __cpuhp_remove_state+0x1c/0x30
    hv_kexec_handler+0x23/0x30 [hv_vmbus]
    hv_machine_shutdown+0x1e/0x30
    machine_shutdown+0x10/0x20
    kernel_kexec+0x6d/0x96
    __do_sys_reboot+0x1ef/0x230
    __x64_sys_reboot+0x1d/0x20
    do_syscall_64+0x6b/0x3d8
    entry_SYSCALL_64_after_hwframe+0x44/0xa9

This was due to hv_synic_cleanup() callback returning -EBUSY to
cpuhp_issue_call() when tearing down the VMBUS_CONNECT_CPU, even
if the vmbus_connection.conn_state = DISCONNECTED. hv_synic_cleanup()
should succeed in the case where vmbus_connection.conn_state
is DISCONNECTED.

Fix is to add an extra condition to test for
vmbus_connection.conn_state == CONNECTED on the VMBUS_CONNECT_CPU and
only return early if true. This way the kexec() path can still shut
everything down while preserving the initial behavior of preventing
CPU offlining on the VMBUS_CONNECT_CPU while the VM is running.

Fixes: 8a857c55420f29 ("Drivers: hv: vmbus: Always handle the VMBus messages on CPU0")
Signed-off-by: Chris Co &lt;chrco@microsoft.com&gt;
Reviewed-by: Andrea Parri (Microsoft) &lt;parri.andrea@gmail.com&gt;
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20201110190118.15596-1-chrco@linux.microsoft.com
Signed-off-by: Wei Liu &lt;wei.liu@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>Drivers: hv: vmbus: Remove unnecessary channel-&gt;lock critical sections (sc_list readers)</title>
<updated>2020-06-19T15:38:23Z</updated>
<author>
<name>Andrea Parri (Microsoft)</name>
</author>
<published>2020-06-17T16:46:38Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=12d0dd8e728e785e6fb81f5232280678bc69d8dc'/>
<id>urn:sha1:12d0dd8e728e785e6fb81f5232280678bc69d8dc</id>
<content type='text'>
Additions/deletions to/from sc_list (as well as modifications of
target_cpu(s)) are protected by channel_mutex, which hv_synic_cleanup()
and vmbus_bus_suspend() own for the duration of the channel-&gt;lock
critical section in question.

Signed-off-by: Andrea Parri (Microsoft) &lt;parri.andrea@gmail.com&gt;
Link: https://lore.kernel.org/r/20200617164642.37393-5-parri.andrea@gmail.com
Reviewed-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Signed-off-by: Wei Liu &lt;wei.liu@kernel.org&gt;
</content>
</entry>
<entry>
<title>Merge tag 'hyperv-next-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux</title>
<updated>2020-06-03T22:00:05Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2020-06-03T22:00:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6b2591c21273ebf65c13dae5d260ce88f0f197dd'/>
<id>urn:sha1:6b2591c21273ebf65c13dae5d260ce88f0f197dd</id>
<content type='text'>
Pull hyper-v updates from Wei Liu:

 - a series from Andrea to support channel reassignment

 - a series from Vitaly to clean up Vmbus message handling

 - a series from Michael to clean up and augment hyperv-tlfs.h

 - patches from Andy to clean up GUID usage in Hyper-V code

 - a few other misc patches

* tag 'hyperv-next-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux: (29 commits)
  Drivers: hv: vmbus: Resolve more races involving init_vp_index()
  Drivers: hv: vmbus: Resolve race between init_vp_index() and CPU hotplug
  vmbus: Replace zero-length array with flexible-array
  Driver: hv: vmbus: drop a no long applicable comment
  hyper-v: Switch to use UUID types directly
  hyper-v: Replace open-coded variant of %*phN specifier
  hyper-v: Supply GUID pointer to printf() like functions
  hyper-v: Use UUID API for exporting the GUID (part 2)
  asm-generic/hyperv: Add definitions for Get/SetVpRegister hypercalls
  x86/hyperv: Split hyperv-tlfs.h into arch dependent and independent files
  x86/hyperv: Remove HV_PROCESSOR_POWER_STATE #defines
  KVM: x86: hyperv: Remove duplicate definitions of Reference TSC Page
  drivers: hv: remove redundant assignment to pointer primary_channel
  scsi: storvsc: Re-init stor_chns when a channel interrupt is re-assigned
  Drivers: hv: vmbus: Introduce the CHANNELMSG_MODIFYCHANNEL message type
  Drivers: hv: vmbus: Synchronize init_vp_index() vs. CPU hotplug
  Drivers: hv: vmbus: Remove the unused HV_LOCALIZED channel affinity logic
  PCI: hv: Prepare hv_compose_msi_msg() for the VMBus-channel-interrupt-to-vCPU reassignment functionality
  Drivers: hv: vmbus: Use a spin lock for synchronizing channel scheduling vs. channel removal
  hv_utils: Always execute the fcopy and vss callbacks in a tasklet
  ...
</content>
</entry>
<entry>
<title>Drivers: hv: vmbus: Synchronize init_vp_index() vs. CPU hotplug</title>
<updated>2020-04-23T13:17:12Z</updated>
<author>
<name>Andrea Parri (Microsoft)</name>
</author>
<published>2020-04-06T00:15:12Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d570aec0f2154e1bfba14ffd0df164a185e363b5'/>
<id>urn:sha1:d570aec0f2154e1bfba14ffd0df164a185e363b5</id>
<content type='text'>
init_vp_index() may access the cpu_online_mask mask via its calls of
cpumask_of_node().  Make sure to protect these accesses with a
cpus_read_lock() critical section.

Also, remove some (hardcoded) instances of CPU(0) from init_vp_index()
and replace them with VMBUS_CONNECT_CPU.  The connect CPU can not go
offline, since Hyper-V does not provide a way to change it.

Finally, order the accesses of target_cpu from init_vp_index() and
hv_synic_cleanup() by relying on the channel_mutex; this is achieved
by moving the call of init_vp_index() into vmbus_process_offer().

Signed-off-by: Andrea Parri (Microsoft) &lt;parri.andrea@gmail.com&gt;
Link: https://lore.kernel.org/r/20200406001514.19876-10-parri.andrea@gmail.com
Reviewed-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Signed-off-by: Wei Liu &lt;wei.liu@kernel.org&gt;
</content>
</entry>
<entry>
<title>Drivers: hv: vmbus: Replace the per-CPU channel lists with a global array of channels</title>
<updated>2020-04-23T13:17:11Z</updated>
<author>
<name>Andrea Parri (Microsoft)</name>
</author>
<published>2020-04-06T00:15:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8b6a877c060ed6b86878fe66c7c6493a6054cf23'/>
<id>urn:sha1:8b6a877c060ed6b86878fe66c7c6493a6054cf23</id>
<content type='text'>
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 -&gt; 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 &lt;mikelley@microsoft.com&gt;
Signed-off-by: Andrea Parri (Microsoft) &lt;parri.andrea@gmail.com&gt;
Link: https://lore.kernel.org/r/20200406001514.19876-4-parri.andrea@gmail.com
Reviewed-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Signed-off-by: Wei Liu &lt;wei.liu@kernel.org&gt;
</content>
</entry>
<entry>
<title>Drivers: hv: vmbus: Always handle the VMBus messages on CPU0</title>
<updated>2020-04-23T13:17:11Z</updated>
<author>
<name>Andrea Parri (Microsoft)</name>
</author>
<published>2020-04-06T00:15:04Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8a857c55420f29da4fc131adc22b12d474c48f4c'/>
<id>urn:sha1:8a857c55420f29da4fc131adc22b12d474c48f4c</id>
<content type='text'>
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 &lt;decui@microsoft.com&gt;
Signed-off-by: Andrea Parri (Microsoft) &lt;parri.andrea@gmail.com&gt;
Reviewed-by: Vitaly Kuznetsov &lt;vkuznets@redhat.com&gt;
Link: https://lore.kernel.org/r/20200406001514.19876-2-parri.andrea@gmail.com
Reviewed-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Signed-off-by: Wei Liu &lt;wei.liu@kernel.org&gt;
</content>
</entry>
<entry>
<title>Drivers: hv: Move AEOI determination to architecture dependent code</title>
<updated>2020-04-21T09:02:38Z</updated>
<author>
<name>Michael Kelley</name>
</author>
<published>2020-04-20T16:49:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2ddddd0b4e89e1fc30ed257653239005d2f31f5b'/>
<id>urn:sha1:2ddddd0b4e89e1fc30ed257653239005d2f31f5b</id>
<content type='text'>
Hyper-V on ARM64 doesn't provide a flag for the AEOI recommendation
in ms_hyperv.hints, so having the test in architecture independent
code doesn't work. Resolve this by moving the check of the flag
to an architecture dependent helper function. No functionality is
changed.

Signed-off-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Link: https://lore.kernel.org/r/20200420164926.24471-1-mikelley@microsoft.com
Signed-off-by: Wei Liu &lt;wei.liu@kernel.org&gt;
</content>
</entry>
<entry>
<title>x86/hyperv: Initialize clockevents earlier in CPU onlining</title>
<updated>2019-11-15T09:33:49Z</updated>
<author>
<name>Michael Kelley</name>
</author>
<published>2019-11-13T01:11:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=4df4cb9e99f83b70d54bc0e25081ac23cceafcbc'/>
<id>urn:sha1:4df4cb9e99f83b70d54bc0e25081ac23cceafcbc</id>
<content type='text'>
Hyper-V has historically initialized stimer-based clockevents late in the
process of onlining a CPU because clockevents depend on stimer
interrupts. In the original Hyper-V design, stimer interrupts generate a
VMbus message, so the VMbus machinery must be running first, and VMbus
can't be initialized until relatively late. On x86/64, LAPIC timer based
clockevents are used during early initialization before VMbus and
stimer-based clockevents are ready, and again during CPU offlining after
the stimer clockevents have been shut down.

Unfortunately, this design creates problems when offlining CPUs for
hibernation or other purposes. stimer-based clockevents are shut down
relatively early in the offlining process, so clockevents_unbind_device()
must be used to fallback to the LAPIC-based clockevents for the remainder
of the offlining process.  Furthermore, the late initialization and early
shutdown of stimer-based clockevents doesn't work well on ARM64 since there
is no other timer like the LAPIC to fallback to. So CPU onlining and
offlining doesn't work properly.

Fix this by recognizing that stimer Direct Mode is the normal path for
newer versions of Hyper-V on x86/64, and the only path on other
architectures. With stimer Direct Mode, stimer interrupts don't require any
VMbus machinery. stimer clockevents can be initialized and shut down
consistent with how it is done for other clockevent devices. While the old
VMbus-based stimer interrupts must still be supported for backward
compatibility on x86, that mode of operation can be treated as legacy.

So add a new Hyper-V stimer entry in the CPU hotplug state list, and use
that new state when in Direct Mode. Update the Hyper-V clocksource driver
to allocate and initialize stimer clockevents earlier during boot. Update
Hyper-V initialization and the VMbus driver to use this new design. As a
result, the LAPIC timer is no longer used during boot or CPU
onlining/offlining and clockevents_unbind_device() is not called.  But
retain the old design as a legacy implementation for older versions of
Hyper-V that don't support Direct Mode.

Signed-off-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Tested-by: Dexuan Cui &lt;decui@microsoft.com&gt;
Reviewed-by: Dexuan Cui &lt;decui@microsoft.com&gt;
Link: https://lkml.kernel.org/r/1573607467-9456-1-git-send-email-mikelley@microsoft.com
</content>
</entry>
<entry>
<title>Drivers: hv: vmbus: Break out synic enable and disable operations</title>
<updated>2019-09-06T18:52:44Z</updated>
<author>
<name>Dexuan Cui</name>
</author>
<published>2019-09-05T23:01:15Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dba61cda30469a6c4fed0f8d5bf2b6001ca80a51'/>
<id>urn:sha1:dba61cda30469a6c4fed0f8d5bf2b6001ca80a51</id>
<content type='text'>
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 &lt;decui@microsoft.com&gt;
Reviewed-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>clocksource/drivers: Make Hyper-V clocksource ISA agnostic</title>
<updated>2019-07-03T09:00:59Z</updated>
<author>
<name>Michael Kelley</name>
</author>
<published>2019-07-01T04:25:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fd1fea6834d0f9f93062ae6685862908a9baed39'/>
<id>urn:sha1:fd1fea6834d0f9f93062ae6685862908a9baed39</id>
<content type='text'>
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 &lt;marc.zyngier@arm.com&gt;
Signed-off-by: Michael Kelley &lt;mikelley@microsoft.com&gt;
Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Reviewed-by: Vitaly Kuznetsov &lt;vkuznets@redhat.com&gt;
Cc: "bp@alien8.de" &lt;bp@alien8.de&gt;
Cc: "will.deacon@arm.com" &lt;will.deacon@arm.com&gt;
Cc: "catalin.marinas@arm.com" &lt;catalin.marinas@arm.com&gt;
Cc: "mark.rutland@arm.com" &lt;mark.rutland@arm.com&gt;
Cc: "linux-arm-kernel@lists.infradead.org" &lt;linux-arm-kernel@lists.infradead.org&gt;
Cc: "gregkh@linuxfoundation.org" &lt;gregkh@linuxfoundation.org&gt;
Cc: "linux-hyperv@vger.kernel.org" &lt;linux-hyperv@vger.kernel.org&gt;
Cc: "olaf@aepfle.de" &lt;olaf@aepfle.de&gt;
Cc: "apw@canonical.com" &lt;apw@canonical.com&gt;
Cc: "jasowang@redhat.com" &lt;jasowang@redhat.com&gt;
Cc: "marcelo.cerri@canonical.com" &lt;marcelo.cerri@canonical.com&gt;
Cc: Sunil Muthuswamy &lt;sunilmut@microsoft.com&gt;
Cc: KY Srinivasan &lt;kys@microsoft.com&gt;
Cc: "sashal@kernel.org" &lt;sashal@kernel.org&gt;
Cc: "vincenzo.frascino@arm.com" &lt;vincenzo.frascino@arm.com&gt;
Cc: "linux-arch@vger.kernel.org" &lt;linux-arch@vger.kernel.org&gt;
Cc: "linux-mips@vger.kernel.org" &lt;linux-mips@vger.kernel.org&gt;
Cc: "linux-kselftest@vger.kernel.org" &lt;linux-kselftest@vger.kernel.org&gt;
Cc: "arnd@arndb.de" &lt;arnd@arndb.de&gt;
Cc: "linux@armlinux.org.uk" &lt;linux@armlinux.org.uk&gt;
Cc: "ralf@linux-mips.org" &lt;ralf@linux-mips.org&gt;
Cc: "paul.burton@mips.com" &lt;paul.burton@mips.com&gt;
Cc: "daniel.lezcano@linaro.org" &lt;daniel.lezcano@linaro.org&gt;
Cc: "salyzyn@android.com" &lt;salyzyn@android.com&gt;
Cc: "pcc@google.com" &lt;pcc@google.com&gt;
Cc: "shuah@kernel.org" &lt;shuah@kernel.org&gt;
Cc: "0x7f454c46@gmail.com" &lt;0x7f454c46@gmail.com&gt;
Cc: "linux@rasmusvillemoes.dk" &lt;linux@rasmusvillemoes.dk&gt;
Cc: "huw@codeweavers.com" &lt;huw@codeweavers.com&gt;
Cc: "sfr@canb.auug.org.au" &lt;sfr@canb.auug.org.au&gt;
Cc: "pbonzini@redhat.com" &lt;pbonzini@redhat.com&gt;
Cc: "rkrcmar@redhat.com" &lt;rkrcmar@redhat.com&gt;
Cc: "kvm@vger.kernel.org" &lt;kvm@vger.kernel.org&gt;
Link: https://lkml.kernel.org/r/1561955054-1838-2-git-send-email-mikelley@microsoft.com

</content>
</entry>
</feed>
