2007-11-26 05:46:36

by kernel coder

[permalink] [raw]
Subject: profile code added to netif_receive_skb function

hi,

I have added some code to netif_receive_skb function.As linux kernel
is multhreaded , so there is no gaurantee than mine code is completely
executed without being disturbed by any other process .Timer interrupt
handler is an example of code which might interrupt execution of mine
code.

I just want to observe which processes are disturbing mine code .I
think i need to print EIP register values .How can i print cache
contents as well in linux kernel .Are there any tools available for
such purpose


thanks,
shahzad


2007-11-27 04:00:45

by Valdis Klētnieks

[permalink] [raw]
Subject: Re: profile code added to netif_receive_skb function

On Sun, 25 Nov 2007 21:46:26 PST, kernel coder said:
> hi,
>
> I have added some code to netif_receive_skb function.As linux kernel
> is multhreaded , so there is no gaurantee than mine code is completely
> executed without being disturbed by any other process .Timer interrupt
> handler is an example of code which might interrupt execution of mine
> code.

The trick is to write your code so it doesn't *matter* if other code runs.

For example - the timer interrupt almost certainly doesn't look at or modify
any of *your* code's variables. So 98% of the kernel's code you don't
even have to *care* if it runs (as long as you aren't doing something
real-time or has similar response-time or throughput constraints).

And if you are worried about that other 2%, where related code, for example the
IRQ handler for a network interface, may have to look at and/or modify some of
your variables, that's when you should be using appropriate locking - there's
mutexes, semaphores, the whole RCU family, and more - none of which I'll
attempt to explain, because I'm not all that good at that stuff.

Basic rule of thumb - if you have something that will break if two things
access it at the same time, put a lock around it, so they take turns.


Attachments:
(No filename) (226.00 B)