mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
[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@gmail.com> Reviewed by: jhb
This commit is contained in:
parent
9a4ee196dd
commit
869d88787d
1 changed files with 4 additions and 4 deletions
|
|
@ -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_cfg *cfg, unsigned int cfgtype,
|
|||
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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue