blob: 46e15e34da78cc1738c762546efa5795eee1e400 [file] [log] [blame] [edit]
From 132f082370706d00b74e99ebbb78342f7be200a0 Mon Sep 17 00:00:00 2001
From: Jinliang Wang <jinliangw@google.com>
Date: Tue, 18 Apr 2023 16:18:37 -0700
Subject: [PATCH 36/44] nvmesensor: set default timeout to 20 seconds for
Security Send and Receive
TCG commands (through Security Send and Receive) may take quite long to
complete. The default timeout 5 seconds in libnvme is not sufficent.
Here we increase the default timeout to 20 seconds.
Change-Id: Ie995ddc2ad05fb8371d036b1b70d9d49706a644f
Signed-off-by: Jinliang Wang <jinliangw@google.com>
---
src/NVMeMi.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/NVMeMi.cpp b/src/NVMeMi.cpp
index 2cdf1d6..6b93191 100644
--- a/src/NVMeMi.cpp
+++ b/src/NVMeMi.cpp
@@ -13,6 +13,7 @@ std::map<int, std::weak_ptr<NVMeMi::Worker>> NVMeMi::workerMap{};
nvme_root_t NVMeMi::nvmeRoot = nvme_mi_create_root(stderr, DEFAULT_LOGLEVEL);
constexpr size_t maxNVMeMILength = 4096;
+constexpr int tcgDefaultTimeoutMS = 20*1000;
NVMeMi::NVMeMi(boost::asio::io_context& io, sdbusplus::bus_t& dbus, int bus,
int addr, bool singleThreadMode) :
@@ -835,7 +836,11 @@ void NVMeMi::adminSecuritySend(
args.data_len = data.size_bytes();
args.args_size = sizeof(struct nvme_security_send_args);
+ unsigned timeout = nvme_mi_ep_get_timeout(self->nvmeEP);
+ nvme_mi_ep_set_timeout(self->nvmeEP, tcgDefaultTimeoutMS);
int status = nvme_mi_admin_security_send(ctrl, &args);
+ nvme_mi_ep_set_timeout(self->nvmeEP, timeout);
+
self->io.post([cb{std::move(cb)}, nvme_errno{errno}, status]() {
auto err = std::make_error_code(static_cast<std::errc>(nvme_errno));
cb(err, status);
@@ -875,7 +880,11 @@ void NVMeMi::adminSecurityReceive(
args.data_len = data.size();
args.args_size = sizeof(struct nvme_security_receive_args);
+ unsigned timeout = nvme_mi_ep_get_timeout(self->nvmeEP);
+ nvme_mi_ep_set_timeout(self->nvmeEP, tcgDefaultTimeoutMS);
int status = nvme_mi_admin_security_recv(ctrl, &args);
+ nvme_mi_ep_set_timeout(self->nvmeEP, timeout);
+
if (args.data_len > maxNVMeMILength)
{
std::cerr << "nvme_mi_admin_security_send returned excess data, "
--
2.34.1