• D
    HID: uhid: simplify report-cb shutdown · 0e0d7520
    David Herrmann 提交于
    The report-query is blocking, so when user-space destroys a device we have
    to wake up any blocking kernel context that is currently in the report-cb.
    We used some broken correlation between @report_done and @running so far.
    Replace it by a much more obvious use.
    
    We now wake up the report-cb if either @report_done or @running is set.
    wake_up() and wait_event() serve as implicit barriers (as they always do)
    so no need to use smp_rmb/wmb directly.
    
    Note that @report_done is never reset by anyone but the report-cb, thus
    it cannot flip twice while we wait for it. And whenever we set @running,
    we afterwards synchronously remove the HID device. Therefore, we wait for
    all report-cbs to finish before we return. This way, @running can never
    flip to true while we wait for it.
    Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
    Signed-off-by: NJiri Kosina <jkosina@suse.cz>
    0e0d7520
uhid.c 15.5 KB