Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2152810imu; Thu, 17 Jan 2019 09:13:12 -0800 (PST) X-Google-Smtp-Source: ALg8bN5MxqItuVc0ki6RBTVRCje96Z6Wix9hnKezZZy7iB2DtzNdbGmXIIUYIcjsnqol6WP6U0Bf X-Received: by 2002:a63:151f:: with SMTP id v31mr13998698pgl.34.1547745192253; Thu, 17 Jan 2019 09:13:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547745192; cv=none; d=google.com; s=arc-20160816; b=ZdaYOdUU008G/Z3xsUAXNhClcfPYyyp/QjzlYWwipZgeA8AUmcj9Y2Tn5oK2PeIG1m cFC7/CWm8kSD7hy8zBM1kgiSKfeU/udURFCEqqUSljP57TNWQk0elGH8QAEoWd3Xj/Mg pBhuTE4pC1E1YUT+Gke64BM5O58bpfIeSAV0bBb2rkQ4ghktgFwmYxTBmPoARcbbeiSO M0lh2dsB5hCo6wEMlBw9KNWQDdodZlZ6S5prxEyzFGl5laAz86ey0aeTWZ/4Wc4fxc1F asx60CAM7ZkRw4l9XlXd9Uxzzkm3GNrKGyeGBtPtGFVDoxM6TOO5d24LfLhMqd7yVB3g eO0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=zFWadYbm6VXtWyouFLQOk3B6KK1LS4KjEyWEEjW9hpM=; b=TzXvUDsTlZ8zITw9Hemx3kIPNMZNM46ePdi3dnTeOdeEu2+4+xfagOmTi9gVGeFVZ3 fJhS28gRCTNyxoH2R8XGc1XO11GzWG+oh2zcVhHGfyhTltYhJm4ytl+4fXD9+XFV1Tl6 XbxlO2iv6qcYZtn+eMJNFI4pBq+Mo5CXbs8PtqBuAsJ2ryzn6a5dBLqNztPqKTyfQWXr UjCtbqfxKjSaQhC/GXdD55Z93l9nE50bVGUMIekbRTBwJj0q+/Q7uNspiDY23EvSy5Rk IMb+w13bnb6T4DghtPmDlrap82F969TyJi9unI4KGEBmOBx+DUaixwhCM7pQ6eYy3OWj /ImQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=k1J+QDBu; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l64si1970486pge.168.2019.01.17.09.12.56; Thu, 17 Jan 2019 09:13:12 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=k1J+QDBu; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727822AbfAQO5y (ORCPT + 99 others); Thu, 17 Jan 2019 09:57:54 -0500 Received: from mail.kernel.org ([198.145.29.99]:40416 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726913AbfAQO5x (ORCPT ); Thu, 17 Jan 2019 09:57:53 -0500 Received: from localhost (173-25-171-118.client.mchsi.com [173.25.171.118]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A102420851; Thu, 17 Jan 2019 14:57:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1547737072; bh=X1ezWKZbAVJffvFEijXJReFElLQuF9FuVUuwkZZcLW0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=k1J+QDBuACHCCp7nv5/ZVDJdtsPkq34MS0dQzJjQMS8Z+mUuZ7A/0EEjC1u1k+oZU +LWIYkP0rl10OFkSGNOqDV2sSrj1d9oFp7N+V5MX/lA2RUytPYLsRPKSOHaDP9tYXk w3GRA/HkL2IEgIxJdUs7UsvMVRcidPq5sod91BDk= Date: Thu, 17 Jan 2019 08:57:51 -0600 From: Bjorn Helgaas To: Ajay Kaher Cc: kys@microsoft.com, haiyangz@microsoft.com, devel@linuxdriverproject.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Long Li Subject: Re: [PATCH 1/3] PCI: hv: Allocate physically contiguous hypercall params buffer Message-ID: <20190117145751.GD158366@google.com> References: <1547758038-5255-1-git-send-email-akaher@vmware.com> <1547758038-5255-2-git-send-email-akaher@vmware.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1547758038-5255-2-git-send-email-akaher@vmware.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > Signed-off-by: Long Li > Signed-off-by: Bjorn Helgaas 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 > Signed-off-by: Ajay Kaher > --- > 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 >