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

Configure Feed

Select the types of activity you want to include in your feed.

xen: update vscsiif.h

Update include/xen/interface/io/vscsiif.h to its newest version.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Link: https://lore.kernel.org/r/20220428075323.12853-2-jgross@suse.com
Signed-off-by: Juergen Gross <jgross@suse.com>

+129 -4
+129 -4
include/xen/interface/io/vscsiif.h
··· 43 43 * 44 44 * A string specifying the backend device: either a 4-tuple "h:c:t:l" 45 45 * (host, controller, target, lun, all integers), or a WWN (e.g. 46 - * "naa.60014054ac780582"). 46 + * "naa.60014054ac780582:0"). 47 47 * 48 48 * v-dev 49 49 * Values: string ··· 87 87 * response structures. 88 88 */ 89 89 90 + /* 91 + * Xenstore format in practice 92 + * =========================== 93 + * 94 + * The backend driver uses a single_host:many_devices notation to manage domU 95 + * devices. Everything is stored in /local/domain/<backend_domid>/backend/vscsi/. 96 + * The xenstore layout looks like this (dom0 is assumed to be the backend_domid): 97 + * 98 + * <domid>/<vhost>/feature-host = "0" 99 + * <domid>/<vhost>/frontend = "/local/domain/<domid>/device/vscsi/0" 100 + * <domid>/<vhost>/frontend-id = "<domid>" 101 + * <domid>/<vhost>/online = "1" 102 + * <domid>/<vhost>/state = "4" 103 + * <domid>/<vhost>/vscsi-devs/dev-0/p-dev = "8:0:2:1" or "naa.wwn:lun" 104 + * <domid>/<vhost>/vscsi-devs/dev-0/state = "4" 105 + * <domid>/<vhost>/vscsi-devs/dev-0/v-dev = "0:0:0:0" 106 + * <domid>/<vhost>/vscsi-devs/dev-1/p-dev = "8:0:2:2" 107 + * <domid>/<vhost>/vscsi-devs/dev-1/state = "4" 108 + * <domid>/<vhost>/vscsi-devs/dev-1/v-dev = "0:0:1:0" 109 + * 110 + * The frontend driver maintains its state in 111 + * /local/domain/<domid>/device/vscsi/. 112 + * 113 + * <vhost>/backend = "/local/domain/0/backend/vscsi/<domid>/<vhost>" 114 + * <vhost>/backend-id = "0" 115 + * <vhost>/event-channel = "20" 116 + * <vhost>/ring-ref = "43" 117 + * <vhost>/state = "4" 118 + * <vhost>/vscsi-devs/dev-0/state = "4" 119 + * <vhost>/vscsi-devs/dev-1/state = "4" 120 + * 121 + * In addition to the entries for backend and frontend these flags are stored 122 + * for the toolstack: 123 + * 124 + * <domid>/<vhost>/vscsi-devs/dev-1/p-devname = "/dev/$device" 125 + * <domid>/<vhost>/libxl_ctrl_index = "0" 126 + * 127 + * 128 + * Backend/frontend protocol 129 + * ========================= 130 + * 131 + * To create a vhost along with a device: 132 + * <domid>/<vhost>/feature-host = "0" 133 + * <domid>/<vhost>/frontend = "/local/domain/<domid>/device/vscsi/0" 134 + * <domid>/<vhost>/frontend-id = "<domid>" 135 + * <domid>/<vhost>/online = "1" 136 + * <domid>/<vhost>/state = "1" 137 + * <domid>/<vhost>/vscsi-devs/dev-0/p-dev = "8:0:2:1" 138 + * <domid>/<vhost>/vscsi-devs/dev-0/state = "1" 139 + * <domid>/<vhost>/vscsi-devs/dev-0/v-dev = "0:0:0:0" 140 + * Wait for <domid>/<vhost>/state + <domid>/<vhost>/vscsi-devs/dev-0/state become 4 141 + * 142 + * To add another device to a vhost: 143 + * <domid>/<vhost>/state = "7" 144 + * <domid>/<vhost>/vscsi-devs/dev-1/p-dev = "8:0:2:2" 145 + * <domid>/<vhost>/vscsi-devs/dev-1/state = "1" 146 + * <domid>/<vhost>/vscsi-devs/dev-1/v-dev = "0:0:1:0" 147 + * Wait for <domid>/<vhost>/state + <domid>/<vhost>/vscsi-devs/dev-1/state become 4 148 + * 149 + * To remove a device from a vhost: 150 + * <domid>/<vhost>/state = "7" 151 + * <domid>/<vhost>/vscsi-devs/dev-1/state = "5" 152 + * Wait for <domid>/<vhost>/state to become 4 153 + * Wait for <domid>/<vhost>/vscsi-devs/dev-1/state become 6 154 + * Remove <domid>/<vhost>/vscsi-devs/dev-1/{state,p-dev,v-dev,p-devname} 155 + * Remove <domid>/<vhost>/vscsi-devs/dev-1/ 156 + * 157 + */ 158 + 90 159 /* Requests from the frontend to the backend */ 91 160 92 161 /* ··· 186 117 * (plus the set VSCSIIF_SG_GRANT bit), the number of scsiif_request_segment 187 118 * elements referencing the target data buffers is calculated from the lengths 188 119 * of the seg[] elements (the sum of all valid seg[].length divided by the 189 - * size of one scsiif_request_segment structure). 120 + * size of one scsiif_request_segment structure). The frontend may use a mix of 121 + * direct and indirect requests. 190 122 */ 191 123 #define VSCSIIF_ACT_SCSI_CDB 1 192 124 ··· 224 154 225 155 /* 226 156 * based on Linux kernel 2.6.18, still valid 157 + * 227 158 * Changing these values requires support of multiple protocols via the rings 228 159 * as "old clients" will blindly use these values and the resulting structure 229 160 * sizes. 230 161 */ 231 162 #define VSCSIIF_MAX_COMMAND_SIZE 16 232 163 #define VSCSIIF_SENSE_BUFFERSIZE 96 164 + #define VSCSIIF_PAGE_SIZE 4096 233 165 234 166 struct scsiif_request_segment { 235 167 grant_ref_t gref; ··· 239 167 uint16_t length; 240 168 }; 241 169 242 - #define VSCSIIF_SG_PER_PAGE (PAGE_SIZE / sizeof(struct scsiif_request_segment)) 170 + #define VSCSIIF_SG_PER_PAGE (VSCSIIF_PAGE_SIZE / \ 171 + sizeof(struct scsiif_request_segment)) 243 172 244 173 /* Size of one request is 252 bytes */ 245 174 struct vscsiif_request { ··· 280 207 uint32_t reserved[36]; 281 208 }; 282 209 210 + /* SCSI I/O status from vscsiif_response->rslt */ 211 + #define XEN_VSCSIIF_RSLT_STATUS(x) ((x) & 0x00ff) 212 + 213 + /* Host I/O status from vscsiif_response->rslt */ 214 + #define XEN_VSCSIIF_RSLT_HOST(x) (((x) & 0x00ff0000) >> 16) 215 + #define XEN_VSCSIIF_RSLT_HOST_OK 0 216 + /* Couldn't connect before timeout */ 217 + #define XEN_VSCSIIF_RSLT_HOST_NO_CONNECT 1 218 + /* Bus busy through timeout */ 219 + #define XEN_VSCSIIF_RSLT_HOST_BUS_BUSY 2 220 + /* Timed out for other reason */ 221 + #define XEN_VSCSIIF_RSLT_HOST_TIME_OUT 3 222 + /* Bad target */ 223 + #define XEN_VSCSIIF_RSLT_HOST_BAD_TARGET 4 224 + /* Abort for some other reason */ 225 + #define XEN_VSCSIIF_RSLT_HOST_ABORT 5 226 + /* Parity error */ 227 + #define XEN_VSCSIIF_RSLT_HOST_PARITY 6 228 + /* Internal error */ 229 + #define XEN_VSCSIIF_RSLT_HOST_ERROR 7 230 + /* Reset by somebody */ 231 + #define XEN_VSCSIIF_RSLT_HOST_RESET 8 232 + /* Unexpected interrupt */ 233 + #define XEN_VSCSIIF_RSLT_HOST_BAD_INTR 9 234 + /* Force command past mid-layer */ 235 + #define XEN_VSCSIIF_RSLT_HOST_PASSTHROUGH 10 236 + /* Retry requested */ 237 + #define XEN_VSCSIIF_RSLT_HOST_SOFT_ERROR 11 238 + /* Hidden retry requested */ 239 + #define XEN_VSCSIIF_RSLT_HOST_IMM_RETRY 12 240 + /* Requeue command requested */ 241 + #define XEN_VSCSIIF_RSLT_HOST_REQUEUE 13 242 + /* Transport error disrupted I/O */ 243 + #define XEN_VSCSIIF_RSLT_HOST_TRANSPORT_DISRUPTED 14 244 + /* Transport class fastfailed */ 245 + #define XEN_VSCSIIF_RSLT_HOST_TRANSPORT_FAILFAST 15 246 + /* Permanent target failure */ 247 + #define XEN_VSCSIIF_RSLT_HOST_TARGET_FAILURE 16 248 + /* Permanent nexus failure on path */ 249 + #define XEN_VSCSIIF_RSLT_HOST_NEXUS_FAILURE 17 250 + /* Space allocation on device failed */ 251 + #define XEN_VSCSIIF_RSLT_HOST_ALLOC_FAILURE 18 252 + /* Medium error */ 253 + #define XEN_VSCSIIF_RSLT_HOST_MEDIUM_ERROR 19 254 + /* Transport marginal errors */ 255 + #define XEN_VSCSIIF_RSLT_HOST_TRANSPORT_MARGINAL 20 256 + 257 + /* Result values of reset operations */ 258 + #define XEN_VSCSIIF_RSLT_RESET_SUCCESS 0x2002 259 + #define XEN_VSCSIIF_RSLT_RESET_FAILED 0x2003 260 + 283 261 DEFINE_RING_TYPES(vscsiif, struct vscsiif_request, struct vscsiif_response); 284 262 285 - #endif /*__XEN__PUBLIC_IO_SCSI_H__*/ 263 + 264 + #endif /*__XEN__PUBLIC_IO_SCSI_H__*/