[linux-dvb] [akpm@osdl.org: [linux-dvb-maintainer] Fw: [Bugme-new] [Bug 4370] New: Pinnacle PCI SAT-TV card: cx24110 frontend ioctl32 error]

Johannes Stezenbach js at linuxtv.org
Sat May 28 21:20:22 CEST 2005


Gerd Knorr wrote:
> Johannes Stezenbach <js at linuxtv.org> writes:
> 
> > I have no idea if we need to do something special to support this,
> > although I've seen that there's this compat_ioctl in
> > struct file_operations. Does someone have a clue?
> 
> Yes, compat_ioctl is for 32bit apps.  Had a quick look at the structs
> and they seem to be identical in 32 and 64 bit.  I think simply
> hooking the ioctl callback into both ioctl and compat_ioctl could do
> the trick for the frontend device.
> 
> In case you'll have fields like "long" or "void*" in the ioctl structs
> which have different sizes for 32/64 bit apps compat_ioctl would have
> to take care to handle the 32-bit cases correctly.  Browse through the
> kernel source code, there should be quite a few examples ;)

It seems none of the DVB API headers use long or void* fields,
except osd.h, so conversion should be easy.

BUT: http://lwn.net/Articles/119652/

If I understand that correctly, compat_ioctl does not acquire
the BKL (big kernel lock), so if we want to add compat_ioctl
we must either audit all code if it depends on the BLK
(I guess not, but I'm not sure), or call lock/unlock_kernel()
explicitely in our compat_ioctl handlers.

Johannes




More information about the linux-dvb mailing list