From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2097244E037 for ; Fri, 22 May 2026 14:26:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779459967; cv=none; b=Bi/u+spj6npufTTyODlUo5ss5ePqvvfxNLpQokEcuVcGXIdd293lrU8OqfSX9PS4FedIpUg8X550bXacHUrg8XWbniMmJdYp+dKO9Hml740s3tkGDAs/jvCVokHIevdpgiQBZCHOaYmOqHrsOmEPAQnQ5OrfZfymOSA77B/9qvY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779459967; c=relaxed/simple; bh=4pCNnTeqyzf6VEl2hNsKTbPGOcUh3+iSlo4UZVG5I34=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=T+Pg6Mbc3AP+/8HLDpy78JpeD32PoYwaaEUzYiyRM/1uLbC7SgdYx5ec5xQdz5ZWoC/qRIOhr3hQEvV/6TZEiQJqgLdshlOGkEMLZ+49rVOFRbwvqBBUXNcLfHDJYjvjToKmHoY7m1yTvWRFPXmGBsekdlevtkZy32NRB7a8SdM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=geTgqib3; arc=none smtp.client-ip=209.85.167.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="geTgqib3" Received: by mail-lf1-f49.google.com with SMTP id 2adb3069b0e04-5a88db610ccso7733283e87.2 for ; Fri, 22 May 2026 07:26:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779459964; x=1780064764; darn=vger.kernel.org; h=mime-version:references:subject:cc:to:from:date:user-agent :message-id:from:to:cc:subject:date:message-id:reply-to; bh=MpQaY3we4xrhiPbOjmoJPTIny3UGycHksSQkshrzJus=; b=geTgqib3rQF8cnANmvbSzleLZ+Y0tOl+6aQbHDhmPbiO6YlqEtybjvErhCIBBfEt0K 5KrzrhTCH4il5gfRCdZjugvUDligLxCDumvAlvy5Lny1aezhN1kNK+HIdI8qbO+v66+q Klmo0/+PfKsAAZt+gaj72mj9Xwbk5crFcfpSA/3ydb/rcPHIk30RUrQTxJYiq0dGzytD npBOS/3Cpq70NAtEsQsvtpcXwUNgKWCWujuCw6wJP2twtmdgHlFAVV95aO8cZ/NWIRpr a3BhJztc0y+DWDWS1QT1G+kWfqlTMWfoJ3GK0BJ1RJmx5uj0oAY9959UFz7CPW716BKN aGfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779459964; x=1780064764; h=mime-version:references:subject:cc:to:from:date:user-agent :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=MpQaY3we4xrhiPbOjmoJPTIny3UGycHksSQkshrzJus=; b=Gf1eQC9qJrSo4T4Fx1TYB4pxqAUNEVjeQdJkW/VSiiQxoWHJTJ7BfPyaXg4NYKgRjG gVwx1izOIGlLrRmfqi7WgvZabYUKsNyUULgKUXylD/Dq+DMFRr//j2Q8ZCWolN8uJaSz NLbVz+LjVLnL3Ila760xHI+WJZcNHKZ/th5014oqgW6dDiWUTyboDRcZzFv7Lqp+Ye7b gEaAN/BwNalUh4+woeM4f2xxIIO3tNby0wVbqEzXfK2UhYJrc998jmnHxnmY5rk2pufR g4MHlCUinqP/3NeN25ow1YdrVLuPMUgUjDcXQSDXm9Qj5FwfQXb/ppERnr4AZSAkRRix sOew== X-Gm-Message-State: AOJu0Yw0oYvdHZUN0rty5aSrsn2J15QqmBH1gs5eHOIDTqdp6FRhDjq6 Wec91kPdFhZncBIx5vVHyy48a49GVubDz0Fi3UcytOiLcyLSrADDh/sX X-Gm-Gg: Acq92OEtqTGUm228kst3ghr8j+EraSCNZDnrlfrTMbJwE/4dgmGPLFIWBBPyCPQZ5l8 8cD2py8uf6UJk0eJoN183j+shSpjHfain8K2tC1/0dYx9x7UI2CHWKuqaRhJqnNvwi8CiltjqQA pajSLA/NawJfGmMuqvKpDw0kD5mGK0FHr1RGlaPLFFImaOJZTbmk1Dxv9wfY6SOdvqu7Xg5TICG dTIDbQjWhQ4QPSbFwEd8NObB/4tsH44qbo1HzHUVpfrwhglXyQQ1BYtaydpCIEE0fZDVcef5NN+ kVFSxk9RnQaixnUGQ981pt3JFyIodategRM/nToO1Vx6bp3HyRZf/kTseGLL+4eKIyuAbxZWy+5 3QvIQ0a249DPAuS8YXBJmW/Q4HceZbLTRbo2rwyiklhr4vJJ5W0uth78PtjB/IYyWe/WijIwV1S q1aBB2Itq35tkP9DThxzCHYRNP X-Received: by 2002:a05:6512:3b8a:b0:5a3:eb4b:37a7 with SMTP id 2adb3069b0e04-5aa3235d1abmr1336671e87.6.1779459964034; Fri, 22 May 2026 07:26:04 -0700 (PDT) Received: from grain.localdomain ([5.18.255.97]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5aa32ceb267sm445082e87.51.2026.05.22.07.26.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 07:26:03 -0700 (PDT) Received: by grain.localdomain (Postfix, from userid 1000) id 573E05A0048; Fri, 22 May 2026 17:25:17 +0300 (MSK) Message-ID: <20260522142517.550660367@gmail.com> User-Agent: quilt/0.69 Date: Fri, 22 May 2026 17:22:41 +0300 From: Cyrill Gorcunov To: linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Simon Horman , anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, Cyrill Gorcunov Subject: [patch 2/2] ice: Fix wrong dsn read in ice_adapter_put References: <20260522142239.628965142@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 When registering an adapter instance, we read the PCI configuration space to fetch the DSN and generate an adapter index for lookups. However, if the adapter has been physically unplugged, the PCI space is no longer accessible. Reading it returns a zero value, which results in either an incorrect adapter instance being put or the proper instance not being put at all. To fix this, we will use the previously known index instead. Signed-off-by: Cyrill Gorcunov --- drivers/net/ethernet/intel/ice/ice_adapter.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) Index: linux-tip.git/drivers/net/ethernet/intel/ice/ice_adapter.c =================================================================== --- linux-tip.git.orig/drivers/net/ethernet/intel/ice/ice_adapter.c +++ linux-tip.git/drivers/net/ethernet/intel/ice/ice_adapter.c @@ -40,10 +40,8 @@ static u64 ice_adapter_index(struct pci_ } } -static unsigned long ice_adapter_xa_index(struct pci_dev *pdev) +static unsigned long xa_index_mangle(u64 index) { - u64 index = ice_adapter_index(pdev); - #if BITS_PER_LONG == 64 return index; #else @@ -51,6 +49,11 @@ static unsigned long ice_adapter_xa_inde #endif } +static unsigned long ice_adapter_xa_index(struct pci_dev *pdev) +{ + return xa_index_mangle(ice_adapter_index(pdev)); +} + static struct ice_adapter *ice_adapter_new(struct pci_dev *pdev) { struct ice_adapter *adapter; @@ -130,13 +133,17 @@ struct ice_adapter *ice_adapter_get(stru */ void ice_adapter_put(struct pci_dev *pdev) { + const struct ice_pf *pf = pci_get_drvdata(pdev); struct ice_adapter *adapter; unsigned long index; - index = ice_adapter_xa_index(pdev); + if (WARN_ON(!pf->adapter)) + return; + scoped_guard(mutex, &ice_adapters_mutex) { + index = xa_index_mangle(pf->adapter->index); adapter = xa_load(&ice_adapters, index); - if (WARN_ON(!adapter)) + if (WARN_ON(!adapter || adapter != pf->adapter)) return; if (!refcount_dec_and_test(&adapter->refcount)) return;