Linux-HyperV Archive on
 help / color / Atom feed
From: Michael Kelley <>
To: "Andrea Parri (Microsoft)" <>,
	"" <>,
	"" <>
Cc: KY Srinivasan <>,
	Haiyang Zhang <>,
	Stephen Hemminger <>,
	Wei Liu <>
Subject: RE: [PATCH 2/2] Drivers: hv: vmbus: Resolve more races involving init_vp_index()
Date: Fri, 22 May 2020 18:41:13 +0000
Message-ID: <> (raw)
In-Reply-To: <>

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 <>

  reply index

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-22 17:18 [PATCH] VMBus channel interrupts reassignment - Fixes Andrea Parri (Microsoft)
2020-05-22 17:19 ` [PATCH 1/2] Drivers: hv: vmbus: Resolve race between init_vp_index() and CPU hotplug Andrea Parri (Microsoft)
2020-05-22 18:34   ` Michael Kelley
2020-05-22 17:19 ` [PATCH 2/2] Drivers: hv: vmbus: Resolve more races involving init_vp_index() Andrea Parri (Microsoft)
2020-05-22 18:41   ` Michael Kelley [this message]
2020-05-23  9:04 ` [PATCH] VMBus channel interrupts reassignment - Fixes Wei Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \ \ \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-HyperV Archive on

Archives are clonable:
	git clone --mirror linux-hyperv/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-hyperv linux-hyperv/ \
	public-inbox-index linux-hyperv

Example config snippet for mirrors

Newsgroup available over NNTP:

AGPL code for this site: git clone