commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=166517888849c6cdafd72f77e534a4d415fd4f96 branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
Signed-off-by: Steven Miao <[email protected]> --- drivers/staging/icc/core/protocol.c | 20 ++++++++++---------- 1 files changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/staging/icc/core/protocol.c b/drivers/staging/icc/core/protocol.c index f2f761a..7e768f3 100644 --- a/drivers/staging/icc/core/protocol.c +++ b/drivers/staging/icc/core/protocol.c @@ -587,7 +587,7 @@ static int sm_recv_scalar(sm_uint32_t session_idx, sm_uint16_t *src_ep, } } - sm_debug("scalar0 %x, scalar1 %x\n", *scalar0, *scalar1); + sm_debug("scalar0 %x, scalar1 %x type %d\n", *scalar0, *scalar1, *type); session->n_avail--; kfree(message); @@ -762,6 +762,7 @@ static int sm_destroy_session(sm_uint32_t session_idx) mutex_lock(&icc_info->sessions_table->lock); while (!list_empty(&session->rx_messages)) { + sm_debug("drain rx list\n"); message = list_first_entry(&session->rx_messages, struct sm_message, next); msg = &message->msg; @@ -1048,7 +1049,7 @@ static int msg_recv_internal(struct sm_msg *msg, struct sm_session *session) return 0; } mutex_lock(&icc_info->sessions_table->lock); - list_add(&message->next, &session->rx_messages); + list_add_tail(&message->next, &session->rx_messages); session->n_avail++; sm_debug("%s wakeup wait thread\n", __func__); wake_up(&session->rx_wait); @@ -1069,7 +1070,7 @@ static int sm_default_sendmsg(struct sm_message *message, struct sm_session *ses case SP_SCALAR: case SP_SESSION_SCALAR: mutex_lock(&icc_info->sessions_table->lock); - list_add(&message->next, &session->tx_messages); + list_add_tail(&message->next, &session->tx_messages); session->n_uncompleted++; mutex_unlock(&icc_info->sessions_table->lock); break; @@ -1094,7 +1095,7 @@ sm_default_recvmsg(struct sm_msg *msg, struct sm_session *session) case SM_SESSION_PACKET_CONSUMED: mutex_lock(&icc_info->sessions_table->lock); /* icc queue is FIFO, so handle first message */ - list_for_each_entry_reverse(uncompleted, &session->tx_messages, next) { + list_for_each_entry(uncompleted, &session->tx_messages, next) { if (uncompleted->msg.payload == msg->payload) { sm_debug("ack matched free buf %x message %p %p %p\n", msg->payload, uncompleted, uncompleted->next.next, uncompleted->next.prev); goto matched; @@ -1163,12 +1164,17 @@ matched1: } break; case SM_SESSION_PACKET_CLOSE: + case SM_SESSION_SCALAR_CLOSE: session->remote_ep = 0; session->flags = 0; sm_send_close_ack(session, msg->src_ep, cpu ^ 1); + break; case SM_SESSION_PACKET_CLOSE_ACK: + case SM_SESSION_SCALAR_CLOSE_ACK: session->remote_ep = 0; session->flags = 0; + wake_up(&session->rx_wait); + break; case SM_PACKET_READY: case SM_SESSION_PACKET_READY: if (SM_MSG_PROTOCOL(msg->type) != session->type) { @@ -1315,12 +1321,6 @@ void msg_handle(int cpu) return; } - if (icc_handle_scalar_cmd(msg)) { - sm_debug("handle scalar cmd\n"); - sm_message_dequeue(cpu, msg); - return; - } - index = sm_find_session(msg->dst_ep, 0, icc_info->sessions_table); session = sm_index_to_session(index);
_______________________________________________ Linux-kernel-commits mailing list [email protected] https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits
