Date: Tue, 04 Jun 2013 19:23:20 +0300 From: Alexander Motin <mav@FreeBSD.org> To: Larry Melia <larrymelia@gmail.com> Cc: "Abhishek Gupta \(LIS\)" <abgupta@microsoft.com>, KY Srinivasan <kys@microsoft.com>, freebsd-virtualization@freebsd.org Subject: Re: more granular detection and control to disable/enable PCI-ATA devices Message-ID: <51AE1478.2000409@FreeBSD.org> In-Reply-To: <CADFB2gzUFvKSy9=t5CwVKXvF0XHwUP3rBxXOp3ii0kQW4anC5g@mail.gmail.com> References: <CADFB2gzUFvKSy9=t5CwVKXvF0XHwUP3rBxXOp3ii0kQW4anC5g@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi. On 04.06.2013 18:30, Larry Melia wrote: > With you suggestions, I finally was able to get the override driver > working-see > https://github.com/FreeBSDonHyper-V/freebsd-snapshot/blob/hyperv-dev-ata-override/sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c. > While it operates wonderfully, allowing our "enlightened" driver to > improve performance, some versions of Hyper-V still use the native > CD-ROM driver, because there is no "enlightened" support for it in the > hypervisor. From my limited knowledge of the ATA drivers, it seems > likely that the PCI-ATA driver be attached when a CD-ROM is detected, > but lower-level drivers disabled (during a probe) when a hard drive is > detected. On Hyper-V, therefore, a user would be able to configure a > PCI/IDE virtual controller with two devices, the first device a hard > disk and the second one a CD-ROM. The CD-ROM would operate via the > native driver, whereas the hard disk would use the "enlightened" driver > (to improve performance). Is there an easy way to add more granular > detection, disabling the native ATA driver(s) selectively for hard > drives, while allowing CD-ROM devices to be natively attached? Any > suggestions would be very much appreciated. Unfortunately, CAM subsystem used for both ATA and SCSI stacks in FreeBSD 9.x and above is mostly unaware of "NewBus" infrastructure used for driver probe and attachment. That is why you can't replace driver for a single disk in the same way as you replaced driver for the whole controller. The highest level present in "NewBus" is ATA channel. So if disk and CD-ROM are always live on different channels, you can create dummy driver not for the whole controller (atapciX), but for single hardcoded ATA channel (ataX). Another possible way is to make controller driver not dummy, making it mostly duplicating default one, but filtering out unwanted devices. That may look like overkill, but it is not necessary so, because ATA stack is quite modularized, and you probably don't need to implement all ATA functionality such as mode setting, etc. Only thing that should be different in your driver is a reset method -- never reporting ATA disks to upper layers, only ATAPI devices. You may find number of drivers for example in sys/dev/ata/chipsets. The later way is definitely more complicated then just a few lines hack blocking CAM ada driver (ATA disk driver), but it still can be made modular and non-invasive. -- Alexander Motin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51AE1478.2000409>