Page MenuHomeFreeBSD

D7693.id19790.diff
No OneTemporary

D7693.id19790.diff

Index: sys/cam/ata/ata_xpt.c
===================================================================
--- sys/cam/ata/ata_xpt.c
+++ sys/cam/ata/ata_xpt.c
@@ -837,6 +837,12 @@
done_ccb->ccb_h.target_id != 15) {
path->device->protocol = PROTO_ATA;
PROBE_SET_ACTION(softc, PROBE_IDENTIFY);
+ if (vm_guest == VM_GUEST_HV) {
+ /*
+ * XXX: VM for Hyper-V should ignore ATA
+ */
+ goto device_fail;
+ }
} else if (sign == 0x9669 &&
done_ccb->ccb_h.target_id == 15) {
/* Report SIM that PM is present. */
Index: sys/conf/files.amd64
===================================================================
--- sys/conf/files.amd64
+++ sys/conf/files.amd64
@@ -293,7 +293,6 @@
dev/hyperv/netvsc/hv_net_vsc.c optional hyperv
dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c optional hyperv
dev/hyperv/netvsc/hv_rndis_filter.c optional hyperv
-dev/hyperv/stordisengage/hv_ata_pci_disengage.c optional hyperv
dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c optional hyperv
dev/hyperv/utilities/hv_heartbeat.c optional hyperv
dev/hyperv/utilities/hv_kvp.c optional hyperv
Index: sys/conf/files.i386
===================================================================
--- sys/conf/files.i386
+++ sys/conf/files.i386
@@ -251,7 +251,6 @@
dev/hyperv/netvsc/hv_net_vsc.c optional hyperv
dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c optional hyperv
dev/hyperv/netvsc/hv_rndis_filter.c optional hyperv
-dev/hyperv/stordisengage/hv_ata_pci_disengage.c optional hyperv
dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c optional hyperv
dev/hyperv/utilities/hv_heartbeat.c optional hyperv
dev/hyperv/utilities/hv_kvp.c optional hyperv
Index: sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c
===================================================================
--- sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*-
- * Copyright (c) 1998 - 2008 Søren Schmidt <sos@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer,
- * without modification, immediately at the beginning of the file.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*-
- * Copyright (c) 2009-2013 Microsoft Corp.
- * Copyright (c) 2012 NetApp Inc.
- * Copyright (c) 2012 Citrix Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice unmodified, this list of conditions, and the following
- * disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/ata.h>
-#include <sys/bus.h>
-#include <sys/conf.h>
-#include <sys/malloc.h>
-#include <sys/sema.h>
-#include <sys/taskqueue.h>
-#include <vm/uma.h>
-#include <machine/stdarg.h>
-#include <machine/resource.h>
-#include <machine/bus.h>
-#include <sys/rman.h>
-#include <dev/pci/pcivar.h>
-#include <dev/pci/pcireg.h>
-#include <dev/ata/ata-all.h>
-#include <dev/ata/ata-pci.h>
-#include <ata_if.h>
-
-/* prototypes */
-static int hv_ata_pci_probe(device_t dev);
-static int hv_ata_pci_attach(device_t dev);
-static int hv_ata_pci_detach(device_t dev);
-
-/*
- * generic PCI ATA device probe
- */
-static int
-hv_ata_pci_probe(device_t dev)
-{
- device_t parent = device_get_parent(dev);
- int ata_disk_enable;
-
- ata_disk_enable = 0;
-
- /*
- * Don't probe if not running in a Hyper-V environment
- */
- if (vm_guest != VM_GUEST_HV)
- return (ENXIO);
-
- if (device_get_unit(parent) != 0 || device_get_ivars(dev) != 0)
- return (ENXIO);
-
- /*
- * On Hyper-V the default is to use the enlightened driver for
- * IDE disks. However, if the user wishes to use the native
- * ATA driver, the environment variable
- * hw_ata.disk_enable must be explicitly set to 1.
- */
- if (getenv_int("hw.ata.disk_enable", &ata_disk_enable)) {
- if (bootverbose)
- device_printf(dev,
- "hw.ata.disk_enable flag is disabling Hyper-V"
- " ATA driver support\n");
- return (ENXIO);
- }
-
- device_set_desc(dev, "Hyper-V ATA storage disengage driver");
-
- return (BUS_PROBE_DEFAULT);
-}
-
-static int
-hv_ata_pci_attach(device_t dev)
-{
-
- return (0);
-}
-
-static int
-hv_ata_pci_detach(device_t dev)
-{
-
- return (0);
-}
-
-static device_method_t hv_ata_pci_methods[] = {
- /* device interface */
- DEVMETHOD(device_probe, hv_ata_pci_probe),
- DEVMETHOD(device_attach, hv_ata_pci_attach),
- DEVMETHOD(device_detach, hv_ata_pci_detach),
- DEVMETHOD(device_shutdown, bus_generic_shutdown),
-
- DEVMETHOD_END
-};
-
-devclass_t hv_ata_pci_devclass;
-
-static driver_t hv_ata_pci_disengage_driver = {
- "ata",
- hv_ata_pci_methods,
- 0,
-};
-
-DRIVER_MODULE(atapci_dis, atapci, hv_ata_pci_disengage_driver,
- hv_ata_pci_devclass, NULL, NULL);
-MODULE_VERSION(atapci_dis, 1);
-MODULE_DEPEND(atapci_dis, ata, 1, 1, 1);
Index: sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
===================================================================
--- sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
+++ sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
@@ -2154,27 +2154,46 @@
ccb->ccb_h.status &= ~CAM_STATUS_MASK;
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 (vm_srb->srb_status == SRB_STATUS_INVALID_LUN) {
- xpt_print(ccb->ccb_h.path, "invalid LUN %d\n",
- vm_srb->lun);
- } else {
- xpt_print(ccb->ccb_h.path, "Unknown SRB flag: %d\n",
- vm_srb->srb_status);
- }
/*
* If there are errors, for example, invalid LUN,
* host will inform VM through SRB status.
*/
- ccb->ccb_h.status |= CAM_SEL_TIMEOUT;
+ if (bootverbose) {
+ mtx_lock(&sc->hs_lock);
+ if (vm_srb->srb_status == SRB_STATUS_INVALID_LUN) {
+ xpt_print(ccb->ccb_h.path,
+ "invalid LUN %d for op: %s\n",
+ vm_srb->lun, scsi_op_desc(cmd->opcode, NULL));
+ } else {
+ xpt_print(ccb->ccb_h.path,
+ "Unknown SRB flag: %d for op: %s\n",
+ vm_srb->srb_status, scsi_op_desc(cmd->opcode, NULL));
+ }
+ mtx_unlock(&sc->hs_lock);
+ }
+
+ /*
+ * XXX For a selection timeout, all of the LUNs
+ * on the target will be gone. It works for SCSI
+ * disks, but does not work for IDE disks.
+ *
+ * For CAM_DEV_NOT_THERE, CAM will only get
+ * rid of the device(s) specified by the path.
+ */
+ if (storvsc_get_storage_type(sc->hs_dev) ==
+ DRIVER_STORVSC) {
+ ccb->ccb_h.status |= CAM_SEL_TIMEOUT;
+ } else {
+ ccb->ccb_h.status |= CAM_DEV_NOT_THERE;
+ }
} else {
ccb->ccb_h.status |= CAM_REQ_CMP;
}
- cmd = (const struct scsi_generic *)
- ((ccb->ccb_h.flags & CAM_CDB_POINTER) ?
- csio->cdb_io.cdb_ptr : csio->cdb_io.cdb_bytes);
if (cmd->opcode == INQUIRY) {
struct scsi_inquiry_data *inq_data =
(struct scsi_inquiry_data *)csio->data_ptr;
@@ -2189,10 +2208,12 @@
resp_buf_len : resp_xfer_len;
if (bootverbose && data_len >= 5) {
+ mtx_lock(&sc->hs_lock);
xpt_print(ccb->ccb_h.path, "storvsc inquiry "
"(%d) [%x %x %x %x %x ... ]\n", data_len,
resp_buf[0], resp_buf[1], resp_buf[2],
resp_buf[3], resp_buf[4]);
+ mtx_unlock(&sc->hs_lock);
}
if (vm_srb->srb_status == SRB_STATUS_SUCCESS &&
data_len > SHORT_INQUIRY_LENGTH) {
@@ -2213,9 +2234,11 @@
VMSTOR_PROTOCOL_VERSION_WIN8)) {
inq_data->version = SCSI_REV_SPC3;
if (bootverbose) {
+ mtx_lock(&sc->hs_lock);
xpt_print(ccb->ccb_h.path,
"storvsc upgrades "
"SPC2 to SPC3\n");
+ mtx_unlock(&sc->hs_lock);
}
}
}
Index: sys/modules/hyperv/Makefile
===================================================================
--- sys/modules/hyperv/Makefile
+++ sys/modules/hyperv/Makefile
@@ -1,5 +1,5 @@
# $FreeBSD$
-SUBDIR = vmbus netvsc stordisengage storvsc utilities
+SUBDIR = vmbus netvsc storvsc utilities
.include <bsd.subdir.mk>
Index: sys/modules/hyperv/stordisengage/Makefile
===================================================================
--- sys/modules/hyperv/stordisengage/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# $FreeBSD$
-
-.PATH: ${.CURDIR}/../../../dev/hyperv/stordisengage
-
-KMOD= hv_ata_pci_disengage
-SRCS= hv_ata_pci_disengage.c
-SRCS+= ata_if.h bus_if.h device_if.h pci_if.h
-
-.include <bsd.kmod.mk>

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 21, 10:58 PM (7 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25822074
Default Alt Text
D7693.id19790.diff (10 KB)

Event Timeline