mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Nicolas Kaiser <nikai@nikai.net>
Cc: Greg Kroah-Hartman <gregkh@suse.de>,
	Duncan Sands <duncan.sands@free.fr>,
	linux-kernel@vger.kernel.org
Subject: [PATCH UPDATED 5/6] speedtch: don't abuse struct delayed_work
Date: Sat, 18 Dec 2010 17:32:47 +0100	[thread overview]
Message-ID: <4D0CE22F.7090409@kernel.org> (raw)
In-Reply-To: <20101217145117.75a28ae0@absol.kitzblitz>

speedtch directly uses the internal timer and work members of a struct
delayed_work.  Use a separate work item and timer instead.

* Nicolas Kaiser discovered that timer init was missing.  Fixed.

Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Duncan Sands <duncan.sands@free.fr>
Cc: linux-usb@vger.kernel.org
Cc: Nicolas Kaiser <nikai@nikai.net>
---
Can you please test this one?  Thanks.

 drivers/usb/atm/speedtch.c |   26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

Index: work/drivers/usb/atm/speedtch.c
===================================================================
--- work.orig/drivers/usb/atm/speedtch.c
+++ work/drivers/usb/atm/speedtch.c
@@ -139,7 +139,8 @@ struct speedtch_instance_data {

 	struct speedtch_params params; /* set in probe, constant afterwards */

-	struct delayed_work status_checker;
+	struct timer_list status_check_timer;
+	struct work_struct status_check_work;

 	unsigned char last_status;

@@ -498,7 +499,7 @@ static void speedtch_check_status(struct
 {
 	struct speedtch_instance_data *instance =
 		container_of(work, struct speedtch_instance_data,
-			     status_checker.work);
+			     status_check_work);
 	struct usbatm_data *usbatm = instance->usbatm;
 	struct atm_dev *atm_dev = usbatm->atm_dev;
 	unsigned char *buf = instance->scratch_buffer;
@@ -575,11 +576,11 @@ static void speedtch_status_poll(unsigne
 {
 	struct speedtch_instance_data *instance = (void *)data;

-	schedule_delayed_work(&instance->status_checker, 0);
+	schedule_work(&instance->status_check_work);

 	/* The following check is racy, but the race is harmless */
 	if (instance->poll_delay < MAX_POLL_DELAY)
-		mod_timer(&instance->status_checker.timer, jiffies + msecs_to_jiffies(instance->poll_delay));
+		mod_timer(&instance->status_check_timer, jiffies + msecs_to_jiffies(instance->poll_delay));
 	else
 		atm_warn(instance->usbatm, "Too many failures - disabling line status polling\n");
 }
@@ -595,7 +596,7 @@ static void speedtch_resubmit_int(unsign
 	if (int_urb) {
 		ret = usb_submit_urb(int_urb, GFP_ATOMIC);
 		if (!ret)
-			schedule_delayed_work(&instance->status_checker, 0);
+			schedule_work(&instance->status_check_work);
 		else {
 			atm_dbg(instance->usbatm, "%s: usb_submit_urb failed with result %d\n", __func__, ret);
 			mod_timer(&instance->resubmit_timer, jiffies + msecs_to_jiffies(RESUBMIT_DELAY));
@@ -624,7 +625,7 @@ static void speedtch_handle_int(struct u
 	}

 	if ((count == 6) && !memcmp(up_int, instance->int_data, 6)) {
-		del_timer(&instance->status_checker.timer);
+		del_timer(&instance->status_check_timer);
 		atm_info(usbatm, "DSL line goes up\n");
 	} else if ((count == 6) && !memcmp(down_int, instance->int_data, 6)) {
 		atm_info(usbatm, "DSL line goes down\n");
@@ -640,7 +641,7 @@ static void speedtch_handle_int(struct u

 	if ((int_urb = instance->int_urb)) {
 		ret = usb_submit_urb(int_urb, GFP_ATOMIC);
-		schedule_delayed_work(&instance->status_checker, 0);
+		schedule_work(&instance->status_check_work);
 		if (ret < 0) {
 			atm_dbg(usbatm, "%s: usb_submit_urb failed with result %d\n", __func__, ret);
 			goto fail;
@@ -686,7 +687,7 @@ static int speedtch_atm_start(struct usb
 	}

 	/* Start status polling */
-	mod_timer(&instance->status_checker.timer, jiffies + msecs_to_jiffies(1000));
+	mod_timer(&instance->status_check_timer, jiffies + msecs_to_jiffies(1000));

 	return 0;
 }
@@ -698,7 +699,7 @@ static void speedtch_atm_stop(struct usb

 	atm_dbg(usbatm, "%s entered\n", __func__);

-	del_timer_sync(&instance->status_checker.timer);
+	del_timer_sync(&instance->status_check_timer);

 	/*
 	 * Since resubmit_timer and int_urb can schedule themselves and
@@ -869,10 +870,11 @@ static int speedtch_bind(struct usbatm_d

 	usbatm->flags |= (use_isoc ? UDSL_USE_ISOC : 0);

-	INIT_DELAYED_WORK(&instance->status_checker, speedtch_check_status);
+	INIT_WORK(&instance->status_check_work, speedtch_check_status);
+	init_timer(&instance->status_check_timer);

-	instance->status_checker.timer.function = speedtch_status_poll;
-	instance->status_checker.timer.data = (unsigned long)instance;
+	instance->status_check_timer.function = speedtch_status_poll;
+	instance->status_check_timer.data = (unsigned long)instance;
 	instance->last_status = 0xff;
 	instance->poll_delay = MIN_POLL_DELAY;


  parent reply	other threads:[~2010-12-18 16:32 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-12 16:48 [PATCHSET] workqueue: another assorted flush_scheduled_work() removals Tejun Heo
2010-12-12 16:48 ` [PATCH 1/6] init: don't call flush_scheduled_work() from do_initcalls() Tejun Heo
2010-12-12 16:48 ` [PATCH 2/6] ioc4: use static work_struct for ioc4_load_modules() Tejun Heo
2010-12-12 16:48 ` [PATCH 3/6] media/video: explicitly flush request_module work Tejun Heo
2010-12-12 16:48 ` [PATCH 4/6] media/video: don't use flush_scheduled_work() Tejun Heo
2010-12-12 16:48 ` [PATCH 5/6] speedtch: don't abuse struct delayed_work Tejun Heo
2010-12-16 21:30   ` Greg KH
2010-12-17 11:05     ` Tejun Heo
2010-12-12 16:48 ` [PATCH 6/6] usb: don't use flush_scheduled_work() Tejun Heo
2010-12-17 13:51 ` speedtch: don't abuse struct delayed_work Nicolas Kaiser
2010-12-18 11:58   ` Nicolas Kaiser
2010-12-18 16:32   ` Tejun Heo [this message]
2010-12-18 17:59     ` [PATCH UPDATED 5/6] " Nicolas Kaiser
2010-12-24 15:14 ` [PATCHSET] workqueue: another assorted flush_scheduled_work() removals Tejun Heo

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=4D0CE22F.7090409@kernel.org \
    --to=tj@kernel.org \
    --cc=duncan.sands@free.fr \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nikai@nikai.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome