Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F136997704
D7693.id19824.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
12 KB
Referenced Files
None
Subscribers
None
D7693.id19824.diff
View Options
Index: sys/cam/ata/ata_xpt.c
===================================================================
--- sys/cam/ata/ata_xpt.c
+++ sys/cam/ata/ata_xpt.c
@@ -61,6 +61,9 @@
#include <machine/stdarg.h> /* for xpt_print below */
#include "opt_cam.h"
+#define PCI_VENDOR_INTEL 0x8086
+#define PCI_PRODUCT_PIIX4 0x7111
+
struct ata_quirk_entry {
struct scsi_inquiry_pattern inq_pat;
u_int8_t quirks;
@@ -878,6 +881,24 @@
ptr < (int16_t *)ident_buf + sizeof(struct ata_params)/2; ptr++) {
*ptr = le16toh(*ptr);
}
+ /*
+ * XXX: VM for Hyper-V should ignore ATA
+ */
+ if (vm_guest == VM_GUEST_HV &&
+ path->device->protocol == PROTO_ATA) {
+ bzero(&cpi, sizeof(cpi));
+ xpt_setup_ccb(&cpi.ccb_h, path, CAM_PRIORITY_NONE);
+ cpi.ccb_h.func_code = XPT_PATH_INQ;
+ xpt_action((union ccb *)&cpi);
+ if (cpi.ccb_h.status == CAM_REQ_CMP &&
+ cpi.hba_vendor == PCI_VENDOR_INTEL &&
+ cpi.hba_device == PCI_PRODUCT_PIIX4) {
+ xpt_print(path,
+ "Disable ATA for vendor: %x, device: %x\n",
+ cpi.hba_vendor, cpi.hba_device);
+ goto device_fail;
+ }
+ }
if (strncmp(ident_buf->model, "FX", 2) &&
strncmp(ident_buf->model, "NEC", 3) &&
strncmp(ident_buf->model, "Pioneer", 7) &&
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
@@ -897,21 +897,15 @@
static int
storvsc_probe(device_t dev)
{
- int ata_disk_enable = 0;
int ret = ENXIO;
switch (storvsc_get_storage_type(dev)) {
case DRIVER_BLKVSC:
if(bootverbose)
- device_printf(dev, "DRIVER_BLKVSC-Emulated ATA/IDE probe\n");
- if (!getenv_int("hw.ata.disk_enable", &ata_disk_enable)) {
- if(bootverbose)
- device_printf(dev,
- "Enlightened ATA/IDE detected\n");
- device_set_desc(dev, g_drv_props_table[DRIVER_BLKVSC].drv_desc);
- ret = BUS_PROBE_DEFAULT;
- } else if(bootverbose)
- device_printf(dev, "Emulated ATA/IDE set (hw.ata.disk_enable set)\n");
+ device_printf(dev,
+ "Enlightened ATA/IDE detected\n");
+ device_set_desc(dev, g_drv_props_table[DRIVER_BLKVSC].drv_desc);
+ ret = BUS_PROBE_DEFAULT;
break;
case DRIVER_STORVSC:
if(bootverbose)
@@ -2154,27 +2148,48 @@
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 +2204,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 +2230,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
Details
Attached
Mime Type
text/plain
Expires
Fri, Nov 21, 11:02 PM (4 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25822777
Default Alt Text
D7693.id19824.diff (12 KB)
Attached To
Mode
D7693: hyperv/storvsc: disable ata but enable CD/DVD and remove stordisengage
Attached
Detach File
Event Timeline
Log In to Comment