Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4823287pxj; Wed, 9 Jun 2021 02:44:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxndNGgYQJbfOYmanzGRAmbkYyrqQLNBnP2XIOxUKgqr0qUTEAjQ/+JjFyUqVdfRRkfD8+t X-Received: by 2002:a6b:e50c:: with SMTP id y12mr23023276ioc.20.1623231885643; Wed, 09 Jun 2021 02:44:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623231885; cv=none; d=google.com; s=arc-20160816; b=aon1fNbcfU3okZUnNOocU4bcWzDipQNLqXVQsEs814rTDhgQ2JHlQ5N2a79s9qQDd9 GSayJYmYloewmbg5gyT467uOAiYZ6yBNJZA0K6tQ8WnubEI/3jXVkbB6jTKqfsBWdvUc 5rG8jbyAUfiSmQc6wn/ToKXBR+Jdt7aWFpNBJWxgp6DvSzaPWUGUIqEY6XlzDQFTDj7s pFBtsyYBRrWpHRhfNDar8efdTcSNVOJu3GtJu7UJ7b5Zh39D0bQtAvaV9HYIioUolqk3 QOXv6zvPTfzcabdiluh1w/wOBha5xXGCfpcIcXYeL5MM+pQzF0kcfMd4owTH6dNOI5mE +dZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=gA74T+vRzSfrZxNhcXWQ84T4NmQeUT1U7RuHRsvJmJE=; b=hVhaEz6z9/HE+pGG1P3uBTUDTxAGBMZ/cRsCmO+y+Kph1YBATaQVFQvffqjQ/lfwTn xJg0EFpiJ+WlU2PUcA2igbR/MXQJ4TyrGIgTsNgrM179RP41a9I/sB7/8rZXliT43ctT PhvKLiqx9DXudczgdTotx5cfGEuNF9psksHT7VHlO4NY7UvH6MDaGP9h6u1sxS263w+A vwys0m3gylusn1DP40pg01X5G8d8KJjzV6w2UIS9Q5gTdc1dS/lgTXCGMXm7W+m9WzlA oVS7r5Lk4Vd3+OKfEIMWNt3pofDeKzBXHrVQgBI08A44td9BnG7rrYtQTOUbnMAuezDT bBQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=pA5Z9jxT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q49si2632706jav.91.2021.06.09.02.44.33; Wed, 09 Jun 2021 02:44:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=pA5Z9jxT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235635AbhFHSom (ORCPT + 99 others); Tue, 8 Jun 2021 14:44:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:36504 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234445AbhFHSkn (ORCPT ); Tue, 8 Jun 2021 14:40:43 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7A59B613D2; Tue, 8 Jun 2021 18:34:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1623177290; bh=iu8iH5BljOLDJvmRbikySsVS7kvTFPstiA2Va6sYKng=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pA5Z9jxT+FOxhY2g8iDTRQhLzgJ6UVi3r2AL5I4u3OpUnHv1Ywxe4o1Qhl0eDfbRP POVaEVlehrlGFH4Z6za4xS5Lvmb1s2TcruqQVuOpTZmbX0F3j2miRUvgwIzChBCo3n 4yOrd4Jr60yWqp0wKeKPA0WalfmKg0lhTQcAfLq4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jan Beulich , Boris Ostrovsky , Juergen Gross Subject: [PATCH 4.19 58/58] xen-pciback: redo VF placement in the virtual topology Date: Tue, 8 Jun 2021 20:27:39 +0200 Message-Id: <20210608175934.188638088@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210608175932.263480586@linuxfoundation.org> References: <20210608175932.263480586@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jan Beulich The commit referenced below was incomplete: It merely affected what would get written to the vdev- xenstore node. The guest would still find the function at the original function number as long as __xen_pcibk_get_pci_dev() wouldn't be in sync. The same goes for AER wrt __xen_pcibk_get_pcifront_dev(). Undo overriding the function to zero and instead make sure that VFs at function zero remain alone in their slot. This has the added benefit of improving overall capacity, considering that there's only a total of 32 slots available right now (PCI segment and bus can both only ever be zero at present). This is upstream commit 4ba50e7c423c29639878c00573288869aa627068. Fixes: 8a5248fe10b1 ("xen PV passthru: assign SR-IOV virtual functions to separate virtual slots") Signed-off-by: Jan Beulich Reviewed-by: Boris Ostrovsky Link: https://lore.kernel.org/r/8def783b-404c-3452-196d-3f3fd4d72c9e@suse.com Signed-off-by: Juergen Gross Signed-off-by: Greg Kroah-Hartman --- drivers/xen/xen-pciback/vpci.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) --- a/drivers/xen/xen-pciback/vpci.c +++ b/drivers/xen/xen-pciback/vpci.c @@ -69,7 +69,7 @@ static int __xen_pcibk_add_pci_dev(struc struct pci_dev *dev, int devid, publish_pci_dev_cb publish_cb) { - int err = 0, slot, func = -1; + int err = 0, slot, func = PCI_FUNC(dev->devfn); struct pci_dev_entry *t, *dev_entry; struct vpci_dev_data *vpci_dev = pdev->pci_dev_data; @@ -94,23 +94,26 @@ static int __xen_pcibk_add_pci_dev(struc /* * Keep multi-function devices together on the virtual PCI bus, except - * virtual functions. + * that we want to keep virtual functions at func 0 on their own. They + * aren't multi-function devices and hence their presence at func 0 + * may cause guests to not scan the other functions. */ - if (!dev->is_virtfn) { + if (!dev->is_virtfn || func) { for (slot = 0; slot < PCI_SLOT_MAX; slot++) { if (list_empty(&vpci_dev->dev_list[slot])) continue; t = list_entry(list_first(&vpci_dev->dev_list[slot]), struct pci_dev_entry, list); + if (t->dev->is_virtfn && !PCI_FUNC(t->dev->devfn)) + continue; if (match_slot(dev, t->dev)) { pr_info("vpci: %s: assign to virtual slot %d func %d\n", pci_name(dev), slot, - PCI_FUNC(dev->devfn)); + func); list_add_tail(&dev_entry->list, &vpci_dev->dev_list[slot]); - func = PCI_FUNC(dev->devfn); goto unlock; } } @@ -123,7 +126,6 @@ static int __xen_pcibk_add_pci_dev(struc pci_name(dev), slot); list_add_tail(&dev_entry->list, &vpci_dev->dev_list[slot]); - func = dev->is_virtfn ? 0 : PCI_FUNC(dev->devfn); goto unlock; } }