From 5a8e5215cef0dac1115853889e925099f61bb5fa Mon Sep 17 00:00:00 2001 From: Hareshx Sankar Raj Date: Tue, 29 Apr 2025 20:00:01 -0400 Subject: [PATCH] qat: add disable safe dc mode for QAT SPR devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Build and sysctl configuration modes are introduced for QAT SPR devices to disable safe dc mode. A new QAT driver build option ‘QAT_DISABLE_SAFE_DC_MODE’ is required to build the QAT driver with code that allows a request to be sent to FW to override the ‘History Buffer’ mitigation. Default QAT driver builds do not include this ‘QAT_DISABLE_SAFE_DC_MODE’ build option. Even if the QAT driver was built with code that allows a request to be sent to FW to override the ‘History Buffer’ mitigation, the QAT driver must still be configured using sysctl to request an override of the ‘History Buffer’ mitigation if desired. The default QAT driver configuration option sysctl dev.qat.X.disable_safe_dc_mode does not allow override of the mitigation. The new sysctl attribute disable_safe_dc_mode is to be set to 1 for overriding the history buffer mitigation. Firmware for qat_4xxx is updated for this change. If this mode is enabled, decompression throughput increases but may result in a data leak if num_user_processes is more than 1. This option is to be enabled only if your system is not prone to user data leaks. Reviewed by: markj, ziaee MFC after: 2 weeks Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D50379 --- share/man/man4/qat.4 | 11 ++- sys/conf/NOTES | 3 + sys/conf/options | 3 + sys/contrib/dev/qat/qat_4xxx.bin | Bin 665356 -> 665356 bytes .../qat/include/common/adf_accel_devices.h | 8 +- sys/dev/qat/include/icp_qat_fw_init_admin.h | 7 +- .../qat/qat_hw/qat_4xxx/adf_4xxx_hw_data.c | 4 + sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c | 75 ++++++++++++++++++ sys/modules/qat/qat/Makefile | 13 ++- sys/modules/qat/qat_api/Makefile | 13 ++- sys/modules/qat/qat_common/Makefile | 13 ++- sys/modules/qat/qat_hw/Makefile | 13 ++- 12 files changed, 154 insertions(+), 9 deletions(-) diff --git a/share/man/man4/qat.4 b/share/man/man4/qat.4 index e7907c7c633..613091df2e7 100644 --- a/share/man/man4/qat.4 +++ b/share/man/man4/qat.4 @@ -1,6 +1,6 @@ .\" SPDX-License-Identifier: BSD-3-Clause -.\" Copyright(c) 2007-2022 Intel Corporation -.Dd May 16, 2025 +.\" Copyright(c) 2007-2025 Intel Corporation +.Dd June 2, 2025 .Dt QAT 4 .Os .Sh NAME @@ -108,6 +108,13 @@ Default value "ks;us". Override the number of uio user space processes that can connect to the QAT device. Default: 2 +.It Va dev.qat.X.disable_safe_dc_mode +Override history buffer mitigation. +Disabled by default. +If enabled, decompression throughput increases but may result in a data leak if +.Va dev.qat.X.num_user_processes +is more than 1. +Enable this option only if your system is not prone to user data leaks. .El .Pp The following diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 8aa0ed9dda7..2458756ae35 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -2869,3 +2869,6 @@ options STATS # File system monitoring device filemon # file monitoring for make(1) meta-mode + +# Options for the Intel QuickAssist (QAT) driver. +options QAT_DISABLE_SAFE_DC_MODE # Disable QAT safe data compression mode (only for 4940 devices). diff --git a/sys/conf/options b/sys/conf/options index b218226b412..03e8964e965 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -1014,3 +1014,6 @@ HIDRAW_MAKE_UHID_ALIAS opt_hid.h # This option is insecure except in controlled environments where the static # environment's contents are known to be safe. PRESERVE_EARLY_KENV opt_global.h + +# Options for the Intel QuickAssist (QAT) driver. +QAT_DISABLE_SAFE_DC_MODE opt_qat.h diff --git a/sys/contrib/dev/qat/qat_4xxx.bin b/sys/contrib/dev/qat/qat_4xxx.bin index 23eb8077241a4c4b338e6a8be5e4a46cbe43ac84..7783d361a93cedba410590a22cc964526b73b1b3 100644 GIT binary patch delta 26525 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%0AEo22T70 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 WxVf)Jub31afd2!FCq)Mx;Qk+08X>#@ diff --git a/sys/dev/qat/include/common/adf_accel_devices.h b/sys/dev/qat/include/common/adf_accel_devices.h index 0a1248b9a68..3731cf6587b 100644 --- a/sys/dev/qat/include/common/adf_accel_devices.h +++ b/sys/dev/qat/include/common/adf_accel_devices.h @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause */ -/* Copyright(c) 2007-2022 Intel Corporation */ +/* Copyright(c) 2007-2025 Intel Corporation */ #ifndef ADF_ACCEL_DEVICES_H_ #define ADF_ACCEL_DEVICES_H_ @@ -7,6 +7,8 @@ #include "adf_cfg_common.h" #include "adf_pfvf_msg.h" +#include "opt_qat.h" + #define ADF_CFG_NUM_SERVICES 4 #define ADF_DH895XCC_DEVICE_NAME "dh895xcc" @@ -687,6 +689,10 @@ struct adf_accel_dev { struct adf_accel_pci accel_pci_dev; struct adf_accel_compat_manager *cm; u8 compat_ver; +#ifdef QAT_DISABLE_SAFE_DC_MODE + struct sysctl_oid *safe_dc_mode; + u8 disable_safe_dc_mode; +#endif /* QAT_DISABLE_SAFE_DC_MODE */ union { struct { /* vf_info is non-zero when SR-IOV is init'ed */ diff --git a/sys/dev/qat/include/icp_qat_fw_init_admin.h b/sys/dev/qat/include/icp_qat_fw_init_admin.h index 3537fb3f8cf..cd4edbdbc93 100644 --- a/sys/dev/qat/include/icp_qat_fw_init_admin.h +++ b/sys/dev/qat/include/icp_qat_fw_init_admin.h @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause */ -/* Copyright(c) 2007-2022 Intel Corporation */ +/* Copyright(c) 2007-2025 Intel Corporation */ #ifndef _ICP_QAT_FW_INIT_ADMIN_H_ #define _ICP_QAT_FW_INIT_ADMIN_H_ @@ -43,6 +43,8 @@ enum icp_qat_fw_cnv_error_type { CNV_ERR_TYPE_UNKNOWN_ERROR }; +#define ICP_QAT_FW_INIT_DISABLE_SAFE_DC_MODE_FLAG 0x02 + #define CNV_ERROR_TYPE_GET(latest_error) \ ({ \ __typeof__(latest_error) _lerror = latest_error; \ @@ -69,7 +71,8 @@ struct icp_qat_fw_init_admin_req { struct { u64 resrvd2; u16 ibuf_size_in_kb; - u16 resrvd3; + u8 fw_flags; + u8 resrvd3; u32 resrvd4; }; /* ICP_QAT_FW_CONSTANTS_CFG */ diff --git a/sys/dev/qat/qat_hw/qat_4xxx/adf_4xxx_hw_data.c b/sys/dev/qat/qat_hw/qat_4xxx/adf_4xxx_hw_data.c index 3326d7cb4ff..43e530c3a6f 100644 --- a/sys/dev/qat/qat_hw/qat_4xxx/adf_4xxx_hw_data.c +++ b/sys/dev/qat/qat_hw/qat_4xxx/adf_4xxx_hw_data.c @@ -709,6 +709,10 @@ adf_4xxx_send_admin_init(struct adf_accel_dev *accel_dev) memset(&req, 0, sizeof(req)); memset(&resp, 0, sizeof(resp)); req.cmd_id = ICP_QAT_FW_INIT_ME; +#ifdef QAT_DISABLE_SAFE_DC_MODE + if (accel_dev->disable_safe_dc_mode) + req.fw_flags = ICP_QAT_FW_INIT_DISABLE_SAFE_DC_MODE_FLAG; +#endif /* QAT_DISABLE_SAFE_DC_MODE */ if (adf_send_admin(accel_dev, &req, &resp, ae_mask)) { device_printf(GET_DEV(accel_dev), "Error sending init message\n"); diff --git a/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c b/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c index f4a673e25a4..9b585fe7d3d 100644 --- a/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c @@ -47,6 +47,74 @@ adf_probe(device_t dev) return ENXIO; } +#ifdef QAT_DISABLE_SAFE_DC_MODE +static int adf_4xxx_sysctl_disable_safe_dc_mode(SYSCTL_HANDLER_ARGS) +{ + struct adf_accel_dev *accel_dev = arg1; + int error, value = accel_dev->disable_safe_dc_mode; + + error = sysctl_handle_int(oidp, &value, 0, req); + if (error || !req->newptr) + return error; + + if (value != 1 && value != 0) + return EINVAL; + + if (adf_dev_started(accel_dev)) { + device_printf( + GET_DEV(accel_dev), + "QAT: configuration can only be changed in \"down\" device state\n"); + return EBUSY; + } + + accel_dev->disable_safe_dc_mode = (u8)value; + + return 0; +} + +static void +adf_4xxx_disable_safe_dc_sysctl_add(struct adf_accel_dev *accel_dev) +{ + struct sysctl_ctx_list *qat_sysctl_ctx; + struct sysctl_oid *qat_sysctl_tree; + + qat_sysctl_ctx = + device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev); + qat_sysctl_tree = + device_get_sysctl_tree(accel_dev->accel_pci_dev.pci_dev); + accel_dev->safe_dc_mode = + SYSCTL_ADD_OID(qat_sysctl_ctx, + SYSCTL_CHILDREN(qat_sysctl_tree), + OID_AUTO, + "disable_safe_dc_mode", + CTLTYPE_INT | CTLFLAG_WR | CTLFLAG_TUN | + CTLFLAG_SKIP, + accel_dev, + 0, + adf_4xxx_sysctl_disable_safe_dc_mode, + "LU", + "Disable QAT safe data compression mode"); +} + +static void +adf_4xxx_disable_safe_dc_sysctl_remove(struct adf_accel_dev *accel_dev) +{ + int ret; + struct sysctl_ctx_list *qat_sysctl_ctx = + device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev); + + ret = sysctl_ctx_entry_del(qat_sysctl_ctx, accel_dev->safe_dc_mode); + if (ret) { + device_printf(GET_DEV(accel_dev), "Failed to delete entry\n"); + } else { + ret = sysctl_remove_oid(accel_dev->safe_dc_mode, 1, 1); + if (ret) + device_printf(GET_DEV(accel_dev), + "Failed to delete oid\n"); + } +} +#endif /* QAT_DISABLE_SAFE_DC_MODE */ + static void adf_cleanup_accel(struct adf_accel_dev *accel_dev) { @@ -76,6 +144,9 @@ adf_cleanup_accel(struct adf_accel_dev *accel_dev) free(accel_dev->hw_device, M_QAT_4XXX); accel_dev->hw_device = NULL; } +#ifdef QAT_DISABLE_SAFE_DC_MODE + adf_4xxx_disable_safe_dc_sysctl_remove(accel_dev); +#endif /* QAT_DISABLE_SAFE_DC_MODE */ adf_cfg_dev_remove(accel_dev); adf_devmgr_rm_dev(accel_dev, NULL); } @@ -153,6 +224,10 @@ adf_attach(device_t dev) if (ret) goto out_err; +#ifdef QAT_DISABLE_SAFE_DC_MODE + adf_4xxx_disable_safe_dc_sysctl_add(accel_dev); +#endif /* QAT_DISABLE_SAFE_DC_MODE */ + pci_set_max_read_req(dev, 4096); ret = bus_dma_tag_create(bus_get_dma_tag(dev), diff --git a/sys/modules/qat/qat/Makefile b/sys/modules/qat/qat/Makefile index 14f3a566063..cee1ee8fb1b 100644 --- a/sys/modules/qat/qat/Makefile +++ b/sys/modules/qat/qat/Makefile @@ -4,7 +4,7 @@ KMOD= qat SRCS+= qat_ocf.c qat_ocf_mem_pool.c qat_ocf_utils.c -SRCS+= device_if.h bus_if.h vnode_if.h pci_if.h cryptodev_if.h +SRCS+= device_if.h bus_if.h vnode_if.h pci_if.h cryptodev_if.h opt_qat.h CFLAGS+= ${LINUXKPI_INCLUDES} CFLAGS+= -I${SRCTOP}/sys/dev/qat/include @@ -17,6 +17,17 @@ CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/qat_direct/include CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/firmware/include CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/common/crypto/sym/include +.if !defined(KERNBUILDDIR) +CFLAGS+= -include opt_qat.h +MKDEP= -include opt_qat.h + +opt_qat.h: + :> ${.TARGET} +.if defined(QAT_DISABLE_SAFE_DC_MODE) && ${QAT_DISABLE_SAFE_DC_MODE} == "1" + @echo "#define QAT_DISABLE_SAFE_DC_MODE 1" >> ${.TARGET} +.endif +.endif + .include .if ${COMPILER_TYPE} == "clang" diff --git a/sys/modules/qat/qat_api/Makefile b/sys/modules/qat/qat_api/Makefile index f30d49cd826..24fbcb46a98 100644 --- a/sys/modules/qat/qat_api/Makefile +++ b/sys/modules/qat/qat_api/Makefile @@ -60,7 +60,7 @@ SRCS+= qat_utils/src/QatUtilsSemaphore.c SRCS+= qat_utils/src/QatUtilsSpinLock.c SRCS+= qat_utils/src/QatUtilsAtomic.c SRCS+= qat_utils/src/QatUtilsCrypto.c -SRCS+= bus_if.h cryptodev_if.h device_if.h pci_if.h vnode_if.h +SRCS+= bus_if.h cryptodev_if.h device_if.h pci_if.h vnode_if.h opt_qat.h CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/include CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/include/lac @@ -74,6 +74,17 @@ CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/firmware/include CFLAGS+= -I${SRCTOP}/sys/dev/qat/include/common CFLAGS+= ${LINUXKPI_INCLUDES} +.if !defined(KERNBUILDDIR) +CFLAGS+= -include opt_qat.h +MKDEP= -include opt_qat.h + +opt_qat.h: + :> ${.TARGET} +.if defined(QAT_DISABLE_SAFE_DC_MODE) && ${QAT_DISABLE_SAFE_DC_MODE} == "1" + @echo "#define QAT_DISABLE_SAFE_DC_MODE 1" >> ${.TARGET} +.endif +.endif + .include CWARNFLAGS+= -Wno-cast-qual diff --git a/sys/modules/qat/qat_common/Makefile b/sys/modules/qat/qat_common/Makefile index b0f847ae9a9..c2131cc1e24 100644 --- a/sys/modules/qat/qat_common/Makefile +++ b/sys/modules/qat/qat_common/Makefile @@ -23,10 +23,21 @@ SRCS+= adf_gen4vf_hw_csr_data.c SRCS+= adf_freebsd_transport_debug.c adf_clock.c SRCS+= adf_freebsd_cnvnr_ctrs_dbg.c SRCS+= adf_freebsd_pfvf_ctrs_dbg.c -SRCS+= bus_if.h device_if.h pci_if.h vnode_if.h +SRCS+= bus_if.h device_if.h pci_if.h vnode_if.h opt_qat.h CFLAGS+= -I${SRCTOP}/sys/dev/qat/include CFLAGS+= -I${SRCTOP}/sys/dev/qat/include/common CFLAGS+= ${LINUXKPI_INCLUDES} +.if !defined(KERNBUILDDIR) +CFLAGS+= -include opt_qat.h +MKDEP= -include opt_qat.h + +opt_qat.h: + :> ${.TARGET} +.if defined(QAT_DISABLE_SAFE_DC_MODE) && ${QAT_DISABLE_SAFE_DC_MODE} == "1" + @echo "#define QAT_DISABLE_SAFE_DC_MODE 1" >> ${.TARGET} +.endif +.endif + .include diff --git a/sys/modules/qat/qat_hw/Makefile b/sys/modules/qat/qat_hw/Makefile index 2a51640bd32..4ab8db5f0c5 100644 --- a/sys/modules/qat/qat_hw/Makefile +++ b/sys/modules/qat/qat_hw/Makefile @@ -12,7 +12,7 @@ SRCS+= qat_dh895xcc/adf_dh895xcc_hw_data.c qat_dh895xcc/adf_drv.c SRCS+= qat_c4xxx/adf_c4xxx_hw_data.c qat_c4xxx/adf_drv.c qat_c4xxx/adf_c4xxx_ae_config.c qat_c4xxx/adf_c4xxx_misc_error_stats.c SRCS+= qat_c4xxx/adf_c4xxx_pke_replay_stats.c qat_c4xxx/adf_c4xxx_ras.c qat_c4xxx/adf_c4xxx_res_part.c SRCS+= qat_c4xxx/adf_c4xxx_reset.c -SRCS+= device_if.h bus_if.h vnode_if.h pci_if.h cryptodev_if.h +SRCS+= device_if.h bus_if.h vnode_if.h pci_if.h cryptodev_if.h opt_qat.h CFLAGS+= ${LINUXKPI_INCLUDES} CFLAGS+= -I${SRCTOP}/sys/dev/qat/include @@ -25,4 +25,15 @@ CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/qat_direct/include CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/firmware/include CFLAGS+= -I${SRCTOP}/sys/dev/qat/qat_api/common/crypto/sym/include +.if !defined(KERNBUILDDIR) +CFLAGS+= -include opt_qat.h +MKDEP= -include opt_qat.h + +opt_qat.h: + :> ${.TARGET} +.if defined(QAT_DISABLE_SAFE_DC_MODE) && ${QAT_DISABLE_SAFE_DC_MODE} == "1" + @echo "#define QAT_DISABLE_SAFE_DC_MODE 1" >> ${.TARGET} +.endif +.endif + .include