netdev
[Top] [All Lists]

Re: Kernel locking up in module

To: N N Ashok <nalkunda@xxxxxxxxxxx>
Subject: Re: Kernel locking up in module
From: Stephen Hemminger <shemminger@xxxxxxxx>
Date: Mon, 14 Jul 2003 15:49:46 -0700
Cc: netdev@xxxxxxxxxxx
In-reply-to: <200307141746.30761.nalkunda@xxxxxxxxxxx>
Organization: Open Source Development Lab
References: <200307141746.30761.nalkunda@xxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
On Mon, 14 Jul 2003 17:46:30 -0400
N N Ashok <nalkunda@xxxxxxxxxxx> wrote:

> Hi All,
>     I am creating a module to measure the outgoing bandwidth usage on the 
> interfaces. It uses the get_stats() of the device to get the current stats 
> and then computes the bandwidth usage. The algorithm for the usage 
> calculation are borrowed from iproute2 package (tc/tc_estimator.c).
>   The problem is that the kernel keeps locking up. I am using rwlock_t locks 
> to lock the data. In the code, I traverse the list of bwuage structures and 
> as a debug message am printing whether the traversal ended in the variable 
> becoming null (which it should if everything went right), but the variable is 
> non-null every other time I insert the module. 
>       printk(KERN_INFO "bwestimator: dev: %s. bwusage: %s.\n", dev ? 
> "non-null" : 
> "null", bwusage ? "non-null" : "null");
> 
>   I think this has got to do with some locking issues. As this is my first go 
> at the kernel locking, I might have used the wrong kind of locks. I have 
> attached the module source, header and the log messages as I inserted the 
> module a couple of times. I request you all to please help me as I am totally 
> lost here.
> 
> Thanks,
> Ashok


You are not locking out the bottom half receive thread so it will deadlock
when it runs while your code holds the top half lock.

<Prev in Thread] Current Thread [Next in Thread>