All of lore.kernel.org
 help / color / mirror / Atom feed
From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@suse.de, linux-kernel@vger.kernel.org,
	devel@linuxdriverproject.org, virtualization@lists.osdl.org,
	ohering@suse.com
Cc: "K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>
Subject: [PATCH 18/24] Staging: hv: mousevsc: Now cleanup mousevsc_remove()
Date: Thu, 29 Sep 2011 11:54:58 -0700	[thread overview]
Message-ID: <1317322504-9788-18-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1317322504-9788-1-git-send-email-kys@microsoft.com>

Now, cleanup mousevsc_remove(). The mouse driver once initialized only
receives data from the host. So, by closing the channel first in the
unload path, we can properly deal with inflight packets. So, we don't need
the machinery for managing the life-cycle of the mousevsc_dev object.
Get rid of the unnecessary code.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
---
 drivers/staging/hv/hv_mouse.c |   53 ++--------------------------------------
 1 files changed, 3 insertions(+), 50 deletions(-)

diff --git a/drivers/staging/hv/hv_mouse.c b/drivers/staging/hv/hv_mouse.c
index 5324429..317d2be 100644
--- a/drivers/staging/hv/hv_mouse.c
+++ b/drivers/staging/hv/hv_mouse.c
@@ -197,9 +197,9 @@ static struct mousevsc_dev *alloc_input_device(struct hv_device *device)
 
 static void free_input_device(struct mousevsc_dev *device)
 {
-	WARN_ON(atomic_read(&device->ref_count) != 0);
 	kfree(device->hid_desc);
 	kfree(device->report_desc);
+	hv_set_drvdata(device->device, NULL);
 	kfree(device);
 }
 
@@ -229,39 +229,6 @@ static void put_input_device(struct hv_device *device)
 	atomic_dec(&input_dev->ref_count);
 }
 
-/*
- * Drop ref count to 1 to effectively disable get_input_device()
- */
-static struct mousevsc_dev *release_input_device(struct hv_device *device)
-{
-	struct mousevsc_dev *input_dev;
-
-	input_dev = hv_get_drvdata(device);
-
-	/* Busy wait until the ref drop to 2, then set it to 1  */
-	while (atomic_cmpxchg(&input_dev->ref_count, 2, 1) != 2)
-		udelay(100);
-
-	return input_dev;
-}
-
-/*
- * Drop ref count to 0. No one can use input_device object.
- */
-static struct mousevsc_dev *final_release_input_device(struct hv_device *device)
-{
-	struct mousevsc_dev *input_dev;
-
-	input_dev = hv_get_drvdata(device);
-
-	/* Busy wait until the ref drop to 1, then set it to 0  */
-	while (atomic_cmpxchg(&input_dev->ref_count, 1, 0) != 1)
-		udelay(100);
-
-	hv_set_drvdata(device, NULL);
-	return input_dev;
-}
-
 
 static void mousevsc_on_receive_device_info(struct mousevsc_dev *input_device,
 				struct synthhid_device_info *device_info)
