All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Maya Nakamura <m.maya.nakamura@gmail.com>
Cc: linux-kernel@vger.kernel.org,
	driverdev-devel@linuxdriverproject.org, haiyangz@microsoft.com,
	marcelo.cerri@canonical.com, lorenzo.pieralisi@arm.com,
	bhelgaas@google.com, linux-pci@vger.kernel.org,
	kys@microsoft.com, sthemmin@microsoft.com, olaf@aepfle.de,
	apw@canonical.com, jasowang@redhat.com, mikelley@microsoft.com,
	Alexander.Levin@microsoft.com
Subject: Re: [PATCH v3 2/2] PCI: hv: Refactor hv_irq_unmask() to use cpumask_to_vpset()
Date: Wed, 27 Feb 2019 13:34:44 +0100	[thread overview]
Message-ID: <87sgw9qujf.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <00e13af711510001e589c7b1ddd75beb99f58db5.1548745212.git.m.maya.nakamura@gmail.com>

Maya Nakamura <m.maya.nakamura@gmail.com> writes:

> Remove the duplicate implementation of cpumask_to_vpset() and use the
> shared implementation. Export hv_max_vp_index, which is required by
> cpumask_to_vpset().
>
> Apply changes to hv_irq_unmask() based on feedback.
>

I just noticed an issue with this patch, sorry I've missed it before. I
don't see the commit in Linus' tree, not sure if we should amend this
one or a follow-up patch is needed.

> Signed-off-by: Maya Nakamura <m.maya.nakamura@gmail.com>
> ---
> Changes in v3:
>  - Modify to catch all failures from cpumask_to_vpset().
>  - Correct the v2 change log about the commit message.
>
> Changes in v2:
>  - Remove unnecessary nr_bank initialization.
>  - Delete two unnecessary dev_err()'s.
>  - Unlock before returning.
>  - Update the commit message.
>
>  arch/x86/hyperv/hv_init.c           |  1 +
>  drivers/pci/controller/pci-hyperv.c | 38 +++++++++++++----------------
>  2 files changed, 18 insertions(+), 21 deletions(-)
>
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index 7abb09e2eeb8..7f2eed1fc81b 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -96,6 +96,7 @@ void  __percpu **hyperv_pcpu_input_arg;
>  EXPORT_SYMBOL_GPL(hyperv_pcpu_input_arg);
>  
>  u32 hv_max_vp_index;
> +EXPORT_SYMBOL_GPL(hv_max_vp_index);
>  
>  static int hv_cpu_init(unsigned int cpu)
>  {
> diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
> index da8b58d8630d..a78def332bbc 100644
> --- a/drivers/pci/controller/pci-hyperv.c
> +++ b/drivers/pci/controller/pci-hyperv.c
> @@ -391,8 +391,6 @@ struct hv_interrupt_entry {
>  	u32	data;
>  };
>  
> -#define HV_VP_SET_BANK_COUNT_MAX	5 /* current implementation limit */
> -
>  /*
>   * flags for hv_device_interrupt_target.flags
>   */
> @@ -908,12 +906,12 @@ static void hv_irq_unmask(struct irq_data *data)
>  	struct retarget_msi_interrupt *params;
>  	struct hv_pcibus_device *hbus;
>  	struct cpumask *dest;
> +	cpumask_var_t tmp;
>  	struct pci_bus *pbus;
>  	struct pci_dev *pdev;
>  	unsigned long flags;
>  	u32 var_size = 0;
> -	int cpu_vmbus;
> -	int cpu;
> +	int cpu, nr_bank;
>  	u64 res;
>  
>  	dest = irq_data_get_effective_affinity_mask(data);
> @@ -953,29 +951,27 @@ static void hv_irq_unmask(struct irq_data *data)
>  		 */
>  		params->int_target.flags |=
>  			HV_DEVICE_INTERRUPT_TARGET_PROCESSOR_SET;
> -		params->int_target.vp_set.valid_bank_mask =
> -			(1ull << HV_VP_SET_BANK_COUNT_MAX) - 1;
> +
> +		if (!alloc_cpumask_var(&tmp, GFP_KERNEL)) {

We can't use GFP_KERNEL here: this is happening under
hbus->retarget_msi_interrupt_lock spinlock, we should use GFP_ATOMIC
instead. It may, however, make sense to add the cpumask to a
pre-allocated structure (e.g. struct hv_pcibus_device) to make sure the
allocation never fails.

> +			res = 1;
> +			goto exit_unlock;
> +		}
> +
> +		cpumask_and(tmp, dest, cpu_online_mask);
> +		nr_bank = cpumask_to_vpset(&params->int_target.vp_set, tmp);
> +		free_cpumask_var(tmp);
> +
> +		if (nr_bank <= 0) {
> +			res = 1;
> +			goto exit_unlock;
> +		}
>  
>  		/*
>  		 * var-sized hypercall, var-size starts after vp_mask (thus
>  		 * vp_set.format does not count, but vp_set.valid_bank_mask
>  		 * does).
>  		 */
> -		var_size = 1 + HV_VP_SET_BANK_COUNT_MAX;
> -
> -		for_each_cpu_and(cpu, dest, cpu_online_mask) {
> -			cpu_vmbus = hv_cpu_number_to_vp_number(cpu);
> -
> -			if (cpu_vmbus >= HV_VP_SET_BANK_COUNT_MAX * 64) {
> -				dev_err(&hbus->hdev->device,
> -					"too high CPU %d", cpu_vmbus);
> -				res = 1;
> -				goto exit_unlock;
> -			}
> -
> -			params->int_target.vp_set.bank_contents[cpu_vmbus / 64]	|=
> -				(1ULL << (cpu_vmbus & 63));
> -		}
> +		var_size = 1 + nr_bank;
>  	} else {
>  		for_each_cpu_and(cpu, dest, cpu_online_mask) {
>  			params->int_target.vp_mask |=

-- 
Vitaly

  reply	other threads:[~2019-02-27 12:34 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-29  7:15 [PATCH v3 0/2] PCI: hv: Refactor hv_irq_unmask() to use hv_vpset and cpumask_to_vpset() Maya Nakamura
2019-01-29  7:18 ` [PATCH v3 1/2] PCI: hv: Replace hv_vp_set with hv_vpset Maya Nakamura
2019-02-27 15:53   ` Vitaly Kuznetsov
2019-02-27 16:42     ` Lorenzo Pieralisi
2019-01-29  7:20 ` [PATCH v3 2/2] PCI: hv: Refactor hv_irq_unmask() to use cpumask_to_vpset() Maya Nakamura
2019-02-27 12:34   ` Vitaly Kuznetsov [this message]
2019-02-27 14:28     ` Lorenzo Pieralisi
2019-02-13 15:15 ` [PATCH v3 0/2] PCI: hv: Refactor hv_irq_unmask() to use hv_vpset and cpumask_to_vpset() Lorenzo Pieralisi
2019-02-15  1:58   ` Sasha Levin
2019-02-15 10:36 ` Lorenzo Pieralisi

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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

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

  git send-email \
    --in-reply-to=87sgw9qujf.fsf@vitty.brq.redhat.com \
    --to=vkuznets@redhat.com \
    --cc=Alexander.Levin@microsoft.com \
    --cc=apw@canonical.com \
    --cc=bhelgaas@google.com \
    --cc=driverdev-devel@linuxdriverproject.org \
    --cc=haiyangz@microsoft.com \
    --cc=jasowang@redhat.com \
    --cc=kys@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=m.maya.nakamura@gmail.com \
    --cc=marcelo.cerri@canonical.com \
    --cc=mikelley@microsoft.com \
    --cc=olaf@aepfle.de \
    --cc=sthemmin@microsoft.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.