|WARNING| [v2, 2/2] net/iavf: restore promiscuous mode only after VF reset
dpdklab at iol.unh.edu
dpdklab at iol.unh.edu
Wed Aug 5 15:16:07 CEST 2026
Test-Label: ai-code-review
Test-Status: WARNING
https://dpdk.org/patch/167186
_AI Code Review_
=== Patch Review: series.patch (via Claude) ===
Review date: 2026-08-05
# DPDK Patch Review
## Patch 1/2: net/iavf: remove auto reconfig devarg
### Errors
None.
### Warnings
None.
### Info
None.
---
## Patch 2/2: net/iavf: restore promiscuous mode only after VF reset
### Errors
**Error 1: Resource leak on `iavf_post_reset_reconfig()` error path in `iavf_dev_configure()`**
In `iavf_dev_configure()`, when the new call to `iavf_post_reset_reconfig()` fails (line 747-749), the function returns the error without cleaning up resources that were acquired earlier in the configure path. The `iavf_queues_req_reset()` calls earlier may have allocated resources or changed device state that need cleanup before returning an error.
```c
if (reset_done && !vf->in_reset_recovery) {
ret = iavf_post_reset_reconfig(dev);
if (ret)
return ret; /* BUG: no cleanup of reset state or resources */
}
```
**Suggested fix:** Trace back through `iavf_dev_configure()` to identify what cleanup is needed when exiting with an error after `iavf_queues_req_reset()`. This likely requires a `goto error_cleanup` or similar pattern to ensure consistent error path handling. At minimum, verify that `iavf_queues_req_reset()` is idempotent or that its state changes are safe to leave dirty on configure failure.
---
**Error 2: Missing documentation of `get_restore_flags` callback in PMD features or release notes**
The patch adds a new `get_restore_flags` callback to the `iavf_eth_dev_ops` structure, which implements an ethdev driver operation. Per the guidelines, device operations must be documented in `doc/guides/nics/features/` and changes to driver capabilities should be reflected in the release notes.
The release notes entry in patch 1/2 describes the removal of `auto_reconfig`, but patch 2/2 adds new driver behavior (the `get_restore_flags` callback) without documenting it.
**Suggested fix:** Add a release notes entry in `doc/guides/rel_notes/release_26_11.rst` under the iavf section describing the new behavior: that promiscuous/allmulti are now restored only on VF reset rather than on every start. Also verify whether `doc/guides/nics/features/iavf.ini` needs an update to reflect this callback implementation.
---
### Warnings
**Warning 1: `reset_done` variable initialization is redundant**
The `reset_done` variable is initialized to `false` at declaration (line 693), but this initialization is never used. The variable is only set to `true` in two branches before its first read at line 746. The initial `false` value is dead code.
```c
bool reset_done = false; /* initialization never read */
```
**Suggested fix:** Remove the initialization: `bool reset_done;`. The compiler will verify all paths set it before the check at line 746. This makes the code clearer and enables uninitialized-variable warnings if a future change adds a path that reads `reset_done` before setting it.
---
**Warning 2: Unclear relationship between `in_reset_recovery` and `iavf_post_reset_reconfig()`**
The patch adds a check `!vf->in_reset_recovery` to avoid double-restoration (line 746), but there is no documentation or comment explaining how `in_reset_recovery` is set, when it is cleared, or how the caller is expected to coordinate with `iavf_handle_hw_reset()` which also calls `iavf_post_reset_reconfig()`.
A future maintainer reading this code will not understand when `in_reset_recovery` is true, making it hard to reason about whether the restoration is correctly skipped.
**Suggested fix:** Add a comment explaining the coordination:
```c
/*
* A queue reconfiguration above triggers a VF reset, which clears the
* promiscuous and all-multicast settings in hardware. Re-apply the
* pre-reset states here, unless this configure is itself part of reset
* recovery (in_reset_recovery is set by iavf_handle_hw_reset), in which
* case the reset handler restores them once at the end (avoiding double
* restore).
*/
if (reset_done && !vf->in_reset_recovery) {
...
}
```
Also verify that `in_reset_recovery` is actually set before configure can be called during reset recovery, and that it is cleared afterward. If the flag's lifecycle is not clear from code review, this is a potential logic error.
---
### Info
**Info 1: Consider renaming `reset_done` to `queue_reset_performed` for clarity**
The variable `reset_done` is true when `iavf_queues_req_reset()` was called, but the name "done" is vague. A more descriptive name would be `queue_reset_performed` or `hw_reset_triggered`, which makes the condition at line 746 self-documenting.
---
## Summary
**Patch 1/2:** Clean removal of deprecated devarg. No issues.
**Patch 2/2:**
- **2 Errors** requiring fixes: error path resource leak, missing driver operation documentation.
- **2 Warnings** recommended: dead initialization, unclear flag coordination.
- **1 Info** suggestion: variable naming.
More information about the test-report
mailing list