All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] RT-Socket-CAN:
@ 2007-08-22 11:21 Wolfgang Grandegger
  0 siblings, 0 replies; only message in thread
From: Wolfgang Grandegger @ 2007-08-22 11:21 UTC (permalink / raw)
  To: xenomai-core

[-- Attachment #1: Type: text/plain, Size: 291 bytes --]

Hello,

the following patch fixes:

2007-08-22  Wolfgang Grandegger  <wg@domain.hid>

         * ksrc/drivers/can/rtcan_socket.c: protect the list of sockets
         per device properly when adding or deleting sockets.

It should be applied to Xenomai's trunk and v2.3.x branch.

Wolfgang.

[-- Attachment #2: xenomai-rtcan-socket-list.patch --]
[-- Type: text/x-patch, Size: 1747 bytes --]

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 2945)
+++ ChangeLog	(working copy)
@@ -1,3 +1,8 @@
+2007-08-22  Wolfgang Grandegger  <wg@domain.hid>
+
+	* ksrc/drivers/can/rtcan_socket.c: protect the list of sockets
+	per device properly when adding or deleting sockets.
+
 2007-08-18  Philippe Gerum  <rpm@xenomai.org>
 
 	* RELEASE: Xenomai 2.4-rc2
Index: ksrc/drivers/can/rtcan_socket.c
===================================================================
--- ksrc/drivers/can/rtcan_socket.c	(revision 2945)
+++ ksrc/drivers/can/rtcan_socket.c	(working copy)
@@ -37,6 +37,7 @@ LIST_HEAD(rtcan_socket_list);
 void rtcan_socket_init(struct rtdm_dev_context *context)
 {
     struct rtcan_socket *sock = (struct rtcan_socket *)&context->dev_private;
+    rtdm_lockctx_t lock_ctx;
 
 
     rtdm_sem_init(&sock->recv_sem, 0);
@@ -56,7 +57,10 @@ void rtcan_socket_init(struct rtdm_dev_c
     sock->rx_timeout = RTDM_TIMEOUT_INFINITE;
 
     INIT_LIST_HEAD(&sock->tx_wait_head);
+
+    rtdm_lock_get_irqsave(&rtcan_socket_lock, lock_ctx);
     list_add(&sock->socket_list, &rtcan_socket_list);
+    rtdm_lock_put_irqrestore(&rtcan_socket_lock, lock_ctx);
 }
 
 
@@ -64,6 +68,7 @@ void rtcan_socket_cleanup(struct rtdm_de
 {
     struct rtcan_socket *sock = (struct rtcan_socket *)&context->dev_private;
     struct tx_wait_queue *tx_waiting;
+    rtdm_lockctx_t lock_ctx;
     int tx_list_empty;
 
 
@@ -91,5 +96,8 @@ void rtcan_socket_cleanup(struct rtdm_de
     } while (!tx_list_empty);
 
     rtdm_sem_destroy(&sock->recv_sem);
+
+    rtdm_lock_get_irqsave(&rtcan_socket_lock, lock_ctx);
     list_del(&sock->socket_list);
+    rtdm_lock_put_irqrestore(&rtcan_socket_lock, lock_ctx);
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-08-22 11:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-22 11:21 [Xenomai-core] [PATCH] RT-Socket-CAN: Wolfgang Grandegger

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.