From nobody Wed Oct 8 11:01:16 2025 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 072D7242D92; Mon, 30 Jun 2025 08:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.188 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751273691; cv=none; b=PQPTSFLuCsliU5Z2DEqaI3eZyocYJ5NsT21l/YtFG69vEoiOFs1Jde6//n0PbN+fA0fQ42yaxRYouXXfHOd8qah+8y8ZDPfPReO5d1ASoxy1CINid82meYc4IALB98uor9OJLigO51Y1YJBHU8Z3WUIO6Zg6VNYnR6YRc7yRkh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751273691; c=relaxed/simple; bh=shwr8MPQTjO7BLjZ2FwD1uQjcpJIj0DsyP9MRMjw2RU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BrkqcmXLNkTzeMGxA+DRaxHtB/7Ro1MsqB2WBkJjD1h+Z26KlgARd+THNLkZ5mBCZR8s9iYqtqEKSkXvR/38fpE0cTkfMbDjClFYi7TFNAniKz16i2AyuPsCgbULRWuGOet5RxPsjLUOvyTU5hrIik2PfCvp/2SnCxlrqYwrXtM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.188 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4bW0Lp10jZztSk9; Mon, 30 Jun 2025 16:53:38 +0800 (CST) Received: from dggpemf500015.china.huawei.com (unknown [7.185.36.143]) by mail.maildlp.com (Postfix) with ESMTPS id 552181402C8; Mon, 30 Jun 2025 16:54:46 +0800 (CST) Received: from huawei.com (10.50.165.33) by dggpemf500015.china.huawei.com (7.185.36.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Mon, 30 Jun 2025 16:54:46 +0800 From: Longfang Liu To: , , , CC: , , , Subject: [PATCH v5 1/3] migration: update BAR space size Date: Mon, 30 Jun 2025 16:54:00 +0800 Message-ID: <20250630085402.7491-2-liulongfang@huawei.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20250630085402.7491-1-liulongfang@huawei.com> References: <20250630085402.7491-1-liulongfang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpemf500015.china.huawei.com (7.185.36.143) Content-Type: text/plain; charset="utf-8" On new platforms greater than QM_HW_V3, the live migration configuration region is moved from VF to PF. The VF's own configuration space is restored to the complete 64KB, and there is no need to divide the size of the BAR configuration space equally. Signed-off-by: Longfang Liu Reviewed-by: Shameer Kolothum --- .../vfio/pci/hisilicon/hisi_acc_vfio_pci.c | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c b/drivers/vfio/= pci/hisilicon/hisi_acc_vfio_pci.c index 2149f49aeec7..1ddc9dbadb70 100644 --- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c +++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c @@ -1250,6 +1250,28 @@ static struct hisi_qm *hisi_acc_get_pf_qm(struct pci= _dev *pdev) return !IS_ERR(pf_qm) ? pf_qm : NULL; } =20 +static size_t hisi_acc_get_resource_len(struct vfio_pci_core_device *vdev, + unsigned int index) +{ + struct hisi_acc_vf_core_device *hisi_acc_vdev =3D + hisi_acc_drvdata(vdev->pdev); + + /* + * On the old QM_HW_V3 device, the ACC VF device BAR2 + * region encompasses both functional register space + * and migration control register space. + * only the functional region should be report to Guest. + * + * On the new HW device, the migration control register + * has been moved to the PF device BAR2 region. + * The VF device BAR2 is entirely functional register space. + */ + if (hisi_acc_vdev->pf_qm->ver =3D=3D QM_HW_V3) + return (pci_resource_len(vdev->pdev, index) >> 1); + + return pci_resource_len(vdev->pdev, index); +} + static int hisi_acc_pci_rw_access_check(struct vfio_device *core_vdev, size_t count, loff_t *ppos, size_t *new_count) @@ -1260,8 +1282,9 @@ static int hisi_acc_pci_rw_access_check(struct vfio_d= evice *core_vdev, =20 if (index =3D=3D VFIO_PCI_BAR2_REGION_INDEX) { loff_t pos =3D *ppos & VFIO_PCI_OFFSET_MASK; - resource_size_t end =3D pci_resource_len(vdev->pdev, index) / 2; + resource_size_t end; =20 + end =3D hisi_acc_get_resource_len(vdev, index); /* Check if access is for migration control region */ if (pos >=3D end) return -EINVAL; @@ -1282,8 +1305,9 @@ static int hisi_acc_vfio_pci_mmap(struct vfio_device = *core_vdev, index =3D vma->vm_pgoff >> (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT); if (index =3D=3D VFIO_PCI_BAR2_REGION_INDEX) { u64 req_len, pgoff, req_start; - resource_size_t end =3D pci_resource_len(vdev->pdev, index) / 2; + resource_size_t end; =20 + end =3D hisi_acc_get_resource_len(vdev, index); req_len =3D vma->vm_end - vma->vm_start; pgoff =3D vma->vm_pgoff & ((1U << (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT)) - 1); @@ -1330,7 +1354,6 @@ static long hisi_acc_vfio_pci_ioctl(struct vfio_devic= e *core_vdev, unsigned int if (cmd =3D=3D VFIO_DEVICE_GET_REGION_INFO) { struct vfio_pci_core_device *vdev =3D container_of(core_vdev, struct vfio_pci_core_device, vdev); - struct pci_dev *pdev =3D vdev->pdev; struct vfio_region_info info; unsigned long minsz; =20 @@ -1345,12 +1368,7 @@ static long hisi_acc_vfio_pci_ioctl(struct vfio_devi= ce *core_vdev, unsigned int if (info.index =3D=3D VFIO_PCI_BAR2_REGION_INDEX) { info.offset =3D VFIO_PCI_INDEX_TO_OFFSET(info.index); =20 - /* - * ACC VF dev BAR2 region consists of both functional - * register space and migration control register space. - * Report only the functional region to Guest. - */ - info.size =3D pci_resource_len(pdev, info.index) / 2; + info.size =3D hisi_acc_get_resource_len(vdev, info.index); =20 info.flags =3D VFIO_REGION_INFO_FLAG_READ | VFIO_REGION_INFO_FLAG_WRITE | --=20 2.24.0