twx-linux/include
Andrea Parri (Microsoft) afaa33da08 Drivers: hv: vmbus: Resolve more races involving init_vp_index()
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) <parri.andrea@gmail.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/20200522171901.204127-3-parri.andrea@gmail.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
2020-05-23 09:07:00 +00:00
..
acpi Additional ACPI updates for 5.7-rc1 2020-04-06 10:35:06 -07:00
asm-generic asm-generic/hyperv: Add definitions for Get/SetVpRegister hypercalls 2020-05-20 09:13:58 +00:00
clocksource
crypto crypto: curve25519 - do not pollute dispatcher based on assembler 2020-04-09 00:01:59 +09:00
drm drm/bridge: analogix_dp: Split bind() into probe() and real bind() 2020-04-09 10:29:35 +02:00
dt-bindings RISC-V Patches for the 5.7 Merge Window, Part 1 2020-04-09 10:51:30 -07:00
keys
kunit
kvm
linux Drivers: hv: vmbus: Resolve more races involving init_vp_index() 2020-05-23 09:07:00 +00:00
math-emu
media
misc
net cfg80211: fix kernel-doc notation 2020-04-14 12:40:02 +02:00
pcmcia
ras
rdma
scsi
soc net: mscc: ocelot: fix untagged packet drops when enslaving to vlan aware bridge 2020-04-15 12:27:35 -07:00
sound ALSA: hda: Skip controller resume if not needed 2020-04-13 18:03:16 +02:00
target
trace blk-wbt: Drop needless newlines from tracepoint format strings 2020-04-17 08:21:46 -06:00
uapi flexible-array member convertion patches for 5.7-rc2 2020-04-19 10:34:30 -07:00
vdso
video
xen xen: Use evtchn_type_t as a type for event channels 2020-04-07 12:12:54 +02:00