[linux-dvb] af9005/mt2060 module unload failure
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
>> 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.
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