Re: [PATCH] virtio, ring: Use ALIGN macros in virtio_ring.h

2011-04-26 Thread Michael S. Tsirkin
On Tue, Apr 26, 2011 at 12:11:10PM +0800, Liu Yuan wrote:
 From: Liu Yuan tailai...@taobao.com
 
 
 Signed-off-by: Liu Yuan tailai...@taobao.com

Issue is, these functions are exported to userspace,
which does not have these macros.

 ---
  include/linux/virtio_ring.h |8 +++-
  1 files changed, 3 insertions(+), 5 deletions(-)
 
 diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h
 index e4d144b..6299050 100644
 --- a/include/linux/virtio_ring.h
 +++ b/include/linux/virtio_ring.h
 @@ -99,15 +99,13 @@ static inline void vring_init(struct vring *vr, unsigned 
 int num, void *p,
   vr-num = num;
   vr-desc = p;
   vr-avail = p + num*sizeof(struct vring_desc);
 - vr-used = (void *)(((unsigned long)vr-avail-ring[num] + align-1)
 -  ~(align - 1));
 + vr-used = (void *)PTR_ALIGN(vr-avail-ring[num], align);
  }
  
  static inline unsigned vring_size(unsigned int num, unsigned long align)
  {
 - return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (2 + num)
 -  + align - 1)  ~(align - 1))
 - + sizeof(__u16) * 2 + sizeof(struct vring_used_elem) * num;
 + return ((sizeof(struct vring_desc) * num + ALIGN(sizeof(__u16) * (2 + 
 num), align))
 + + sizeof(__u16) * 2 + sizeof(struct vring_used_elem) * num);
  }
  
  #ifdef __KERNEL__
 -- 
 1.7.1
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH] virtio, ring: Use ALIGN macros in virtio_ring.h

2011-04-26 Thread Liu Yuan
On 04/26/2011 03:42 PM, Michael S. Tsirkin wrote:
 On Tue, Apr 26, 2011 at 12:11:10PM +0800, Liu Yuan wrote:
 From: Liu Yuantailai...@taobao.com


 Signed-off-by: Liu Yuantailai...@taobao.com
 Issue is, these functions are exported to userspace,
 which does not have these macros.

Ah, thanks, I should have noticed the '#ifdef __KERNEL__' just below the 
lines I touched.

Thanks,
Yuan
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 00/25] Staging: hv: Cleanup vmbus driver code

2011-04-26 Thread K. Y. Srinivasan
This patch-set addresses some of the bus/driver model cleanup that
Greg sugested over the last couple of days.  In this patch-set we
deal with the following issues:

1) Cleanup unnecessary state in struct hv_device and 
   struct hv_driver to be compliant with the Linux
   Driver model.

2) Cleanup the vmbus_match() function to conform with the 
   Linux Driver model.

3) Cleanup error handling in the vmbus_probe() and 
   vmbus_child_device_register() functions. Fixed a 
   bug in the probe failure path as part of this cleanup.

4) The Windows host cannot handle the vmbus_driver being 
   unloaded and subsequently loaded. Cleanup the driver with
   this in mind.

5) Get rid of struct hv_bus that embedded struct bus_type to 
   conform with the LDM.

6) Add probe/remove/shutdown functions to struct hv_driver to
   conform to LDM.

7) On some older Hyper-V hosts, the Linux PCI sub-sytem is not able
   to allocate irq resources to the vmbus driver. I recently learnt
   that the vmbus driver is an acpi enumerated device on the Hyper-V
   platform. Added code to retrieve irq information from DSDT.



Regards,

K. Y
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 01/25] Staging: hv: Introduce a function to map a generic driver pointer to a pointer to storvsc_driver_object

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of the priv element from struct hv_driver,
introduce a function that maps a generic struct driver pointer to struct
storvsc_driver_object.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/storvsc_api.h |8 
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index c98139c..b60a058 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -28,6 +28,7 @@
 #include linux/kernel.h
 #include vstorage.h
 #include vmbus_api.h
+#include vmbus.h
 
 /* Defines */
 #define STORVSC_RING_BUFFER_SIZE   (20*PAGE_SIZE)
@@ -153,6 +154,13 @@ static inline struct storvsc_driver_object 
*hvdr_to_stordr(struct hv_driver *d)
return container_of(d, struct storvsc_driver_object, base);
 }
 
+static inline
+struct storvsc_driver_object *drv_to_stordrv(struct device_driver *d)
+{
+   struct hv_driver *hvdrv = drv_to_hv_drv(d);
+   return hvdr_to_stordr(hvdrv);
+}
+
 /* Interface */
 
 int stor_vsc_on_device_add(struct hv_device *device,
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 03/25] Staging: hv: Get rid of the references to the priv element of struct hv_driver in hv_mouse.c

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of the priv element from struct hv_driver,
get rid of the references to the priv element of struct hv_driver
in hv_mouse.c


Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/hv_mouse.c |   22 +-
 1 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/hv/hv_mouse.c b/drivers/staging/hv/hv_mouse.c
index bd93548..4333247 100644
--- a/drivers/staging/hv/hv_mouse.c
+++ b/drivers/staging/hv/hv_mouse.c
@@ -52,6 +52,13 @@ struct mousevsc_drv_obj {
 };
 
 
+static inline
+struct mousevsc_drv_obj *drv_to_mousedrv(struct device_driver *d)
+{
+   struct hv_driver *hvdrv = drv_to_hv_drv(d);
+   return container_of(hvdrv, struct mousevsc_drv_obj, base);
+}
+
 /* The maximum size of a synthetic input message. */
 #define SYNTHHID_MAX_INPUT_REPORT_SIZE 16
 
@@ -428,7 +435,7 @@ static void mousevsc_on_receive_input_report(struct 
mousevsc_dev *input_device,
return;
}
 
-   input_drv = (struct mousevsc_drv_obj *)input_device-device-drv;
+   input_drv = drv_to_mousedrv(input_device-device-device.driver);
 
inputreport_callback(input_device-device,
 input_report-buffer,
@@ -713,7 +720,7 @@ static int mousevsc_on_device_add(struct hv_device *device,
return ret;
}
 
-   input_drv = (struct mousevsc_drv_obj *)input_dev-device-drv;
+   input_drv = drv_to_mousedrv(input_dev-device-device.driver);
 
dev_info.vendor = input_dev-hid_dev_info.vendor;
dev_info.product = input_dev-hid_dev_info.product;
@@ -829,9 +836,8 @@ static int mousevsc_probe(struct device *device)
 {
int ret = 0;
 
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
-   struct mousevsc_drv_obj *mousevsc_drv_obj = drv-priv;
+   struct mousevsc_drv_obj *mousevsc_drv_obj =
+   drv_to_mousedrv(device-driver);
 
struct hv_device *device_obj = device_to_hv_device(device);
struct input_device_context *input_dev_ctx;
@@ -857,9 +863,8 @@ static int mousevsc_remove(struct device *device)
 {
int ret = 0;
 
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
-   struct mousevsc_drv_obj *mousevsc_drv_obj = drv-priv;
+   struct mousevsc_drv_obj *mousevsc_drv_obj =
+   drv_to_mousedrv(device-driver);
 
struct hv_device *device_obj = device_to_hv_device(device);
struct input_device_context *input_dev_ctx;
@@ -1017,7 +1022,6 @@ static int __init mousevsc_init(void)
mouse_vsc_initialize(input_drv_obj-base);
 
drv-driver.name = input_drv_obj-base.name;
-   drv-priv = input_drv_obj;
 
drv-driver.probe = mousevsc_probe;
drv-driver.remove = mousevsc_remove;
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 16/25] Staging: hv: Make msg_dpc a global variable

2011-04-26 Thread K. Y. Srinivasan
In preparation for cleaning up (getting rid of) of the hv_bus structure,
make msg_dpc a global variable.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |7 ---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index f779d4e..028051d 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -42,10 +42,11 @@
 
 static struct pci_dev *hv_pci_dev;
 
+static struct tasklet_struct msg_dpc;
+
 /* Main vmbus driver data structure */
 struct hv_bus {
struct bus_type bus;
-   struct tasklet_struct msg_dpc;
struct tasklet_struct event_dpc;
 };
 
@@ -517,7 +518,7 @@ static irqreturn_t vmbus_isr(int irq, void *dev_id)
/* Schedules a dpc if necessary */
if (ret  0) {
if (test_bit(0, (unsigned long *)ret))
-   tasklet_schedule(hv_bus.msg_dpc);
+   tasklet_schedule(msg_dpc);
 
if (test_bit(1, (unsigned long *)ret))
tasklet_schedule(hv_bus.event_dpc);
@@ -552,7 +553,7 @@ static int vmbus_bus_init(struct pci_dev *pdev)
hv_bus.bus.name = driver_name;
 
/* Initialize the bus context */
-   tasklet_init(hv_bus.msg_dpc, vmbus_on_msg_dpc, 0);
+   tasklet_init(msg_dpc, vmbus_on_msg_dpc, 0);
tasklet_init(hv_bus.event_dpc, vmbus_on_event, 0);
 
/* Now, register the bus  with LDM */
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 02/25] Staging: hv: Get rid of the references to the priv element of struct hv_driver in block driver

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of the priv element from struct hv_driver,
get rid of the references to the priv element of struct hv_driver
in blkvsc_drv.c and storvsc.c


Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/blkvsc_drv.c |   14 +++---
 drivers/staging/hv/storvsc.c|2 +-
 2 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index acc5435..ec6a761 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -214,10 +214,8 @@ static int blkvsc_submit_request(struct blkvsc_request 
*blkvsc_req,
 {
struct block_device_context *blkdev = blkvsc_req-dev;
struct hv_device *device_ctx = blkdev-device_ctx;
-   struct hv_driver *drv =
-   drv_to_hv_drv(device_ctx-device.driver);
struct storvsc_driver_object *storvsc_drv_obj =
-   drv-priv;
+   drv_to_stordrv(device_ctx-device.driver);
struct hv_storvsc_request *storvsc_req;
struct vmscsi_request *vm_srb;
int ret;
@@ -541,10 +539,8 @@ out:
  */
 static int blkvsc_remove(struct device *device)
 {
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
struct storvsc_driver_object *storvsc_drv_obj =
-   drv-priv;
+   drv_to_stordrv(device-driver);
struct hv_device *device_obj = device_to_hv_device(device);
struct block_device_context *blkdev = dev_get_drvdata(device);
unsigned long flags;
@@ -881,8 +877,6 @@ static int blkvsc_drv_init(void)
 
storvsc_drv_obj-ring_buffer_size = blkvsc_ringbuffer_size;
 
-   drv-priv = storvsc_drv_obj;
-
/* Callback to client driver to complete the initialization */
blk_vsc_initialize(storvsc_drv_obj-base);
 
@@ -945,10 +939,8 @@ static void blkvsc_drv_exit(void)
  */
 static int blkvsc_probe(struct device *device)
 {
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
struct storvsc_driver_object *storvsc_drv_obj =
-   drv-priv;
+   drv_to_stordrv(device-driver);
struct hv_device *device_obj = device_to_hv_device(device);
 
struct block_device_context *blkdev = NULL;
diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index 85bae5a..d53aa97 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -414,7 +414,7 @@ static int stor_vsc_connect_to_vsp(struct hv_device *device)
struct storvsc_driver_object *stor_driver;
int ret;
 
-   stor_driver = (struct storvsc_driver_object *)device-drv;
+   stor_driver = drv_to_stordrv(device-device.driver);
memset(props, 0, sizeof(struct vmstorage_channel_properties));
 
/* Open the channel */
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 14/25] Staging: hv: Properly handle errors in hv_pci_probe()

2011-04-26 Thread K. Y. Srinivasan
Much of the vmbus driver initialization is done within the hv_pci_probe()
function. Properly handle errors in hv_pci_probe so that we can
appropriately deal with loading of the vmbus driver.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |   34 +-
 1 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index 248dc8a..a2acbce 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -54,6 +54,8 @@ EXPORT_SYMBOL(vmbus_loglevel);
/* (ALL_MODULES  16 | DEBUG_LVL_ENTEREXIT); */
/* (((VMBUS | VMBUS_DRV)16) | DEBUG_LVL_ENTEREXIT); */
 
+static int pci_probe_error;
+static struct completion probe_event;
 
 static void get_channel_info(struct hv_device *device,
 struct hv_device_info *info)
@@ -732,19 +734,19 @@ void vmbus_child_device_unregister(struct hv_device 
*device_obj)
 static int __devinit hv_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
 {
-   int err;
-
hv_pci_dev = pdev;
 
-   err = pci_enable_device(pdev);
-   if (err)
-   return err;
+   pci_probe_error = pci_enable_device(pdev);
+   if (pci_probe_error)
+   goto probe_cleanup;
 
-   err = vmbus_bus_init(pdev);
-   if (err)
+   pci_probe_error = vmbus_bus_init(pdev);
+   if (pci_probe_error)
pci_disable_device(pdev);
 
-   return err;
+probe_cleanup:
+   complete(probe_event);
+   return pci_probe_error;
 }
 
 /*
@@ -767,7 +769,21 @@ static struct pci_driver hv_bus_driver = {
 
 static int __init hv_pci_init(void)
 {
-   return pci_register_driver(hv_bus_driver);
+   int ret;
+   init_completion(probe_event);
+   ret = pci_register_driver(hv_bus_driver);
+   if (ret)
+   return ret;
+   /*
+* All the vmbus initialization occurs within the
+* hv_pci_probe() function. Wait for hv_pci_probe()
+* to complete.
+*/
+   wait_for_completion(probe_event);
+
+   if (pci_probe_error)
+   pci_unregister_driver(hv_bus_driver);
+   return pci_probe_error;
 }
 
 
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 18/25] Staging: hv: Get rid of struct hv_bus

2011-04-26 Thread K. Y. Srinivasan
Now, get rid of struct hv_bus. We will no longer be embedding
struct bus_type.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |   33 ++---
 1 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index a3a7741..515311c 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -45,11 +45,6 @@ static struct pci_dev *hv_pci_dev;
 static struct tasklet_struct msg_dpc;
 static struct tasklet_struct event_dpc;
 
-/* Main vmbus driver data structure */
-struct hv_bus {
-   struct bus_type bus;
-};
-
 unsigned int vmbus_loglevel = (ALL_MODULES  16 | INFO_LVL);
 EXPORT_SYMBOL(vmbus_loglevel);
/* (ALL_MODULES  16 | DEBUG_LVL_ENTEREXIT); */
@@ -405,14 +400,14 @@ static void vmbus_device_release(struct device *device)
 }
 
 /* The one and only one */
-static struct hv_bus  hv_bus = {
-   .bus.name = vmbus,
-   .bus.match =vmbus_match,
-   .bus.shutdown = vmbus_shutdown,
-   .bus.remove =   vmbus_remove,
-   .bus.probe =vmbus_probe,
-   .bus.uevent =   vmbus_uevent,
-   .bus.dev_attrs =vmbus_device_attrs,
+static struct bus_type  hv_bus = {
+   .name = vmbus,
+   .match =vmbus_match,
+   .shutdown = vmbus_shutdown,
+   .remove =   vmbus_remove,
+   .probe =vmbus_probe,
+   .uevent =   vmbus_uevent,
+   .dev_attrs =vmbus_device_attrs,
 };
 
 static const char *driver_name = hyperv;
@@ -550,14 +545,14 @@ static int vmbus_bus_init(struct pci_dev *pdev)
goto cleanup;
}
 
-   hv_bus.bus.name = driver_name;
+   hv_bus.name = driver_name;
 
/* Initialize the bus context */
tasklet_init(msg_dpc, vmbus_on_msg_dpc, 0);
tasklet_init(event_dpc, vmbus_on_event, 0);
 
/* Now, register the bus  with LDM */
-   ret = bus_register(hv_bus.bus);
+   ret = bus_register(hv_bus);
if (ret) {
ret = -1;
goto cleanup;
@@ -572,7 +567,7 @@ static int vmbus_bus_init(struct pci_dev *pdev)
pr_err(Unable to request IRQ %d\n,
   pdev-irq);
 
-   bus_unregister(hv_bus.bus);
+   bus_unregister(hv_bus);
 
ret = -1;
goto cleanup;
@@ -588,7 +583,7 @@ static int vmbus_bus_init(struct pci_dev *pdev)
ret = vmbus_connect();
if (ret) {
free_irq(pdev-irq, pdev);
-   bus_unregister(hv_bus.bus);
+   bus_unregister(hv_bus);
goto cleanup;
}
 
@@ -618,7 +613,7 @@ int vmbus_child_driver_register(struct device_driver *drv)
pr_info(child driver registering - name %s\n, drv-name);
 
/* The child driver on this vmbus */
-   drv-bus = hv_bus.bus;
+   drv-bus = hv_bus;
 
ret = driver_register(drv);
 
@@ -688,7 +683,7 @@ int vmbus_child_device_register(struct hv_device 
*child_device_obj)
 atomic_inc_return(device_num));
 
/* The new device belongs to this bus */
-   child_device_obj-device.bus = hv_bus.bus; /* device-dev.bus; */
+   child_device_obj-device.bus = hv_bus; /* device-dev.bus; */
child_device_obj-device.parent = hv_pci_dev-dev;
child_device_obj-device.release = vmbus_device_release;
 
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 08/25] Staging: hv: vmbus_driver cannot be unloaded; cleanup accordingly

2011-04-26 Thread K. Y. Srinivasan
The vmbus driver cannot be unloaded; the windows host does not
permit this. Cleanup accordingly.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |   32 
 1 files changed, 0 insertions(+), 32 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index bf124a7..d597dd4 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -622,30 +622,6 @@ cleanup:
return ret;
 }
 
