{"id":2233351,"url":"http://patchwork.ozlabs.org/api/1.1/covers/2233351/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/cover/20260506094623.29327-1-fengchengwen@huawei.com/","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.1/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20260506094623.29327-1-fengchengwen@huawei.com>","date":"2026-05-06T09:46:17","name":"[v6,0/6] vfio/pci: Add PCIe TPH support","submitter":{"id":92756,"url":"http://patchwork.ozlabs.org/api/1.1/people/92756/?format=json","name":"fengchengwen","email":"fengchengwen@huawei.com"},"mbox":"http://patchwork.ozlabs.org/project/linux-pci/cover/20260506094623.29327-1-fengchengwen@huawei.com/mbox/","series":[{"id":502946,"url":"http://patchwork.ozlabs.org/api/1.1/series/502946/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/list/?series=502946","date":"2026-05-06T09:46:19","name":"vfio/pci: Add PCIe TPH support","version":6,"mbox":"http://patchwork.ozlabs.org/series/502946/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/covers/2233351/comments/","headers":{"Return-Path":"\n <linux-pci+bounces-53843-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=huawei.com header.i=@huawei.com header.a=rsa-sha256\n header.s=dkim header.b=ri7LqG/R;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-53843-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com\n header.b=\"ri7LqG/R\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=113.46.200.225","smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=huawei.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=huawei.com"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g9Vwy54ldz1yJx\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 06 May 2026 19:50:10 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 5D5E1305663F\n\tfor <incoming@patchwork.ozlabs.org>; Wed,  6 May 2026 09:47:00 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D7A063EDABB;\n\tWed,  6 May 2026 09:46:40 +0000 (UTC)","from canpmsgout10.his.huawei.com (canpmsgout10.his.huawei.com\n [113.46.200.225])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id A5F913ED5A9;\n\tWed,  6 May 2026 09:46:38 +0000 (UTC)","from mail.maildlp.com (unknown [172.19.162.92])\n\tby canpmsgout10.his.huawei.com (SkyGuard) with ESMTPS id 4g9Vh31VFcz1K96x;\n\tWed,  6 May 2026 17:38:59 +0800 (CST)","from kwepemk500009.china.huawei.com (unknown [7.202.194.94])\n\tby mail.maildlp.com (Postfix) with ESMTPS id A1F9F40562;\n\tWed,  6 May 2026 17:46:30 +0800 (CST)","from localhost.localdomain (10.50.163.32) by\n kwepemk500009.china.huawei.com (7.202.194.94) with Microsoft SMTP Server\n (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.2.1544.11; Wed, 6 May 2026 17:46:30 +0800"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1778060800; cv=none;\n b=dTqbhr0k9URxlS/GGvpHvjF4I0wshzl38rS5KbMq5deHwBJUCiQEwZ3uIhVf7Q+MhZafb42IDsqBHtwhAIMDGm0oaNYLpyCsXD8ScSHcvgDIHgC84vHwiyhyqOD/DVlQ2tF7tdgJoZ/QSbcsYrn0mrJbGzNgsBDeD9GGFpX7bQQ=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1778060800; c=relaxed/simple;\n\tbh=XtUF2eKtKW8AOzxB9ISXRnkpWnzdAukR8vy6pBitEOg=;\n\th=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type;\n b=gZe+XDdWlmcVuVGSJKHpW1CYxf2/67dZXF+d4i/GcPMOyTZVLhnL/CFQrGHknHy+xJ1UotG8Fr6FW5+p4brJhUNKOrHK9fEk8M7DysMxBovxqoGn8RqzbjNm7828kotSVQCWQ6AKgsfC3YdVcZ/iRzYIJNxFDwthm2EC+Fm5JhQ=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=huawei.com;\n spf=pass smtp.mailfrom=huawei.com;\n dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com\n header.b=ri7LqG/R; arc=none smtp.client-ip=113.46.200.225","dkim-signature":"v=1; a=rsa-sha256; d=huawei.com; s=dkim;\n\tc=relaxed/relaxed; q=dns/txt;\n\th=From;\n\tbh=uGXfBVqNLlwn2+23G3UfKj56CiCuVUCu66CxrHn47a0=;\n\tb=ri7LqG/RlsVAfSWCMeHKhixgRHVtFpIm5pQ+oRrX7276sNIQHmear8nUDaDWChP0ypjUnlLHg\n\tfwrUoZ98GLwMifVCgmJuMbCWCPkbRcIi9gh6khN9O7urNtGcPBKFpxG+lEbqBK20x/7PC9/FyRw\n\tVa2C3hOIG0Lm9TOBWM/uceE=","From":"Chengwen Feng <fengchengwen@huawei.com>","To":"<alex@shazbot.org>, <jgg@ziepe.ca>","CC":"<wathsala.vithanage@arm.com>, <helgaas@kernel.org>, <wei.huang2@amd.com>,\n\t<wangzhou1@hisilicon.com>, <wangyushan12@huawei.com>,\n\t<liuyonglong@huawei.com>, <kvm@vger.kernel.org>, <linux-pci@vger.kernel.org>","Subject":"[PATCH v6 0/6] vfio/pci: Add PCIe TPH support","Date":"Wed, 6 May 2026 17:46:17 +0800","Message-ID":"<20260506094623.29327-1-fengchengwen@huawei.com>","X-Mailer":"git-send-email 2.17.1","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain","X-ClientProxiedBy":"kwepems500001.china.huawei.com (7.221.188.70) To\n kwepemk500009.china.huawei.com (7.202.194.94)"},"content":"This patchset enables userspace control over PCIe TPH steering tags,\nmotivated by the following considerations:\n\n1. Why userspace needs the capability to control steering tags:\n   When PCIe devices are fully owned by userspace workloads such as DPDK\n   and SPDK, only userspace has full knowledge of core binding policies\n   and traffic distribution strategies. Without this series, userspace\n   cannot enable TPH or configure steering tags, leaving built-in PCIe\n   performance optimizations unused in high-throughput polling I/O\n   scenarios.\n\n2. Why this interface must be implemented in VFIO:\n   VFIO is the standard, secure community solution for granting full\n   PCIe device ownership to userspace. Existing kernel TPH interfaces\n   are designed purely for in-kernel drivers. For user-owned devices,\n   VFIO provides the only isolated and correct path to expose per-device\n   TPH management.\n\nTPH supports both IV and DS modes. Since device-specific (DS) TPH mode\nintroduces cross-VM isolation risks such as untrusted guests programming\narbitrary steering tags to impact other domains, so a new module parameter\n`enable_unsafe_tph_ds_mode` is added. It defaults to off, and blocks all\nunsafe DS-mode TPH operations when disabled.\n\nTo restrict abuse of SET_ST and prevent arbitrary steering tag programming\nfrom userspace, the interface only accepts explicit CPU ID, memory type\nand index inputs. The kernel resolves the corresponding steering tag\ninternally before programming, limiting userspace to controlled,\nindex-based configuration.\n\nBased on earlier RFC work by Wathsala Vithanage\n\nv6:\n- Address Alex's comment on [1/6] commit.\n- Fix Sashiko review comments:\n  Add tph_cap validation for pcie_tph_get_st_modes/st_table_loc.\n  Add argsz validation for each op cmd.\n  Move disable tph from ioctl-reset to register.\n  Verify reserved field for get/set ST op.\n  Fix ABI mismatch due to pointer arithmetic of get/st ST op.\nv5:\n- Fix pcie_tph_get_st_table_loc() field extraction bug\n- Add disable TPH in vfio_pci_ioctl_reset() to clean software state\nv4:\n- Address Jason's comment of restrict device-specific mode under module\n  param control.\n- Rename module param to enable_unsafe_tph_ds_mode\nv3:\n- Add module param enable_unsafe_tph_ds to guard unsafe usage\n  of TPH device-specific mode with no ST table\nv2:\n- Export pcie_tph_get_st_modes()\n- Add detailed comment for UAPI structures and operations\n- Add batch entry limit VFIO_TPH_MAX_ENTRIES\n- Improve robustness and error handling\n\nChengwen Feng (6):\n  PCI/TPH: Fix pcie_tph_get_st_table_loc() field extraction\n  PCI/TPH: Export pcie_tph_get_st_modes() for external use\n  vfio/pci: Add PCIe TPH interface with capability query\n  vfio/pci: Add PCIe TPH enable/disable support\n  vfio/pci: Add PCIe TPH GET_ST interface\n  vfio/pci: Add PCIe TPH SET_ST interface\n\n drivers/pci/tph.c                |  26 +++-\n drivers/vfio/pci/vfio_pci.c      |  13 +-\n drivers/vfio/pci/vfio_pci_core.c | 257 ++++++++++++++++++++++++++++++-\n include/linux/pci-tph.h          |   7 +\n include/linux/vfio_pci_core.h    |   3 +-\n include/uapi/linux/vfio.h        | 131 ++++++++++++++++\n 6 files changed, 426 insertions(+), 11 deletions(-)"}