[PATCH 206/206] Staging: hv: Get rid of the function count_hv_channel()
Greg KH
greg at kroah.com
Wed May 11 13:57:01 PDT 2011
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
More information about the devel
mailing list