• Nikolaus Schulz's avatar
    [media] dvb: push down ioctl lock in dvb_usercopy · 30ad64b8
    Nikolaus Schulz authored
    Since most dvb ioctls wrap their real work with dvb_usercopy, the static mutex
    used in dvb_usercopy effectively is a global lock for dvb ioctls.
    Unfortunately, frontend ioctls can be blocked by the frontend thread for
    several seconds; this leads to unacceptable lock contention.  Mitigate that by
    pushing the mutex from dvb_usercopy down to the individual, device specific
    ioctls.
    There are 10 such ioctl functions using dvb_usercopy, either calling it
    directly, or via the trivial wrapper dvb_generic_ioctl. The following already
    employ their own locking and look safe:
        • dvb_demux_ioctl           (as per dvb_demux_do_ioctl)
        • dvb_dvr_ioctl             (as per dvb_dvr_do_ioctl)
        • dvb_osd_ioctl             (as per single non-trivial callee)
        • fdtv_ca_ioctl             (as per callees)
        • dvb_frontend_ioctl
    The following functions do not, and are thus changed to use a device specific
    mutex:
        • dvb_net_ioctl             (as per dvb_net_do_ioctl)
        • dvb_ca_en50221_io_ioctl   (as per dvb_ca_en50221_io_do_ioctl)
        • dvb_video_ioctl
        • dvb_audio_ioctl
        • dvb_ca_ioctl
    Signed-off-by: default avatarNikolaus Schulz <schulz@macnetix.de>
    Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    30ad64b8
dvbdev.c 11.5 KB