Author: sephe
Date: Thu Jul 20 07:13:26 2017
New Revision: 321286
URL: https://svnweb.freebsd.org/changeset/base/321286

Log:
  hyperv/storvsc: Force SPC3 for CDROM attached.
  
  This unbreaks the CDROM attaching on GEN2 VMs.  On GEN1 VMs, CDROM is
  attached to emulated ATA controller.
  
  PR:           220790
  Submitted by: Hongjiang Zhang <honzhan microsoft com>
  MFC after:    3 days
  Sponsored by: Microsoft
  Differential Revision:        https://reviews.freebsd.org/D11634

Modified:
  head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c

Modified: head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c        Thu Jul 20 
06:54:58 2017        (r321285)
+++ head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c        Thu Jul 20 
07:13:26 2017        (r321286)
@@ -2210,6 +2210,23 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
                                    resp_buf[3], resp_buf[4]);
                        }
                        /*
+                        * XXX: Hyper-V (since win2012r2) responses inquiry with
+                        * unknown version (0) for GEN-2 DVD device.
+                        * Manually set the version number to SPC3 in order to
+                        * ask CAM to continue probing with "PROBE_REPORT_LUNS".
+                        * see probedone() in scsi_xpt.c
+                        */
+                       if (SID_TYPE(inq_data) == T_CDROM &&
+                           inq_data->version == 0 &&
+                           (vmstor_proto_version >= 
VMSTOR_PROTOCOL_VERSION_WIN8)) {
+                               inq_data->version = SCSI_REV_SPC3;
+                               if (bootverbose) {
+                                       xpt_print(ccb->ccb_h.path,
+                                           "set version from 0 to %d\n",
+                                           inq_data->version);
+                               }
+                       }
+                       /*
                         * XXX: Manually fix the wrong response returned from 
WS2012
                         */
                        if (!is_scsi_valid(inq_data) &&
@@ -2218,7 +2235,7 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
                            vmstor_proto_version == 
VMSTOR_PROTOCOL_VERSION_WIN7)) {
                                if (data_len >= 4 &&
                                    (resp_buf[2] == 0 || resp_buf[3] == 0)) {
-                                       resp_buf[2] = 5; // verion=5 means SPC-3
+                                       resp_buf[2] = SCSI_REV_SPC3;
                                        resp_buf[3] = 2; // resp fmt must be 2
                                        if (bootverbose)
                                                xpt_print(ccb->ccb_h.path,
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to