2003-06-29 15:19:44

by Raghava Raju

[permalink] [raw]
Subject: delegating to a cpu



Hi,

Currently interrupt handler in our driver uses
tasklet to process some of less important info
to save some interrupt time. But problem is that
tasklet ends up in the same cpu, and second cpu
is not taking much of the work.
1) Is there any mechanism to delegate the less
important work to other cpu an example would really
help.
2) We dont have multiple interrupts, so please
dont give irq affinity solution!!
3) Our kernel version is 2.4.19.

I am not subscribed to this list, so please
mail back at [email protected].

Raju.

__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com


2003-06-29 15:33:09

by Arjan van de Ven

[permalink] [raw]
Subject: Re: delegating to a cpu

On Sun, 2003-06-29 at 17:34, Raghava Raju wrote:
> Hi,
>
> Currently interrupt handler in our driver uses
> tasklet to process some of less important info
> to save some interrupt time. But problem is that
> tasklet ends up in the same cpu, and second cpu
> is not taking much of the work.
> 1) Is there any mechanism to delegate the less
> important work to other cpu an example would really
> help.

you don't give a lot of information about what you are trying to do...
could you post an URL to your driver source, that's the easiest way to
give this information...


Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2003-06-30 19:55:32

by Raghava Raju

[permalink] [raw]
Subject: Re: delegating to a cpu

Arjan,

Driver is in development stage, so I have given u an
overview of how my interrupt handler looks like.
As u can see below, I am doing some minimal processing
in ISR and scheduling a tasklet for reamining
work(like allocating buffers and cleanup).
But problem with this is that tasklet ends up on same
cpu. I want some method where by I can make use of
second cpu, so that second cpu does the work what
tasklet is doing(i.e allocating buffers and clean up).

Please don't give a solution based on irq affinity to
second cpu, as we have only one interrupt.


void my_isr(int irq, void *dev_id, struct pt_regs
*regs)
{

/*Mask interrupts on the device */
write(register, nomore interrupts);

/*do some minimal amount of processing to
read data provided by the device*/
do_basic_read(dev_id);

/*schedule tasklet and give it remaining work.*/
tasklet_schedule();

/*Unmask interrupts on device*/
write(register, start generating interrupts);

}

Regards
Raghava.

--- Arjan van de Ven <[email protected]> wrote:
> On Sun, 2003-06-29 at 17:34, Raghava Raju wrote:
> > Hi,
> >
> > Currently interrupt handler in our driver uses
> > tasklet to process some of less important info
> > to save some interrupt time. But problem is that
> > tasklet ends up in the same cpu, and second cpu
> > is not taking much of the work.
> > 1) Is there any mechanism to delegate the less
> > important work to other cpu an example would
> really
> > help.
>
> you don't give a lot of information about what you
> are trying to do...
> could you post an URL to your driver source, that's
> the easiest way to
> give this information...
>

> ATTACHMENT part 2 application/pgp-signature
name=signature.asc



__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com

2003-06-30 20:43:55

by Alan

[permalink] [raw]
Subject: Re: delegating to a cpu


Unless your other work is really expensive its doubtful another CPU will
help you. If it is then probably you want to have threads that you pin
to each CPU (with the cpu affinity calls) and wake. You do want to work
hard to keep the same data being needed on both CPUs however