On Mon, Aug 23, 2010 at 11:39 PM, Michael Griepentrog
<[email protected]>wrote:

> Hi,
>
> I'm trying to send UDP packets from the kernel using sock_sendmsg(),
> but it is possible for this to eventually call schedule(). The part of
> the kernel I am working in expects to be executed atomically, so
> calling sock_sendmsg() usually generates the error: "BUG: scheduling
> while atomic". Is there any way to call sock_sendmsg() such that it
> executes atomically (i.e., doesn't relinquish the CPU to the
> scheduler)? It is not necessary to wait until the transmission is
> complete, and setting the flag MSG_DONTWAIT does not solve this issue.
> I tried looking for where the network stack returns -EIOCBQUEUED and
> got as far as udp_sendmsg(), but it then becomes difficult to follow
> the execution path (there's four goto labels in this function). Any
> help would be appreciated.
>

Hi Michael,

I believe you are  trying to use sockets inside interrupt context,which is
not
possible. You can make use of bottom-halves(Work Queue, Tasklets etc..)
of ISR to  get the job done.

Best regards,
Sameer.

Reply via email to