svn commit: r310822 - head/sys/dev/netmap
Adrian Chadd
adrian at FreeBSD.org
Fri Dec 30 14:47:47 UTC 2016
Author: adrian
Date: Fri Dec 30 14:47:46 2016
New Revision: 310822
URL: https://svnweb.freebsd.org/changeset/base/310822
Log:
[netmap] fix locking regressions
* Firmware oriented NICs may need to sleep in their configuration paths.
Use RLOCK instead of WLOCK to allow this to again occur.
This fixes netmap on cxgbe.
* Change the worker lock to a normal mutex rather than a spin lock.
Drivers shouldn't be doing netmap work from the fast interrupt
handlers, so it's not required to be a spinlock.
Submitted by: luigi, Vincenzo Maffione <v.maffione at gmail.com>
Reviewed by: jhb
Modified:
head/sys/dev/netmap/netmap_freebsd.c
Modified: head/sys/dev/netmap/netmap_freebsd.c
==============================================================================
--- head/sys/dev/netmap/netmap_freebsd.c Fri Dec 30 13:04:43 2016 (r310821)
+++ head/sys/dev/netmap/netmap_freebsd.c Fri Dec 30 14:47:46 2016 (r310822)
@@ -92,7 +92,7 @@ nm_os_selinfo_uninit(NM_SELINFO_T *si)
void
nm_os_ifnet_lock(void)
{
- IFNET_WLOCK();
+ IFNET_RLOCK();
}
void
@@ -1090,8 +1090,8 @@ nm_kthread_worker(void *data)
continue;
} else if (nmk->run) {
/* wait on event with one second timeout */
- msleep_spin((void *)(uintptr_t)ctx->cfg.wchan,
- &nmk->worker_lock, "nmk_ev", hz);
+ msleep((void *)(uintptr_t)ctx->cfg.wchan,
+ &nmk->worker_lock, 0, "nmk_ev", hz);
nmk->scheduled++;
}
mtx_unlock(&nmk->worker_lock);
@@ -1122,7 +1122,7 @@ nm_os_kthread_create(struct nm_kthread_c
if (!nmk)
return NULL;
- mtx_init(&nmk->worker_lock, "nm_kthread lock", NULL, MTX_SPIN);
+ mtx_init(&nmk->worker_lock, "nm_kthread lock", NULL, MTX_DEF);
nmk->worker_ctx.worker_fn = cfg->worker_fn;
nmk->worker_ctx.worker_private = cfg->worker_private;
nmk->worker_ctx.type = cfg->type;
More information about the svn-src-all
mailing list