[lkml]   [2020]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRE: [PATCH 2/2] Drivers: hv: vmbus: Resolve more races involving init_vp_index()
From: Andrea Parri (Microsoft) <>
> 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
> Signed-off-by: Andrea Parri (Microsoft) <>
> ---
> drivers/hv/channel_mgmt.c | 22 +++++++++++++-----
> drivers/hv/hyperv_vmbus.h | 48 +++++++++++++++++++++++++++++++++++++++
> drivers/hv/vmbus_drv.c | 19 +++++++++++-----
> include/linux/hyperv.h | 7 ++++++
> 4 files changed, 84 insertions(+), 12 deletions(-)

Reviewed-by: Michael Kelley <>

 \ /
  Last update: 2020-05-22 20:42    [W:0.082 / U:7.832 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site