@@ -673,28 +640,14 @@ static int mousevsc_remove(struct hv_device *dev)
 {
 	struct mousevsc_dev *input_dev = hv_get_drvdata(dev);
 
+	vmbus_close(dev->channel);
+
 	if (input_dev->connected) {
 		hidinput_disconnect(input_dev->hid_device);
 		input_dev->connected = 0;
 		hid_destroy_device(input_dev->hid_device);
 	}
 
-
-	release_input_device(dev);
-
-
-	/*
-	 * At this point, all outbound traffic should be disable. We only
-	 * allow inbound traffic (responses) to proceed
-	 *
-	 * so that outstanding requests can be completed.
-	 */
-
-	input_dev = final_release_input_device(dev);
-
-	/* Close the channel */
-	vmbus_close(dev->channel);
-
 	free_input_device(input_dev);
 
 	return 0;
-- 
1.7.4.1


  parent reply	other threads:[~2011-09-29 19:48 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-29 18:54 [PATCH 0000/0024] Staging: hv: mousevsc cleanup K. Y. Srinivasan
2011-09-29 18:54 ` [PATCH 01/24] Staging: hv: mousevsc: Fixup struct hv_input_dev_info K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 02/24] Staging: hv: mousevsc: Get rid of the struct input_device_context K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 03/24] Staging: hv: mousevsc: Fixup some bogus WARN_ON() calls K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 04/24] Staging: hv: mousevsc: Change the allocation flags to reflect interrupt context K. Y. Srinivasan
2011-09-29 18:54     ` K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 05/24] Staging: hv: mousevsc: Handle the case where we may get bogus report desc size K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 06/24] Staging: hv: mousevsc: Correctly initialize the header size K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 07/24] Staging: hv: mousevsc: Use completion primitive to synchronize K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 08/24] Staging: hv: mousevsc: Cleanup and properly implement reportdesc_callback() K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 09/24] Staging: hv: mousevsc: Get rid of unnecessary DPRINT calls K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 10/24] Staging: hv: mousevsc: Cleanup error handling K. Y. Srinivasan
2011-09-29 18:54     ` K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 11/24] Staging: hv: mousevsc: Get rid of unnecessary pr_* calls K. Y. Srinivasan
2011-09-29 18:54     ` K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 12/24] Staging: hv: mousevsc: Free allocated memory in free_input_device() K. Y. Srinivasan
2011-09-29 18:54     ` K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 13/24] Staging: hv: mousevsc: Get rid of the unused state: num_outstanding_req K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 14/24] Staging: hv: mousevsc: Cleanup alloc_input_device() K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 15/24] Staging: hv: mousevsc: Get rid of mousevsc_on_send_completion() K. Y. Srinivasan
2011-09-29 18:54     ` K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 16/24] Staging: hv: mousevsc: Cleanup mousevsc_connect_to_vsp() K. Y. Srinivasan
2011-09-29 18:54   ` [PATCH 17/24] Staging: hv: mousevsc: Get rid of mousevsc_on_device_remove() by inlining code K. Y. Srinivasan
2011-09-29 18:54     ` K. Y. Srinivasan
2011-09-29 18:54   ` K. Y. Srinivasan [this message]
2011-09-29 18:54   ` [PATCH 19/24] Staging: hv: mousevsc: Get rid of ref_count state in struct mousevsc_dev K. Y. Srinivasan
2011-09-29 18:55   ` [PATCH 20/24] Staging: hv: mousevsc: Cleanup camel cased enums K. Y. Srinivasan
2011-09-29 18:55   ` [PATCH 21/24] Staging: hv: mousevsc: Get rid of mousevsc_on_receive_input_report() by inlining K. Y. Srinivasan
2011-09-29 18:55     ` K. Y. Srinivasan
2011-09-29 18:55   ` [PATCH 22/24] Staging: hv: mousevsc: Cleanup mousevsc_on_device_add() K. Y. Srinivasan
2011-09-29 18:55   ` [PATCH 23/24] Staging: hv: mousevsc: Enable autoloading of the mouse driver K. Y. Srinivasan
2011-09-29 18:55   ` [PATCH 24/24] Staging: hv: mousevsc: Get rid of unnecessary comments K. Y. Srinivasan
2011-09-29 18:55     ` K. Y. Srinivasan
2011-09-30  0:47   ` [PATCH 01/24] Staging: hv: mousevsc: Fixup struct hv_input_dev_info Greg KH
2011-09-30  1:34     ` KY Srinivasan
2011-09-30  3:02       ` Greg KH

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=1317322504-9788-18-git-send-email-kys@microsoft.com \
    --to=kys@microsoft.com \
    --cc=devel@linuxdriverproject.org \
    --cc=gregkh@suse.de \
    --cc=haiyangz@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ohering@suse.com \
    --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.