-/*
- * vmbus_bus_exit - Terminate the vmbus driver.
- *
- * This routine is opposite of vmbus_bus_init()
- */
-static void vmbus_bus_exit(void)
-{
-
-
-   vmbus_release_unattached_channels();
-   vmbus_disconnect();
-   on_each_cpu(hv_synic_cleanup, NULL, 1);
-
-   hv_cleanup();
-
-   bus_unregister(hv_bus.bus);
-
-   free_irq(hv_pci_dev-irq, hv_pci_dev);
-
-   tasklet_kill(hv_bus.msg_dpc);
-   tasklet_kill(hv_bus.event_dpc);
-}
-
-
 /**
  * vmbus_child_driver_register() - Register a vmbus's child driver
  * @drv:Pointer to driver structure you want to register
@@ -814,17 +790,9 @@ static int __init hv_pci_init(void)
return pci_register_driver(hv_bus_driver);
 }
 
-static void __exit hv_pci_exit(void)
-{
-   vmbus_bus_exit();
-   pci_unregister_driver(hv_bus_driver);
-}
-
-
 
 MODULE_LICENSE(GPL);
 MODULE_VERSION(HV_DRV_VERSION);
 module_param(vmbus_loglevel, int, S_IRUGO|S_IWUSR);
 
 module_init(hv_pci_init);
-module_exit(hv_pci_exit);
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 04/25] Staging: hv: Introduce a function to map a generic driver pointer to a pointer to struct netvsc_driver

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of the priv element from struct hv_driver,
introduce a function to map a generic driver pointer to a pointer to
struct netvsc_driver.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/netvsc_api.h |8 
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/hv/netvsc_api.h b/drivers/staging/hv/netvsc_api.h
index b4bed36..48b512b 100644
--- a/drivers/staging/hv/netvsc_api.h
+++ b/drivers/staging/hv/netvsc_api.h
@@ -26,6 +26,7 @@
 #define _NETVSC_API_H_
 
 #include vmbus_api.h
+#include vmbus.h
 
 /* Fwd declaration */
 struct hv_netvsc_packet;
@@ -103,6 +104,13 @@ struct netvsc_driver {
void *ctx;
 };
 
+static inline
+struct netvsc_driver *drv_to_netvscdrv(struct device_driver *d)
+{
+   struct hv_driver *hvdrv = drv_to_hv_drv(d);
+   return container_of(hvdrv, struct netvsc_driver, base);
+}
+
 struct netvsc_device_info {
unsigned char mac_adr[6];
bool link_state;/* 0 - link up, 1 - link down */
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 22/25] Staging: hv: Use the remove() function in struct hv_driver

2011-04-26 Thread K. Y. Srinivasan
Use the newly introduced remove() function in struct hv_driver.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/blkvsc_drv.c  |   11 +--
 drivers/staging/hv/hv_mouse.c|   11 +--
 drivers/staging/hv/netvsc_drv.c  |   13 ++---
 drivers/staging/hv/storvsc_drv.c |   13 ++---
 drivers/staging/hv/vmbus_drv.c   |9 +++--
 5 files changed, 25 insertions(+), 32 deletions(-)

diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 20b9a53..80f7c0e 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -537,19 +537,18 @@ out:
 /*
  * blkvsc_remove() - Callback when our device is removed
  */
-static int blkvsc_remove(struct device *device)
+static int blkvsc_remove(struct hv_device *dev)
 {
struct storvsc_driver_object *storvsc_drv_obj =
-   drv_to_stordrv(device-driver);
-   struct hv_device *device_obj = device_to_hv_device(device);
-   struct block_device_context *blkdev = dev_get_drvdata(device);
+   drv_to_stordrv(dev-device.driver);
+   struct block_device_context *blkdev = dev_get_drvdata(dev-device);
unsigned long flags;
 
/*
 * Call to the vsc driver to let it know that the device is being
 * removed
 */
-   storvsc_drv_obj-base.dev_rm(device_obj);
+   storvsc_drv_obj-base.dev_rm(dev);
 
/* Get to a known state */
spin_lock_irqsave(blkdev-lock, flags);
@@ -883,7 +882,7 @@ static int blkvsc_drv_init(void)
drv-driver.name = storvsc_drv_obj-base.name;
 
drv-probe = blkvsc_probe;
-   drv-driver.remove = blkvsc_remove;
+   drv-remove = blkvsc_remove;
drv-driver.shutdown = blkvsc_shutdown;
 
/* The driver belongs to vmbus */
diff --git a/drivers/staging/hv/hv_mouse.c b/drivers/staging/hv/hv_mouse.c
index e2363b3..d49a51e 100644
--- a/drivers/staging/hv/hv_mouse.c
+++ b/drivers/staging/hv/hv_mouse.c
@@ -858,20 +858,19 @@ static int mousevsc_probe(struct hv_device *dev)
return 0;
 }
 
