From 4baae265cadb2f87d4b97bd7f9080ae954dd435c Mon Sep 17 00:00:00 2001 From: Dariusz Stojaczyk Date: Tue, 14 Aug 2018 09:59:32 +0200 Subject: [PATCH] dpdk/pci: support DPDK 18.08 write combined PCI resources We used to support it by default in our DPDK forks, but starting with DPDK 18.08, a new PCI driver flag RTE_PCI_DRV_WC_ACTIVATE is required. We enable now it for NVMe and Virtio, but not for I/OAT, as our I/OAT driver currently assumes strong memory ordering, which prefetchable resources do not provide. Change-Id: I1a13356e28535981153b3d3e52bfe9d66b6172ae Signed-off-by: Dariusz Stojaczyk Reviewed-on: https://review.gerrithub.io/422588 Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu Reviewed-by: Reviewed-by: Shuhei Matsumoto Tested-by: Jim Harris --- lib/env_dpdk/pci_nvme.c | 6 +++++- lib/env_dpdk/pci_virtio.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/env_dpdk/pci_nvme.c b/lib/env_dpdk/pci_nvme.c index 93a341eda..4f3b84d1f 100644 --- a/lib/env_dpdk/pci_nvme.c +++ b/lib/env_dpdk/pci_nvme.c @@ -52,7 +52,11 @@ static struct rte_pci_id nvme_pci_driver_id[] = { static struct spdk_pci_enum_ctx g_nvme_pci_drv = { .driver = { - .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .drv_flags = RTE_PCI_DRV_NEED_MAPPING +#if RTE_VERSION >= RTE_VERSION_NUM(18, 8, 0, 0) + | RTE_PCI_DRV_WC_ACTIVATE +#endif + , .id_table = nvme_pci_driver_id, #if RTE_VERSION >= RTE_VERSION_NUM(16, 11, 0, 0) .probe = spdk_pci_device_init, diff --git a/lib/env_dpdk/pci_virtio.c b/lib/env_dpdk/pci_virtio.c index e65f0750a..1fcb80d78 100644 --- a/lib/env_dpdk/pci_virtio.c +++ b/lib/env_dpdk/pci_virtio.c @@ -43,7 +43,11 @@ static struct rte_pci_id virtio_pci_driver_id[] = { static struct spdk_pci_enum_ctx g_virtio_pci_drv = { .driver = { - .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .drv_flags = RTE_PCI_DRV_NEED_MAPPING +#if RTE_VERSION >= RTE_VERSION_NUM(18, 8, 0, 0) + | RTE_PCI_DRV_WC_ACTIVATE +#endif + , .id_table = virtio_pci_driver_id, #if RTE_VERSION >= RTE_VERSION_NUM(16, 11, 0, 0) .probe = spdk_pci_device_init,