From: Tejun Heo <tj@kernel.org>
To: Karsten Keil <isdn@linux-pingi.de>,
Armin Schindler <mac@melware.de>,
lkml <linux-kernel@vger.kernel.org>,
Jan Kiszka <jan.kiszka@web.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH v2.6.36-rc7 2/2] isdn/capi: make kcapi use a separate workqueue
Date: Fri, 15 Oct 2010 14:43:26 +0200 [thread overview]
Message-ID: <4CB84C6E.5010401@kernel.org> (raw)
In-Reply-To: <4CB84C4C.6040204@kernel.org>
flush_scheduled_work() is deprecated and will be removed. Because
kcapi uses fire-and-forget type works, it's impossible to flush each
work explicitly. Create and use a dedicated workqueue instead.
Please note that with recent workqueue changes, each workqueue doesn't
reserve a lot of resources and using it as a flush domain is fine.
Signed-off-by: Tejun Heo <tj@kernel.org>
---
drivers/isdn/capi/kcapi.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
Index: work/drivers/isdn/capi/kcapi.c
===================================================================
--- work.orig/drivers/isdn/capi/kcapi.c
+++ work/drivers/isdn/capi/kcapi.c
@@ -38,6 +38,7 @@
#include <linux/rcupdate.h>
static int showcapimsgs = 0;
+static struct workqueue_struct *kcapi_wq;
MODULE_DESCRIPTION("CAPI4Linux: kernel CAPI layer");
MODULE_AUTHOR("Carsten Paeth");
@@ -282,7 +283,7 @@ static int notify_push(unsigned int even
event->type = event_type;
event->controller = controller;
- schedule_work(&event->work);
+ queue_work(kcapi_wq, &event->work);
return 0;
}
@@ -399,7 +400,7 @@ void capi_ctr_handle_message(struct capi
goto error;
}
skb_queue_tail(&ap->recv_queue, skb);
- schedule_work(&ap->recv_work);
+ queue_work(kcapi_wq, &ap->recv_work);
rcu_read_unlock();
return;
@@ -734,7 +735,7 @@ u16 capi20_release(struct capi20_appl *a
mutex_unlock(&capi_controller_lock);
- flush_scheduled_work();
+ flush_workqueue(kcapi_wq);
skb_queue_purge(&ap->recv_queue);
if (showcapimsgs & 1) {
@@ -1276,21 +1277,30 @@ static int __init kcapi_init(void)
{
int err;
+ kcapi_wq = alloc_workqueue("kcapi", 0, 0);
+ if (!kcapi_wq)
+ return -ENOMEM;
+
register_capictr_notifier(&capictr_nb);
err = cdebug_init();
- if (!err)
- kcapi_proc_init();
- return err;
+ if (err) {
+ unregister_capictr_notifier(&capictr_nb);
+ destroy_workqueue(kcapi_wq);
+ return err;
+ }
+
+ kcapi_proc_init();
+ return 0;
}
static void __exit kcapi_exit(void)
{
kcapi_proc_exit();
- /* make sure all notifiers are finished */
- flush_scheduled_work();
+ unregister_capictr_notifier(&capictr_nb);
cdebug_exit();
+ destroy_workqueue(kcapi_wq);
}
module_init(kcapi_init);
next prev parent reply other threads:[~2010-10-15 12:43 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-15 12:42 [PATCH v2.6.36-rc7 1/2] isdn/capi: unregister capictr notifier after init failure Tejun Heo
2010-10-15 12:43 ` Tejun Heo [this message]
2010-10-16 11:00 ` [PATCH v2.6.36-rc7 2/2] isdn/capi: make kcapi use a separate workqueue Jan Kiszka
2010-10-16 11:00 ` [PATCH v2.6.36-rc7 1/2] isdn/capi: unregister capictr notifier after init failure Jan Kiszka
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=4CB84C6E.5010401@kernel.org \
--to=tj@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=isdn@linux-pingi.de \
--cc=jan.kiszka@web.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mac@melware.de \
/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