[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

schedule in task queues - restarting thread :)



>   I have one interesting doubt
> >   Please have a look at small piece of code 
> > 
> > void   print()
> >   {
> >    printk("The current process
%s\n",current->comm);
> >    schedule();
> >    printk(" The current process
%s\n",current->comm);
> >   }
> > 
> 
> I'm not sure that you're allowed to use the task
queue that way.
> The purpose of the task queue is what they call
"software interrupt
> handling". When you get a hardware interrupt, you
don't want to spend
> time blocking other irqs, so you queue the work and
unmask interrupts.
> 
> At other points in time (return from syscall,
interrupt, ctx 
> switch etc), the
> task queue is checked and executed. I think calling
schedule, 
> when you're
> in the task queue, will somehow mark the process
ineligible 
> for scheduling.

Greetings:

I don't know what happened to this one, I just
subscribed to the list for an hour and then
unsubscribed after finding out that I had no time to
read all these mails. I picked this one again from the
archive and assumed that there was no final answer.
Iam here at a client's place where everyone happens to
be a *solaris* geek :) so  I installed Linux on my
/official/ laptop, today in the morning to actually
test it :)

[root@woody fiddle]# cat mod.c

#define NULL (void *)0
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/tqueue.h>


struct tq_struct myjob;
void fun(void)
{
        printk("Before calling schedule\n");
        schedule();
        printk("After calling schedule\n");
}
int init_module()
{
      myjob.routine = fun;
      myjob.data = NULL;
      myjob.sync = 0;
      myjob.next = NULL;
      queue_task(&myjob, &tq_scheduler);
      printk("Module loaded\n");
      return 0;
}

void cleanup_module()
{
          printk("Module Unloaded\n");
}
[root@woody fiddle]# gcc -c -O2 -DMODULE -D__KERNEL__
mod.c
mod.c: In function `init_module':
mod.c:21: warning: assignment from incompatible
pointer type
[root@woody fiddle]# insmod mod
Module loaded
Before calling schedule
After calling schedule
[root@woody fiddle]# rmmod mod
Module Unloaded
[root@woody fiddle]#


Btw this is 2.2.14 from a redhat CD.

Hope that helps,

Regards,
Suman




__________________________________________________
Do You Yahoo!?
Kick off your party with Yahoo! Invites.
http://invites.yahoo.com/