git: b41818a28a6d - main - monitor: fix cb restore when monitored adapter unregisters
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 24 Dec 2022 15:30:32 UTC
The branch main has been updated by vmaffione: URL: https://cgit.FreeBSD.org/src/commit/?id=b41818a28a6dba6d33076fbb789442308e57a124 commit b41818a28a6dba6d33076fbb789442308e57a124 Author: Vincenzo Maffione <vmaffione@FreeBSD.org> AuthorDate: 2022-12-24 15:28:45 +0000 Commit: Vincenzo Maffione <vmaffione@FreeBSD.org> CommitDate: 2022-12-24 15:28:45 +0000 monitor: fix cb restore when monitored adapter unregisters netmap_monitor_stop() called nm_monitor_none() after the head of the zero-copy monitors had been reset, thus thinking that there was nothing left to do. MFC after: 7 days --- sys/dev/netmap/netmap_monitor.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sys/dev/netmap/netmap_monitor.c b/sys/dev/netmap/netmap_monitor.c index e05313c1f792..9f94bed056a1 100644 --- a/sys/dev/netmap/netmap_monitor.c +++ b/sys/dev/netmap/netmap_monitor.c @@ -458,6 +458,9 @@ netmap_monitor_stop(struct netmap_adapter *na) struct netmap_zmon_list *z = &kring->zmon_list[t]; u_int j; + if (nm_monitor_none(kring)) + continue; + for (j = 0; j < kring->n_monitors; j++) { struct netmap_kring *mkring = kring->monitors[j]; @@ -470,6 +473,8 @@ netmap_monitor_stop(struct netmap_adapter *na) } kring->monitors[j] = NULL; } + kring->n_monitors = 0; + nm_monitor_dealloc(kring); if (!nm_is_zmon(na)) { /* we are the head of at most one list */ @@ -490,12 +495,7 @@ netmap_monitor_stop(struct netmap_adapter *na) z->prev = NULL; } - if (!nm_monitor_none(kring)) { - - kring->n_monitors = 0; - nm_monitor_dealloc(kring); - nm_monitor_restore_callbacks(kring); - } + nm_monitor_restore_callbacks(kring); } } }