lkml.org 
[lkml]   [2005]   [Apr]   [4]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateMon, 4 Apr 2005 13:38:16 +0800
FromMingJie Chang <>
Subjecthow to cope with "Scheduling in interrupt" problem
Dear all,

I try to modify inet_sendmsg() and inet_recvmsg().
To defer the time to notify a receiver, I use a timer for the problem.
But it causes "Scheduling in interrupt" error.
Is there any method to reform it?

Thank you for tour help


Scheduling in interrupt
invalid operand: 0000
CPU:    0
EIP:    0819:[<c0005d6f>]    Not tainted
EFLAGS: 00010286
eax: 00000018   ebx: c19c2000   ecx: c0170894   edx: fbff9000
esi: c19c2000   edi: c1d42da0   ebp: c19c3cf4   esp: c19c3cd0
ds: 0821   es: 0821   ss: 0821
Process ftp (pid: 1312, stackpage=c19c3000)<1>


EX:
inet_sendmsg()
{
	.
	.
	.
BYE:
	if(sock->send_nonnotify_size>0&&0==sock->send_set_timer)
	{
		sock->send_notify_timer.function=notify_receiver;		
		sock->send_notify_timer.expires=MY_EXT_NOTIFY_TIME + jiffies;
		sock->send_notify_timer.data=(unsigned long)(sock);
		dbprintk("set notify timer, sock addr=%p\n",sock);
		add_timer(&sock->send_notify_timer);
		sock->send_set_timer=1;

	}
	release_sock(sock->sk);	
}
static void notify_receiver(unsigned long data)
{
	struct socket* sock=(struct socket*)data;
	struct SHM_INFO shm_tmp;
	if(!sock||!sock->sk)
		return;
	lock_sock(sock->sk);
	sock->send_set_timer=0;

	if(sock->send_nonnotify_size)
	{
		dbprintk("notify_receiver:notify
receivers,size=%d\n",sock->send_nonnotify_size);
		sock->send_nonnotify_size=0;
		shm_tmp.saddr=ntohl(sock->sk->saddr);
		shm_tmp.sport=ntohl(sock->sk->sport);

		shm_tmp.reqaddr=shm_tmp.saddr;
		shm_tmp.reqport=shm_tmp.sport;

		shm_tmp.daddr=ntohl(sock->sk->daddr);
		shm_tmp.dport=ntohl(sock->sk->dport);
		shm_tmp.maddr=NULL;
		release_sock(sock->sk);

		dbprintk("notift_recv: call send_data()......");
		HYPERVISOR_send_data(&shm_tmp);
		dbprintk("done\n");
		return;
	}	
	release_sock(sock->sk);
}
-
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-04-06 13:31    [from the cache]
©2003-2008