Re: [PATCH 206/206] Staging: hv: Get rid of the function count_hv_channel()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, May 10, 2011 at 07:57:12AM -0700, K. Y. Srinivasan wrote:
> Get rid of the function count_hv_channel()
> by inlining the code.

Close, but not quite:

> +static atomic_t num_channels;

Why is this atomic?

>  struct vmbus_channel_message_table_entry {
>  	enum vmbus_channel_message_type message_type;
>  	void (*message_handler)(struct vmbus_channel_message_header *msg);
> @@ -316,21 +318,6 @@ void free_channel(struct vmbus_channel *channel)
>  DECLARE_COMPLETION(hv_channel_ready);
>  
>  /*
> - * Count initialized channels, and ensure all channels are ready when hv_vmbus
> - * module loading completes.
> - */
> -static void count_hv_channel(void)
> -{
> -	static int counter;
> -	unsigned long flags;
> -
> -	spin_lock_irqsave(&vmbus_connection.channel_lock, flags);
> -	if (++counter == MAX_MSG_TYPES)
> -		complete(&hv_channel_ready);
> -	spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags);
> -}
> -
> -/*
>   * vmbus_process_rescind_offer -
>   * Rescind the offer by initiating a device removal
>   */
> @@ -433,7 +420,16 @@ static void vmbus_process_offer(struct work_struct *work)
>  
>  				pr_info("%s\n", hv_cb_utils[cnt].log_msg);
>  
> -				count_hv_channel();
> +				/*
> +				 * Count initialized channels, and ensure
> +				 * all channels are ready when hv_vmbus
> +				 * module loading completes.
> +				 */
> +
> +				atomic_inc(&num_channels);
> +				if (atomic_read(&num_channels)
> +					 == MAX_MSG_TYPES)
> +					complete(&hv_channel_ready);

I don't see why this needs to be atomic, if you properly lock things it
can just be a variable, right?

And what's copying this from ever terminating if the count never
increments?  This logic is very strange and should be reworked to not do
this kind of "loop until something else counts high enough" code.

thanks,

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


[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux