Re: create a kernel socket from interrupt context

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi,

El Fri, 23 Feb 2007 11:21:12 +0200
"Mark Ryden" <markryde@xxxxxxxxx> ha escrit:

> Hi Gaurav,
> I had tried to use the workqueues but it fails;
> what happens is that  queue_work() fails. (The return value from
> queue_work()  is NOT 1 ).

afaik, you can call queue_work() from interrupt context (soft or hard),
so i'm doing this kind of operations in my code

can we see some piece of the code where you're calling this function?

regards,

topi
> 
> the reason is probably that I MUST call the  queue_work() when I am in
> a function which is in software interrupt context.
> This is a requirement.
> So is there a way to get out of it ?
> 
> Regards,
> Mark
> 
> 
> 
> On 2/23/07, GAggarwal@xxxxxxxxxxxxxxxxxx
> <GAggarwal@xxxxxxxxxxxxxxxxxx> wrote:
> >
> >
> >
> > Hi Mark,
> >
> > Use Workqueues as a deferred procedure call and not the tasklet or
> > softIRQ. SoftIRQs and tasklets cannot sleep.
> > Thumb rule is if the deferred work needs to sleep, worq queues are
> > used.
> >
> > --
> > Regards,
> > Gaurav Aggarwal
> >
> >
> > -----Original Message-----
> > From: kernelnewbies-bounce@xxxxxxxxxxxx
> > [mailto:kernelnewbies-bounce@xxxxxxxxxxxx]On Behalf Of Mark
> > Ryden
> > Sent: Friday, February 23, 2007 1:58 PM
> > To: kernelnewbies@xxxxxxxxxxxx
> > Subject: Re: create a kernel socket from interrupt context
> >
> >
> > Hi,
> >
> > Thanks, Topi.
> >
> >  I tried two things:
> >   First , create a work queue and calling it from the interrupt.
> >   what happens is that  queue_work() fails. (The return value from
> > queue_work()  is NOT 1 ).
> >
> > So I looked into it and found that the problem is that I am in fact
> > in software interrupt context, not in hw interrupt context.
> > After looking for solutions and reading about this,I found out that
> > what I should use for software interrupts is a  tasklet.
> > So I inserted taskets and the tasklet function is indeed called from
> > the software interrupt context.
> > The problem is that when I try to send a packet from a tasklet I
> > have the same
> > error; "sleeping function called from invalid context".
> > Is there some way out of this ? I mean, to send packets from
> > software interrupt context ?
> >
> > Regards,
> > Mark
> >
> >
> >
> >
> > On 2/22/07, Mark Ryden <markryde@xxxxxxxxx> wrote:
> > > Hello,
> > >
> > > Is it possible somehow to create a TCP socket from kernel and to
> > > send a message when you are in interrupt context ?
> > > I made a test : I created a kernel socket with
> > > sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock)
> > > and then connected it with:
> > > sock->ops->connect(sock,
> > >
> >                (struct sockaddr*)&addr,
> > >
> >                sizeof(struct sockaddr), 0)
> > >
> > > When working NOT in interrupt context,it works OK;  I called :
> > > kernel_sendmsg(sock, &msg, &iov, 1, length);
> > > and a TCP packet WAS sent (I verified it with a sniffer)
> > >
> > > BUT, in interrupt context, I called :
> > > kernel_sendmsg(sock, &msg, &iov, 1, length);
> > >
> > > I got:
> > > Feb 22 12:02:54 markhost kernel: BUG: sleeping function called
> > > from invalid context
> > > Feb 22 12:02:54 markhost: in_atomic():1, irqs_disabled():0
> > >
> > > Why is it so ? is there another way create a kernel TCP socket
> > > and to send a packet?
> > >
> > > Regards,
> > > Mark
> > >
> >
> > --
> > To unsubscribe from this list: send an email with
> > "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
> > Please read the FAQ at http://kernelnewbies.org/FAQ
> >  The information contained in this electronic mail transmission may
> > be privileged and confidential, and therefore, protected from
> > disclosure. If you have received this communication in error,
> > please notify us immediately by replying to this message and
> > deleting it from your computer without copying or disclosing it.
> >
> 
> --
> To unsubscribe from this list: send an email with
> "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
> Please read the FAQ at http://kernelnewbies.org/FAQ
> 

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux