Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4822726pxj; Wed, 9 Jun 2021 02:43:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwluzWDRs5G2qfS8AZotgA0iOqslnu/CEnsk45Ntgct9ukLQOXXRfwOwGpdFmrBkEphZzSi X-Received: by 2002:a05:6e02:20e4:: with SMTP id q4mr21447603ilv.50.1623231820616; Wed, 09 Jun 2021 02:43:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623231820; cv=none; d=google.com; s=arc-20160816; b=w8yGkOpVQip/B7VsoZoVQQj0w+6GKoDwfMOphwZy5SKDjRQbXtyYkuGcViXaA4QV1W Y2RakszW38XbMnEGEiGSllw7kcmLZvZIDE9DcFrFNK1gNGC/aePIMosFLKdZspl4Uwgz 6WRlHtDwG48yM7a0zf6kZfkq+83Ze1xhs95eInFXNoUF61mao7rVyu4VOXOV1DQoL20o nfYBSjl9itXwEYEBl5rQtjvelBPtFYSAq+fW5zzMDc4HOndNyhn+gCTSXQ2IzJctQhXD CbsmSK4I+yIfyT0xnAyFdGmcRJNtQbJ/IuD02FJh9b0lF5MfyYsWDXQp6BXz5i8pPD5U 8Acg== 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=uKlepNa5g0BonWwP4WHBMm6Lw98v9RKzzmXQAmuOPUuKusQiP6aeubCHYU8sG1eC46 z1rpxGST5+itgIdPzVC2h6ORV4vi+z1WCRPeaRG8NgwrQGZktfgACa8kVhIq9iVz09rc uXhGoe2Uo1THPc6tbiPWDS4vONudgm5GaebxuMS9UeSoqxYG8Y2cvSsLkxExTJ1SkOzS sINU5L9CO7inj2RkAjSWnaFyyarJpDbeJZiyYpA6LmY2NxIdldWTAHFyy35gGetWtE98 MZBFjivhNVZbTF9nupAHWlSaY1qlw/iP65asDE2c7W060tlTvb+x02bHCkMLyGDSnLUm /w2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=PSYTzUDT; 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 w17si2523317iot.47.2021.06.09.02.43.27; Wed, 09 Jun 2021 02:43:40 -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=PSYTzUDT; 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 S235044AbhFHSib (ORCPT + 99 others); Tue, 8 Jun 2021 14:38:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:34990 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233401AbhFHSgg (ORCPT ); Tue, 8 Jun 2021 14:36:36 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id AE5A9613E7; Tue, 8 Jun 2021 18:32:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1623177160; bh=iu8iH5BljOLDJvmRbikySsVS7kvTFPstiA2Va6sYKng=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PSYTzUDTztn0T598ZOLCQgJrnVYG5Ho0mXQ6zqMBFYPObgzKpFyJd2FS/tcVD+HQC dNwFgnAGNSu53BVuOOh8oA2fmTnGK2BJP4YEcNxjyK+xTHEoYxUHfECtP5ILEJGndu HV5FxNxJmzARH8zZLK8B4ccvvkMedGFuIZRtB964= 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.14 47/47] xen-pciback: redo VF placement in the virtual topology Date: Tue, 8 Jun 2021 20:27:30 +0200 Message-Id: <20210608175932.036138374@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210608175930.477274100@linuxfoundation.org> References: <20210608175930.477274100@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; } }