lkml.org 
[lkml]   [2004]   [Mar]   [18]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateThu, 18 Mar 2004 11:53:25 +0100 (MET)
FromArmin Schindler <>
Subject[PATCH 2.6] serialization of kernelcapi work
Hi all,

the ISDN kernelcapi function recv_handler() is triggered by
schedule_work() and dispatches the CAPI messages to the applications.

Since a workqueue function may run on another CPU at the same time,
reordering of CAPI messages may occur.

For serialization I suggest a mutex semaphore in recv_handler(),
patch is appended (yet untested).

Is there a better way to do user-context work serialized ?

Armin


--- linux/drivers/isdn/capi/kcapi.c	16 Mar 2004 08:01:47 -0000
+++ linux/drivers/isdn/capi/kcapi.c	18 Mar 2004 10:41:38 -0000
@@ -70,6 +70,7 @@
 static struct sk_buff_head recv_queue;

 static struct work_struct tq_recv_notify;
+static DECLARE_MUTEX(recv_handler_lock);

 /* -------- controller ref counting -------------------------------------- */

@@ -242,6 +243,8 @@
 	struct sk_buff *skb;
 	struct capi20_appl *ap;

+	down(&recv_handler_lock);
+
 	while ((skb = skb_dequeue(&recv_queue)) != 0) {
 		ap = get_capi_appl_by_nr(CAPIMSG_APPID(skb->data));
 		if (!ap) {
@@ -257,6 +260,8 @@
 			ap->nrecvctlpkt++;
 		ap->recv_message(ap, skb);
 	}
+
+	up(&recv_handler_lock);
 }

 void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:01    [from the cache]
©2003-2008