usbatm : modprobe & rmmod

Roman Kagan rkagan at mail.ru
Sat Jan 22 16:05:23 EST 2005


  Hi Duncan,

On Sat, 2005-01-22 at 16:19 +0100, Duncan Sands wrote:
> > It looks like there's a bug in usb_atm.c reference counting:
> > udsl_destroy_instance kfrees udsl_instance_data, while the latter is
> > is a member of {speedtch,cxacru,...}_instance_data and not kmalloced
> > separately.  I'll try to come up with a proper fix tomorrow (I'll have
> > to check if simply removing kfree in udsl_destroy_instance is enough).
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
What a bullshit I can write when I'm falling asleep.  Strangely enough
another message I wrote this morning with a better wording didn't get to
the list.

> For what it's worth, this is fixed (I think) in the new driver organisation
> I'm playing with.

I can't tell since the code to store the minidriver instance data hasn't
hit CVS yet.  You'll probably need a release function for the
minidrivers whose instance data can't be destroyed synchronously though,
and call it in udsl_destroy_instance.

Meanwhile, if you don't mind, I'll keep trying with the split up
usb_atm.  In particular, I'm going to change the interface so that

1) modem driver instance owns a pointer to udsl_instance, rather than
the struct itself.  It's allocated in udsl_instance_setup, and freed in
udsl_instance_disconnect.

2) udsl_instance_{setup,disconnect} calls usb_{get,put}_dev (already
there) so that usb_atm can continue after driver instance is destroyed.
In future it'll also need to call usb_{get,put}_interface to support the
drivers like eagle-usb, which AFAICS uses different interfaces to send
and to receive data.

3) usb_atm refcount counts atm references only, and
udsl_{get,put}_instance become internal to usb_atm.  The drivers do
their own bookkeeping, if needed.

Even if this turns out to be a duplicated effort ending up in a waste
bin, I'll consider it a good exercise in kernel programming for me :)

Cheers,
  Roman.




More information about the Usbatm mailing list