From a976e15a7adea9bdca1acbcfbc57dc8b68f69c1a Mon Sep 17 00:00:00 2001 From: Charles R. Anderson Date: May 16 2017 23:31:22 +0000 Subject: Adjust nvme_ioctl.h patch for epel7 compatibility --- diff --git a/56.patch b/56.patch deleted file mode 100644 index 70ab6a3..0000000 --- a/56.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 5ca6100917a025f6e11ae20838e1e37e7db2d587 Mon Sep 17 00:00:00 2001 -From: JanLuca -Date: Mon, 30 May 2016 00:21:48 +0200 -Subject: [PATCH] Use nvme_ioctl.h for newer kernel versions #55 - -The header linux/nvme.h was replaced by linux/nvme_ioctl.h in kernel versions greater than 4.4: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9d99a8dda154 - -The needed structs and opcodes are copied into a new header file from nvme.h. - -See also: -https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a9cf8284b45110a4d98aea180a89c857e53bf850 -https://www.bountysource.com/issues/29775575-linux-nvme-h-has-been-renamed-in-linux-4-4 ---- - linux/DtaDevLinuxNvme.h | 8 ++- - linux/DtaDevLinuxNvmeStructsOpCodes.h | 95 +++++++++++++++++++++++++++++++++++ - 2 files changed, 102 insertions(+), 1 deletion(-) - create mode 100755 linux/DtaDevLinuxNvmeStructsOpCodes.h - -diff --git a/linux/DtaDevLinuxNvme.h b/linux/DtaDevLinuxNvme.h -index cc55761..7a67385 100755 ---- a/linux/DtaDevLinuxNvme.h -+++ b/linux/DtaDevLinuxNvme.h -@@ -18,7 +18,13 @@ along with sedutil. If not, see . - - * C:E********************************************************************** */ - #pragma once --#include "linux/nvme.h" -+#include -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) -+#include -+#include "DtaDevLinuxNvmeStructsOpCodes.h" -+#else -+#include -+#endif - #include "DtaStructures.h" - #include "DtaDevLinuxDrive.h" - -diff --git a/linux/DtaDevLinuxNvmeStructsOpCodes.h b/linux/DtaDevLinuxNvmeStructsOpCodes.h -new file mode 100755 -index 0000000..b781949 ---- /dev/null -+++ b/linux/DtaDevLinuxNvmeStructsOpCodes.h -@@ -0,0 +1,95 @@ -+/* -+ * Definitions for the NVM Express interface -+ * Copyright (c) 2011-2014, Intel Corporation. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms and conditions of the GNU General Public License, -+ * version 2, as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ */ -+#pragma once -+ -+enum nvme_admin_opcode { -+ nvme_admin_delete_sq = 0x00, -+ nvme_admin_create_sq = 0x01, -+ nvme_admin_get_log_page = 0x02, -+ nvme_admin_delete_cq = 0x04, -+ nvme_admin_create_cq = 0x05, -+ nvme_admin_identify = 0x06, -+ nvme_admin_abort_cmd = 0x08, -+ nvme_admin_set_features = 0x09, -+ nvme_admin_get_features = 0x0a, -+ nvme_admin_async_event = 0x0c, -+ nvme_admin_activate_fw = 0x10, -+ nvme_admin_download_fw = 0x11, -+ nvme_admin_format_nvm = 0x80, -+ nvme_admin_security_send = 0x81, -+ nvme_admin_security_recv = 0x82, -+}; -+ -+struct nvme_id_power_state { -+ __le16 max_power; /* centiwatts */ -+ __u8 rsvd2; -+ __u8 flags; -+ __le32 entry_lat; /* microseconds */ -+ __le32 exit_lat; /* microseconds */ -+ __u8 read_tput; -+ __u8 read_lat; -+ __u8 write_tput; -+ __u8 write_lat; -+ __le16 idle_power; -+ __u8 idle_scale; -+ __u8 rsvd19; -+ __le16 active_power; -+ __u8 active_work_scale; -+ __u8 rsvd23[9]; -+}; -+ -+struct nvme_id_ctrl { -+ __le16 vid; -+ __le16 ssvid; -+ char sn[20]; -+ char mn[40]; -+ char fr[8]; -+ __u8 rab; -+ __u8 ieee[3]; -+ __u8 mic; -+ __u8 mdts; -+ __le16 cntlid; -+ __le32 ver; -+ __u8 rsvd84[172]; -+ __le16 oacs; -+ __u8 acl; -+ __u8 aerl; -+ __u8 frmw; -+ __u8 lpa; -+ __u8 elpe; -+ __u8 npss; -+ __u8 avscc; -+ __u8 apsta; -+ __le16 wctemp; -+ __le16 cctemp; -+ __u8 rsvd270[242]; -+ __u8 sqes; -+ __u8 cqes; -+ __u8 rsvd514[2]; -+ __le32 nn; -+ __le16 oncs; -+ __le16 fuses; -+ __u8 fna; -+ __u8 vwc; -+ __le16 awun; -+ __le16 awupf; -+ __u8 nvscc; -+ __u8 rsvd531; -+ __le16 acwu; -+ __u8 rsvd534[2]; -+ __le32 sgls; -+ __u8 rsvd540[1508]; -+ struct nvme_id_power_state psd[32]; -+ __u8 vs[1024]; -+}; diff --git a/sedutil-1.12-nvme_ioctl.patch b/sedutil-1.12-nvme_ioctl.patch new file mode 100644 index 0000000..b16d905 --- /dev/null +++ b/sedutil-1.12-nvme_ioctl.patch @@ -0,0 +1,143 @@ +From: Charles R. Anderson +Date: Tue, 16 May 2016 18:55 -0400 + +Remove LINUX_VERSION_CODE > 4.4.0 check to support older kernels that use the newer nvme_ioctl.h + +From 5ca6100917a025f6e11ae20838e1e37e7db2d587 Mon Sep 17 00:00:00 2001 +From: JanLuca +Date: Mon, 30 May 2016 00:21:48 +0200 +Subject: [PATCH] Use nvme_ioctl.h for newer kernel versions #55 + +The header linux/nvme.h was replaced by linux/nvme_ioctl.h in kernel versions greater than 4.4: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9d99a8dda154 + +The needed structs and opcodes are copied into a new header file from nvme.h. + +See also: +https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a9cf8284b45110a4d98aea180a89c857e53bf850 +https://www.bountysource.com/issues/29775575-linux-nvme-h-has-been-renamed-in-linux-4-4 +--- + linux/DtaDevLinuxNvme.h | 8 ++- + linux/DtaDevLinuxNvmeStructsOpCodes.h | 95 +++++++++++++++++++++++++++++++++++ + 2 files changed, 102 insertions(+), 1 deletion(-) + create mode 100755 linux/DtaDevLinuxNvmeStructsOpCodes.h + +diff --git a/linux/DtaDevLinuxNvme.h b/linux/DtaDevLinuxNvme.h +index cc55761..7a67385 100755 +--- a/linux/DtaDevLinuxNvme.h ++++ b/linux/DtaDevLinuxNvme.h +@@ -18,7 +18,13 @@ along with sedutil. If not, see . + + * C:E********************************************************************** */ + #pragma once +-#include "linux/nvme.h" ++#include ++#if 1 || (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) ++#include ++#include "DtaDevLinuxNvmeStructsOpCodes.h" ++#else ++#include ++#endif + #include "DtaStructures.h" + #include "DtaDevLinuxDrive.h" + +diff --git a/linux/DtaDevLinuxNvmeStructsOpCodes.h b/linux/DtaDevLinuxNvmeStructsOpCodes.h +new file mode 100755 +index 0000000..b781949 +--- /dev/null ++++ b/linux/DtaDevLinuxNvmeStructsOpCodes.h +@@ -0,0 +1,95 @@ ++/* ++ * Definitions for the NVM Express interface ++ * Copyright (c) 2011-2014, Intel Corporation. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms and conditions of the GNU General Public License, ++ * version 2, as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ */ ++#pragma once ++ ++enum nvme_admin_opcode { ++ nvme_admin_delete_sq = 0x00, ++ nvme_admin_create_sq = 0x01, ++ nvme_admin_get_log_page = 0x02, ++ nvme_admin_delete_cq = 0x04, ++ nvme_admin_create_cq = 0x05, ++ nvme_admin_identify = 0x06, ++ nvme_admin_abort_cmd = 0x08, ++ nvme_admin_set_features = 0x09, ++ nvme_admin_get_features = 0x0a, ++ nvme_admin_async_event = 0x0c, ++ nvme_admin_activate_fw = 0x10, ++ nvme_admin_download_fw = 0x11, ++ nvme_admin_format_nvm = 0x80, ++ nvme_admin_security_send = 0x81, ++ nvme_admin_security_recv = 0x82, ++}; ++ ++struct nvme_id_power_state { ++ __le16 max_power; /* centiwatts */ ++ __u8 rsvd2; ++ __u8 flags; ++ __le32 entry_lat; /* microseconds */ ++ __le32 exit_lat; /* microseconds */ ++ __u8 read_tput; ++ __u8 read_lat; ++ __u8 write_tput; ++ __u8 write_lat; ++ __le16 idle_power; ++ __u8 idle_scale; ++ __u8 rsvd19; ++ __le16 active_power; ++ __u8 active_work_scale; ++ __u8 rsvd23[9]; ++}; ++ ++struct nvme_id_ctrl { ++ __le16 vid; ++ __le16 ssvid; ++ char sn[20]; ++ char mn[40]; ++ char fr[8]; ++ __u8 rab; ++ __u8 ieee[3]; ++ __u8 mic; ++ __u8 mdts; ++ __le16 cntlid; ++ __le32 ver; ++ __u8 rsvd84[172]; ++ __le16 oacs; ++ __u8 acl; ++ __u8 aerl; ++ __u8 frmw; ++ __u8 lpa; ++ __u8 elpe; ++ __u8 npss; ++ __u8 avscc; ++ __u8 apsta; ++ __le16 wctemp; ++ __le16 cctemp; ++ __u8 rsvd270[242]; ++ __u8 sqes; ++ __u8 cqes; ++ __u8 rsvd514[2]; ++ __le32 nn; ++ __le16 oncs; ++ __le16 fuses; ++ __u8 fna; ++ __u8 vwc; ++ __le16 awun; ++ __le16 awupf; ++ __u8 nvscc; ++ __u8 rsvd531; ++ __le16 acwu; ++ __u8 rsvd534[2]; ++ __le32 sgls; ++ __u8 rsvd540[1508]; ++ struct nvme_id_power_state psd[32]; ++ __u8 vs[1024]; ++}; diff --git a/sedutil.spec b/sedutil.spec index 7c84af7..b12d541 100644 --- a/sedutil.spec +++ b/sedutil.spec @@ -4,7 +4,7 @@ Name: sedutil Version: %{gittag0} -Release: 3%{?dist} +Release: 4%{?dist} Summary: Tools to manage the activation and use of self encrypting drives # Everything is GPLv3+ except: @@ -23,7 +23,9 @@ Source0: https://github.com/Drive-Trust-Alliance/%{name}/archive/%{gittag0}/%{na # ./dist/Release_x86_64/GNU-Linux/sedutil-cli # Cleaned up with manual edits: Source1: sedutil-cli.8 -Patch0: https://github.com/Drive-Trust-Alliance/sedutil/pull/56.patch +# Modified version of https://github.com/Drive-Trust-Alliance/sedutil/pull/56.patch +# to use linux/nvme_ioctl.h regardless of kernel version number +Patch0: sedutil-1.12-nvme_ioctl.patch # sedutil does not work on big-endian architectures ExcludeArch: ppc ppc64 s390 s390x @@ -96,6 +98,9 @@ install -p -m755 LinuxPBA/dist/Release/GNU-Linux/linuxpba $RPM_BUILD_ROOT%{_libe %changelog +* Tue May 16 2017 Charles R. Anderson - 1.12-4 +- Update patch for epel7 build with older kernel version numbering + * Tue May 9 2017 Charles R. Anderson - 1.12-3 - Remove commented out macros - Clarify multiple licensing scenario