RT-Socket-CAN:
PATCH 1/1 RT-Socket-CAN:
Hello,
the following patch fixes:
2007-08-22 Wolfgang Grandegger <[email protected]>
* 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.
ChangeLog +5 -0
@@ -1,3 +1,8 @@ +2007-08-22 Wolfgang Grandegger <[email protected]> + + * ksrc/drivers/can/rtcan_socket.c: protect the list of sockets + per device properly when adding or deleting sockets. + 2007-08-18 Philippe Gerum <[email protected]> * RELEASE: Xenomai 2.4-rc2
drivers/can/rtcan_socket.c +8 -0
@@ -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); }