From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@suse.de, linux-kernel@vger.kernel.org,
devel@linuxdriverproject.org, virtualization@lists.osdl.org
Cc: "K. Y. Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Hank Janssen <hjanssen@microsoft.com>
Subject: [PATCH 21/22] Staging: hv: Introduce a function to map channel properties onto block device info
Date: Wed, 6 Apr 2011 16:05:21 -0700 [thread overview]
Message-ID: <1302131122-15530-21-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1302131122-15530-1-git-send-email-kys@microsoft.com>
In preparation for removing the IDE details from the block driver, implement
a function that maps channel properties to block device information.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/storvsc.c | 68 ++++++++++++++++++++++++++++++++++++++
drivers/staging/hv/storvsc_api.h | 10 +++++
2 files changed, 78 insertions(+), 0 deletions(-)
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index d7ce393..e2b3410 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -17,6 +17,8 @@
* Authors:
* Haiyang Zhang <haiyangz@microsoft.com>
* Hank Janssen <hjanssen@microsoft.com>
+ *
+ * 4/3/2011: K. Y. Srinivasan - Significant restructuring and cleanup.
*/
#include <linux/kernel.h>
#include <linux/sched.h>
@@ -593,6 +595,72 @@ int stor_vsc_on_io_request(struct hv_device *device,
}
/*
+ * The channel properties uniquely specify how the device is to be
+ * presented to the guest. Map this information for use by the block
+ * driver. For Linux guests on Hyper-V, we emulate a scsi HBA in the guest
+ * (storvsc_drv) and so scsi devices in the guest are handled by
+ * native upper level Linux drivers. Consequently, Hyper-V
+ * block driver, while being a generic block driver, presently does not
+ * deal with anything other than devices that would need to be presented
+ * to the guest as an IDE disk.
+ *
+ * This function maps the channel properties as embedded in the input
+ * parameter device_info onto information necessary to register the
+ * corresponding block device.
+ *
+ * Currently, there is no way to stop the emulation of the block device
+ * on the host side. And so, to prevent the native IDE drivers in Linux
+ * from taking over these devices (to be managedby Hyper-V block
+ * driver), we will take over if need be the major of the IDE controllers.
+ *
+ */
+
+int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
+ struct storvsc_major_info *major_info)
+{
+ static bool ide0_registered;
+ static bool ide1_registered;
+
+ /*
+ * For now we only support IDE disks.
+ */
+ major_info->devname = "ide";
+ major_info->diskname = "hd";
+
+ if (device_info->path_id) {
+ major_info->major = 22;
+ if (!ide1_registered)
+ major_info->do_register = true;
+ else {
+ major_info->do_register = false;
+ ide1_registered = true;
+ }
+ if (device_info->target_id)
+ major_info->index = 3;
+ else
+ major_info->index = 2;
+
+ return 0;
+ } else {
+ major_info->major = 3;
+ if (!ide0_registered)
+ major_info->do_register = true;
+ else {
+ major_info->do_register = false;
+ ide0_registered = true;
+ }
+ if (device_info->target_id)
+ major_info->index = 1;
+ else
+ major_info->index = 0;
+
+ return 0;
+ }
+
+ return -ENODEV;
+}
+
+/*
* stor_vsc_on_cleanup - Perform any cleanup when the driver is removed
*/
void stor_vsc_on_cleanup(struct hv_driver *driver)
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index d7db949..c98139c 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -92,6 +92,14 @@ struct storvsc_device_info {
unsigned char target_id;
};
+struct storvsc_major_info {
+ int major;
+ int index;
+ bool do_register;
+ char *devname;
+ char *diskname;
+};
+
/* A storvsc device is a device object that contains a vmbus channel */
struct storvsc_device {
struct hv_device *device;
@@ -155,5 +163,7 @@ int stor_vsc_on_io_request(struct hv_device *device,
struct hv_storvsc_request *request);
void stor_vsc_on_cleanup(struct hv_driver *driver);
+int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
+ struct storvsc_major_info *major_info);
#endif /* _STORVSC_API_H_ */
--
1.7.4.1
next prev parent reply other threads:[~2011-04-06 23:05 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-06 23:03 [RESEND][PATCH 00/22] Staging: hv: Cleanup storage drivers - Phase IV K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 01/22] Staging: hv: Get rid of blkvsc_check_events() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 02/22] Staging: hv: Enable blkvsc_ioctl() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 03/22] Staging: hv: Simplify the code for blkvsc_getgeo() K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 04/22] Staging: hv: Introduce a common function for issuing commands to the device K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 05/22] Staging: hv: Get rid of blkvsc_do_read_capacity() K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 06/22] Staging: hv: Get rid of blkvsc_do_read_capacity16() K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 07/22] Staging: hv: Get rid of the function blkvsc_do_flush() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 08/22] Staging: hv: Get rid of the state media_not_present K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 09/22] Staging: hv: Get rid of the function blkvsc_revalidate_disk() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 10/22] Staging: hv: Simplify blkvsc_init_rw() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 11/22] Staging: hv: Get rid of some DPRINT_INFO() statements K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 12/22] Staging: hv: Get rid of some DPRINT_DBG() calls K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 13/22] Staging: hv: Cleanup blkvsc_remove() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 14/22] Staging: hv: Cleanup storvsc_remove() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 15/22] Staging: hv: Get rid of the code to manage removable media K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 16/22] Staging: hv: Get rid of some DPRINT_ERR() calls K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 17/22] Staging: hv: Get rid of an unnecessary check in blkvsc_probe() K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 18/22] Staging: hv: Cleanup blkvsc_open() K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 19/22] Staging: hv: Fix a jump label (Cleanup) in blkvsc_drv K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 20/22] Staging: hv: Fix a jump label (Remove) in blkvsc_drv.c K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan [this message]
2011-04-06 23:05 ` [PATCH 22/22] Staging: hv: Get rid of IDE details from blkvsc_drv.c K. Y. Srinivasan
2011-04-06 23:05 ` K. Y. Srinivasan
-- strict thread matches above, loose matches on Subject: below --
2011-04-04 22:46 [PATCH 00/22] Staging: hv: Cleanup storage drivers - Phase IV K. Y. Srinivasan
2011-04-04 22:47 ` [PATCH 01/22] Staging: hv: Get rid of blkvsc_media_changed() K. Y. Srinivasan
2011-04-04 22:48 ` [PATCH 21/22] Staging: hv: Introduce a function to map channel properties onto block device info K. Y. Srinivasan
2011-04-04 22:48 ` K. Y. Srinivasan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1302131122-15530-21-git-send-email-kys@microsoft.com \
--to=kys@microsoft.com \
--cc=devel@linuxdriverproject.org \
--cc=gregkh@suse.de \
--cc=haiyangz@microsoft.com \
--cc=hjanssen@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=virtualization@lists.osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.