-static int mousevsc_remove(struct device *device)
+static int mousevsc_remove(struct hv_device *dev)
 {
int ret = 0;
 
struct mousevsc_drv_obj *mousevsc_drv_obj =
-   drv_to_mousedrv(device-driver);
+   drv_to_mousedrv(dev-device.driver);
 
-   struct hv_device *device_obj = device_to_hv_device(device);
struct input_device_context *input_dev_ctx;
 
input_dev_ctx = kmalloc(sizeof(struct input_device_context),
GFP_KERNEL);
 
-   dev_set_drvdata(device, input_dev_ctx);
+   dev_set_drvdata(dev-device, input_dev_ctx);
 
if (input_dev_ctx-connected) {
hidinput_disconnect(input_dev_ctx-hid_device);
@@ -885,7 +884,7 @@ static int mousevsc_remove(struct device *device)
 * Call to the vsc driver to let it know that the device
 * is being removed
 */
-   ret = mousevsc_drv_obj-base.dev_rm(device_obj);
+   ret = mousevsc_drv_obj-base.dev_rm(dev);
 
if (ret != 0) {
DPRINT_ERR(INPUTVSC_DRV,
@@ -1023,7 +1022,7 @@ static int __init mousevsc_init(void)
drv-driver.name = input_drv_obj-base.name;
 
drv-probe = mousevsc_probe;
-   drv-driver.remove = mousevsc_remove;
+   drv-remove = mousevsc_remove;
 
/* The driver belongs to vmbus */
vmbus_child_driver_register(drv-driver);
diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c
index 685a6f5..f4c6000 100644
--- a/drivers/staging/hv/netvsc_drv.c
+++ b/drivers/staging/hv/netvsc_drv.c
@@ -408,16 +408,15 @@ static int netvsc_probe(struct hv_device *dev)
return ret;
 }
 
-static int netvsc_remove(struct device *device)
+static int netvsc_remove(struct hv_device *dev)
 {
struct netvsc_driver *net_drv_obj =
-   drv_to_netvscdrv(device-driver);
-   struct hv_device *device_obj = device_to_hv_device(device);
-   struct net_device *net = dev_get_drvdata(device_obj-device);
+   drv_to_netvscdrv(dev-device.driver);
+   struct net_device *net = dev_get_drvdata(dev-device);
int ret;
 
if (net == NULL) {
-   dev_err(device, No net device to remove\n);
+   dev_err(dev-device, No net device to remove\n);
return 0;
}
 
@@ -434,7 +433,7 @@ static int netvsc_remove(struct device *device)
 * Call to the vsc driver to let it know that the device is being
 * removed
 */
-   ret = net_drv_obj-base.dev_rm(device_obj);
+   ret = net_drv_obj-base.dev_rm(dev);
if (ret != 0) {
/* TODO: */
netdev_err(net, unable to remove vsc device (ret 

[PATCH 17/25] Staging: hv: Make event_dpc a global variable

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of struct hv_bus, Make event_dpc a
global variable.


Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index 028051d..a3a7741 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -43,11 +43,11 @@
 static struct pci_dev *hv_pci_dev;
 
 static struct tasklet_struct msg_dpc;
+static struct tasklet_struct event_dpc;
 
 /* Main vmbus driver data structure */
 struct hv_bus {
struct bus_type bus;
-   struct tasklet_struct event_dpc;
 };
 
 unsigned int vmbus_loglevel = (ALL_MODULES  16 | INFO_LVL);
@@ -521,7 +521,7 @@ static irqreturn_t vmbus_isr(int irq, void *dev_id)
tasklet_schedule(msg_dpc);
 
if (test_bit(1, (unsigned long *)ret))
-   tasklet_schedule(hv_bus.event_dpc);
+   tasklet_schedule(event_dpc);
 
return IRQ_HANDLED;
} else {
@@ -554,7 +554,7 @@ static int vmbus_bus_init(struct pci_dev *pdev)
 
/* Initialize the bus context */
tasklet_init(msg_dpc, vmbus_on_msg_dpc, 0);
-   tasklet_init(hv_bus.event_dpc, vmbus_on_event, 0);
+   tasklet_init(event_dpc, vmbus_on_event, 0);
 
/* Now, register the bus  with LDM */
ret = bus_register(hv_bus.bus);
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 19/25] Staging: hv: Add probe function to struct hv_driver

2011-04-26 Thread K. Y. Srinivasan
Add probe function to struct hv_driver.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_api.h |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h
index c953d6e..6f3741d 100644
--- a/drivers/staging/hv/vmbus_api.h
+++ b/drivers/staging/hv/vmbus_api.h
@@ -99,6 +99,9 @@ struct hv_driver {
int (*dev_add)(struct hv_device *device, void *data);
int (*dev_rm)(struct hv_device *device);
void (*cleanup)(struct hv_driver *driver);
+
+   int (*probe)(struct hv_device *);
+
 };
 
 /* Base device object */
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 23/25] Staging: hv: Add shutdown() function to struct hv_driver

2011-04-26 Thread K. Y. Srinivasan
Add shutdown() function to struct hv_driver.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_api.h |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h
index 1af1b62..0025002 100644
--- a/drivers/staging/hv/vmbus_api.h
+++ b/drivers/staging/hv/vmbus_api.h
@@ -102,6 +102,7 @@ struct hv_driver {
 
int (*probe)(struct hv_device *);
int (*remove)(struct hv_device *);
+   void (*shutdown)(struct hv_device *);
 
 };
 
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 20/25] Staging: hv: Use the probe function in struct hv_driver

2011-04-26 Thread K. Y. Srinivasan
Use the newly introduced probe function.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/blkvsc_drv.c  |   19 +--
 drivers/staging/hv/hv_mouse.c|   11 +--
 drivers/staging/hv/netvsc_drv.c  |   19 +--
 drivers/staging/hv/storvsc_drv.c |   23 +++
 drivers/staging/hv/vmbus_drv.c   |5 ++---
 5 files changed, 36 insertions(+), 41 deletions(-)

diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index ec6a761..20b9a53 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -140,7 +140,7 @@ MODULE_PARM_DESC(ring_size, Ring buffer size (in bytes));
  * There is a circular dependency involving blkvsc_probe()
  * and block_ops.
  */
-static int blkvsc_probe(struct device *dev);
+static int blkvsc_probe(struct hv_device *dev);
 
 static int blk_vsc_on_device_add(struct hv_device *device,
void *additional_info)
@@ -882,7 +882,7 @@ static int blkvsc_drv_init(void)
 
drv-driver.name = storvsc_drv_obj-base.name;
 
-   drv-driver.probe = blkvsc_probe;
+   drv-probe = blkvsc_probe;
drv-driver.remove = blkvsc_remove;
drv-driver.shutdown = blkvsc_shutdown;
 
@@ -937,11 +937,10 @@ static void blkvsc_drv_exit(void)
 /*
  * blkvsc_probe - Add a new device for this driver
  */
-static int blkvsc_probe(struct device *device)
+static int blkvsc_probe(struct hv_device *dev)
 {
struct storvsc_driver_object *storvsc_drv_obj =
-   drv_to_stordrv(device-driver);
-   struct hv_device *device_obj = device_to_hv_device(device);
+   drv_to_stordrv(dev-device.driver);
 
struct block_device_context *blkdev = NULL;
struct storvsc_device_info device_info;
@@ -961,7 +960,7 @@ static int blkvsc_probe(struct device *device)
spin_lock_init(blkdev-lock);
 
 
-   blkdev-request_pool = kmem_cache_create(dev_name(device_obj-device),
+   blkdev-request_pool = kmem_cache_create(dev_name(dev-device),
sizeof(struct blkvsc_request), 0,
SLAB_HWCACHE_ALIGN, NULL);
if (!blkdev-request_pool) {
@@ -971,17 +970,17 @@ static int blkvsc_probe(struct device *device)
 
 
/* Call to the vsc driver to add the device */
-   ret = storvsc_drv_obj-base.dev_add(device_obj, device_info);
+   ret = storvsc_drv_obj-base.dev_add(dev, device_info);
if (ret != 0)
goto cleanup;
 
-   blkdev-device_ctx = device_obj;
+   blkdev-device_ctx = dev;
/* this identified the device 0 or 1 */
blkdev-target = device_info.target_id;
/* this identified the ide ctrl 0 or 1 */
blkdev-path = device_info.path_id;
 
-   dev_set_drvdata(device, blkdev);
+   dev_set_drvdata(dev-device, blkdev);
 
ret = stor_vsc_get_major_info(device_info, major_info);
 
@@ -1041,7 +1040,7 @@ static int blkvsc_probe(struct device *device)
return ret;
 
 remove:
-   storvsc_drv_obj-base.dev_rm(device_obj);
+   storvsc_drv_obj-base.dev_rm(dev);
 
 cleanup:
if (blkdev) {
diff --git a/drivers/staging/hv/hv_mouse.c b/drivers/staging/hv/hv_mouse.c
index 4333247..e2363b3 100644
--- a/drivers/staging/hv/hv_mouse.c
+++ b/drivers/staging/hv/hv_mouse.c
@@ -832,23 +832,22 @@ static void mousevsc_hid_close(struct hid_device *hid)
 {
 }
 
-static int mousevsc_probe(struct device *device)
+static int mousevsc_probe(struct hv_device *dev)
 {
int ret = 0;
 
struct mousevsc_drv_obj *mousevsc_drv_obj =
-   drv_to_mousedrv(device-driver);
+   drv_to_mousedrv(dev-device.driver);
 
-   struct hv_device *device_obj = device_to_hv_device(device);
struct input_device_context *input_dev_ctx;
 
input_dev_ctx = kmalloc(sizeof(struct input_device_context),
GFP_KERNEL);
 
-   dev_set_drvdata(device, input_dev_ctx);
+   dev_set_drvdata(dev-device, input_dev_ctx);
 
/* Call to the vsc driver to add the device */
-   ret = mousevsc_drv_obj-base.dev_add(device_obj, NULL);
+   ret = mousevsc_drv_obj-base.dev_add(dev, NULL);
 
if (ret != 0) {
DPRINT_ERR(INPUTVSC_DRV, unable to add input vsc device);
@@ -1023,7 +1022,7 @@ static int __init mousevsc_init(void)
 
drv-driver.name = input_drv_obj-base.name;
 
-   drv-driver.probe = mousevsc_probe;
+   drv-probe = mousevsc_probe;
drv-driver.remove = mousevsc_remove;
 
/* The driver belongs to vmbus */
diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c
index e61eb7e..685a6f5 100644
--- a/drivers/staging/hv/netvsc_drv.c
+++ 

[PATCH 07/25] Staging: hv: Cleanup vmbus_match()

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of the priv element from struct hv_driver,
cleanup vmbus_match - the setting of the drv field in struct hv_device
is not needed.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |7 ++-
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index c85d796..bf124a7 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -307,12 +307,9 @@ static int vmbus_match(struct device *device, struct 
device_driver *driver)
 
/* We found our driver ? */
if (memcmp(device_ctx-dev_type, drv-dev_type,
-  sizeof(struct hv_guid)) == 0) {
-
-   device_ctx-drv = drv-priv;
-
+  sizeof(struct hv_guid)) == 0)
match = 1;
-   }
+
return match;
 }
 
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 13/25] Staging: hv: Cleanup vmbus_probe() function

2011-04-26 Thread K. Y. Srinivasan
The logic for handling probe failure was broken. Now that we have
cleaned up error handling, get rid of the vmbus_probe_failed_cb()
function.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_api.h |2 --
 drivers/staging/hv/vmbus_drv.c |   27 +--
 2 files changed, 1 insertions(+), 28 deletions(-)

diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h
index 02e3587..c953d6e 100644
--- a/drivers/staging/hv/vmbus_api.h
+++ b/drivers/staging/hv/vmbus_api.h
@@ -105,8 +105,6 @@ struct hv_driver {
 struct hv_device {
char name[64];
 
-   struct work_struct probe_failed_work_item;
-
int probe_error;
 
/* the device type id of this device */
diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index 4d569ad..248dc8a 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -313,27 +313,6 @@ static int vmbus_match(struct device *device, struct 
device_driver *driver)
return match;
 }
 
-
-/*
- * vmbus_probe_failed_cb - Callback when a driver probe failed in vmbus_probe()
- *
- * We need a callback because we cannot invoked device_unregister() inside
- * vmbus_probe() since vmbus_probe() may be invoked inside device_register()
- * i.e. we cannot call device_unregister() inside device_register()
- */
-static void vmbus_probe_failed_cb(struct work_struct *context)
-{
-   struct hv_device *device_ctx = (struct hv_device *)context;
-
-   /*
-* Kick off the process of unregistering the device.
-* This will call vmbus_remove() and eventually vmbus_device_release()
-*/
-   device_unregister(device_ctx-device);
-
-   /* put_device(device_ctx-device); */
-}
-
 /*
  * vmbus_probe - Add the new vmbus's child device
  */
@@ -348,14 +327,10 @@ static int vmbus_probe(struct device *child_device)
if (drv-driver.probe) {
ret = dev-probe_error =
drv-driver.probe(child_device);
-   if (ret != 0) {
+   if (ret != 0)
pr_err(probe failed for device %s (%d)\n,
   dev_name(child_device), ret);
 
-   INIT_WORK(dev-probe_failed_work_item,
- vmbus_probe_failed_cb);
-   schedule_work(dev-probe_failed_work_item);
-   }
} else {
pr_err(probe not set for driver %s\n,
   dev_name(child_device));
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 05/25] Staging: hv: Get rid of the references to the priv element of struct hv_driver in net driver

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of the priv element from struct hv_driver,
get rid of the references to the priv element of struct
hv_driver in network driver.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/netvsc.c |   11 +++
 drivers/staging/hv/netvsc_drv.c |   16 ++--
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/hv/netvsc.c b/drivers/staging/hv/netvsc.c
index b3e6497..27c7449 100644
--- a/drivers/staging/hv/netvsc.c
+++ b/drivers/staging/hv/netvsc.c
@@ -835,6 +835,9 @@ static void netvsc_receive(struct hv_device *device,
int i, j;
int count = 0, bytes_remain = 0;
unsigned long flags;
+   struct netvsc_driver *netvsc_drv =
+drv_to_netvscdrv(device-device.driver);
+
LIST_HEAD(listHead);
 
net_device = get_inbound_net_device(device);
@@ -995,8 +998,7 @@ static void netvsc_receive(struct hv_device *device,
}
 
/* Pass it to the upper layer */
-   ((struct netvsc_driver *)device-drv)-
-   recv_cb(device, netvsc_packet);
+   netvsc_drv-recv_cb(device, netvsc_packet);
 
netvsc_receive_completion(netvsc_packet-
completion.recv.recv_completion_ctx);
@@ -1102,7 +1104,7 @@ static int netvsc_device_add(struct hv_device *device, 
void *additional_info)
struct netvsc_device *net_device;
struct hv_netvsc_packet *packet, *pos;
struct netvsc_driver *net_driver =
-   (struct netvsc_driver *)device-drv;
+   drv_to_netvscdrv(device-device.driver);
 
net_device = alloc_net_device(device);
if (!net_device) {
@@ -1183,7 +1185,8 @@ cleanup:
  */
 int netvsc_initialize(struct hv_driver *drv)
 {
-   struct netvsc_driver *driver = (struct netvsc_driver *)drv;
+   struct netvsc_driver *driver =
+   drv_to_netvscdrv(drv-driver);
 
drv-name = driver_name;
memcpy(drv-dev_type, netvsc_device_type, sizeof(struct hv_guid));
diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c
index 096a732..e61eb7e 100644
--- a/drivers/staging/hv/netvsc_drv.c
+++ b/drivers/staging/hv/netvsc_drv.c
@@ -132,9 +132,8 @@ static void netvsc_xmit_completion(void *context)
 static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
 {
struct net_device_context *net_device_ctx = netdev_priv(net);
-   struct hv_driver *drv =
-   drv_to_hv_drv(net_device_ctx-device_ctx-device.driver);
-   struct netvsc_driver *net_drv_obj = drv-priv;
+   struct netvsc_driver *net_drv_obj =
+   drv_to_netvscdrv(net_device_ctx-device_ctx-device.driver);
struct hv_netvsc_packet *packet;
int ret;
unsigned int i, num_pages;
@@ -343,9 +342,8 @@ static void netvsc_send_garp(struct work_struct *w)
 
 static int netvsc_probe(struct device *device)
 {
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
-   struct netvsc_driver *net_drv_obj = drv-priv;
+   struct netvsc_driver *net_drv_obj =
+   drv_to_netvscdrv(device-driver);
struct hv_device *device_obj = device_to_hv_device(device);
struct net_device *net = NULL;
struct net_device_context *net_device_ctx;
@@ -413,9 +411,8 @@ static int netvsc_probe(struct device *device)
 
 static int netvsc_remove(struct device *device)
 {
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
-   struct netvsc_driver *net_drv_obj = drv-priv;
+   struct netvsc_driver *net_drv_obj =
+   drv_to_netvscdrv(device-driver);
struct hv_device *device_obj = device_to_hv_device(device);
struct net_device *net = dev_get_drvdata(device_obj-device);
int ret;
@@ -498,7 +495,6 @@ static int netvsc_drv_init(int (*drv_init)(struct hv_driver 
*drv))
net_drv_obj-ring_buf_size = ring_size * PAGE_SIZE;
net_drv_obj-recv_cb = netvsc_recv_callback;
net_drv_obj-link_status_change = netvsc_linkstatus_callback;
-   drv-priv = net_drv_obj;
 
/* Callback to client driver to complete the initialization */
drv_init(net_drv_obj-base);
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 15/25] Staging: hv: Make hv_pci_dev a static variable

2011-04-26 Thread K. Y. Srinivasan
Make hv_pci_dev a static variable.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index a2acbce..f779d4e 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -40,7 +40,7 @@
 #include vmbus_private.h
 
 
-struct pci_dev *hv_pci_dev;
+static struct pci_dev *hv_pci_dev;
 
 /* Main vmbus driver data structure */
 struct hv_bus {
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 10/25] Staging: hv: Get rid of the priv pointer in struct hv_driver

2011-04-26 Thread K. Y. Srinivasan
Now that we have gotten rid of all uses of the priv element in
struct hv_driver, get rid of the priv pointer.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_api.h |   10 --
 1 files changed, 0 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h
index f0d96eb..51fa952 100644
--- a/drivers/staging/hv/vmbus_api.h
+++ b/drivers/staging/hv/vmbus_api.h
@@ -94,16 +94,6 @@ struct hv_driver {
/* the device type supported by this driver */
struct hv_guid dev_type;
 
-   /*
-* Device type specific drivers (net, blk etc.)
-* need a mechanism to get a pointer to
-* device type specific driver structure given
-* a pointer to the base hyperv driver structure.
-* The current code solves this problem using
-* a hack. Support this need explicitly
-*/
-   void *priv;
-
struct device_driver driver;
 
int (*dev_add)(struct hv_device *device, void *data);
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 11/25] Staging: hv: Get rid of the drv field in struct hv_device

2011-04-26 Thread K. Y. Srinivasan
Now, we can rid of the drv field in struct hv_device.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_api.h |3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h
index 51fa952..02e3587 100644
--- a/drivers/staging/hv/vmbus_api.h
+++ b/drivers/staging/hv/vmbus_api.h
@@ -103,9 +103,6 @@ struct hv_driver {
 
 /* Base device object */
 struct hv_device {
-   /* the driver for this device */
-   struct hv_driver *drv;
-
char name[64];
 
struct work_struct probe_failed_work_item;
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 06/25] Staging: hv: Get rid of the references to the priv element of struct hv_driver in storvsc_drv.c

2011-04-26 Thread K. Y. Srinivasan
In preparation for getting rid of the priv element from struct hv_driver,
get rid of the references to the priv element of struct
hv_driver in storvsc_drv.c.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/storvsc_drv.c |   17 ++---
 1 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index f819c6a..5ac2904 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -197,8 +197,6 @@ static int storvsc_drv_init(void)
/* Callback to client driver to complete the initialization */
stor_vsc_initialize(storvsc_drv_obj-base);
 
-   drv-priv = storvsc_drv_obj;
-
DPRINT_INFO(STORVSC_DRV,
max outstanding reqs %u,
storvsc_drv_obj-max_outstanding_req_per_channel);
@@ -325,9 +323,8 @@ static void storvsc_drv_exit(void)
 static int storvsc_probe(struct device *device)
 {
int ret;
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
-   struct storvsc_driver_object *storvsc_drv_obj = drv-priv;
+   struct storvsc_driver_object *storvsc_drv_obj =
+drv_to_stordrv(device-driver);
struct hv_device *device_obj = device_to_hv_device(device);
struct Scsi_Host *host;
struct host_device_context *host_device_ctx;
@@ -404,9 +401,8 @@ static int storvsc_probe(struct device *device)
  */
 static int storvsc_remove(struct device *device)
 {
-   struct hv_driver *drv =
-   drv_to_hv_drv(device-driver);
-   struct storvsc_driver_object *storvsc_drv_obj = drv-priv;
+   struct storvsc_driver_object *storvsc_drv_obj =
+drv_to_stordrv(device-driver);
struct hv_device *device_obj = device_to_hv_device(device);
struct Scsi_Host *host = dev_get_drvdata(device);
struct host_device_context *host_device_ctx =
@@ -692,9 +688,8 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
struct host_device_context *host_device_ctx =
(struct host_device_context *)scmnd-device-host-hostdata;
struct hv_device *device_ctx = host_device_ctx-device_ctx;
-   struct hv_driver *drv =
-   drv_to_hv_drv(device_ctx-device.driver);
-   struct storvsc_driver_object *storvsc_drv_obj = drv-priv;
+   struct storvsc_driver_object *storvsc_drv_obj =
+   drv_to_stordrv(device_ctx-device.driver);
struct hv_storvsc_request *request;
struct storvsc_cmd_request *cmd_request;
unsigned int request_size = 0;
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 09/25] Staging: hv: Get rid of vmbus_release_unattached_channels() as it is not used

2011-04-26 Thread K. Y. Srinivasan
Since vmbus_release_unattached_channels() is only used in module
unload path and since the vmbus driver cannot be unloaded,
get rid of this dead code.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/channel_mgmt.c |   33 -
 drivers/staging/hv/channel_mgmt.h |2 --
 2 files changed, 0 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/hv/channel_mgmt.c 
b/drivers/staging/hv/channel_mgmt.c
index fe32f7e..1929ab3 100644
--- a/drivers/staging/hv/channel_mgmt.c
+++ b/drivers/staging/hv/channel_mgmt.c
@@ -791,37 +791,4 @@ cleanup:
return ret;
 }
 
-/*
- * vmbus_release_unattached_channels - Release channels that are
- * unattached/unconnected ie (no drivers associated)
- */
-void vmbus_release_unattached_channels(void)
-{
-   struct vmbus_channel *channel, *pos;
-   struct vmbus_channel *start = NULL;
-   unsigned long flags;
-
-   spin_lock_irqsave(vmbus_connection.channel_lock, flags);
-
-   list_for_each_entry_safe(channel, pos, vmbus_connection.chn_list,
-listentry) {
-   if (channel == start)
-   break;
-
-   if (!channel-device_obj-drv) {
-   list_del(channel-listentry);
-
-   pr_err(Releasing unattached device object\n);
-
-   vmbus_child_device_unregister(channel-device_obj);
-   free_channel(channel);
-   } else {
-   if (!start)
-   start = channel;
-   }
-   }
-
-   spin_unlock_irqrestore(vmbus_connection.channel_lock, flags);
-}
-
 /* eof */
diff --git a/drivers/staging/hv/channel_mgmt.h 
b/drivers/staging/hv/channel_mgmt.h
index 96f74e2..3b2c393 100644
--- a/drivers/staging/hv/channel_mgmt.h
+++ b/drivers/staging/hv/channel_mgmt.h
@@ -315,6 +315,4 @@ void vmbus_onmessage(void *context);
 
 int vmbus_request_offers(void);
 
-void vmbus_release_unattached_channels(void);
-
 #endif /* _CHANNEL_MGMT_H_ */
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 21/25] Staging: hv: Add remove() function to struct hv_driver

2011-04-26 Thread K. Y. Srinivasan
Add remove() function to struct hv_driver.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_api.h |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h
index 6f3741d..1af1b62 100644
--- a/drivers/staging/hv/vmbus_api.h
+++ b/drivers/staging/hv/vmbus_api.h
@@ -101,6 +101,7 @@ struct hv_driver {
void (*cleanup)(struct hv_driver *driver);
 
int (*probe)(struct hv_device *);
+   int (*remove)(struct hv_device *);
 
 };
 
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 20/25] Staging: hv: Use the probe function in struct hv_driver

2011-04-26 Thread Christoph Hellwig
 @@ -882,7 +882,7 @@ static int blkvsc_drv_init(void)
  
   drv-driver.name = storvsc_drv_obj-base.name;
  
 - drv-driver.probe = blkvsc_probe;
 + drv-probe = blkvsc_probe;
   drv-driver.remove = blkvsc_remove;
   drv-driver.shutdown = blkvsc_shutdown;

Not new in this patch, but you should really declare the driver as a
static object and initialize it at compile time, similar to how it's 
done for PCI and countless other busses, e.g.

struct hv_driver blkvsc_driver {
.name   = blkvsc,
.probe  = blkvsc_probe,
.remove = blkvsc_remove,
.shutdown   = blkvsc_shutdown,
};

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 00/25] Staging: hv: Cleanup vmbus driver code

2011-04-26 Thread Christoph Hellwig
Do you have a repository containing the current state of your patche
somewhere?  There's been so much cleanup that it's hard to review these
patches against the current mainline codebase.
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


RE: [PATCH 00/25] Staging: hv: Cleanup vmbus driver code

2011-04-26 Thread KY Srinivasan


 -Original Message-
 From: Christoph Hellwig [mailto:h...@infradead.org]
 Sent: Tuesday, April 26, 2011 12:57 PM
 To: KY Srinivasan
 Cc: gre...@suse.de; linux-ker...@vger.kernel.org;
 de...@linuxdriverproject.org; virtualizat...@lists.osdl.org
 Subject: Re: [PATCH 00/25] Staging: hv: Cleanup vmbus driver code
 
 Do you have a repository containing the current state of your patche
 somewhere?  There's been so much cleanup that it's hard to review these
 patches against the current mainline codebase.

Christoph,

Yesterday (April 25, 2011), Greg checked in all of the outstanding hv patches. 
So, if
You checkout Greg's tree today, you will get the most recent hv codebase. This 
current
patch-set is against Greg's current tree.

Regards,

K. Y
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 24/25] Staging: hv: Use the shutdown() function in struct hv_driver

2011-04-26 Thread K. Y. Srinivasan
Use the newly introduced  shutdown() function.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/blkvsc_drv.c |6 +++---
 drivers/staging/hv/vmbus_drv.c  |6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c
index 80f7c0e..db44cf6 100644
--- a/drivers/staging/hv/blkvsc_drv.c
+++ b/drivers/staging/hv/blkvsc_drv.c
@@ -585,9 +585,9 @@ static int blkvsc_remove(struct hv_device *dev)
 
 }
 
-static void blkvsc_shutdown(struct device *device)
+static void blkvsc_shutdown(struct hv_device *dev)
 {
-   struct block_device_context *blkdev = dev_get_drvdata(device);
+   struct block_device_context *blkdev = dev_get_drvdata(dev-device);
unsigned long flags;
 
if (!blkdev)
@@ -883,7 +883,7 @@ static int blkvsc_drv_init(void)
 
drv-probe = blkvsc_probe;
drv-remove = blkvsc_remove;
-   drv-driver.shutdown = blkvsc_shutdown;
+   drv-shutdown = blkvsc_shutdown;
 
/* The driver belongs to vmbus */
ret = vmbus_child_driver_register(drv-driver);
diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index e09b363..f95ec2b 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -368,6 +368,7 @@ static int vmbus_remove(struct device *child_device)
 static void vmbus_shutdown(struct device *child_device)
 {
struct hv_driver *drv;
+   struct hv_device *dev = device_to_hv_device(child_device);
 
 
/* The device may not be attached yet */
@@ -376,9 +377,8 @@ static void vmbus_shutdown(struct device *child_device)
 
drv = drv_to_hv_drv(child_device-driver);
 
-   /* Let the specific open-source driver handles the removal if it can */
-   if (drv-driver.shutdown)
-   drv-driver.shutdown(child_device);
+   if (drv-shutdown)
+   drv-shutdown(dev);
 
return;
 }
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 25/25] Staging: hv: VMBUS is a acpi enumerated device; get irq value from bios.

2011-04-26 Thread K. Y. Srinivasan
On some windows hosts, the Linux  PCI sub-system is not allocating irq 
resources to the
vmbus driver. It looks like VMBUS is an ACPI enumerated device. Retrieve the irq
information from DSDT. Currently we use this bios specified irq, if the PCI
sub-system fails to allocate the irq.


Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |  101 +++-
 1 files changed, 100 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index f95ec2b..1c5d43a 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -17,8 +17,8 @@
  * Authors:
  *   Haiyang Zhang haiya...@microsoft.com
  *   Hank Janssen  hjans...@microsoft.com
+ *   K. Y. Srinivasan k...@microsoft.com
  *
- * 3/9/2011: K. Y. Srinivasan  - Significant restructuring and cleanup
  */
 #define pr_fmt(fmt) KBUILD_MODNAME :  fmt
 
@@ -31,6 +31,8 @@
 #include linux/pci.h
 #include linux/dmi.h
 #include linux/slab.h
+#include linux/acpi.h
+#include acpi/acpi_bus.h
 #include linux/completion.h
 #include version_info.h
 #include hv_api.h
@@ -52,6 +54,7 @@ EXPORT_SYMBOL(vmbus_loglevel);
 
 static int pci_probe_error;
 static struct completion probe_event;
+static int irq;
 
 static void get_channel_info(struct hv_device *device,
 struct hv_device_info *info)
@@ -723,6 +726,74 @@ void vmbus_child_device_unregister(struct hv_device 
*device_obj)
 }
 
 
+/*
+ * VMBUS is an acpi enumerated device. Get the the IRQ information
+ * from DSDT.
+ */
+
+static acpi_status vmbus_walk_resources(struct acpi_resource *res, void *irq)
+{
+
+   if (res-type == ACPI_RESOURCE_TYPE_IRQ) {
+   struct acpi_resource_irq *irqp;
+   irqp = res-data.irq;
+
+   *((unsigned int *)irq) = irqp-interrupts[0];
+   }
+
+   return AE_OK;
+}
+
+static int vmbus_acpi_add(struct acpi_device *device)
+{
+   acpi_status result;
+
+   result =
+   acpi_walk_resources(device-handle, METHOD_NAME__CRS,
+   vmbus_walk_resources, irq);
+
+   if (ACPI_FAILURE(result)) {
+   complete(probe_event);
+   return -ENODEV;
+   }
+   complete(probe_event);
+   return 0;
+}
+
+static const struct acpi_device_id vmbus_acpi_device_ids[] = {
+   {VMBUS, 0},
+   {, 0},
+};
+MODULE_DEVICE_TABLE(acpi, vmbus_acpi_device_ids);
+
+static struct acpi_driver vmbus_acpi_driver = {
+   .name = vmbus,
+   .ids = vmbus_acpi_device_ids,
+   .ops = {
+   .add = vmbus_acpi_add,
+   },
+};
+
+static int vmbus_acpi_init(void)
+{
+   int result;
+
+
+   result = acpi_bus_register_driver(vmbus_acpi_driver);
+   if (result  0)
+   return result;
+
+   return 0;
+}
+
+static void vmbus_acpi_exit(void)
+{
+   acpi_bus_unregister_driver(vmbus_acpi_driver);
+
+   return;
+}
+
+
 static int __devinit hv_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
 {
@@ -732,7 +803,16 @@ static int __devinit hv_pci_probe(struct pci_dev *pdev,
if (pci_probe_error)
goto probe_cleanup;
 
+   /*
+* If the PCI sub-sytem did not assign us an
+* irq, use the bios provided one.
+*/
+
+   if (pdev-irq == 0)
+   pdev-irq = irq;
+
pci_probe_error = vmbus_bus_init(pdev);
+
if (pci_probe_error)
pci_disable_device(pdev);
 
@@ -762,6 +842,25 @@ static struct pci_driver hv_bus_driver = {
 static int __init hv_pci_init(void)
 {
int ret;
+
+   init_completion(probe_event);
+
+   /*
+* Get irq resources first.
+*/
+
+   ret = vmbus_acpi_init();
+   if (ret)
+   return ret;
+
+   wait_for_completion(probe_event);
+
+   if (irq = 0) {
+   vmbus_acpi_exit();
+   return -ENODEV;
+   }
+
+   vmbus_acpi_exit();
init_completion(probe_event);
ret = pci_register_driver(hv_bus_driver);
if (ret)
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 00/25] Staging: hv: Cleanup vmbus driver code

2011-04-26 Thread Greg KH
On Tue, Apr 26, 2011 at 05:04:36PM +, KY Srinivasan wrote:
 
 
  -Original Message-
  From: Christoph Hellwig [mailto:h...@infradead.org]
  Sent: Tuesday, April 26, 2011 12:57 PM
  To: KY Srinivasan
  Cc: gre...@suse.de; linux-ker...@vger.kernel.org;
  de...@linuxdriverproject.org; virtualizat...@lists.osdl.org
  Subject: Re: [PATCH 00/25] Staging: hv: Cleanup vmbus driver code
  
  Do you have a repository containing the current state of your patche
  somewhere?  There's been so much cleanup that it's hard to review these
  patches against the current mainline codebase.
 
 Christoph,
 
 Yesterday (April 25, 2011), Greg checked in all of the outstanding hv 
 patches. So, if
 You checkout Greg's tree today, you will get the most recent hv codebase. 
 This current
 patch-set is against Greg's current tree.

It's also always in the linux-next tree, which is easier for most people
to work off of.

thanks,

greg k-h
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 18/25] Staging: hv: Get rid of struct hv_bus

2011-04-26 Thread Greg KH
On Tue, Apr 26, 2011 at 09:20:35AM -0700, K. Y. Srinivasan wrote:
 Now, get rid of struct hv_bus. We will no longer be embedding
 struct bus_type.
 
 Signed-off-by: K. Y. Srinivasan k...@microsoft.com
 Signed-off-by: Haiyang Zhang haiya...@microsoft.com
 Signed-off-by: Abhishek Kane v-abk...@microsoft.com
 Signed-off-by: Hank Janssen hjans...@microsoft.com
 ---
  drivers/staging/hv/vmbus_drv.c |   33 ++---
  1 files changed, 14 insertions(+), 19 deletions(-)
 
 diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
 index a3a7741..515311c 100644
 --- a/drivers/staging/hv/vmbus_drv.c
 +++ b/drivers/staging/hv/vmbus_drv.c
 @@ -45,11 +45,6 @@ static struct pci_dev *hv_pci_dev;
  static struct tasklet_struct msg_dpc;
  static struct tasklet_struct event_dpc;
  
 -/* Main vmbus driver data structure */
 -struct hv_bus {
 - struct bus_type bus;
 -};
 -
  unsigned int vmbus_loglevel = (ALL_MODULES  16 | INFO_LVL);
  EXPORT_SYMBOL(vmbus_loglevel);
   /* (ALL_MODULES  16 | DEBUG_LVL_ENTEREXIT); */
 @@ -405,14 +400,14 @@ static void vmbus_device_release(struct device *device)
  }
  
  /* The one and only one */
 -static struct hv_bus  hv_bus = {
 - .bus.name = vmbus,
 - .bus.match =vmbus_match,
 - .bus.shutdown = vmbus_shutdown,
 - .bus.remove =   vmbus_remove,
 - .bus.probe =vmbus_probe,
 - .bus.uevent =   vmbus_uevent,
 - .bus.dev_attrs =vmbus_device_attrs,
 +static struct bus_type  hv_bus = {
 + .name = vmbus,
 + .match =vmbus_match,
 + .shutdown = vmbus_shutdown,
 + .remove =   vmbus_remove,
 + .probe =vmbus_probe,
 + .uevent =   vmbus_uevent,
 + .dev_attrs =vmbus_device_attrs,
  };
  
  static const char *driver_name = hyperv;
 @@ -550,14 +545,14 @@ static int vmbus_bus_init(struct pci_dev *pdev)
   goto cleanup;
   }
  
 - hv_bus.bus.name = driver_name;
 + hv_bus.name = driver_name;

Why are you setting the name of the bus again?  Shouldn't this line be
removed?

thanks,

greg k-h
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


RE: [PATCH 18/25] Staging: hv: Get rid of struct hv_bus

2011-04-26 Thread KY Srinivasan


 -Original Message-
 From: Greg KH [mailto:gre...@suse.de]
 Sent: Tuesday, April 26, 2011 3:41 PM
 To: KY Srinivasan
 Cc: linux-ker...@vger.kernel.org; de...@linuxdriverproject.org;
 virtualizat...@lists.osdl.org; Haiyang Zhang; Abhishek Kane (Mindtree 
 Consulting
 PVT LTD); Hank Janssen
 Subject: Re: [PATCH 18/25] Staging: hv: Get rid of struct hv_bus
 
 On Tue, Apr 26, 2011 at 09:20:35AM -0700, K. Y. Srinivasan wrote:
  Now, get rid of struct hv_bus. We will no longer be embedding
  struct bus_type.
 
  Signed-off-by: K. Y. Srinivasan k...@microsoft.com
  Signed-off-by: Haiyang Zhang haiya...@microsoft.com
  Signed-off-by: Abhishek Kane v-abk...@microsoft.com
  Signed-off-by: Hank Janssen hjans...@microsoft.com
  ---
   drivers/staging/hv/vmbus_drv.c |   33 ++---
   1 files changed, 14 insertions(+), 19 deletions(-)
 
  diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
  index a3a7741..515311c 100644
  --- a/drivers/staging/hv/vmbus_drv.c
  +++ b/drivers/staging/hv/vmbus_drv.c
  @@ -45,11 +45,6 @@ static struct pci_dev *hv_pci_dev;
   static struct tasklet_struct msg_dpc;
   static struct tasklet_struct event_dpc;
 
  -/* Main vmbus driver data structure */
  -struct hv_bus {
  -   struct bus_type bus;
  -};
  -
   unsigned int vmbus_loglevel = (ALL_MODULES  16 | INFO_LVL);
   EXPORT_SYMBOL(vmbus_loglevel);
  /* (ALL_MODULES  16 | DEBUG_LVL_ENTEREXIT); */
  @@ -405,14 +400,14 @@ static void vmbus_device_release(struct device
 *device)
   }
 
   /* The one and only one */
  -static struct hv_bus  hv_bus = {
  -   .bus.name = vmbus,
  -   .bus.match =vmbus_match,
  -   .bus.shutdown = vmbus_shutdown,
  -   .bus.remove =   vmbus_remove,
  -   .bus.probe =vmbus_probe,
  -   .bus.uevent =   vmbus_uevent,
  -   .bus.dev_attrs =vmbus_device_attrs,
  +static struct bus_type  hv_bus = {
  +   .name = vmbus,
  +   .match =vmbus_match,
  +   .shutdown = vmbus_shutdown,
  +   .remove =   vmbus_remove,
  +   .probe =vmbus_probe,
  +   .uevent =   vmbus_uevent,
  +   .dev_attrs =vmbus_device_attrs,
   };
 
   static const char *driver_name = hyperv;
  @@ -550,14 +545,14 @@ static int vmbus_bus_init(struct pci_dev *pdev)
  goto cleanup;
  }
 
  -   hv_bus.bus.name = driver_name;
  +   hv_bus.name = driver_name;
 
 Why are you setting the name of the bus again?  Shouldn't this line be
 removed?

You are absolutely right. Since this redundancy was in the existing
code, should I send you a separate patch to fix this?

Regards,

K. Y

 
 thanks,
 
 greg k-h

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


RE: [PATCH 18/25] Staging: hv: Get rid of struct hv_bus

2011-04-26 Thread KY Srinivasan


 -Original Message-
 From: Greg KH [mailto:gre...@suse.de]
 Sent: Tuesday, April 26, 2011 4:58 PM
 To: KY Srinivasan
 Cc: linux-ker...@vger.kernel.org; de...@linuxdriverproject.org;
 virtualizat...@lists.osdl.org; Haiyang Zhang; Abhishek Kane (Mindtree 
 Consulting
 PVT LTD); Hank Janssen
 Subject: Re: [PATCH 18/25] Staging: hv: Get rid of struct hv_bus
 
 On Tue, Apr 26, 2011 at 08:23:25PM +, KY Srinivasan wrote:
 
 
   -Original Message-
   From: Greg KH [mailto:gre...@suse.de]
   Sent: Tuesday, April 26, 2011 3:41 PM
   To: KY Srinivasan
   Cc: linux-ker...@vger.kernel.org; de...@linuxdriverproject.org;
   virtualizat...@lists.osdl.org; Haiyang Zhang; Abhishek Kane (Mindtree
 Consulting
   PVT LTD); Hank Janssen
   Subject: Re: [PATCH 18/25] Staging: hv: Get rid of struct hv_bus
  
   On Tue, Apr 26, 2011 at 09:20:35AM -0700, K. Y. Srinivasan wrote:
Now, get rid of struct hv_bus. We will no longer be embedding
struct bus_type.
   
Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
Signed-off-by: Abhishek Kane v-abk...@microsoft.com
Signed-off-by: Hank Janssen hjans...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |   33 ++---
 1 files changed, 14 insertions(+), 19 deletions(-)
   
   
-   hv_bus.bus.name = driver_name;
+   hv_bus.name = driver_name;
  
   Why are you setting the name of the bus again?  Shouldn't this line be
   removed?
 
  You are absolutely right. Since this redundancy was in the existing
  code, should I send you a separate patch to fix this?
 
 A separate one after this series is fine.

Done; I have sent the patch out.

Regards,

K. Y


___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


[PATCH 1/1] Staging: hv: Do not re-set the bus name.

2011-04-26 Thread K. Y. Srinivasan
The current code sets the bus name twice. Get rid of the
redundant setting of the bus name.

Signed-off-by: K. Y. Srinivasan k...@microsoft.com
Signed-off-by: Haiyang Zhang haiya...@microsoft.com
---
 drivers/staging/hv/vmbus_drv.c |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
index 1c5d43a..5718971 100644
--- a/drivers/staging/hv/vmbus_drv.c
+++ b/drivers/staging/hv/vmbus_drv.c
@@ -544,7 +544,6 @@ static int vmbus_bus_init(struct pci_dev *pdev)
goto cleanup;
}
 
-   hv_bus.name = driver_name;
 
/* Initialize the bus context */
tasklet_init(msg_dpc, vmbus_on_msg_dpc, 0);
-- 
1.7.4.1

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 11/25] Staging: hv: Get rid of the drv field in struct hv_device

2011-04-26 Thread Greg KH
On Tue, Apr 26, 2011 at 09:20:28AM -0700, K. Y. Srinivasan wrote:
 Now, we can rid of the drv field in struct hv_device.
 
 Signed-off-by: K. Y. Srinivasan k...@microsoft.com
 Signed-off-by: Haiyang Zhang haiya...@microsoft.com
 Signed-off-by: Abhishek Kane v-abk...@microsoft.com
 Signed-off-by: Hank Janssen hjans...@microsoft.com
 ---
  drivers/staging/hv/vmbus_api.h |3 ---
  1 files changed, 0 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h
 index 51fa952..02e3587 100644
 --- a/drivers/staging/hv/vmbus_api.h
 +++ b/drivers/staging/hv/vmbus_api.h
 @@ -103,9 +103,6 @@ struct hv_driver {
  
  /* Base device object */
  struct hv_device {
 - /* the driver for this device */
 - struct hv_driver *drv;
 -
   char name[64];

FYI, in the future, you can also remove this name[64] field as well as I
don't think it's ever used...

thanks,

greg k-h
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 12/25] Staging: hv: Cleanup error handling in vmbus_child_device_register()

2011-04-26 Thread Greg KH
On Tue, Apr 26, 2011 at 09:20:29AM -0700, K. Y. Srinivasan wrote:
 Cleanup error handling in vmbus_child_device_register().
 
 Signed-off-by: K. Y. Srinivasan k...@microsoft.com
 Signed-off-by: Haiyang Zhang haiya...@microsoft.com
 Signed-off-by: Abhishek Kane v-abk...@microsoft.com
 Signed-off-by: Hank Janssen hjans...@microsoft.com
 ---
  drivers/staging/hv/vmbus_drv.c |7 ++-
  1 files changed, 6 insertions(+), 1 deletions(-)
 
 diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c
 index d597dd4..4d569ad 100644
 --- a/drivers/staging/hv/vmbus_drv.c
 +++ b/drivers/staging/hv/vmbus_drv.c
 @@ -720,11 +720,16 @@ int vmbus_child_device_register(struct hv_device 
 *child_device_obj)
*/
   ret = device_register(child_device_obj-device);
  
 + if (ret)
 + return ret;
 +
   /* vmbus_probe() error does not get propergate to device_register(). */
   ret = child_device_obj-probe_error;

Wait, why not?  Why is the probe_error have to be saved off like this?
That seems like something is wrong here, this patch should not be
needed.

Well, you should check the return value of device_register, that is
needed, but this seems broken somehow.

  
 - if (ret)
 + if (ret) {
   pr_err(Unable to register child device\n);
 + device_unregister(child_device_obj-device);
 + }
   else

} else
is the preferred way.

Care to send a fixup patch to remove the probe_error field and fix this
formatting error up?

thanks,

greg k-h
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 17/25] Staging: hv: Make event_dpc a global variable

2011-04-26 Thread Greg KH
On Tue, Apr 26, 2011 at 09:20:34AM -0700, K. Y. Srinivasan wrote:
 In preparation for getting rid of struct hv_bus, Make event_dpc a
 global variable.

It's static, one for the whole driver, not global.

thanks,

greg k-h
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 08/25] Staging: hv: vmbus_driver cannot be unloaded; cleanup accordingly

2011-04-26 Thread Greg KH
On Tue, Apr 26, 2011 at 09:20:25AM -0700, K. Y. Srinivasan wrote:
 The vmbus driver cannot be unloaded; the windows host does not
 permit this. Cleanup accordingly.

Woah, you just prevented this driver from ever being able to be
unloaded.

That's not a cleanup that's a major change in how things work.  I'm
sure, if you want to continue down this line, there are more things you
can remove from the code, right?

What is the real issue here?  What happens if you unload the bus?  What
goes wrong?  Can it be fixed?

This is a pretty big commitment...

thanks,

greg k-h
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization


Re: [PATCH 16/25] Staging: hv: Make msg_dpc a global variable

2011-04-26 Thread Greg KH
On Tue, Apr 26, 2011 at 09:20:33AM -0700, K. Y. Srinivasan wrote:
 In preparation for cleaning up (getting rid of) of the hv_bus structure,
 make msg_dpc a global variable.

It's static.  Ah, you mean for the whole bus.  Yeah, that's true,
wierd choice of words I guess...

thanks,

greg k-h
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization