Page MenuHomeFreeBSD

cuse: Implement hot-unload
Needs ReviewPublic

Authored by christos on Fri, Sep 25, 11:50 AM.
Tags
None
Referenced Files
F173437578: D60022.id187667.diff
Fri, Sep 25, 10:41 PM
F173417760: D60022.diff
Fri, Sep 25, 7:58 PM
F173381478: D60022.id187667.diff
Fri, Sep 25, 2:18 PM
F173381229: D60022.diff
Fri, Sep 25, 2:15 PM
F173366549: D60022.id187667.diff
Fri, Sep 25, 11:53 AM
F173366409: D60022.diff
Fri, Sep 25, 11:52 AM
Subscribers

Details

Reviewers
markj
emaste
kib
Summary

cuse_kern_uninit() can hang on destroy_dev(), because of threads
sleeping in CUSE_IOCTL_GET_COMMAND, so wake them up before calling
destroy_dev(). Also do not allow threads to go back to sleep if the
is_closing flag has been set.

MFC after: 1 week
Sponsored by: The FreeBSD Foundation

Test Plan

Tested with virtual_oss:

root@freebsd:~ # service virtual_oss onestart
Starting virtual_oss config: dsp: hw.snd.basename_clone: 1 -> 0
done
root@freebsd:~ # ls /dev/dsp
/dev/dsp        /dev/dsp.dummy  /dev/dsp.loop   /dev/dsp0
root@freebsd:~ # kldunload cuse
root@freebsd:~ # ls /dev/dsp
/dev/dsp.dummy  /dev/dsp0
root@freebsd:~ # service virtual_oss onestop
Stopping virtual_oss config: dsp: done

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 77318
Build 74201: arc lint + arc unit

Event Timeline

We have d_purge cdevsw method. It is invoked by destroy_dev(9) when it observes threads inside cdevsw methods, to release the sleep. Would it be useful for your purpose there?