All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Liu <wei.liu@kernel.org>
To: Michael Kelley <mikelley@microsoft.com>
Cc: Wei Liu <wei.liu@kernel.org>,
	Linux on Hyper-V List <linux-hyperv@vger.kernel.org>,
	"virtualization@lists.linux-foundation.org" 
	<virtualization@lists.linux-foundation.org>,
	Linux Kernel List <linux-kernel@vger.kernel.org>,
	Vineeth Pillai <viremana@linux.microsoft.com>,
	Sunil Muthuswamy <sunilmut@microsoft.com>,
	Nuno Das Neves <nunodasneves@linux.microsoft.com>,
	"pasha.tatashin@soleen.com" <pasha.tatashin@soleen.com>,
	KY Srinivasan <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)"
	<x86@kernel.org>, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH v6 15/16] x86/hyperv: implement an MSI domain for root partition
Date: Thu, 4 Feb 2021 17:56:41 +0000	[thread overview]
Message-ID: <20210204175641.pzonxqrqlo7uvvze@liuwe-devbox-debian-v2> (raw)
In-Reply-To: <MWHPR21MB15932010E9CF5975EBAD1EDAD7B39@MWHPR21MB1593.namprd21.prod.outlook.com>

On Thu, Feb 04, 2021 at 05:43:16PM +0000, Michael Kelley wrote:
[...]
> >  remove_cpuhp_state:
> > diff --git a/arch/x86/hyperv/irqdomain.c b/arch/x86/hyperv/irqdomain.c
> > new file mode 100644
> > index 000000000000..117f17e8c88a
> > --- /dev/null
> > +++ b/arch/x86/hyperv/irqdomain.c
> > @@ -0,0 +1,362 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +
> > +/*
> > + * for Linux to run as the root partition on Microsoft Hypervisor.
> 
> Nit:  Looks like the initial word "Irqdomain" got dropped from the above
> comment line.  But don't respin just for this.
> 

I've added it back. Thanks.

> > +static int hv_map_interrupt(union hv_device_id device_id, bool level,
> > +		int cpu, int vector, struct hv_interrupt_entry *entry)
> > +{
> > +	struct hv_input_map_device_interrupt *input;
> > +	struct hv_output_map_device_interrupt *output;
> > +	struct hv_device_interrupt_descriptor *intr_desc;
> > +	unsigned long flags;
> > +	u64 status;
> > +	cpumask_t mask = CPU_MASK_NONE;
> > +	int nr_bank, var_size;
> > +
> > +	local_irq_save(flags);
> > +
> > +	input = *this_cpu_ptr(hyperv_pcpu_input_arg);
> > +	output = *this_cpu_ptr(hyperv_pcpu_output_arg);
> > +
> > +	intr_desc = &input->interrupt_descriptor;
> > +	memset(input, 0, sizeof(*input));
> > +	input->partition_id = hv_current_partition_id;
> > +	input->device_id = device_id.as_uint64;
> > +	intr_desc->interrupt_type = HV_X64_INTERRUPT_TYPE_FIXED;
> > +	intr_desc->vector_count = 1;
> > +	intr_desc->target.vector = vector;
> > +
> > +	if (level)
> > +		intr_desc->trigger_mode = HV_INTERRUPT_TRIGGER_MODE_LEVEL;
> > +	else
> > +		intr_desc->trigger_mode = HV_INTERRUPT_TRIGGER_MODE_EDGE;
> > +
> > +	cpumask_set_cpu(cpu, &mask);
> > +	intr_desc->target.vp_set.valid_bank_mask = 0;
> > +	intr_desc->target.vp_set.format = HV_GENERIC_SET_SPARSE_4K;
> > +	nr_bank = cpumask_to_vpset(&(intr_desc->target.vp_set), &mask);
> 
> There's a function get_cpu_mask() that returns a pointer to a cpumask with only
> the specified cpu set in the mask.  It returns a const pointer to the correct entry
> in a pre-allocated array of all such cpumasks, so it's a lot more efficient than
> allocating and initializing a local cpumask instance on the stack.
> 

That's nice.

I've got the following diff to fix both issues. If you're happy with the
changes, can you give your Reviewed-by? That saves a round of posting.

diff --git a/arch/x86/hyperv/irqdomain.c b/arch/x86/hyperv/irqdomain.c
index 0cabc9aece38..fa71db798465 100644
--- a/arch/x86/hyperv/irqdomain.c
+++ b/arch/x86/hyperv/irqdomain.c
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0

 /*
- * for Linux to run as the root partition on Microsoft Hypervisor.
+ * Irqdomain for Linux to run as the root partition on Microsoft Hypervisor.
  *
  * Authors:
  *  Sunil Muthuswamy <sunilmut@microsoft.com>
@@ -20,7 +20,7 @@ static int hv_map_interrupt(union hv_device_id device_id, bool level,
        struct hv_device_interrupt_descriptor *intr_desc;
        unsigned long flags;
        u64 status;
-       cpumask_t mask = CPU_MASK_NONE;
+       const cpumask_t *mask;
        int nr_bank, var_size;

        local_irq_save(flags);
@@ -41,10 +41,10 @@ static int hv_map_interrupt(union hv_device_id device_id, bool level,
        else
                intr_desc->trigger_mode = HV_INTERRUPT_TRIGGER_MODE_EDGE;

-       cpumask_set_cpu(cpu, &mask);
+       mask = cpumask_of(cpu);
        intr_desc->target.vp_set.valid_bank_mask = 0;
        intr_desc->target.vp_set.format = HV_GENERIC_SET_SPARSE_4K;
-       nr_bank = cpumask_to_vpset(&(intr_desc->target.vp_set), &mask);
+       nr_bank = cpumask_to_vpset(&(intr_desc->target.vp_set), mask);
        if (nr_bank < 0) {
                local_irq_restore(flags);
                pr_err("%s: unable to generate VP set\n", __func__);

  reply	other threads:[~2021-02-04 17:58 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-03 15:04 [PATCH v6 00/16] Introducing Linux root partition support for Microsoft Hypervisor Wei Liu
2021-02-03 15:04 ` [PATCH v6 01/16] asm-generic/hyperv: change HV_CPU_POWER_MANAGEMENT to HV_CPU_MANAGEMENT Wei Liu
2021-02-03 15:04 ` [PATCH v6 02/16] x86/hyperv: detect if Linux is the root partition Wei Liu
2021-02-04 16:49   ` Michael Kelley
2021-02-04 16:49     ` Michael Kelley via Virtualization
2021-02-03 15:04 ` [PATCH v6 03/16] Drivers: hv: vmbus: skip VMBus initialization if Linux is root Wei Liu
2021-02-03 15:04 ` [PATCH v6 04/16] clocksource/hyperv: use MSR-based access if running as root Wei Liu
2021-02-03 15:04 ` [PATCH v6 05/16] x86/hyperv: allocate output arg pages if required Wei Liu
2021-02-04 16:52   ` Michael Kelley
2021-02-04 16:52     ` Michael Kelley via Virtualization
2021-02-03 15:04 ` [PATCH v6 06/16] x86/hyperv: extract partition ID from Microsoft Hypervisor if necessary Wei Liu
2021-02-04 16:54   ` Michael Kelley
2021-02-04 16:54     ` Michael Kelley via Virtualization
2021-02-03 15:04 ` [PATCH v6 07/16] x86/hyperv: handling hypercall page setup for root Wei Liu
2021-02-03 15:04 ` [PATCH v6 08/16] ACPI / NUMA: add a stub function for node_to_pxm() Wei Liu
2021-02-04 16:56   ` Michael Kelley via Virtualization
2021-02-04 18:38   ` Wei Liu
2021-02-04 18:45     ` Rafael J. Wysocki
2021-02-04 18:45       ` [Devel] " Rafael J. Wysocki
2021-02-04 18:45       ` Rafael J. Wysocki
2021-02-04 18:48       ` Wei Liu
2021-02-03 15:04 ` [PATCH v6 09/16] x86/hyperv: provide a bunch of helper functions Wei Liu
2021-02-04 17:13   ` Michael Kelley
2021-02-04 17:13     ` Michael Kelley via Virtualization
2021-02-03 15:04 ` [PATCH v6 10/16] x86/hyperv: implement and use hv_smp_prepare_cpus Wei Liu
2021-02-03 15:04 ` [PATCH v6 11/16] asm-generic/hyperv: update hv_msi_entry Wei Liu
2021-02-03 15:04 ` [PATCH v6 12/16] asm-generic/hyperv: update hv_interrupt_entry Wei Liu
2021-02-03 15:04 ` [PATCH v6 13/16] asm-generic/hyperv: introduce hv_device_id and auxiliary structures Wei Liu
2021-02-04 17:15   ` Michael Kelley
2021-02-04 17:15     ` Michael Kelley via Virtualization
2021-02-03 15:04 ` [PATCH v6 14/16] asm-generic/hyperv: import data structures for mapping device interrupts Wei Liu
2021-02-03 15:04 ` [PATCH v6 15/16] x86/hyperv: implement an MSI domain for root partition Wei Liu
2021-02-04 17:43   ` Michael Kelley
2021-02-04 17:43     ` Michael Kelley via Virtualization
2021-02-04 17:56     ` Wei Liu [this message]
2021-02-04 18:40       ` Michael Kelley
2021-02-04 18:40         ` Michael Kelley via Virtualization
2021-02-04 18:43         ` Wei Liu
2021-02-03 15:04 ` [PATCH v6 16/16] iommu/hyperv: setup an IO-APIC IRQ remapping " Wei Liu
2021-02-03 15:04   ` Wei Liu
2021-02-04 13:33   ` Joerg Roedel
2021-02-04 13:33     ` Joerg Roedel
2021-02-04 13:33     ` Joerg Roedel
2021-02-04 17:53   ` Michael Kelley
2021-02-04 17:53     ` Michael Kelley via Virtualization
2021-02-04 17:53     ` Michael Kelley via iommu
2021-02-04 19:49 ` [PATCH v6 00/16] Introducing Linux root partition support for Microsoft Hypervisor 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:
  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=20210204175641.pzonxqrqlo7uvvze@liuwe-devbox-debian-v2 \
    --to=wei.liu@kernel.org \
    --cc=bp@alien8.de \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mikelley@microsoft.com \
    --cc=mingo@redhat.com \
    --cc=nunodasneves@linux.microsoft.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=sthemmin@microsoft.com \
    --cc=sunilmut@microsoft.com \
    --cc=tglx@linutronix.de \
    --cc=viremana@linux.microsoft.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=x86@kernel.org \
    /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.