On Mon, 11 May 2026 18:35:46 +0800
Zaiyu Wang <[email protected]> wrote:

> The configuration of allmulti and promiscuous modes conflicts
> together. For instance, if we enable promiscuous mode, then enable and
> disable allmulti, then the promiscuous mode is wrongly disabled.
> 
> To resolve this, the following changes are made:
> - do nothing when we set/unset allmulti if promiscuous mode is on
> - restore the proper mode (none or allmulti) when we disable
>   promiscuous mode
> 
> Fixes: 7744e90805b5 ("net/ngbe: add promiscuous and allmulticast ops for VF 
> device")
> Cc: [email protected]
> 
> Signed-off-by: Zaiyu Wang <[email protected]>
> ---

Worth mentioning, but IMHO this is case of AI being overly pedantic.
Patch is OK as is.


# Review of DPDK Patch: net/ngbe: fix VF promiscuous and allmulticast

## Summary

This patch fixes a mode conflict issue in the ngbe VF driver between 
promiscuous and allmulticast modes. The overall approach is correct: it 
prevents mode conflicts by making allmulticast operations no-ops when 
promiscuous mode is active, and restores the appropriate mode when disabling 
promiscuous.

## Errors

None identified.

## Warnings

### 1. Implicit comparison in existing code (line 1226)

**Issue:** The existing code uses `if (dev->data->promiscuous == 1)` which 
mixes explicit and implicit styles. The patch changes this to `if 
(dev->data->promiscuous)` which is implicit.

**Why it matters:** DPDK coding standards require explicit comparisons for 
integers (`!= 0` or `== 0`).

**Suggested fix:**
```c
/* Line 1226 - be consistent with explicit comparison */
if (dev->data->promiscuous != 0)
    return 0;

/* Line 1250 - same issue */
if (dev->data->promiscuous != 0)
    return 0;
```

Note: While the patch changes `== 1` to implicit, the proper fix is to use `!= 
0` since `promiscuous` is an integer field, not a boolean type.

### 2. Error propagation pattern inconsistency

**Issue:** The function `ngbevf_dev_promiscuous_disable()` returns 0 early when 
allmulticast check causes mode selection, but this early return bypasses the 
switch statement's error handling for the actual mode update call.

**Context:** This is not a bug in the patch itself—the early returns in 
`ngbevf_dev_allmulticast_enable()` and `ngbevf_dev_allmulticast_disable()` when 
promiscuous mode is active are correct (those are intentional no-ops). The mode 
variable change in `ngbevf_dev_promiscuous_disable()` correctly passes through 
to the existing switch statement for error handling.

No change needed—this comment is for clarity only.

## Info

### Code structure observation

The logic correctly handles the mode transitions:
- When disabling promiscuous mode, it checks `all_multicast` flag and sets the 
appropriate target mode (ALLMULTI if enabled, NONE otherwise)
- When enabling/disabling allmulticast while promiscuous is active, it returns 
early as a no-op (correct, since promiscuous overrides allmulticast)

This is a clean fix for the mode conflict issue described in the commit message.

---

## Final Recommendation

Address the implicit comparison style issue (Warning #1) to comply with DPDK 
coding standards. Change `if (dev->data->promiscuous)` to `if 
(dev->data->promiscuous != 0)` in both locations (lines 1226 and 1250).

Reply via email to