diff options
author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2019-10-07 08:28:55 +0000 |
---|---|---|
committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2019-10-07 08:28:55 +0000 |
commit | fc0ff31cc5eef898e304b434bfb8b96935a1b269 (patch) | |
tree | 67d2cb2bdcec55cae3550796dc691d34909d5e1c /sys/contrib | |
parent | ca195342d5c373c0ae77a974ef2358fc8447be1c (diff) | |
download | src-fc0ff31cc5eef898e304b434bfb8b96935a1b269.tar.gz src-fc0ff31cc5eef898e304b434bfb8b96935a1b269.zip |
MFC r352954:
Notify all sleeping threads of device removal in krping.
Implement d_purge for krping_cdevsw.
Submitted by: slavash@
Sponsored by: Mellanox Technologies
Notes
Notes:
svn path=/stable/11/; revision=353181
Diffstat (limited to 'sys/contrib')
-rw-r--r-- | sys/contrib/rdma/krping/krping.c | 14 | ||||
-rw-r--r-- | sys/contrib/rdma/krping/krping.h | 1 | ||||
-rw-r--r-- | sys/contrib/rdma/krping/krping_dev.c | 9 |
3 files changed, 24 insertions, 0 deletions
diff --git a/sys/contrib/rdma/krping/krping.c b/sys/contrib/rdma/krping/krping.c index 7b1038c27db7..8b32fe31f4cb 100644 --- a/sys/contrib/rdma/krping/krping.c +++ b/sys/contrib/rdma/krping/krping.c @@ -2189,3 +2189,17 @@ krping_walk_cb_list(void (*f)(struct krping_stats *, void *), void *arg) (*f)(cb->pd ? &cb->stats : NULL, arg); mutex_unlock(&krping_mutex); } + +void +krping_cancel_all(void) +{ + struct krping_cb *cb; + + mutex_lock(&krping_mutex); + list_for_each_entry(cb, &krping_cbs, list) { + cb->state = ERROR; + wake_up_interruptible(&cb->sem); + } + mutex_unlock(&krping_mutex); +} + diff --git a/sys/contrib/rdma/krping/krping.h b/sys/contrib/rdma/krping/krping.h index 5987b1c8625f..37df45b86776 100644 --- a/sys/contrib/rdma/krping/krping.h +++ b/sys/contrib/rdma/krping/krping.h @@ -17,3 +17,4 @@ struct krping_stats { int krping_doit(char *); void krping_walk_cb_list(void (*)(struct krping_stats *, void *), void *); int krping_sigpending(void); +void krping_cancel_all(void); diff --git a/sys/contrib/rdma/krping/krping_dev.c b/sys/contrib/rdma/krping/krping_dev.c index 342c5b0065f3..dda81af8c140 100644 --- a/sys/contrib/rdma/krping/krping_dev.c +++ b/sys/contrib/rdma/krping/krping_dev.c @@ -40,6 +40,7 @@ static d_open_t krping_open; static d_close_t krping_close; static d_read_t krping_read; static d_write_t krping_write; +static d_purge_t krping_purge; /* Character device entry points */ static struct cdevsw krping_cdevsw = { @@ -48,6 +49,7 @@ static struct cdevsw krping_cdevsw = { .d_close = krping_close, .d_read = krping_read, .d_write = krping_write, + .d_purge = krping_purge, .d_name = "krping", }; @@ -210,6 +212,13 @@ done: return(err); } +static void +krping_purge(struct cdev *dev __unused) +{ + + krping_cancel_all(); +} + int krping_sigpending(void) { |