The patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <[email protected]>.

Thanks,
Sasha

------------------ original commit in Linus's tree ------------------

>From d03e094473ecdeb68d853752ba467abe13e1de44 Mon Sep 17 00:00:00 2001
From: Ethan Nelson-Moore <[email protected]>
Date: Mon, 9 Feb 2026 18:12:34 -0800
Subject: [PATCH] net: intel: fix PCI device ID conflict between i40e and
 ipw2200

The ID 8086:104f is matched by both i40e and ipw2200. The same device
ID should not be in more than one driver, because in that case, which
driver is used is unpredictable. Fix this by taking advantage of the
fact that i40e devices use PCI_CLASS_NETWORK_ETHERNET and ipw2200
devices use PCI_CLASS_NETWORK_OTHER to differentiate the devices.

Fixes: 2e45d3f4677a ("i40e: Add support for X710 B/P & SFP+ cards")
Cc: [email protected]
Acked-by: Johannes Berg <[email protected]>
Signed-off-by: Ethan Nelson-Moore <[email protected]>
Reviewed-by: Aleksandr Loktionov <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c  | 8 +++++++-
 drivers/net/wireless/intel/ipw2x00/ipw2200.c | 8 +++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c 
b/drivers/net/ethernet/intel/i40e/i40e_main.c
index d3bc3207054f9..02de186dcc8f5 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -75,7 +75,13 @@ static const struct pci_device_id i40e_pci_tbl[] = {
        {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_BASE_T4), 0},
        {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_BASE_T_BC), 0},
        {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_SFP), 0},
-       {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_B), 0},
+       /*
+        * This ID conflicts with ipw2200, but the devices can be differentiated
+        * because i40e devices use PCI_CLASS_NETWORK_ETHERNET and ipw2200
+        * devices use PCI_CLASS_NETWORK_OTHER.
+        */
+       {PCI_DEVICE(PCI_VENDOR_ID_INTEL, I40E_DEV_ID_10G_B),
+               PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, 0},
        {PCI_VDEVICE(INTEL, I40E_DEV_ID_KX_X722), 0},
        {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_X722), 0},
        {PCI_VDEVICE(INTEL, I40E_DEV_ID_SFP_X722), 0},
diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2200.c 
b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
index 09035a77e775f..b0e769da94156 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
@@ -11387,7 +11387,13 @@ static const struct pci_device_id card_ids[] = {
        {PCI_VENDOR_ID_INTEL, 0x1043, 0x8086, 0x2754, 0, 0, 0},
        {PCI_VENDOR_ID_INTEL, 0x1043, 0x8086, 0x2761, 0, 0, 0},
        {PCI_VENDOR_ID_INTEL, 0x1043, 0x8086, 0x2762, 0, 0, 0},
-       {PCI_VDEVICE(INTEL, 0x104f), 0},
+       /*
+        * This ID conflicts with i40e, but the devices can be differentiated
+        * because i40e devices use PCI_CLASS_NETWORK_ETHERNET and ipw2200
+        * devices use PCI_CLASS_NETWORK_OTHER.
+        */
+       {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x104f),
+               PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, 0},
        {PCI_VDEVICE(INTEL, 0x4220), 0},        /* BG */
        {PCI_VDEVICE(INTEL, 0x4221), 0},        /* BG */
        {PCI_VDEVICE(INTEL, 0x4223), 0},        /* ABG */
-- 
2.51.0




Reply via email to