Re: [PATCH V2 04/15] Drivers: hv: vmbus: Enhance the rescind callback functionality

2016-12-06 Thread Greg KH
On Sat, Dec 03, 2016 at 12:34:31PM -0800, k...@exchange.microsoft.com wrote:
> From: K. Y. Srinivasan 
> 
> Enhance the rescind callback functionality by permitting the passing of an 
> opaque
> pointer. This functionality will be used by vmbus device drivers to implement
> rescind related cleanup more efficiently.

Eeek, why a void *?  Please make this a _real_ pointer.

> 
> Signed-off-by: K. Y. Srinivasan 
> ---
>  drivers/hv/channel_mgmt.c |   11 +++
>  include/linux/hyperv.h|7 ---
>  2 files changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
> index f9c5827..d83c1ac 100644
> --- a/drivers/hv/channel_mgmt.c
> +++ b/drivers/hv/channel_mgmt.c
> @@ -825,8 +825,10 @@ static void vmbus_onoffer_rescind(struct 
> vmbus_channel_message_header *hdr)
>  
>   if (channel->device_obj) {
>   if (channel->chn_rescind_callback) {
> - channel->chn_rescind_callback(channel);
> - goto out;
> + channel->chn_rescind_callback(channel,
> +   channel->rescind_arg);
> + if (is_hvsock_channel(channel))
> + goto out;
>   }
>   /*
>* We will have to unregister this device from the
> @@ -1215,9 +1217,10 @@ bool vmbus_are_subchannels_present(struct 
> vmbus_channel *primary)
>  }
>  EXPORT_SYMBOL_GPL(vmbus_are_subchannels_present);
>  
> -void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel,
> - void (*chn_rescind_cb)(struct vmbus_channel *))
> +void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel, void *arg,
> + void (*chn_rescind_cb)(struct vmbus_channel *, void *))
>  {
>   channel->chn_rescind_callback = chn_rescind_cb;
> + channel->rescind_arg = arg;
>  }
>  EXPORT_SYMBOL_GPL(vmbus_set_chn_rescind_callback);
> diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
> index 35053f9..a9a0ce4 100644
> --- a/include/linux/hyperv.h
> +++ b/include/linux/hyperv.h
> @@ -800,7 +800,8 @@ struct vmbus_channel {
>* Channel rescind callback. Some channels (the hvsock ones), need to
>* register a callback which is invoked in vmbus_onoffer_rescind().
>*/
> - void (*chn_rescind_callback)(struct vmbus_channel *channel);
> + void (*chn_rescind_callback)(struct vmbus_channel *channel, void *arg);
> + void *rescind_arg;

Why does the channel have rescind_arg here?

Where do you use this functionality?

thanks,

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH V2 04/15] Drivers: hv: vmbus: Enhance the rescind callback functionality

2016-12-03 Thread kys
From: K. Y. Srinivasan 

Enhance the rescind callback functionality by permitting the passing of an 
opaque
pointer. This functionality will be used by vmbus device drivers to implement
rescind related cleanup more efficiently.

Signed-off-by: K. Y. Srinivasan 
---
 drivers/hv/channel_mgmt.c |   11 +++
 include/linux/hyperv.h|7 ---
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index f9c5827..d83c1ac 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -825,8 +825,10 @@ static void vmbus_onoffer_rescind(struct 
vmbus_channel_message_header *hdr)
 
if (channel->device_obj) {
if (channel->chn_rescind_callback) {
-   channel->chn_rescind_callback(channel);
-   goto out;
+   channel->chn_rescind_callback(channel,
+ channel->rescind_arg);
+   if (is_hvsock_channel(channel))
+   goto out;
}
/*
 * We will have to unregister this device from the
@@ -1215,9 +1217,10 @@ bool vmbus_are_subchannels_present(struct vmbus_channel 
*primary)
 }
 EXPORT_SYMBOL_GPL(vmbus_are_subchannels_present);
 
-void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel,
-   void (*chn_rescind_cb)(struct vmbus_channel *))
+void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel, void *arg,
+   void (*chn_rescind_cb)(struct vmbus_channel *, void *))
 {
channel->chn_rescind_callback = chn_rescind_cb;
+   channel->rescind_arg = arg;
 }
 EXPORT_SYMBOL_GPL(vmbus_set_chn_rescind_callback);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 35053f9..a9a0ce4 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -800,7 +800,8 @@ struct vmbus_channel {
 * Channel rescind callback. Some channels (the hvsock ones), need to
 * register a callback which is invoked in vmbus_onoffer_rescind().
 */
-   void (*chn_rescind_callback)(struct vmbus_channel *channel);
+   void (*chn_rescind_callback)(struct vmbus_channel *channel, void *arg);
+   void *rescind_arg;
 
/*
 * The spinlock to protect the structure. It is being used to protect
@@ -957,8 +958,8 @@ static inline void clear_low_latency_mode(struct 
vmbus_channel *c)
 void vmbus_set_sc_create_callback(struct vmbus_channel *primary_channel,
void (*sc_cr_cb)(struct vmbus_channel *new_sc));
 
-void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel,
-   void (*chn_rescind_cb)(struct vmbus_channel *));
+void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel, void *arg,
+   void (*chn_rescind_cb)(struct vmbus_channel *, void *));
 
 /*
  * Retrieve the (sub) channel on which to send an outgoing request.
-- 
1.7.4.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel