> Hi!
> I've updated to the svn kaffeine and running linux-2.6.28. From now on, I
> cannot tune my DVB. Kaffeine simply writes
> ERROR Tuning
> : Invalid argument
> Frontend closed
>
> In dmesg, the following message appears:
> Jan 10 19:33:11 arcus kernel: ioctl32(kaffeine:18628): Unknown cmd fd(15) cmd(40086f52){t:'o';sz:8} arg(fffc3d84) on /dev/dvb/adapter0/frontend0
>
> I was looking at the source, the ioctl which causes the problem is
> FE_SET_PROPERTY. Its binary representation seems OK. I've looked to the
> kernel sources, turned on dvb_core debugging, and I can see, that the ioctl
> comes properly to dvb_frontend_ioctl (I can see it printed in the debug log)
> but not to the dvb_frontend_ioctl_properties (not stated in the log).
> The source seems clear and I don't know, why it doesn't call it and probably
> comes to the dvb_frontend_ioctl_legacy (which doesn't generate the debug log)
> and fails there.
>
> The kernel is compiled for x86_64, but the kaffeine is still 32-bit binary.
> Any hints ?
>
> With regards, Pavel Troller
>
Hi!
Replying to myself, I've found the cause but I'm not sure, how to solve it.
I've found that I was wrong thinking that the ioctl is passed normally. It
was another one in the sequence. The FE_SET_PROPERTY ioctl was not passed
by /usr/src/linux/fs/compat_ioctl.c, because it was not entered in its table.
I thought that it's just a mistake of the developers, that they forgot to add
it because it's new. So I added all the missing ioctls from
/usr/src/linux/include/linux/dvb/frontend.h (total of 3) as compatible.
However, it didn't work either. More debugging showed me that this ioctl is
getting a different command code on 64bit platform (0x40106f52) and on 32bit
one (0x40086f52). I've then found that it's because there is a pointer in the
struct dtv_properties, passed as data area to the ioctl, which has different
length (32/64bits) on different platforms, making the length part of the
command code different too, so the command is not recognized by ioctl_compat.c.
And there I stopped. I don't think I have enough knowledges especially in the
platform peculiarities area to solve this. I think that those ioctls are wrong
by design, that they contain platform-dependent data, so they cannot be simply
handled in the compat layer. Maybe I would be able to make a quick hack to make
things work, but definitely not cleanly enough to be generally accepted.
So, it looks that 32bit kaffeine cannot run on 64bit kernels now. I think it's
a serious bug on the Linux kernel side. I will forward this mail to the
appropriate Linux folks too.
With regards, Pavel Troller
------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB_______________________________________________
kaffeine-user mailing list
kaffeine-user@...
https://lists.sourceforge.net/lists/listinfo/kaffeine-user