commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=cf7ea4021d7b2ed3f6225425bb6e679d8a188f19
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

Signed-off-by: Steven Miao <[email protected]>
---
 arch/blackfin/mach-bf561/include/mach/icc.h |    1 +
 drivers/staging/icc/core/protocol.c         |   15 +++++++++------
 drivers/staging/icc/include/icc.h           |    2 +-
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/arch/blackfin/mach-bf561/include/mach/icc.h b/arch/blackfin/mach-bf561/include/mach/icc.h
index b6472dd..80837dd 100644
--- a/arch/blackfin/mach-bf561/include/mach/icc.h
+++ b/arch/blackfin/mach-bf561/include/mach/icc.h
@@ -17,6 +17,7 @@ typedef unsigned long sm_uint32_t;
 typedef sm_uint32_t sm_address_t;
 typedef sm_uint16_t sm_atomic_t;
 #define MSGQ_START_ADDR		0xFEB18000
+#define MSGQ_SIZE		0x4000
 #define DEBUG_MSG_BUF_ADDR	0xFEB1F000
 
 #define COREB_TASK_START	0x3C00000
diff --git a/drivers/staging/icc/core/protocol.c b/drivers/staging/icc/core/protocol.c
index 7e768f3..3c6b6ab 100644
--- a/drivers/staging/icc/core/protocol.c
+++ b/drivers/staging/icc/core/protocol.c
@@ -606,8 +606,6 @@ static int sm_recv_packet(sm_uint32_t session_idx, sm_uint16_t *src_ep,
 	if (!session)
 		return -EINVAL;
 
-	sm_debug("recv sleep on queue index %s index %d\n", __func__, session_idx);
-
 	if (list_empty(&session->rx_messages)) {
 		sm_debug("recv sleep on queue\n");
 		if (nonblock)
@@ -636,7 +634,7 @@ static int sm_recv_packet(sm_uint32_t session_idx, sm_uint16_t *src_ep,
 		*buf_len = message->msg.length;
 
 
-	sm_debug("recv %s\n", message->msg.payload);
+	sm_debug("recv {%s}\n", message->msg.payload);
 
 	copy_to_user(user_buf, (void *)message->msg.payload, message->msg.length);
 	invalidate_dcache_range(msg->payload, msg->payload + msg->length);
@@ -781,7 +779,11 @@ static int sm_destroy_session(sm_uint32_t session_idx)
 	mutex_lock(&icc_info->sessions_table->lock);
 	while (!list_empty(&session->tx_messages)) {
 		mutex_unlock(&icc_info->sessions_table->lock);
-		schedule_timeout(500);
+		set_current_state(TASK_INTERRUPTIBLE);
+		sm_debug("drain tx list\n");
+		schedule_timeout(HZ * 2);
+		sm_debug("drain tx list1\n");
+		set_current_state(TASK_RUNNING);
 		mutex_lock(&icc_info->sessions_table->lock);
 	}
 	mutex_unlock(&icc_info->sessions_table->lock);
@@ -789,6 +791,7 @@ static int sm_destroy_session(sm_uint32_t session_idx)
 	if (session->flags == SM_CONNECT) {
 		sm_send_close(session, session->remote_ep, 1);
 
+		sm_debug("send close\n");
 		interruptible_sleep_on(&session->rx_wait);
 		if (signal_pending(current)) {
 			sm_debug("signal\n");
@@ -1051,7 +1054,7 @@ static int msg_recv_internal(struct sm_msg *msg, struct sm_session *session)
 	mutex_lock(&icc_info->sessions_table->lock);
 	list_add_tail(&message->next, &session->rx_messages);
 	session->n_avail++;
-	sm_debug("%s wakeup wait thread\n", __func__);
+	sm_debug("%s wakeup wait thread avail %d\n", __func__, session->n_avail);
 	wake_up(&session->rx_wait);
 	mutex_unlock(&icc_info->sessions_table->lock);
 	return ret;
@@ -1225,6 +1228,7 @@ static int sm_task_sendmsg(struct sm_message *message, struct sm_session *sessio
 	sm_debug("%s msg type %x\n", __func__, msg->type);
 	switch (msg->type) {
 	case SM_TASK_RUN:
+		flush_dcache_range(0x3C00000, 0x3FFFFFF);
 		task = (struct sm_task *)msg->payload;
 		sm_debug("%s init addr%p\n", __func__, task->task_init);
 		break;
@@ -1400,7 +1404,6 @@ icc_write_proc(struct file *file, const char __user * buffer,
 	sm_debug(" %d", session->remote_ep);
 	sm_debug(" %X", session->type);
 	sm_debug(" %X\n", session->flags);
-
 	return count;
 }
 
diff --git a/drivers/staging/icc/include/icc.h b/drivers/staging/icc/include/icc.h
index 5b6db53..9cab9d3 100644
--- a/drivers/staging/icc/include/icc.h
+++ b/drivers/staging/icc/include/icc.h
@@ -132,7 +132,7 @@ struct sm_message {
 	sm_uint32_t flags;
 };
 
-#define SM_MSGQ_LEN 8
+#define SM_MSGQ_LEN 16
 
 /* Simple FIFO buffer */
 struct sm_message_queue {
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to