• Jonathan Nieder's avatar
    [media] cx88: protect per-device driver list with device lock · 8a317a87
    Jonathan Nieder authored
    The BKL conversion of this driver seems to have gone wrong.  Various
    uses of the sub-device and driver lists appear to be subject to race
    conditions.
    
    In particular, some functions access drvlist without a relevant lock
    held, which will race against removal of drivers.  Let's start with
    that --- clean up by consistently protecting dev->drvlist with
    dev->core->lock, noting driver functions that require the device lock
    to be held or not to be held.
    
    After this patch, there are still some races --- e.g.,
    cx8802_blackbird_remove can run between the time the blackbird driver
    is acquired and the time it is used in mpeg_release, and there's a
    similar race in cx88_dvb_bus_ctrl.  Later patches will address the
    remaining known races and the deadlock noticed by Andi.  This patch
    just makes the semantics clearer in preparation for those later
    changes.
    
    Based on work by Ben Hutchings <ben@decadent.org.uk>.
    Tested-by: default avatarAndi Huber <hobrom@gmx.at>
    Tested-by: default avatarMarlon de Boer <marlon@hyves.nl>
    Cc: stable@kernel.org
    Signed-off-by: default avatarJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    8a317a87
cx88-blackbird.c 38.2 KB