From patchwork Sun Feb 4 08:56:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: liulongfang X-Patchwork-Id: 13544578 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (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 2B93B16423; Sun, 4 Feb 2024 09:00:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707037255; cv=none; b=T2tps1cP5f1YNT31MZz1BoujdRxhOho2iQk1l1dNQCbS+GUAKoY/Z+GqZqEDtG5DDeXB8l1V0USUCAIzM5mCxTMU5Z1H7p7vSOQYHNQg96VZFE6sfXVyFepAzCHh3vA+ggnp9p09wn9BRMX7JDz1pirbIH2Nt50Egqt9tI13GYk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707037255; c=relaxed/simple; bh=D03gDOE8PoEnqKtel7Pg9yzU1CNR7UjAqNbY2DwMFgA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WwZ1nZAB0G+//iKC6NUxF69/IdB2ThfDs+h9/1/hG4LoseIu1FqJt7c1hNyZ0oilYCFnSBqAMfL8r3ns1PB9l4HYjhxVkBAFkpBmAoFSWU2doN8NS9WGgfSBoGijUf+k8kiTSosdzHjlAkXb5cx+3iezK0XGDxm8KhcmIDGOREo= 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.190 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.214]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4TSNk84Nrhz1xnBQ; Sun, 4 Feb 2024 16:59:44 +0800 (CST) Received: from kwepemm600005.china.huawei.com (unknown [7.193.23.191]) by mail.maildlp.com (Postfix) with ESMTPS id C85581A016B; Sun, 4 Feb 2024 17:00:48 +0800 (CST) Received: from huawei.com (10.50.165.33) by kwepemm600005.china.huawei.com (7.193.23.191) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Sun, 4 Feb 2024 17:00:48 +0800 From: Longfang Liu To: , , , CC: , , , Subject: [PATCH v2 1/3] hisi_acc_vfio_pci: extract public functions for container_of Date: Sun, 4 Feb 2024 16:56:08 +0800 Message-ID: <20240204085610.17720-2-liulongfang@huawei.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20240204085610.17720-1-liulongfang@huawei.com> References: <20240204085610.17720-1-liulongfang@huawei.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm600005.china.huawei.com (7.193.23.191) In the current driver, vdev is obtained from struct hisi_acc_vf_core_device through the container_of function. This method is used in many places in the driver. In order to reduce this repetitive operation, It was extracted into a public function. Signed-off-by: Longfang Liu --- .../vfio/pci/hisilicon/hisi_acc_vfio_pci.c | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c index 4d27465c8f1a..00a22a990eb8 100644 --- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c +++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c @@ -630,6 +630,12 @@ static void hisi_acc_vf_disable_fds(struct hisi_acc_vf_core_device *hisi_acc_vde } } +static struct hisi_acc_vf_core_device *hisi_acc_get_vf_dev(struct vfio_device *vdev) +{ + return container_of(vdev, struct hisi_acc_vf_core_device, + core_device.vdev); +} + /* * This function is called in all state_mutex unlock cases to * handle a 'deferred_reset' if exists. @@ -1045,8 +1051,7 @@ static struct file * hisi_acc_vfio_pci_set_device_state(struct vfio_device *vdev, enum vfio_device_mig_state new_state) { - struct hisi_acc_vf_core_device *hisi_acc_vdev = container_of(vdev, - struct hisi_acc_vf_core_device, core_device.vdev); + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(vdev); enum vfio_device_mig_state next_state; struct file *res = NULL; int ret; @@ -1087,8 +1092,7 @@ static int hisi_acc_vfio_pci_get_device_state(struct vfio_device *vdev, enum vfio_device_mig_state *curr_state) { - struct hisi_acc_vf_core_device *hisi_acc_vdev = container_of(vdev, - struct hisi_acc_vf_core_device, core_device.vdev); + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(vdev); mutex_lock(&hisi_acc_vdev->state_mutex); *curr_state = hisi_acc_vdev->mig_state; @@ -1304,8 +1308,7 @@ static long hisi_acc_vfio_pci_ioctl(struct vfio_device *core_vdev, unsigned int static int hisi_acc_vfio_pci_open_device(struct vfio_device *core_vdev) { - struct hisi_acc_vf_core_device *hisi_acc_vdev = container_of(core_vdev, - struct hisi_acc_vf_core_device, core_device.vdev); + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(core_vdev); struct vfio_pci_core_device *vdev = &hisi_acc_vdev->core_device; int ret; @@ -1328,8 +1331,7 @@ static int hisi_acc_vfio_pci_open_device(struct vfio_device *core_vdev) static void hisi_acc_vfio_pci_close_device(struct vfio_device *core_vdev) { - struct hisi_acc_vf_core_device *hisi_acc_vdev = container_of(core_vdev, - struct hisi_acc_vf_core_device, core_device.vdev); + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(core_vdev); struct hisi_qm *vf_qm = &hisi_acc_vdev->vf_qm; iounmap(vf_qm->io_base); @@ -1344,8 +1346,7 @@ static const struct vfio_migration_ops hisi_acc_vfio_pci_migrn_state_ops = { static int hisi_acc_vfio_pci_migrn_init_dev(struct vfio_device *core_vdev) { - struct hisi_acc_vf_core_device *hisi_acc_vdev = container_of(core_vdev, - struct hisi_acc_vf_core_device, core_device.vdev); + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(core_vdev); struct pci_dev *pdev = to_pci_dev(core_vdev->dev); struct hisi_qm *pf_qm = hisi_acc_get_pf_qm(pdev); From patchwork Sun Feb 4 08:56:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: liulongfang X-Patchwork-Id: 13544579 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (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 5BE7616428; Sun, 4 Feb 2024 09:01:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707037286; cv=none; b=VwFu0aaQIrifDHVPJQ1P9G6oI4BE9RoSVZ8rraHJtVlZn9bZ7cejwLCK1XW2p3MEmqfeiKS/GW6Zw8Kw/3Uf49+me5acumfF3JQvqIWZ1LRNvfKquZqJnv8XE/I4BR6jPGSrz/y1HGm5mu4vsdW/63VDzBDz4LLX4T/fQD4dXcM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707037286; c=relaxed/simple; bh=UJFt9E6iHqHWIImccNZZhBZK7lexWgTkfq5W9uWSKNQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oMk7MiEXvKixJqjHzcXWsTks3x044wpbX7/ZjjY/SxRnCQgz71y6i3VyeCfbuOhF5WwxlSfQluHutCAX17l1P5M8ZJwqSAAVvifc/Wc79AaVx5+uupl0FJdRQd0dJHO8s+cH3FclwTI/ru7itMDFSOgn3cFpeSbHxtr15nDJvLc= 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.191 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.234]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4TSNfk3X4zz1FKDL; Sun, 4 Feb 2024 16:56:46 +0800 (CST) Received: from kwepemm600005.china.huawei.com (unknown [7.193.23.191]) by mail.maildlp.com (Postfix) with ESMTPS id C5294140413; Sun, 4 Feb 2024 17:01:19 +0800 (CST) Received: from huawei.com (10.50.165.33) by kwepemm600005.china.huawei.com (7.193.23.191) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Sun, 4 Feb 2024 17:01:19 +0800 From: Longfang Liu To: , , , CC: , , , Subject: [PATCH v2 2/3] hisi_acc_vfio_pci: register debugfs for hisilicon migration driver Date: Sun, 4 Feb 2024 16:56:09 +0800 Message-ID: <20240204085610.17720-3-liulongfang@huawei.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20240204085610.17720-1-liulongfang@huawei.com> References: <20240204085610.17720-1-liulongfang@huawei.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600005.china.huawei.com (7.193.23.191) On the debugfs framework of VFIO, if the CONFIG_VFIO_DEBUGFS macro is enabled, the debug function is registered for the live migration driver of the HiSilicon accelerator device. After registering the HiSilicon accelerator device on the debugfs framework of live migration of vfio, a directory file "hisi_acc" of debugfs is created, and then three debug function files are created in this directory: vfio | +--- | +---migration | +--state | +--hisi_acc | +--attr | +--data | +--save | +--cmd_state | +--- +---migration +--state +--hisi_acc +--attr +--data +--save +--cmd_state data file: used to get the migration data from the driver attr file: used to get device attributes parameters from the driver save file: used to read the data of the live migration device and save it to the driver. cmd_state: used to get the cmd channel state for the device. Signed-off-by: Longfang Liu --- .../vfio/pci/hisilicon/hisi_acc_vfio_pci.c | 197 ++++++++++++++++++ .../vfio/pci/hisilicon/hisi_acc_vfio_pci.h | 11 + 2 files changed, 208 insertions(+) diff --git a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c index 00a22a990eb8..e51bbb41c2b3 100644 --- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c +++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c @@ -15,6 +15,7 @@ #include #include "hisi_acc_vfio_pci.h" +#include "../../vfio.h" /* Return 0 on VM acc device ready, -ETIMEDOUT hardware timeout */ static int qm_wait_dev_not_ready(struct hisi_qm *qm) @@ -606,6 +607,18 @@ hisi_acc_check_int_state(struct hisi_acc_vf_core_device *hisi_acc_vdev) } } +static void hisi_acc_vf_migf_save(struct hisi_acc_vf_migration_file *dst_migf, + struct hisi_acc_vf_migration_file *src_migf) +{ + if (!dst_migf) + return; + + dst_migf->disabled = false; + dst_migf->total_length = src_migf->total_length; + memcpy(&dst_migf->vf_data, &src_migf->vf_data, + sizeof(struct acc_vf_data)); +} + static void hisi_acc_vf_disable_fd(struct hisi_acc_vf_migration_file *migf) { mutex_lock(&migf->lock); @@ -618,12 +631,16 @@ static void hisi_acc_vf_disable_fd(struct hisi_acc_vf_migration_file *migf) static void hisi_acc_vf_disable_fds(struct hisi_acc_vf_core_device *hisi_acc_vdev) { if (hisi_acc_vdev->resuming_migf) { + hisi_acc_vf_migf_save(hisi_acc_vdev->debug_migf, + hisi_acc_vdev->resuming_migf); hisi_acc_vf_disable_fd(hisi_acc_vdev->resuming_migf); fput(hisi_acc_vdev->resuming_migf->filp); hisi_acc_vdev->resuming_migf = NULL; } if (hisi_acc_vdev->saving_migf) { + hisi_acc_vf_migf_save(hisi_acc_vdev->debug_migf, + hisi_acc_vdev->saving_migf); hisi_acc_vf_disable_fd(hisi_acc_vdev->saving_migf); fput(hisi_acc_vdev->saving_migf->filp); hisi_acc_vdev->saving_migf = NULL; @@ -1156,6 +1173,7 @@ static int hisi_acc_vf_qm_init(struct hisi_acc_vf_core_device *hisi_acc_vdev) if (!vf_qm->io_base) return -EIO; + mutex_init(&hisi_acc_vdev->enable_mutex); vf_qm->fun_type = QM_HW_VF; vf_qm->pdev = vf_dev; mutex_init(&vf_qm->mailbox_lock); @@ -1306,6 +1324,176 @@ static long hisi_acc_vfio_pci_ioctl(struct vfio_device *core_vdev, unsigned int return vfio_pci_core_ioctl(core_vdev, cmd, arg); } +static int hisi_acc_vf_debug_check(struct seq_file *seq, struct vfio_device *vdev) +{ + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(vdev); + struct hisi_acc_vf_migration_file *migf = hisi_acc_vdev->debug_migf; + + if (!vdev->mig_ops || !migf) { + seq_printf(seq, "%s\n", "device does not support live migration!"); + return -EINVAL; + } + + /** + * When the device is not opened, the io_base is not mapped. + * The driver cannot perform device read and write operations. + */ + if (atomic_read(&hisi_acc_vdev->dev_opened) != DEV_OPEN) { + seq_printf(seq, "%s\n", "device not opened!"); + return -EINVAL; + } + + return 0; +} + +static int hisi_acc_vf_debug_cmd(struct seq_file *seq, void *data) +{ + struct device *vf_dev = seq->private; + struct vfio_pci_core_device *core_device = dev_get_drvdata(vf_dev); + struct vfio_device *vdev = &core_device->vdev; + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(vdev); + struct hisi_qm *vf_qm = &hisi_acc_vdev->vf_qm; + u64 value; + int ret; + + mutex_lock(&hisi_acc_vdev->enable_mutex); + ret = hisi_acc_vf_debug_check(seq, vdev); + if (ret) { + mutex_unlock(&hisi_acc_vdev->enable_mutex); + return 0; + } + + ret = qm_wait_dev_not_ready(vf_qm); + if (ret) { + mutex_unlock(&hisi_acc_vdev->enable_mutex); + seq_printf(seq, "%s\n", "VF device not ready!"); + return 0; + } + + value = readl(vf_qm->io_base + QM_MB_CMD_SEND_BASE); + mutex_unlock(&hisi_acc_vdev->enable_mutex); + seq_printf(seq, "%s:0x%llx\n", "mailbox cmd channel state is OK", value); + + return 0; +} + +static int hisi_acc_vf_debug_save(struct seq_file *seq, void *data) +{ + struct device *vf_dev = seq->private; + struct vfio_pci_core_device *core_device = dev_get_drvdata(vf_dev); + struct vfio_device *vdev = &core_device->vdev; + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(vdev); + struct hisi_acc_vf_migration_file *migf = hisi_acc_vdev->debug_migf; + int ret; + + mutex_lock(&hisi_acc_vdev->enable_mutex); + ret = hisi_acc_vf_debug_check(seq, vdev); + if (ret) { + mutex_unlock(&hisi_acc_vdev->enable_mutex); + return 0; + } + + ret = vf_qm_state_save(hisi_acc_vdev, migf); + if (ret) { + mutex_unlock(&hisi_acc_vdev->enable_mutex); + seq_printf(seq, "%s\n", "failed to save device data!"); + return 0; + } + mutex_unlock(&hisi_acc_vdev->enable_mutex); + seq_printf(seq, "%s\n", "successful to save device data!"); + + return 0; +} + +static int hisi_acc_vf_data_read(struct seq_file *seq, void *data) +{ + struct device *vf_dev = seq->private; + struct vfio_pci_core_device *core_device = dev_get_drvdata(vf_dev); + struct vfio_device *vdev = &core_device->vdev; + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(vdev); + struct hisi_acc_vf_migration_file *debug_migf = hisi_acc_vdev->debug_migf; + size_t vf_data_sz = offsetofend(struct acc_vf_data, padding); + + if (debug_migf && debug_migf->total_length) + seq_hex_dump(seq, "Mig Data:", DUMP_PREFIX_OFFSET, 16, 1, + (unsigned char *)&debug_migf->vf_data, + vf_data_sz, false); + else + seq_printf(seq, "%s\n", "device not migrated!"); + + return 0; +} + +static int hisi_acc_vf_attr_read(struct seq_file *seq, void *data) +{ + struct device *vf_dev = seq->private; + struct vfio_pci_core_device *core_device = dev_get_drvdata(vf_dev); + struct vfio_device *vdev = &core_device->vdev; + struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(vdev); + struct hisi_acc_vf_migration_file *debug_migf = hisi_acc_vdev->debug_migf; + + if (debug_migf && debug_migf->total_length) { + seq_printf(seq, + "acc device:\n" + "device state: %d\n" + "device ready: %u\n" + "data valid: %d\n" + "data size: %lu\n", + hisi_acc_vdev->mig_state, + hisi_acc_vdev->vf_qm_state, + debug_migf->disabled, + debug_migf->total_length); + } else { + seq_printf(seq, "%s\n", "device not migrated!"); + } + + return 0; +} + +static int hisi_acc_vfio_debug_init(struct hisi_acc_vf_core_device *hisi_acc_vdev) +{ + struct vfio_device *vdev = &hisi_acc_vdev->core_device.vdev; + struct dentry *vfio_dev_migration = NULL; + struct dentry *vfio_hisi_acc = NULL; + struct device *dev = vdev->dev; + void *migf = NULL; + + if (!debugfs_initialized()) + return 0; + + migf = kzalloc(sizeof(struct hisi_acc_vf_migration_file), GFP_KERNEL); + if (!migf) + return -ENOMEM; + hisi_acc_vdev->debug_migf = migf; + + vfio_dev_migration = debugfs_lookup("migration", vdev->debug_root); + if (!vfio_dev_migration) { + kfree(migf); + dev_err(dev, "failed to lookup migration debugfs file!\n"); + return -ENODEV; + } + + vfio_hisi_acc = debugfs_create_dir("hisi_acc", vfio_dev_migration); + debugfs_create_devm_seqfile(dev, "data", vfio_hisi_acc, + hisi_acc_vf_data_read); + debugfs_create_devm_seqfile(dev, "attr", vfio_hisi_acc, + hisi_acc_vf_attr_read); + debugfs_create_devm_seqfile(dev, "cmd_state", vfio_hisi_acc, + hisi_acc_vf_debug_cmd); + debugfs_create_devm_seqfile(dev, "save", vfio_hisi_acc, + hisi_acc_vf_debug_save); + + return 0; +} + +static void hisi_acc_vf_debugfs_exit(struct hisi_acc_vf_core_device *hisi_acc_vdev) +{ + if (!debugfs_initialized()) + return; + + kfree(hisi_acc_vdev->debug_migf); +} + static int hisi_acc_vfio_pci_open_device(struct vfio_device *core_vdev) { struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(core_vdev); @@ -1323,9 +1511,11 @@ static int hisi_acc_vfio_pci_open_device(struct vfio_device *core_vdev) return ret; } hisi_acc_vdev->mig_state = VFIO_DEVICE_STATE_RUNNING; + atomic_set(&hisi_acc_vdev->dev_opened, DEV_OPEN); } vfio_pci_core_finish_enable(vdev); + return 0; } @@ -1334,7 +1524,10 @@ static void hisi_acc_vfio_pci_close_device(struct vfio_device *core_vdev) struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(core_vdev); struct hisi_qm *vf_qm = &hisi_acc_vdev->vf_qm; + atomic_set(&hisi_acc_vdev->dev_opened, DEV_CLOSE); + mutex_lock(&hisi_acc_vdev->enable_mutex); iounmap(vf_qm->io_base); + mutex_unlock(&hisi_acc_vdev->enable_mutex); vfio_pci_core_close_device(core_vdev); } @@ -1425,6 +1618,9 @@ static int hisi_acc_vfio_pci_probe(struct pci_dev *pdev, const struct pci_device ret = vfio_pci_core_register_device(&hisi_acc_vdev->core_device); if (ret) goto out_put_vdev; + + if (ops == &hisi_acc_vfio_pci_migrn_ops) + hisi_acc_vfio_debug_init(hisi_acc_vdev); return 0; out_put_vdev: @@ -1437,6 +1633,7 @@ static void hisi_acc_vfio_pci_remove(struct pci_dev *pdev) struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_drvdata(pdev); vfio_pci_core_unregister_device(&hisi_acc_vdev->core_device); + hisi_acc_vf_debugfs_exit(hisi_acc_vdev); vfio_put_device(&hisi_acc_vdev->core_device.vdev); } diff --git a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.h b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.h index dcabfeec6ca1..283bd8acdc42 100644 --- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.h +++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.h @@ -49,6 +49,11 @@ #define QM_EQC_DW0 0X8000 #define QM_AEQC_DW0 0X8020 +enum acc_dev_state { + DEV_CLOSE = 0x0, + DEV_OPEN, +}; + struct acc_vf_data { #define QM_MATCH_SIZE offsetofend(struct acc_vf_data, qm_rsv_state) /* QM match information */ @@ -113,5 +118,11 @@ struct hisi_acc_vf_core_device { spinlock_t reset_lock; struct hisi_acc_vf_migration_file *resuming_migf; struct hisi_acc_vf_migration_file *saving_migf; + + /* To make sure the device is enabled */ + struct mutex enable_mutex; + atomic_t dev_opened; + /* For debugfs */ + struct hisi_acc_vf_migration_file *debug_migf; }; #endif /* HISI_ACC_VFIO_PCI_H */ From patchwork Sun Feb 4 08:56:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: liulongfang X-Patchwork-Id: 13544580 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) (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 B3BDB14A94; Sun, 4 Feb 2024 09:01:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.189 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707037322; cv=none; b=sp5MppVlqy96/xQe5/HXg+gLMhAqLLhS3oJQw+PivX38iXE31X5WKpns+cnY/HXTbcVYsl8KXXpIRm+5JsAghiD5+EdmdVE2gIzWRdW8nxJnjV3tolSA8EtecE4wdz4C51EEMQAEoSauBrC3O3wUvtBnpPYZbxIOOzTyrgeRL1Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707037322; c=relaxed/simple; bh=7i/3l2q/ER2Vx7o8iiC5bIHWO1gqyt9jkv3nWOLEEVE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oOtuHgFL+U6JDCQ3sUzOBD+tXFtsYEPMIBYC0kaHejvN7Sp7NpwdqPLSTgIw2oGtDnYwrfJaSc/dri8+nohEjB2pMnxktsRDGkHsNDN8Y1R7K/WW6apbNC+YK/0rHTpslYQoIjcG2GJFFrDTxcv1S5GUunY6nh8l5kxfYwBa+zY= 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.189 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.194]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4TSNlL0pDvzNljy; Sun, 4 Feb 2024 17:00:46 +0800 (CST) Received: from kwepemm600005.china.huawei.com (unknown [7.193.23.191]) by mail.maildlp.com (Postfix) with ESMTPS id B8A54140258; Sun, 4 Feb 2024 17:01:50 +0800 (CST) Received: from huawei.com (10.50.165.33) by kwepemm600005.china.huawei.com (7.193.23.191) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Sun, 4 Feb 2024 17:01:50 +0800 From: Longfang Liu To: , , , CC: , , , Subject: [PATCH v2 3/3] Documentation: add debugfs description for hisi migration Date: Sun, 4 Feb 2024 16:56:10 +0800 Message-ID: <20240204085610.17720-4-liulongfang@huawei.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20240204085610.17720-1-liulongfang@huawei.com> References: <20240204085610.17720-1-liulongfang@huawei.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm600005.china.huawei.com (7.193.23.191) Add a debugfs document description file to help users understand how to use the hisilicon accelerator live migration driver's debugfs. Update the file paths that need to be maintained in MAINTAINERS Signed-off-by: Longfang Liu --- .../ABI/testing/debugfs-hisi-migration | 34 +++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 35 insertions(+) create mode 100644 Documentation/ABI/testing/debugfs-hisi-migration diff --git a/Documentation/ABI/testing/debugfs-hisi-migration b/Documentation/ABI/testing/debugfs-hisi-migration new file mode 100644 index 000000000000..d61255c3bcd9 --- /dev/null +++ b/Documentation/ABI/testing/debugfs-hisi-migration @@ -0,0 +1,34 @@ +What: /sys/kernel/debug/vfio//migration/hisi_acc/data +Date: Feb 2024 +KernelVersion: 6.8 +Contact: Longfang Liu +Description: Read the live migration data of the vfio device. + These data include device status data, queue configuration + data and some task configuration data. + The output format of the data is defined by the live + migration driver. + +What: /sys/kernel/debug/vfio//migration/hisi_acc/attr +Date: Feb 2024 +KernelVersion: 6.8 +Contact: Longfang Liu +Description: Read the live migration attributes of the vfio device. + it include device status attributes and data length attributes + The output format of the attributes is defined by the live + migration driver. + +What: /sys/kernel/debug/vfio//migration/hisi_acc/cmd_state +Date: Feb 2024 +KernelVersion: 6.8 +Contact: Longfang Liu +Description: Used to obtain the device command sending and receiving + channel status. If successful, returns the command value. + If failed, return error log. + +What: /sys/kernel/debug/vfio//migration/hisi_acc/save +Date: Feb 2024 +KernelVersion: 6.8 +Contact: Longfang Liu +Description: Trigger the Hisilicon accelerator device to perform + the state saving operation of live migration through the read + operation, and output the operation log results. diff --git a/MAINTAINERS b/MAINTAINERS index 20f8e9872deb..115d43d307e8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -22856,6 +22856,7 @@ M: Longfang Liu M: Shameer Kolothum L: kvm@vger.kernel.org S: Maintained +F: Documentation/ABI/testing/debugfs-hisi-migration F: drivers/vfio/pci/hisilicon/ VFIO MEDIATED DEVICE DRIVERS