[linux-dvb] af9005/mt2060 module unload failure

Michael Krufky mkrufky at linuxtv.org
Thu Jun 14 23:52:56 CEST 2007

Luca Olivetti wrote:
> En/na Trent Piepho ha escrit:
>> Exactly, the dvb_frontend struct contains the tuner.  In fact, the
>> pointer
>> returned by the tuner attach functions is just the dvb_frontend
>> pointer you
>> passed in.  The tuner attach functions don't return a new tuner
>> object (there
>> is no dvb_tuner object), they add the tuner functions into the
>> frontend.  One
>> could have a frontend with no tuner.
>> In af9005_fe_set_frontend(), you do this:
>>         ret = state->tuner->ops.tuner_ops.set_params(state->tuner, fep);
>> What you should do is:
>>     ret = fe->ops.tuner_ops.set_params(state->tuner, fep);
>> I don't think you need the state->tuner field really.  Just replace
>> all the
>> "state->tuner->ops..." with "fe->ops...".  And change (state->tuner
>> != NULL)
>> to (fe->ops.tuner_ops.release != NULL), or add a one bit flag
>> state->tuner_is_attached and use that.
> Ok, that could be an idea, but it wouldn't explain why my
> symbol_put_addr messes up the reference count, while the same exact
> thing done in dvb_frontend_detach wouldn't.
> Bye
It does explain it -- dvb_frontend_detach is running _and_ your code
that calls symbol_put_addr is also running.  With both of them
occurring, this explains the module ref count being screwed up.



More information about the linux-dvb mailing list