Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

scsi: use __u{8,16,32,64} instead of uint{8,16,32,64}_t in uapi headers

When CONFIG_UAPI_HEADER_TEST=y, exported headers are compile-tested to make
sure they can be included from user-space.

Currently, scsi_bsg_fc.h, scsi_netlink.h, and scsi_netlink_fc.h are
excluded from the test coverage. To make them join the compile-test, we
need to fix the build errors attached below.

For a case like this, we decided to use __u{8,16,32,64} variable types in
this discussion:

https://lkml.org/lkml/2019/6/5/18

Build log:

CC usr/include/scsi/scsi_netlink_fc.h.s
CC usr/include/scsi/scsi_netlink.h.s
CC usr/include/scsi/scsi_bsg_fc.h.s
In file included from ./usr/include/scsi/scsi_netlink_fc.h:10:0,
from <command-line>:32:
./usr/include/scsi/scsi_netlink.h:29:2: error: unknown type name uint8_t
uint8_t version;
^~~~~~~
./usr/include/scsi/scsi_netlink.h:30:2: error: unknown type name uint8_t
uint8_t transport;
^~~~~~~
./usr/include/scsi/scsi_netlink.h:31:2: error: unknown type name uint16_t
uint16_t magic;
^~~~~~~~
./usr/include/scsi/scsi_netlink.h:32:2: error: unknown type name uint16_t
uint16_t msgtype;
^~~~~~~~
CC usr/include/rdma/vmw_pvrdma-abi.h.s
./usr/include/scsi/scsi_netlink.h:33:2: error: unknown type name uint16_t
uint16_t msglen;
^~~~~~~~
./usr/include/scsi/scsi_netlink.h:34:33: error: uint64_t undeclared here (not in a function); did you mean __uint128_t ?
} __attribute__((aligned(sizeof(uint64_t))));
^~~~~~~~
__uint128_t
./usr/include/scsi/scsi_netlink.h:78:2: error: expected specifier-qualifier-list before uint64_t
uint64_t vendor_id;
^~~~~~~~
In file included from <command-line>:32:0:
./usr/include/scsi/scsi_netlink_fc.h:46:2: error: expected specifier-qualifier-list before uint64_t
uint64_t seconds;
^~~~~~~~
make[2]: *** [scripts/Makefile.build;302: usr/include/scsi/scsi_netlink_fc.h.s] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from <command-line>:32:0:
./usr/include/scsi/scsi_netlink.h:29:2: error: unknown type name uint8_t
uint8_t version;
^~~~~~~
./usr/include/scsi/scsi_netlink.h:30:2: error: unknown type name uint8_t
uint8_t transport;
^~~~~~~
./usr/include/scsi/scsi_netlink.h:31:2: error: unknown type name uint16_t
uint16_t magic;
^~~~~~~~
./usr/include/scsi/scsi_netlink.h:32:2: error: unknown type name uint16_t
uint16_t msgtype;
^~~~~~~~
./usr/include/scsi/scsi_netlink.h:33:2: error: unknown type name uint16_t
uint16_t msglen;
^~~~~~~~
./usr/include/scsi/scsi_netlink.h:34:33: error: uint64_t undeclared here (not in a function); did you mean __uint128_t ?
} __attribute__((aligned(sizeof(uint64_t))));
^~~~~~~~
__uint128_t
./usr/include/scsi/scsi_netlink.h:78:2: error: expected specifier-qualifier-list before uint64_t
uint64_t vendor_id;
^~~~~~~~
make[2]: *** [scripts/Makefile.build;302: usr/include/scsi/scsi_netlink.h.s] Error 1
In file included from <command-line>:32:0:
./usr/include/scsi/scsi_bsg_fc.h:69:2: error: unknown type name uint8_t
uint8_t reserved;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:72:2: error: unknown type name uint8_t
uint8_t port_id[3];
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:90:2: error: unknown type name uint8_t
uint8_t reserved;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:93:2: error: unknown type name uint8_t
uint8_t port_id[3];
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:114:2: error: unknown type name uint8_t
uint8_t command_code;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:117:2: error: unknown type name uint8_t
uint8_t port_id[3];
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:154:2: error: unknown type name uint32_t
uint32_t status; /* See FC_CTELS_STATUS_xxx */
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:158:3: error: unknown type name uint8_t
uint8_t action; /* fragment_id for CT REJECT */
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:159:3: error: unknown type name uint8_t
uint8_t reason_code;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:160:3: error: unknown type name uint8_t
uint8_t reason_explanation;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:161:3: error: unknown type name uint8_t
uint8_t vendor_unique;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:177:2: error: unknown type name uint8_t
uint8_t reserved;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:180:2: error: unknown type name uint8_t
uint8_t port_id[3];
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:185:2: error: unknown type name uint32_t
uint32_t preamble_word0; /* revision & IN_ID */
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:186:2: error: unknown type name uint32_t
uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:187:2: error: unknown type name uint32_t
uint32_t preamble_word2; /* Cmd Code, Max Size */
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:207:2: error: unknown type name uint64_t
uint64_t vendor_id;
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:210:2: error: unknown type name uint32_t
uint32_t vendor_cmd[0];
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:217:2: error: unknown type name uint32_t
uint32_t vendor_rsp[0];
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:236:2: error: unknown type name uint8_t
uint8_t els_code;
^~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:254:2: error: unknown type name uint32_t
uint32_t preamble_word0; /* revision & IN_ID */
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:255:2: error: unknown type name uint32_t
uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:256:2: error: unknown type name uint32_t
uint32_t preamble_word2; /* Cmd Code, Max Size */
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:268:2: error: unknown type name uint32_t
uint32_t msgcode;
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:292:2: error: unknown type name uint32_t
uint32_t result;
^~~~~~~~
./usr/include/scsi/scsi_bsg_fc.h:295:2: error: unknown type name uint32_t
uint32_t reply_payload_rcv_len;
^~~~~~~~

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

authored by

Masahiro Yamada and committed by
Martin K. Petersen
075c2b6b 2b4f4cb9

+47 -44
+28 -26
include/uapi/scsi/scsi_bsg_fc.h
··· 8 8 #ifndef SCSI_BSG_FC_H 9 9 #define SCSI_BSG_FC_H 10 10 11 + #include <linux/types.h> 12 + 11 13 /* 12 14 * This file intended to be included by both kernel and user space 13 15 */ ··· 68 66 * with the transport upon completion of the login. 69 67 */ 70 68 struct fc_bsg_host_add_rport { 71 - uint8_t reserved; 69 + __u8 reserved; 72 70 73 71 /* FC Address Identier of the remote port to login to */ 74 - uint8_t port_id[3]; 72 + __u8 port_id[3]; 75 73 }; 76 74 77 75 /* Response: ··· 89 87 * remain logged in with the remote port. 90 88 */ 91 89 struct fc_bsg_host_del_rport { 92 - uint8_t reserved; 90 + __u8 reserved; 93 91 94 92 /* FC Address Identier of the remote port to logout of */ 95 - uint8_t port_id[3]; 93 + __u8 port_id[3]; 96 94 }; 97 95 98 96 /* Response: ··· 113 111 * ELS Command Code being sent (must be the same as byte 0 114 112 * of the payload) 115 113 */ 116 - uint8_t command_code; 114 + __u8 command_code; 117 115 118 116 /* FC Address Identier of the remote port to send the ELS to */ 119 - uint8_t port_id[3]; 117 + __u8 port_id[3]; 120 118 }; 121 119 122 120 /* Response: ··· 153 151 * Note: x_RJT/BSY status will indicae that the rjt_data field 154 152 * is valid and contains the reason/explanation values. 155 153 */ 156 - uint32_t status; /* See FC_CTELS_STATUS_xxx */ 154 + __u32 status; /* See FC_CTELS_STATUS_xxx */ 157 155 158 156 /* valid if status is not FC_CTELS_STATUS_OK */ 159 157 struct { 160 - uint8_t action; /* fragment_id for CT REJECT */ 161 - uint8_t reason_code; 162 - uint8_t reason_explanation; 163 - uint8_t vendor_unique; 158 + __u8 action; /* fragment_id for CT REJECT */ 159 + __u8 reason_code; 160 + __u8 reason_explanation; 161 + __u8 vendor_unique; 164 162 } rjt_data; 165 163 }; 166 164 ··· 176 174 * and whether to tear it down after the request. 177 175 */ 178 176 struct fc_bsg_host_ct { 179 - uint8_t reserved; 177 + __u8 reserved; 180 178 181 179 /* FC Address Identier of the remote port to send the ELS to */ 182 - uint8_t port_id[3]; 180 + __u8 port_id[3]; 183 181 184 182 /* 185 183 * We need words 0-2 of the generic preamble for the LLD's 186 184 */ 187 - uint32_t preamble_word0; /* revision & IN_ID */ 188 - uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ 189 - uint32_t preamble_word2; /* Cmd Code, Max Size */ 185 + __u32 preamble_word0; /* revision & IN_ID */ 186 + __u32 preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ 187 + __u32 preamble_word2; /* Cmd Code, Max Size */ 190 188 191 189 }; 192 190 /* Response: ··· 206 204 * Identifies the vendor that the message is formatted for. This 207 205 * should be the recipient of the message. 208 206 */ 209 - uint64_t vendor_id; 207 + __u64 vendor_id; 210 208 211 209 /* start of vendor command area */ 212 - uint32_t vendor_cmd[0]; 210 + __u32 vendor_cmd[0]; 213 211 }; 214 212 215 213 /* Response: 216 214 */ 217 215 struct fc_bsg_host_vendor_reply { 218 216 /* start of vendor response area */ 219 - uint32_t vendor_rsp[0]; 217 + __u32 vendor_rsp[0]; 220 218 }; 221 219 222 220 ··· 235 233 * ELS Command Code being sent (must be the same as 236 234 * byte 0 of the payload) 237 235 */ 238 - uint8_t els_code; 236 + __u8 els_code; 239 237 }; 240 238 241 239 /* Response: ··· 253 251 /* 254 252 * We need words 0-2 of the generic preamble for the LLD's 255 253 */ 256 - uint32_t preamble_word0; /* revision & IN_ID */ 257 - uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ 258 - uint32_t preamble_word2; /* Cmd Code, Max Size */ 254 + __u32 preamble_word0; /* revision & IN_ID */ 255 + __u32 preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ 256 + __u32 preamble_word2; /* Cmd Code, Max Size */ 259 257 }; 260 258 /* Response: 261 259 * ··· 267 265 268 266 /* request (CDB) structure of the sg_io_v4 */ 269 267 struct fc_bsg_request { 270 - uint32_t msgcode; 268 + __u32 msgcode; 271 269 union { 272 270 struct fc_bsg_host_add_rport h_addrport; 273 271 struct fc_bsg_host_del_rport h_delrport; ··· 291 289 * msg and status fields. The per-msgcode reply structure 292 290 * will contain valid data. 293 291 */ 294 - uint32_t result; 292 + __u32 result; 295 293 296 294 /* If there was reply_payload, how much was recevied ? */ 297 - uint32_t reply_payload_rcv_len; 295 + __u32 reply_payload_rcv_len; 298 296 299 297 union { 300 298 struct fc_bsg_host_vendor_reply vendor_reply;
+10 -10
include/uapi/scsi/scsi_netlink.h
··· 26 26 27 27 /* SCSI_TRANSPORT_MSG event message header */ 28 28 struct scsi_nl_hdr { 29 - uint8_t version; 30 - uint8_t transport; 31 - uint16_t magic; 32 - uint16_t msgtype; 33 - uint16_t msglen; 34 - } __attribute__((aligned(sizeof(uint64_t)))); 29 + __u8 version; 30 + __u8 transport; 31 + __u16 magic; 32 + __u16 msgtype; 33 + __u16 msglen; 34 + } __attribute__((aligned(sizeof(__u64)))); 35 35 36 36 /* scsi_nl_hdr->version value */ 37 37 #define SCSI_NL_VERSION 1 ··· 75 75 */ 76 76 struct scsi_nl_host_vendor_msg { 77 77 struct scsi_nl_hdr snlh; /* must be 1st element ! */ 78 - uint64_t vendor_id; 79 - uint16_t host_no; 80 - uint16_t vmsg_datalen; 81 - } __attribute__((aligned(sizeof(uint64_t)))); 78 + __u64 vendor_id; 79 + __u16 host_no; 80 + __u16 vmsg_datalen; 81 + } __attribute__((aligned(sizeof(__u64)))); 82 82 83 83 84 84 /*