From: Ben Greear <[EMAIL PROTECTED]>
Date: Thu, 01 Sep 2005 23:55:53 -0700

> Ok, so each object that now has a net_device* dev pointer instead
> gets this netdev_pointer object.  When a reference is taken,
> this netdev_pointer object is linked into the netdevice object
> in a list.  This requires a lock and is O(1) even with debugging
> disabled?

> On dev_put, you remove the reference from the netdev's list.
> This would be O(N) and require a lock with or without debugging enabled, 
> right?
> (N == number of references)

All the list stuff gets compiled out unless we're debugging.
So this netdev_pointer degenerates into a fancy pointer.

We can use a "struct list_head" to avoid the unlink complexity.

> All of the code that currently goes foo->dev would have to be changed to
> foo->dev.dev for reference, and/or we'd change most methods to take a pointer
> to netdev_pointer instead of netdevice?

We'd have to hide things behind accessor macros, which is why
I named the member to be "__dev", with underscores.  To make
direct accesses outside of specific interfaces be not done.

> Right, but we want to catch the cases where someone forgets, so the
> pointer object cannot be on the stack (we need something to reference
> X time later when we try to free the device and want to know who has
> a handle.)  This implies kmalloc to me, since setting any static amount
> of them in the netdevice is just asking for trouble (or known failure
> mode, to use your term :)

Maybe these cases are so "obvious" that they don't need the tracking
code.

> I do like that your method gets rid of the kmalloc in at least one
> case, but to be honest, I still am partial to my method at this point
> because it has little to no cost when disabled (and it's done :))

Mine would be zero cost when disabled as well, I just forgot to
put the necessary ifdefs in some of my example code.  When disabled
we'd have:

struct netdev_pointer {
        struct netdev *dev;
};

and that degenerates to what we have today.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to