svn commit: r316673 - stable/11/sys/dev/hyperv/storvsc
Sepherosa Ziehau
sephe at FreeBSD.org
Mon Apr 10 04:59:45 UTC 2017
Author: sephe
Date: Mon Apr 10 04:59:44 2017
New Revision: 316673
URL: https://svnweb.freebsd.org/changeset/base/316673
Log:
MFC 316519
hyperv/storvsc: Fixup SRB status.
This unbreaks GEN2 Hyper-V cd support.
Submitted by: Hongjiang Zhang <honzhan microsoft com>
Reviewed by: dexuan@
Sponsored by: Microsoft
Differential Revision: https://reviews.freebsd.org/D10212
Modified:
stable/11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
stable/11/sys/dev/hyperv/storvsc/hv_vstorage.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
==============================================================================
--- stable/11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c Mon Apr 10 03:23:57 2017 (r316672)
+++ stable/11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c Mon Apr 10 04:59:44 2017 (r316673)
@@ -2148,19 +2148,20 @@ storvsc_io_done(struct hv_storvsc_reques
ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
ccb->ccb_h.status &= ~CAM_STATUS_MASK;
+ int srb_status = SRB_STATUS(vm_srb->srb_status);
if (vm_srb->scsi_status == SCSI_STATUS_OK) {
const struct scsi_generic *cmd;
cmd = (const struct scsi_generic *)
((ccb->ccb_h.flags & CAM_CDB_POINTER) ?
csio->cdb_io.cdb_ptr : csio->cdb_io.cdb_bytes);
- if (vm_srb->srb_status != SRB_STATUS_SUCCESS) {
+ if (srb_status != SRB_STATUS_SUCCESS) {
/*
* If there are errors, for example, invalid LUN,
* host will inform VM through SRB status.
*/
if (bootverbose) {
- if (vm_srb->srb_status == SRB_STATUS_INVALID_LUN) {
+ if (srb_status == SRB_STATUS_INVALID_LUN) {
xpt_print(ccb->ccb_h.path,
"invalid LUN %d for op: %s\n",
vm_srb->lun,
@@ -2168,7 +2169,7 @@ storvsc_io_done(struct hv_storvsc_reques
} else {
xpt_print(ccb->ccb_h.path,
"Unknown SRB flag: %d for op: %s\n",
- vm_srb->srb_status,
+ srb_status,
scsi_op_desc(cmd->opcode, NULL));
}
}
@@ -2191,7 +2192,7 @@ storvsc_io_done(struct hv_storvsc_reques
}
if (cmd->opcode == INQUIRY &&
- vm_srb->srb_status == SRB_STATUS_SUCCESS) {
+ srb_status == SRB_STATUS_SUCCESS) {
int resp_xfer_len, resp_buf_len, data_len;
uint8_t *resp_buf = (uint8_t *)csio->data_ptr;
struct scsi_inquiry_data *inq_data =
Modified: stable/11/sys/dev/hyperv/storvsc/hv_vstorage.h
==============================================================================
--- stable/11/sys/dev/hyperv/storvsc/hv_vstorage.h Mon Apr 10 03:23:57 2017 (r316672)
+++ stable/11/sys/dev/hyperv/storvsc/hv_vstorage.h Mon Apr 10 04:59:44 2017 (r316673)
@@ -242,17 +242,16 @@ struct vstor_packet {
#define SRB_STATUS_PENDING 0x00
#define SRB_STATUS_SUCCESS 0x01
#define SRB_STATUS_ABORTED 0x02
-#define SRB_STATUS_ABORT_FAILED 0x03
#define SRB_STATUS_ERROR 0x04
-#define SRB_STATUS_BUSY 0x05
-
+#define SRB_STATUS_INVALID_LUN 0x20
/**
* SRB Status Masks (can be combined with above status codes)
*/
#define SRB_STATUS_QUEUE_FROZEN 0x40
#define SRB_STATUS_AUTOSENSE_VALID 0x80
-#define SRB_STATUS_INVALID_LUN 0X20
+#define SRB_STATUS(status) \
+ ((status) & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
/*
* SRB Flag Bits
*/
More information about the svn-src-stable-11
mailing list