From: Bjorn Helgaas <helgaas@kernel.org>
To: Ajay Kaher <akaher@vmware.com>
Cc: kys@microsoft.com, haiyangz@microsoft.com,
devel@linuxdriverproject.org, linux-pci@vger.kernel.org,
linux-kernel@vger.kernel.org, Long Li <longli@microsoft.com>
Subject: Re: [PATCH 1/3] PCI: hv: Allocate physically contiguous hypercall params buffer
Date: Thu, 17 Jan 2019 08:57:51 -0600 [thread overview]
Message-ID: <20190117145751.GD158366@google.com> (raw)
In-Reply-To: <1547758038-5255-2-git-send-email-akaher@vmware.com>
On Fri, Jan 18, 2019 at 02:17:16AM +0530, Ajay Kaher wrote:
> hv_do_hypercall() assumes that we pass a segment from a physically
> contiguous buffer. A buffer allocated on the stack may not work if
> CONFIG_VMAP_STACK=y is set.
>
> Use kmalloc() to allocate this buffer.
>
> Reported-by: Haiyang Zhang <haiyangz@microsoft.com>
> Signed-off-by: Long Li <longli@microsoft.com>
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
I did not sign off on this; please remove this. Signed-off-by should
only be added by the person mentioned.
> Acked-by: K. Y. Srinivasan <kys@microsoft.com>
> Signed-off-by: Ajay Kaher <akaher@vmware.com>
> ---
> drivers/pci/host/pci-hyperv.c | 29 +++++++++++++++++++----------
> 1 file changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
> index b4d8ccf..9e44adf 100644
> --- a/drivers/pci/host/pci-hyperv.c
> +++ b/drivers/pci/host/pci-hyperv.c
> @@ -383,6 +383,8 @@ struct hv_pcibus_device {
> struct msi_domain_info msi_info;
> struct msi_controller msi_chip;
> struct irq_domain *irq_domain;
> + struct retarget_msi_interrupt retarget_msi_interrupt_params;
> + spinlock_t retarget_msi_interrupt_lock;
> };
>
> /*
> @@ -780,34 +782,40 @@ void hv_irq_unmask(struct irq_data *data)
> {
> struct msi_desc *msi_desc = irq_data_get_msi_desc(data);
> struct irq_cfg *cfg = irqd_cfg(data);
> - struct retarget_msi_interrupt params;
> + struct retarget_msi_interrupt *params;
> struct hv_pcibus_device *hbus;
> struct cpumask *dest;
> struct pci_bus *pbus;
> struct pci_dev *pdev;
> int cpu;
> + unsigned long flags;
>
> dest = irq_data_get_affinity_mask(data);
> pdev = msi_desc_to_pci_dev(msi_desc);
> pbus = pdev->bus;
> hbus = container_of(pbus->sysdata, struct hv_pcibus_device, sysdata);
>
> - memset(¶ms, 0, sizeof(params));
> - params.partition_id = HV_PARTITION_ID_SELF;
> - params.source = 1; /* MSI(-X) */
> - params.address = msi_desc->msg.address_lo;
> - params.data = msi_desc->msg.data;
> - params.device_id = (hbus->hdev->dev_instance.b[5] << 24) |
> + spin_lock_irqsave(&hbus->retarget_msi_interrupt_lock, flags);
> +
> + params = &hbus->retarget_msi_interrupt_params;
> + memset(params, 0, sizeof(*params));
> + params->partition_id = HV_PARTITION_ID_SELF;
> + params->source = 1; /* MSI(-X) */
> + params->address = msi_desc->msg.address_lo;
> + params->data = msi_desc->msg.data;
> + params->device_id = (hbus->hdev->dev_instance.b[5] << 24) |
> (hbus->hdev->dev_instance.b[4] << 16) |
> (hbus->hdev->dev_instance.b[7] << 8) |
> (hbus->hdev->dev_instance.b[6] & 0xf8) |
> PCI_FUNC(pdev->devfn);
> - params.vector = cfg->vector;
> + params->vector = cfg->vector;
>
> for_each_cpu_and(cpu, dest, cpu_online_mask)
> - params.vp_mask |= (1ULL << vmbus_cpu_number_to_vp_number(cpu));
> + params->vp_mask |= (1ULL << vmbus_cpu_number_to_vp_number(cpu));
> +
> + hv_do_hypercall(HVCALL_RETARGET_INTERRUPT, params, NULL);
>
> - hv_do_hypercall(HVCALL_RETARGET_INTERRUPT, ¶ms, NULL);
> + spin_unlock_irqrestore(&hbus->retarget_msi_interrupt_lock, flags);
>
> pci_msi_unmask_irq(data);
> }
> @@ -2212,6 +2220,7 @@ static int hv_pci_probe(struct hv_device *hdev,
> INIT_LIST_HEAD(&hbus->resources_for_children);
> spin_lock_init(&hbus->config_lock);
> spin_lock_init(&hbus->device_list_lock);
> + spin_lock_init(&hbus->retarget_msi_interrupt_lock);
> sema_init(&hbus->enum_sem, 1);
> init_completion(&hbus->remove_event);
>
> --
> 2.7.4
>
next prev parent reply other threads:[~2019-01-17 14:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-17 20:47 [PATCH 0/3] PCI: hv: Use vPCI protocol version 1.2 for v4.9 Ajay Kaher
2019-01-17 13:21 ` Greg KH
2019-01-17 20:47 ` [PATCH 1/3] PCI: hv: Allocate physically contiguous hypercall params buffer Ajay Kaher
2019-01-17 14:57 ` Bjorn Helgaas [this message]
2019-01-21 13:19 ` Dan Carpenter
2019-01-21 13:36 ` Dan Carpenter
2019-01-17 20:47 ` [PATCH 2/3] PCI: hv: Add vPCI version protocol negotiation Ajay Kaher
2019-01-17 14:59 ` Bjorn Helgaas
2019-01-17 20:47 ` [PATCH 3/3] PCI: hv: Use vPCI protocol version 1.2 for v4.9 Ajay Kaher
2019-01-17 15:06 ` Bjorn Helgaas
2019-01-18 14:05 ` Ajay Kaher
-- strict thread matches above, loose matches on Subject: below --
2019-01-23 15:38 [PATCH 0/3] " Ajay Kaher
2019-01-23 15:38 ` [PATCH 1/3] PCI: hv: Allocate physically contiguous hypercall params buffer Ajay Kaher
2019-01-23 8:01 ` Greg KH
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=20190117145751.GD158366@google.com \
--to=helgaas@kernel.org \
--cc=akaher@vmware.com \
--cc=devel@linuxdriverproject.org \
--cc=haiyangz@microsoft.com \
--cc=kys@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=longli@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.