From nobody Mon Jun 8 12:12:35 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 61FA23D0932 for ; Fri, 29 May 2026 11:12:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053138; cv=none; b=kT3+8/MrFmMbGVHBfmr/Xi9o4uriQkIimE6KISZQdX5zoL2+aG2AuJnh5Iw++9ADY40t0mkaEHA5xBA5MOGQUJo138OFl4doEmyzaha7oPp+yngNMO0S6Cr/5dbngv2nNnQ2ku3os48FoLXgd/wWrTKS0h143PpUfzY+RuvS4dY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053138; c=relaxed/simple; bh=zLhKJQfxvv+d9aNsqJrU4irOe5OKs7/A2799Tf2JNWI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QgXCtcmtSb2PME2nLOYcwo3+R4JBGVpOHSlbrnehUEOXGQF1ibnjGyaCrJPDh1JDY7l9WuSGk6nj3zqwCdfwhZxSaTqf7XNZtvRUJ1eGVBquLyttu3Wsp+LO+AdA7zmlDmq4MKYV9yfIUmUYHtASJkBVNUh/qQddhY4oI1G/yuQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wSUoIdbO; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wSUoIdbO" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2b99eb06178so62691525ad.2 for ; Fri, 29 May 2026 04:12:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780053134; x=1780657934; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=H1WHbQ1I/exyopX3p7b75ehhnkD9ODb3Bve7jByn9iQ=; b=wSUoIdbO7fFMo9G4JafqQaEVtqtyTZ31hqyLopqjaby3Tvx6KI/Omn1lNYGAayNejO 7nSFJCAId5T/6PFskeIZ+pMRfTpbsp5u36kG73eFy3h0eyjo99VCabaw0VMY0nqNbsWY o/8dG0OMlZDwZj4r6RfL+wtJQT0aGv5bRePYrYAw6JJDQP9iNTUav0JZ8gZNWYTcObLF maMSkXkRNWyRhcsle7XyPEmuwpvEcSPj6zF1Hh1fNg7I0y9Ci3ClAKncz6XJxemVKFFs VCPhaBzOCINcOpo0m8JL6I1lw7KddXnT2K4f9Hfm8Dr0/vQaY9HbpeQUu2sX8Y2PXAWB yVaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780053134; x=1780657934; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=H1WHbQ1I/exyopX3p7b75ehhnkD9ODb3Bve7jByn9iQ=; b=bngHR9+fOWOu6A/DzyvcUnaxn5ur+mC/OmJBKdRERSRMQW6frvTMFj8GHxfVoFfvvw /09/Z5eOkR6XsAi5rIBNu6CDkjc9uaRHqHdqRLFss+57arWaHACV1/Hq5IaYRNcL84Aj 0t2L+i7PrKm2dym4IX3H6/A+co8VwOyWzLdz0R29aRzx7y16XOH+z1KdXDbp2jftZ/t+ Bae9dBBkPraUMG4yWZpSDnOE7l5XxMNt8FgG1Cpv9AtWhmYoL44PsNgx/e1a+3/EZ3XL z8T2W3VP+TaNgy+pfwvl9byaz+OG+okfPsVOwiBAjke0Q57c71eyMHudHoyNLQCtzWJv xn7Q== X-Forwarded-Encrypted: i=1; AFNElJ/ypxH8bIWpJYUps3Uk7Nh/OEhVbDg06GjVBCBnQDPuPjeKdU3fe1uKNYSfEGo74A3kN/la3wNoVwKM+kQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxfJdBTts8HP1gNhQ8FkVA3ZcLcC+6olhNLZCLMWJ/UoaWh4tJ/ I/jkqLM8eVp03uI86FD3gPIrSE43xyBqm/jD2eYdUjA4a6pUEYrRF55VCZj7P6LqTMhnMGJvHWp NKw== X-Received: from pln12.prod.google.com ([2002:a17:903:360c:b0:2bd:5ced:c1c0]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ced0:b0:2bc:7d1d:b677 with SMTP id d9443c01a7336-2bf20ce01c6mr32213585ad.36.1780053134160; Fri, 29 May 2026 04:12:14 -0700 (PDT) Date: Fri, 29 May 2026 11:12:03 +0000 In-Reply-To: <20260529111208.387412-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260529111208.387412-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529111208.387412-2-praan@google.com> Subject: [PATCH v6 1/6] PCI/ATS: Ensure pci_ats_supported() is PF-aware for VFs From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava , Jason Gunthorpe Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update pci_ats_supported() to additionally check the associated PF's status when called on a VF. This ensures that PF-level quirks and untrusted status are correctly propagated to VFs, providing a robust support check that aligns with the kernel's PF-centric ATS configuration model and is immune to the timing of VF-specific fixups. Reviewed-by: Jason Gunthorpe Reviewed-by: Samiullah Khawaja Reviewed-by: Nicolin Chen Reviewed-by: Lu Baolu Signed-off-by: Pranjal Shrivastava --- drivers/pci/ats.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index 96efa00d9743..679a3c3c1d54 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -40,10 +40,13 @@ void pci_ats_init(struct pci_dev *dev) */ bool pci_ats_supported(struct pci_dev *dev) { - if (!dev->ats_cap) + if (!dev->ats_cap || dev->untrusted) return false; =20 - return (dev->untrusted =3D=3D 0); + if (dev->is_virtfn) + return pci_ats_supported(pci_physfn(dev)); + + return true; } EXPORT_SYMBOL_GPL(pci_ats_supported); =20 --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 12:12:35 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 6F2DB3CAE75 for ; Fri, 29 May 2026 11:12:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053140; cv=none; b=kDyjx4DzgFhIYp490zctcRLGMtQkRlcDq0ao/hrpPmou3fTzTSuLNrtanLuN5gmpCTvh1Rxz66HJuhSPAB0dEmM3Y4Maa8udDC/j0uZbVLreNAuCieeuAbYw8J3TBCqsvMM4BWd6Kzh2/mI0uij4d1S0X2drlVKaEGG8Ma+X8es= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053140; c=relaxed/simple; bh=QMWF1Nn5UhAxAEgwX3QVOSlhArpqB7BokO3nvPMLRNI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=u4ngmTVJOdAX8va5HvGFQ5pk4/2iCabBdQrM1/DNB6pkIe3T+xo9Kfv8Qj8vh/s4tfPEOpbW5dNnAVdhIwi1effQoxWGSDEEM2Ij2rYyGbmscsaX2/9MuSVQfMuQNGHi/HQvcMuWDmBB+bODvBTGyi3/oRuefZ2QtKEMJJYFYzM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=m1fE3xKg; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="m1fE3xKg" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2babbeff9e4so154495755ad.0 for ; Fri, 29 May 2026 04:12:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780053137; x=1780657937; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=V1OhefJlO7SddiDjet5+3aQQ9KCjHVV2cUEJthb1Tt4=; b=m1fE3xKgmoQxyQVYBM2Y242Rhp5O5KsxSpFv6Yp8D6kajc2VYFUl1a3VoI3W5V2M+z x54DvhQxn98JeczzUCnq534G5rCXm9h3+OaenubOBlNHnk3JnAhTuww2aSElGu86AKLl Jti0s7pgC/CGUULnL3ItTYMCjlQWDBNuhDELvTWiyAu4S94SMoAK4WPGDwdgVJQV2j2F Kq4aTTT4QJ1nC5gxHocytvClnYxmOGdV5VtkkhMut/M6StVSYBN+1HoDXZE3qrFYRtVX /cUwvPI65bzq9kDl9x27UrEc7dzYtx4JNtnAaE4uo54VL/WfuUZ5hscpuRrDrai1tQpd fggQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780053137; x=1780657937; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=V1OhefJlO7SddiDjet5+3aQQ9KCjHVV2cUEJthb1Tt4=; b=b97E8KIBY/YDO44CVIT7WIY4nOz+cbFNUSKwt0DUZnnSe34r4VIVr5Op5kfGTy8haw O5N7Bb9rdQ82NW/va75ET7h+qV60Qm97HbGbu5s9u6mjyDyx4nHpA862AvzcyR3Ev2+g GXU5+ynE6al8Z6lEI62kQnUuMOqeg0JoktEQ/K/m8KRSVYeKjgtYBSMdjS9lcsQ1PMYI A0WNnla9GCkvGA3jsW5loh8hupPGn24rOz1lOrQsn5WGE0jWY4NJaQ8/WNcw0neSTJX4 vGRe/kYXt9osZyO/SqjjbQ+QMZSTcYfjA/d0lBwjcMeUWHZqY/CkcrdcNYEB3hFELQCE 67rQ== X-Forwarded-Encrypted: i=1; AFNElJ+IJNrgWgbj4781BMT8xPFaa/DVi/3kxLVM1CAd5RK/u+gq3BKmA+6CG9oGbnmxr8bC158syBO6Vz5iOrg=@vger.kernel.org X-Gm-Message-State: AOJu0YxvJ+a/vhFadKKOfX9QWQjrWEfuvw8Tz+Oz9M3zWIakxRhSzkQk 7bYMlAagm1+vzad1PWzmyE+XPAeBWlPbcBqjFug4BxvOeRMOG+mV8CmxktSQF8cajC/LUiYYQuh MFg== X-Received: from ploe7.prod.google.com ([2002:a17:903:2407:b0:2bf:a0d:a7e8]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:19cc:b0:2ba:838b:bfae with SMTP id d9443c01a7336-2bf20dfae24mr24843145ad.18.1780053136322; Fri, 29 May 2026 04:12:16 -0700 (PDT) Date: Fri, 29 May 2026 11:12:04 +0000 In-Reply-To: <20260529111208.387412-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260529111208.387412-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529111208.387412-3-praan@google.com> Subject: [PATCH v6 2/6] PCI/ATS: Validate STU for VFs in pci_prepare_ats() From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava , Jason Gunthorpe Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" While every PCI Function that implements ATS has an independent ATS Extended Capability structure with a Read/Write Smallest Translation Unit (STU) field, the kernel manages SR-IOV ATS by requiring the IOMMU driver to configure the STU on the Physical Function (PF) before any any Virtual Functions (VFs) are created. Currently, pci_prepare_ats() bails out early for VFs, assuming that the PF has already been correctly prepared. However, this creates a potential mismatch if a VF is subsequently prepared with a different page shift. Update pci_prepare_ats() to validate that the requested page shift (ps) matches the STU already configured in the associated PF. This ensures early detection of incompatible configurations and maintains the kernel's policy of consistent STU sizing across all functions associated with a given SMMU. Reviewed-by: Jason Gunthorpe Reviewed-by: Samiullah Khawaja Reviewed-by: Nicolin Chen Reviewed-by: Lu Baolu Signed-off-by: Pranjal Shrivastava --- drivers/pci/ats.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index 679a3c3c1d54..9cb23780093d 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -73,8 +73,12 @@ int pci_prepare_ats(struct pci_dev *dev, int ps) if (ps < PCI_ATS_MIN_STU) return -EINVAL; =20 - if (dev->is_virtfn) + if (dev->is_virtfn) { + if (pci_physfn(dev)->ats_stu !=3D ps) + return -EINVAL; + return 0; + } =20 dev->ats_stu =3D ps; ctrl =3D PCI_ATS_CTRL_STU(dev->ats_stu - PCI_ATS_MIN_STU); --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 12:12:35 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 8442B3D1719 for ; Fri, 29 May 2026 11:12:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053142; cv=none; b=uCIIAHx2pnAKYaRusH9NEBbveNWq05X3a214zNSmcPlMhKSGiMSl2Wa2o5bghpmuKUoL8pNMkcJX5TU5MlcVwNmDARDyBRMOtjx1pBbKzBFox8n6ym0lQ+v9XilCdjwZw+jUeeOAYtxH/PrSFtLhqvD3gZtb4j8LWhJMmVqAS38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053142; c=relaxed/simple; bh=utNKQCvUkPmBqehTN/p5pEe6fKwGdjlepuYbZLj1XUc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kr1XjJo2bmPhUUDPRKiPO5u7CvJBd24/qIdqM8ZiN3GzraJrP5etCUPcSp5M28pdsIB1eCTDW6DlYs2U2FGfGUf7nJvqG0tRhxNEhtZXghgdpgq3+Y8GWRVT4ntAc/pCYhyl+6+JzmovqLs++ber8snkOBzHc1V6MDUljqZK6dY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dUfGjDGa; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dUfGjDGa" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c8576bc9254so609715a12.1 for ; Fri, 29 May 2026 04:12:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780053139; x=1780657939; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=KwPPE5/66gX8tYQEwBiFqJ6gT9Mjq1jN4WhTwmvmXVQ=; b=dUfGjDGaauOsq9z3Q9ltvS3ODxPjCyjr2Tm4j4bk+2N3iZfqqI6x5T5zmwcH0S8D3O qyCkLT3C9nf5xuYQfsdD8vFXHgRFYQVIp4Ume7XSD3yJxHYYiNQYcnHm9vF15OD2GsXi OWG6ehFqzbZq5zhqa3I7sdcB+gS7ADitd+lhOV4ijn2zGQA4FErvN9w6Ysb7jDLWd/OC OvHxNuD5OpDQ9ZPFMnSAc/P2bnmrdgoSFdPiNLJNLTJWbmNa187Z6SyZwfuv7nJhi5jR obmj0+gUYC2dqO+oOOlkn1lcUpcuioUAtNBg5YUc83Lp7WTPDjg27F+kIyfo5VI5MKU2 yqAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780053139; x=1780657939; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KwPPE5/66gX8tYQEwBiFqJ6gT9Mjq1jN4WhTwmvmXVQ=; b=ULgzIEwvN4m+Lt4OL5YXTbEKfVEK204jzv7PzY1lrScr/OYyzssr+rG8BJVFV0kUln XQ7WQj27YDr+JgLjfvRyQvepy0XrzbT0ywHMnJmPDNFEL2o0VBrHKjiny2M4bgEc78Tt Vw0IrcjH2r4z4P7MTM55zW2mhLinzYEtfvH5Y1KD8FAznvUyx0y4Qg//h5qGhuNc2tTk XW9Ea+l0KDyU1M8vnusXATCd+ggsGyI/lLVSROsqcmdBztnBkyf+0p19g6fzh8gJnSc4 hBzTd+dxkv+YvEi1GwGW1m/YCjYi+W269N+k8Kp8pq5UJZZskgOwLKbBxJEk+9d0bAGb 3ihg== X-Forwarded-Encrypted: i=1; AFNElJ9tTXyWB3xl8ysppdXeCfLtOGPBEunHiy/f+SwjcCMuf6evw1ES9T/SeID90WFyN3ymVQVtnumbjbkZIcA=@vger.kernel.org X-Gm-Message-State: AOJu0YwsoFjT9FnswkXemv3oociSeyvFiXxlDrjagOFhCmYMFxiL/e6r RH6+8xiwdhhStquAq/P++8TChxDrIXy1/lOVVADXl3dFF+Sv0GDcDv8Zn9nqAQVH1d6QNUH0f3R lbw== X-Received: from pfbky33.prod.google.com ([2002:a05:6a00:6f61:b0:82f:b6a3:3dbc]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:14d3:b0:842:994:93a7 with SMTP id d2e1a72fcca58-84212a7f6a0mr2674296b3a.5.1780053138377; Fri, 29 May 2026 04:12:18 -0700 (PDT) Date: Fri, 29 May 2026 11:12:05 +0000 In-Reply-To: <20260529111208.387412-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260529111208.387412-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529111208.387412-4-praan@google.com> Subject: [PATCH v6 3/6] PCI/ATS: Mandate checking pci_ats_supported() before pci_prepare_ats() From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, pci_prepare_ats() internally calls pci_ats_supported() and returns -EINVAL if the device does not support ATS. While this provides a silent safety check, it conflates support detection with configuration. Update pci_prepare_ats() to wrap the internal pci_ats_supported check in a WARN_ON(). This mandates all callers to call pci_prepare_ats() only if the function supports ATS. Update the function documentation to mention that callers must verify ATS support (via pci_ats_supported()) before calling pci_prepare_ats(). Suggested-by: Baolu Lu Signed-off-by: Pranjal Shrivastava Reviewed-by: Nicolin Chen --- drivers/pci/ats.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index 9cb23780093d..f1434f86ac40 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -56,7 +56,9 @@ EXPORT_SYMBOL_GPL(pci_ats_supported); * @ps: the IOMMU page shift * * This must be done by the IOMMU driver on the PF before any VFs are crea= ted to - * ensure that the VF can have ATS enabled. + * ensure that the VF can have ATS enabled. Callers must verify that ATS is + * supported by the device (e.g. via pci_ats_supported()) before calling t= his + * function. * * Returns 0 on success, or negative on failure. */ @@ -64,7 +66,7 @@ int pci_prepare_ats(struct pci_dev *dev, int ps) { u16 ctrl; =20 - if (!pci_ats_supported(dev)) + if (WARN_ON(!pci_ats_supported(dev))) return -EINVAL; =20 if (WARN_ON(dev->ats_enabled)) --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 12:12:35 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 936CA3D1718 for ; Fri, 29 May 2026 11:12:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053145; cv=none; b=q8OEz9j+a2Pvzn2t8+3KdDuY3PgqTRF7TR59QWPlJ710zyQtgmiafs8PrZRHXiV8fWXTgQHQ4XqHZjDlndz4K3uI1/xJMAeJGYZKiQFSJfSK47chJhPo3u337e7v7rjSGa/wn6+NI+kAhC5K00/PXD1aL86hfZJ5vxKDUiWgLDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053145; c=relaxed/simple; bh=C32dPM3NWhfYHk+PhOeUKOa0PbpNAjRjIDRpztej9Bs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JXZbiVxEvno3ocdyuE81zVikZdhfUXUxcQoCcxGpUK4KfMzUmS8QTbRwjF5zwGOCdeZMCIfTRVP1DZSCAZ8nD4XyTguFdurBmH/ihnLjJmdJlFpU/Xi1yH99A9WFddG/QyVSpR8veYwJrKNSSWqG/kg2B9HU234GLdTQrqposbg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dDeg6dAf; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dDeg6dAf" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-82f7bec24fdso6571476b3a.2 for ; Fri, 29 May 2026 04:12:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780053142; x=1780657942; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=8knH7UioVOHGAK4eKxBC8130k96uQrzRV3kgHSLvOkg=; b=dDeg6dAfGZGag+1hj1qJD9F+MBKD8O/UyK0dGaRbk1O785mIqFxac0wcSvEFf0mQuO 8WrKd/CxQen5cA3U928sD4GNgokqIuScqpKfAKlIuapfYQ0TxY6uhgSTIENEPLI4XKgY +A96I6CmzVMZu1U9u7dN/VHV9CXvmSjRaK6qKp9s2ukd6nSLrRd63/bpjq+oXutj3A/2 x1i08uk51WAKNG91CjFF22LtAhGCXqUUwQoIKZf2CrfG2k5r/s66YtXNB4uf9R9wm0ND IHIPhg18T47gTha9zdVhoY/tIMkvtBY2IhDZIQAJqT+/Eisdi9XcxHSHujJeHGdXqifE rMIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780053142; x=1780657942; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8knH7UioVOHGAK4eKxBC8130k96uQrzRV3kgHSLvOkg=; b=qYoQjn3q1pid6Jt7ZvSVZLZ/Tz2WQflNoPZKgZuxFn9PNvPkWzuEjQQ96caNwMfaiA uZsnA5cC/1lsF4prZlpEKvAjCue1tHI8dljGO9dCJip8PDG7CxYS94cMZW6SHrL4Vipn /ABBu94sCXNcK97EYhefiU3vxUrdlFFBJbAJG7YOGBELgTdi8l7QYoCg+lxoSRQ211ky EkBsXJ/inrUbPYJyWiTMYKz4EF0tH/2IgLirQYM314kE7oxPD9+mYeuJsf2IrgI3B1Np Z1/PD60eaS+aXYfUzspxug3EGGBl0qnuiMcXSkC61ps7kWqeGgvOM1LD/kfO6cK/pVgW Xj/A== X-Forwarded-Encrypted: i=1; AFNElJ9IVcmHaTdCxgnN2Yq7KBvgh9Won23YI5szkX9Xtx1IgXWvUcU6v7G9xtnifpWpu5xSHdEqLsqnT1Naxm8=@vger.kernel.org X-Gm-Message-State: AOJu0YzJOW5OZAkUfLyWOJH/olU4/nPFRCLxBOzq/vi2Szi44cx7dtrk NACsUjtxbg/6NA/7eV1PvwcnowXPq4N9oZojBwdGQ2FRdyR4OUTAZxXIlYcyJd1s0t9tOLxHyLc jPg== X-Received: from pfbll21.prod.google.com ([2002:a05:6a00:7295:b0:835:429c:76df]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2185:b0:834:df57:9d36 with SMTP id d2e1a72fcca58-84212ba2fb4mr2617218b3a.25.1780053141470; Fri, 29 May 2026 04:12:21 -0700 (PDT) Date: Fri, 29 May 2026 11:12:06 +0000 In-Reply-To: <20260529111208.387412-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260529111208.387412-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529111208.387412-5-praan@google.com> Subject: [PATCH v6 4/6] iommu/arm-smmu-v3: Standardize ATS enablement failure reporting From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The SMMUv3 driver currently has a two-phase commit in its ATS enablement flow. During arm_smmu_attach_prepare(), it predicts whether ATS will be enabled using arm_smmu_ats_supported() and accordingly increments nr_ats_masters and merges ATS invalidations into the domain's invs array. However, the actual hardware enablement via pci_enable_ats() happens later in arm_smmu_attach_commit(). If this call to pci_enable_ats fails, the SMMU driver's ATS state tracking remains polluted, i.e., the driver tracks ATS as enabled on a master that is not actually using it. This leads to an incorrect nr_ats_masters and triggers a warning in the PCI core during detach: 1 [ 127.925080] ------------[ cut here ]------------ 2 [ 127.925084] WARNING: drivers/pci/ats.c:132 at pci_disable_ats+0x94/0x= a8 3 ... 4 [ 128.068169] Call trace: 5 [ 128.070603] pci_disable_ats+0x94/0xa8 (P) 6 [ 128.074688] arm_smmu_attach_prepare+0x104/0x310 7 [ 128.079292] arm_smmu_attach_dev_ste+0x128/0x1e0 The issue was exposed under heavy load when running a VFIO-based DMA map stress test (iova_stress). Following the addition of the arm_smmu_master_prepare_ats() [1] helper duri= ng device probe, failable ATS configuration (STU setup) is now handled early during probe. This ensures that any master reaching the attach phase is guaranteed to have a valid ATS configuration. Update arm_smmu_enable_ats() to use the WARN() macro for any subsequent enablement failures during the commit phase. Since probe checks now preclude software configuration errors, any failure here is considered a kernel bug. [1] https://lore.kernel.org/all/cover.1779392420.git.nicolinc@nvidia.com/ Signed-off-by: Pranjal Shrivastava --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/ar= m/arm-smmu-v3/arm-smmu-v3.c index a10affb483a4..aaebd72bc48d 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -2956,8 +2956,14 @@ static void arm_smmu_enable_ats(struct arm_smmu_mast= er *master) * ATC invalidation of PASID 0 causes the entire ATC to be flushed. */ arm_smmu_atc_inv_master(master, IOMMU_NO_PASID); - if (pci_enable_ats(pdev, stu)) - dev_err(master->dev, "Failed to enable ATS (STU %zu)\n", stu); + + /* + * Any failure at this point is a kernel bug. pci_ats_supported() + * and pci_prepare_ats() have already verified the hardware capability + * and programmed the STU. Thus, pci_enable_ats() should not fail here. + */ + WARN(pci_enable_ats(pdev, stu), + "Failed to enable ATS (STU %zu)\n", stu); } =20 static int arm_smmu_enable_pasid(struct arm_smmu_master *master) --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 12:12:35 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (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 AF61333F5B4 for ; Fri, 29 May 2026 11:12:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053146; cv=none; b=pMaAFGK3+i5kMcWbl0O9ehx7zHv2qNsrHsvwosLUkxM8tjax3Iw06x8mD/0VN6iE6t93Gy3UWQgA3ViS5lVNjIjBR28BKwMQLXi91TD/A0bDjfCC8pgY070SqHVghkxdcp03k93EJ+JH0/dKHHuJsUL/xDUUusJyqZ+QMAph2eA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053146; c=relaxed/simple; bh=7e7DAPIm+AHn3qv5bIN9iON9Yk8ymifmGfWJ9sb7sLE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Cc134HkpX4DsT8jeIH2n9ptzeoQYa+Fubr5eV3Z5gQE9k6BFi85LiZWxQS7liCq0ZuriK3oNs+pXCsXF7AfOgDUmOWy7Li8yu6Pt9Ua6dovRDohr+H9KiScqV/+MaVMZLgZ8xPCTOt+muwAk3FwdCiFO5zn0CXpkiSNBokZaVw0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=U/GEFfv1; arc=none smtp.client-ip=209.85.210.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="U/GEFfv1" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-841127f960fso5550170b3a.1 for ; Fri, 29 May 2026 04:12:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780053144; x=1780657944; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=lNaUgI3CtCWyHWdRlJq0xZGnOnJtcDe+W2oSC+iqpLQ=; b=U/GEFfv1bhw3kHVeNHypaITBq/mzAkht4g2B0oLAZzpjDZMC1xGAbDa+MFpqwNYOLb l56jWYn+Bak4+usi83MtTIOV/P1BLN54faVgJXHeWw/x4MGHcPhKqvAREtFiVr6ENhqZ LaioxCS+Uc5sh180Hk+xMF5lqKhrhYw2WBrqhX2TGDZ+Bspha6iH7EvJ0ctg5s6EZTPg Cj4r0LGM2GpDX+XBXeT5ZJNqu7pC3ZuwXMxXaFtkj0VYjqQ98AgxMsyXntJ/mWbMNLXC YcMc9Ga/ada1uJuO3TIu6oYndeR9Bj7PWraQAW/rq0QNhzALQ4K1aOYu0a9RfZ1CwL7b Xg6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780053144; x=1780657944; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=lNaUgI3CtCWyHWdRlJq0xZGnOnJtcDe+W2oSC+iqpLQ=; b=f8to2nYbor1QFV24HTin29/54Q5B//KqBdMGUnj1vozAbcp9A52elUYxljwYSF0zlU Jz2uzDaU+74htWNXwELiV1ZS1gtnMO/kEJ3rne3LwGKciwPOJcziNBWRFnN54dFruPzY z0Ma7hDwdsZAjFIfIh8ASoJgSyBznAzsXUCcvVrgU/QLfkMRsc50U2IQioYknnnvVp4C uRGLvEBkTFclyLDohabfNJqn4uKagxEZGncivWKyT9VOGvCsy6DkVSJTnRxXspSjHW5C LzTS3hMRgg3p27DVZa/TNaU9NuquONCgT5jHeC/oMo29vZJYMwzkKJc84YRzNCIuZEll JFYA== X-Forwarded-Encrypted: i=1; AFNElJ9mD1fAFcThEh6GBNtd6q/PbbB4E5kKCLaj2jMmP4u+jzRzjV/k5E1N96A9PG+9etUNVDMWguphHjjN1l8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+sz2zRSy6KjNLNDfDC5OyLuTQJ6fr4xrn4N5vy41LzpHFTRIG n3vju1AhZmxgegInZsRPwZgUiUqOSKTZssJ4iTu2YZv3JuBLc1M2xCmUGm1wYLQEq39MKYuVRwT qcg== X-Received: from pfbll21.prod.google.com ([2002:a05:6a00:7295:b0:835:429c:76df]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:848:b0:82a:7471:eb90 with SMTP id d2e1a72fcca58-84212ba36e5mr2711651b3a.30.1780053143552; Fri, 29 May 2026 04:12:23 -0700 (PDT) Date: Fri, 29 May 2026 11:12:07 +0000 In-Reply-To: <20260529111208.387412-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260529111208.387412-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529111208.387412-6-praan@google.com> Subject: [PATCH v6 5/6] iommu/vt-d: Fail probe on ATS configuration failure From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update the Intel VT-d driver to handle ATS configuration and enablement more strictly. Specifically, update the device probe to fail if pci_prepare_ats() returns an error. This ensures that any ATS-capable master reaching the attach phase is guaranteed to have a valid config. Additionally, update iommu_enable_pci_ats() to WARN() if pci_enable_ats fails. Since earlier checks in the probe phase preclude config-related failures, any failure during hardware enablement is considered a kernel bug. Signed-off-by: Pranjal Shrivastava --- drivers/iommu/intel/iommu.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 4d0e65bc131d..22308e4911e1 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -873,8 +873,14 @@ static void iommu_enable_pci_ats(struct device_domain_= info *info) if (!pci_ats_page_aligned(pdev)) return; =20 - if (!pci_enable_ats(pdev, VTD_PAGE_SHIFT)) - info->ats_enabled =3D 1; + /* + * pci_enable_ats() should not fail here because earlier checks + * have already verified support and configuration. + */ + if (WARN_ON(pci_enable_ats(pdev, VTD_PAGE_SHIFT))) + return; + + info->ats_enabled =3D 1; } =20 static void iommu_disable_pci_ats(struct device_domain_info *info) @@ -3288,7 +3294,10 @@ static struct iommu_device *intel_iommu_probe_device= (struct device *dev) =20 dev_iommu_priv_set(dev, info); if (pdev && pci_ats_supported(pdev)) { - pci_prepare_ats(pdev, VTD_PAGE_SHIFT); + ret =3D pci_prepare_ats(pdev, VTD_PAGE_SHIFT); + if (ret) + goto free; + ret =3D device_rbtree_insert(iommu, info); if (ret) goto free; --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 12:12:35 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 B368E3D3489 for ; Fri, 29 May 2026 11:12:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053158; cv=none; b=N8+pJmBXVlHNmDuLmizuERZgSEByU3WGk335pkOPwEjfZS2nx7wb2HrlFHgG2xbOl8f7wgPcKvYRwEVt3MtzeSOmOaRDQ1D4P++UuA/BzocEJTwlseJ0gNiK75P3OkwchaZouAtlry9KLumNRilgtRsJln1zGMD/PIAs9fyeTnc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780053158; c=relaxed/simple; bh=rCPBs6VpzFnSeGV1IQONO9sqLS2eG7RrmNxYtsUNeyw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=oR4xdXxUiqRrhANGkVcxZyrOyzZv35QqrSgJ5w4FXXkwr5q1DSaXZMhBhzUAo6ymVjk8TG54QCbDVO0908EIiwZn4lmTFYjJMx/2la43OlwYTR6hKJXJjbYAt7tYkGg2ZzbxWJdjmEUH3dqAGGoRJZsKpYRCxl4M/WS4uicUWaY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=umgvyL2V; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="umgvyL2V" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bf160f7191so6775175ad.3 for ; Fri, 29 May 2026 04:12:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780053146; x=1780657946; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=junrNZ+TOSSnGGCt6IWg1rMtIZuzEOzNu3RMYtfyWkA=; b=umgvyL2VbhBdv1uUIOXd32DGF3eP4OIddNLAHBFykL6GEkr03rsORqDX1jbu8jj8w4 hvaBhMRaeNi/INMkNmG98rTDMBN369HLb72LrWX/jdd+pQWWHUI3OtWvVagFqLVRf0CT CH2MVZKTw7GHYwqWc6dRgntSgOmHdsfB+BX3TAeagkwqQ65gcrXtAUZK701gEx3YfONb KWcCTe5rn8gF8fxyiy86P+5jf8JummTX3KXMdZ5bZSUaYkWXdsL9P3xWFNbJYIQz9egB +oeHiekzmTEj2flF0Vmxz14bZ/LuUoiRBfmDoa21Bo9YVLeFILAD7Wv1O2ypFA60fRwq +VaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780053146; x=1780657946; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=junrNZ+TOSSnGGCt6IWg1rMtIZuzEOzNu3RMYtfyWkA=; b=JJE1FWRe54bynqnd9ig2sF5zBnwe2GvtAipyAtc07CMccxC7Z0yo46NltMMFZlcspS FA6MkBxBvcXJciGW3J5BDZvNJkcS20kbhKEAQ6Mg0GNuaVaHHlIXWBxsY2G1/bYmI2MD gKCRGiCy/dIB+WbYErHcVSK3C+1PrQt40fMRw3gZ0E3Ob4XrGl18E77YcvEWXrY9MEea Br0zpEzzp2sKAavNN2jsihIwO6YqkBKpppGztdlFAVlztdEJnDSQqoNWMPSdhExsH7aX iAq7w6onhXrC6nmZ9W/15BTpV2tK06+BGtyLMbWJ5qFYe4zfRJz10qxbIOXT1h6rThFi uNLQ== X-Forwarded-Encrypted: i=1; AFNElJ9HZjD/r1W7iYVPyN8HDSnyj3kFlnCEqN7b8LlL2fHBkwMJh1TcAuZIUq85FoiESB0TYqqD0sPW9AjTMAs=@vger.kernel.org X-Gm-Message-State: AOJu0Yywt521Q5mVBYVB+83Lttqy4iFZJAPOtJ0WNYKLK4k3QrIYuJvF DoryzsLjvdGAay8DXUrn042M1oJk6Zsg11ZM6XhHqg98HjF7SOiMO3mZjrtLVgH2F/yi6W//MEF svw== X-Received: from plav20.prod.google.com ([2002:a17:902:f0d4:b0:2bf:1a98:5111]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f551:b0:2be:3850:297e with SMTP id d9443c01a7336-2bf2098933bmr34166025ad.31.1780053145610; Fri, 29 May 2026 04:12:25 -0700 (PDT) Date: Fri, 29 May 2026 11:12:08 +0000 In-Reply-To: <20260529111208.387412-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260529111208.387412-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260529111208.387412-7-praan@google.com> Subject: [PATCH v6 6/6] iommu/amd: Fail probe on ATS configuration failure From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update the AMD IOMMU driver to handle ATS configuration and enablement more strictly. Specifically, update the device probe to fail if pci_prepare_ats() returns an error. This ensures that any ATS-capable master reaching the attach phase is guaranteed to have a valid config. Additionally, update pdev_enable_cap_ats() to WARN_ON() if pci_enable_ats fails. Since earlier checks in the probe phase preclude config-related failures, any failure during hardware enablement is considered a kernel bug. Fix a pre-existing Use-After-Free risk by ensuring iommu_ignore_device() is called on all probe failures after iommu_init_device(). Signed-off-by: Pranjal Shrivastava --- drivers/iommu/amd/iommu.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 84cad43dc188..b74c4504bee3 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -570,10 +570,16 @@ static inline int pdev_enable_cap_ats(struct pci_dev = *pdev) if (amd_iommu_iotlb_sup && (dev_data->flags & AMD_IOMMU_DEVICE_FLAG_ATS_SUP)) { ret =3D pci_enable_ats(pdev, PAGE_SHIFT); - if (!ret) { - dev_data->ats_enabled =3D 1; - dev_data->ats_qdep =3D pci_ats_queue_depth(pdev); - } + /* + * pci_enable_ats() should not fail here because earlier checks + * have already verified support and configuration. + */ + if (WARN_ON(ret)) + return ret; + + dev_data->ats_enabled =3D 1; + dev_data->ats_qdep =3D pci_ats_queue_depth(pdev); + ret =3D 0; } =20 return ret; @@ -2502,10 +2508,22 @@ static struct iommu_device *amd_iommu_probe_device(= struct device *dev) else dev_data->max_irqs =3D MAX_IRQS_PER_TABLE_512; =20 - if (dev_is_pci(dev)) - pci_prepare_ats(to_pci_dev(dev), PAGE_SHIFT); + if (dev_is_pci(dev)) { + struct pci_dev *pdev =3D to_pci_dev(dev); + + if (pci_ats_supported(pdev)) { + ret =3D pci_prepare_ats(pdev, PAGE_SHIFT); + if (ret) { + iommu_dev =3D ERR_PTR(ret); + goto out_err; + } + } + } =20 out_err: + if (IS_ERR(iommu_dev)) + iommu_ignore_device(iommu, dev); + return iommu_dev; } =20 --=20 2.54.0.823.g6e5bcc1fc9-goog