From nobody Sat Jun 13 16:18:56 2026 Received: from pdx-out-014.esa.us-west-2.outbound.mail-perimeter.amazon.com (pdx-out-014.esa.us-west-2.outbound.mail-perimeter.amazon.com [35.83.148.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 528CF47CC79 for ; Wed, 6 May 2026 15:06:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=35.83.148.184 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778079996; cv=none; b=DpNfUipW6qGBdKHgKic1HUCRx8OZGw3TlhWKxq/io5kCxIvKMiJr7HAgtNlxYIIr+0sxSzIxofTxl8CAPVOs1V2LODivRLz+6AYhFiEOu6DPYOk2XSk8kytVvHnFofjeguND+hLvvAQJe7ESqtjqBwYKYzLtpUhFziZJfEqm1Gc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778079996; c=relaxed/simple; bh=Qt2HGrXPLQycWQQy/Cjb5HlQSRkdj/GSEKb5kpr7+68=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nARqOOKDQEx6SxqvF/xMXm1gpsCdNTsglgUU8IezN6hnECDcLVDyOfVDfKNjLPbCoeApchaRV5BjFSCtKqEwtXX7dJz93ot2jP3l4reFTsdbJJq8ubZiX7HmN1gGWDbYVB1Z7MI1a08klm6QYyEWnqb7zlDyvAtJOAskYvr9mYA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.de; spf=pass smtp.mailfrom=amazon.de; dkim=pass (2048-bit key) header.d=amazon.de header.i=@amazon.de header.b=RqPahn+a; arc=none smtp.client-ip=35.83.148.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=amazon.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=amazon.de header.i=@amazon.de header.b="RqPahn+a" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazoncorp2; t=1778079995; x=1809615995; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Qt2HGrXPLQycWQQy/Cjb5HlQSRkdj/GSEKb5kpr7+68=; b=RqPahn+agZ7Tn0Qwz0qq9FzRxS8ldRIjy9qJUDtNkByK8XWwp91wi2sY QqzlB7zLUJXhyD8n8DbbljKL/oz+fm0VHkt7h3mA8eHQ3xCFUhcQnZrGv hgx95UhLpU3W9FEOiam1tRTBGc3cRsgnxEph8SJpLDShAH0mHS8z/9YLW T4WDQfBUH/XTChROCZQFElOW4itNaPjFLA9Xfm2DNrPNOplRgiz4L0riF /QnmfLpdzXXjS5rM2/JOsz31JmINNL2CKaPPx/Ub9DgA+xTtIOiawOVLt l76DDL4boh4ONO7ji6t90FYvEtO+GdrPOu0XgEOWt/goP+R1wX6/sr0XM Q==; X-CSE-ConnectionGUID: FpKGDPPDTbilxUFbQUb+oA== X-CSE-MsgGUID: TlIn3Q7eRwyi2ArP7bf0oA== X-IronPort-AV: E=Sophos;i="6.23,219,1770595200"; d="scan'208";a="18791000" Received: from ip-10-5-6-203.us-west-2.compute.internal (HELO smtpout.naws.us-west-2.prod.farcaster.email.amazon.dev) ([10.5.6.203]) by internal-pdx-out-014.esa.us-west-2.outbound.mail-perimeter.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2026 15:06:32 +0000 Received: from EX19MTAUWC001.ant.amazon.com [205.251.233.105:24373] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.20.153:2525] with esmtp (Farcaster) id 25a03849-80ff-445e-8e23-f965dc2a85fc; Wed, 6 May 2026 15:06:31 +0000 (UTC) X-Farcaster-Flow-ID: 25a03849-80ff-445e-8e23-f965dc2a85fc Received: from EX19D001UWA001.ant.amazon.com (10.13.138.214) by EX19MTAUWC001.ant.amazon.com (10.250.64.174) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.37; Wed, 6 May 2026 15:06:31 +0000 Received: from dev-dsk-yigitogu-1a-d17f6574.eu-west-1.amazon.com (172.19.100.7) by EX19D001UWA001.ant.amazon.com (10.13.138.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.37; Wed, 6 May 2026 15:06:29 +0000 From: Yigit Oguz To: , , , , , CC: , , , , , "Lilit Janpoladyan" , Yigit Oguz Subject: [PATCH 1/3] iommu/arm-smmu-v3: Print PCI vendor:device ID in SMMU translation fault logs Date: Wed, 6 May 2026 15:05:37 +0000 Message-ID: <20260506150541.60467-2-yigitogu@amazon.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260506150541.60467-1-yigitogu@amazon.de> References: <20260506150541.60467-1-yigitogu@amazon.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: EX19D041UWB004.ant.amazon.com (10.13.139.143) To EX19D001UWA001.ant.amazon.com (10.13.138.214) Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Lilit Janpoladyan For translation, address-size, access, and permission faults, look up the pci_dev from the event and append the PCI vendor:device ID after the device name, e.g.: event: F_TRANSLATION client: 0001:02:02.4 [1d0f:8061] sid: ... For non-PCI devices or unassigned SIDs the output is unchanged. Signed-off-by: Lilit Janpoladyan Signed-off-by: Yigit Oguz Reviewed-by: Pranjal Shrivastava Tested-by: Pranjal Shrivastava --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 29 ++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 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 e8d7dbe495f0..ab1afa36965a 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -2213,12 +2213,30 @@ static void arm_smmu_dump_raw_event(struct arm_smmu= _device *smmu, u64 *raw, =20 #define ARM_SMMU_EVT_KNOWN(e) ((e)->id < ARRAY_SIZE(event_str) && event_st= r[(e)->id]) #define ARM_SMMU_LOG_EVT_STR(e) ARM_SMMU_EVT_KNOWN(e) ? event_str[(e)->id]= : "UNKNOWN" -#define ARM_SMMU_LOG_CLIENT(e) (e)->dev ? dev_name((e)->dev) : "(unassigne= d sid)" + +/* "SSSS:BB:DD.F [VVVV:DDDD]\0" =E2=80=94 12 + 1 + 11 + 1 =3D 25; round to= power of 2 */ +#define ARM_SMMU_CLIENT_LEN 32 + +static const char *arm_smmu_fmt_client(struct arm_smmu_event *e, char *buf= , size_t sz) +{ + struct pci_dev *p; + + if (!e->dev) + return "(unassigned sid)"; + if (!dev_is_pci(e->dev)) + return dev_name(e->dev); + + p =3D to_pci_dev(e->dev); + snprintf(buf, sz, "%s [%04x:%04x]", dev_name(e->dev), p->vendor, p->devic= e); + return buf; +} =20 static void arm_smmu_dump_event(struct arm_smmu_device *smmu, u64 *raw, struct arm_smmu_event *evt, struct ratelimit_state *rs) { + char clientbuf[ARM_SMMU_CLIENT_LEN]; + if (!__ratelimit(rs)) return; =20 @@ -2230,7 +2248,8 @@ static void arm_smmu_dump_event(struct arm_smmu_devic= e *smmu, u64 *raw, case EVT_ID_ACCESS_FAULT: case EVT_ID_PERMISSION_FAULT: dev_err(smmu->dev, "event: %s client: %s sid: %#x ssid: %#x iova: %#llx = ipa: %#llx", - ARM_SMMU_LOG_EVT_STR(evt), ARM_SMMU_LOG_CLIENT(evt), + ARM_SMMU_LOG_EVT_STR(evt), + arm_smmu_fmt_client(evt, clientbuf, ARM_SMMU_CLIENT_LEN), evt->sid, evt->ssid, evt->iova, evt->ipa); =20 dev_err(smmu->dev, "%s %s %s %s \"%s\"%s%s stag: %#x", @@ -2247,14 +2266,16 @@ static void arm_smmu_dump_event(struct arm_smmu_dev= ice *smmu, u64 *raw, case EVT_ID_CD_FETCH_FAULT: case EVT_ID_VMS_FETCH_FAULT: dev_err(smmu->dev, "event: %s client: %s sid: %#x ssid: %#x fetch_addr: = %#llx", - ARM_SMMU_LOG_EVT_STR(evt), ARM_SMMU_LOG_CLIENT(evt), + ARM_SMMU_LOG_EVT_STR(evt), + arm_smmu_fmt_client(evt, clientbuf, ARM_SMMU_CLIENT_LEN), evt->sid, evt->ssid, evt->fetch_addr); =20 break; =20 default: dev_err(smmu->dev, "event: %s client: %s sid: %#x ssid: %#x", - ARM_SMMU_LOG_EVT_STR(evt), ARM_SMMU_LOG_CLIENT(evt), + ARM_SMMU_LOG_EVT_STR(evt), + arm_smmu_fmt_client(evt, clientbuf, ARM_SMMU_CLIENT_LEN), evt->sid, evt->ssid); } } --=20 2.47.3 Amazon Web Services Development Center Germany GmbH Tamara-Danz-Str. 13 10243 Berlin Geschaeftsfuehrung: Christof Hellmis, Andreas Stieger Eingetragen am Amtsgericht Charlottenburg unter HRB 257764 B Sitz: Berlin Ust-ID: DE 365 538 597 From nobody Sat Jun 13 16:18:56 2026 Received: from pdx-out-002.esa.us-west-2.outbound.mail-perimeter.amazon.com (pdx-out-002.esa.us-west-2.outbound.mail-perimeter.amazon.com [44.246.1.125]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B86A47DD74 for ; Wed, 6 May 2026 15:06:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=44.246.1.125 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778080020; cv=none; b=laVyY354D5FP8BsuUdwRVDps96VoujThR8N6vNRKIXOvsT35PJDzxwJ6+k7YUWeTVQREcfCftdsZ3ZeGnhmPKYgxX9zKzhhZB/rsmk/YozlMLootTsXLUVplb7LLl/ekeBbssEsp86X6DrdAiX0DFKLSypJu/Djr9zQSybRAnWI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778080020; c=relaxed/simple; bh=OuisSi4WUPK2fXyPvtufrJOll0ZxMCjuB8pVYGwZG/s=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eWOHWLPa4b6Offc98aCJYnRfCpT84j1DFUZQiy4IcNPNJ8bX5CqA4n8chKwEFWuE78H6/iOZMwR+pxTVUAFzzXIJxRYZYSZITvlm81bgSP9R3BprguTy+8LnUBfXdvuqrC7s4v4PL2giOJsdAFh7WWVVnyN6RxJlXKtwPOmgQuo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.de; spf=pass smtp.mailfrom=amazon.de; dkim=pass (2048-bit key) header.d=amazon.de header.i=@amazon.de header.b=QIZ9/1Ri; arc=none smtp.client-ip=44.246.1.125 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=amazon.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=amazon.de header.i=@amazon.de header.b="QIZ9/1Ri" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazoncorp2; t=1778080019; x=1809616019; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=U/rvMeUsp+Th3MTKB/4X5GkEFsXCvCrhahVYSvDtQ1Y=; b=QIZ9/1RiELaA68XvmXg7AJdSTJ6d76i5h0vSH70prnLuJMo4fmubXHDE dYmvFJ9p/owPih1PU6PBTrU9iODhaPxdKE2+3HYfG865S/tZdCCOxn9bj d6mJ/QijeOWrE1mKwjSHgP06ClX7ENWxJQX9XxRzBR60/7KYa1mt47fA0 rx1G+CjAokQdyVp+9ST3Tokiu72SuYCsl+vQiOmmig4PrPCtYxSo5Wm7J qMMOgvsUiKcnC0Vg9dYTGqXWCowrjUEtFXmOTFIcgOrBUzKBsUvxwos7h jPmDxi0NLD4FObfebCvbzZj3iOy0wdCEa8z8pFya0hxALC1AZ7MI+yQW0 w==; X-CSE-ConnectionGUID: pBgyRvOKTPKCQgsJmnMkdA== X-CSE-MsgGUID: plt9Ar9xQ5mQMllXEPvCpg== X-IronPort-AV: E=Sophos;i="6.23,219,1770595200"; d="scan'208";a="19005044" Received: from ip-10-5-12-219.us-west-2.compute.internal (HELO smtpout.naws.us-west-2.prod.farcaster.email.amazon.dev) ([10.5.12.219]) by internal-pdx-out-002.esa.us-west-2.outbound.mail-perimeter.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2026 15:06:55 +0000 Received: from EX19MTAUWB002.ant.amazon.com [205.251.233.111:23550] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.20.153:2525] with esmtp (Farcaster) id b8767516-fa69-4398-a5c2-3a41f5800182; Wed, 6 May 2026 15:06:55 +0000 (UTC) X-Farcaster-Flow-ID: b8767516-fa69-4398-a5c2-3a41f5800182 Received: from EX19D001UWA001.ant.amazon.com (10.13.138.214) by EX19MTAUWB002.ant.amazon.com (10.250.64.231) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.37; Wed, 6 May 2026 15:06:55 +0000 Received: from dev-dsk-yigitogu-1a-d17f6574.eu-west-1.amazon.com (172.19.100.7) by EX19D001UWA001.ant.amazon.com (10.13.138.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.37; Wed, 6 May 2026 15:06:53 +0000 From: Yigit Oguz To: , , , , , CC: , , , , , "Yigit Oguz" , Lilit Janpoladyan Subject: [PATCH 2/3] iommu/vt-d: Add PCI segment and vendor:device ID to DMAR fault logs Date: Wed, 6 May 2026 15:05:38 +0000 Message-ID: <20260506150541.60467-3-yigitogu@amazon.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260506150541.60467-1-yigitogu@amazon.de> References: <20260506150541.60467-1-yigitogu@amazon.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: EX19D036UWB001.ant.amazon.com (10.13.139.133) To EX19D001UWA001.ant.amazon.com (10.13.138.214) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Include the full SSSS:BB:DD.F address with PCI segment and vendor:device ID (VVVV:DDDD) in DMAR fault messages. Uses iommu->segment for the PCI domain and pci_get_domain_bus_and_slot to look up the pci_dev. Falls back to segment:BDF without vendor:device if the device is not found. This brings Intel IOMMU fault logging in line with the ARM SMMUv3 event decoding, making it easier to identify faulting devices (e.g. after FLR) without cross-referencing lspci. Before: DMAR: [DMA Write NO_PASID] Request device [86:00.0] fault addr 0xe0000000 [fault reason 0x05] PTE Write access is not set After: DMAR: [DMA Write NO_PASID] Request device [0000:86:00.0 8086:1533] fault = addr 0xe0000000 [fault reason 0x05] PTE Write access is not set Signed-off-by: Yigit Oguz Signed-off-by: Lilit Janpoladyan Assisted-by: Claude:claude-4.6-opus --- drivers/iommu/intel/dmar.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c index d33c119a935e..225fa498d714 100644 --- a/drivers/iommu/intel/dmar.c +++ b/drivers/iommu/intel/dmar.c @@ -1890,30 +1890,39 @@ static int dmar_fault_do_one(struct intel_iommu *io= mmu, int type, { const char *reason; int fault_type; + u8 bus =3D source_id >> 8; + u8 devfn =3D source_id & 0xFF; + struct pci_dev *pdev; + char devid[48]; =20 reason =3D dmar_get_fault_reason(fault_reason, &fault_type); =20 + pdev =3D pci_get_domain_bus_and_slot(iommu->segment, bus, devfn); + if (pdev) { + snprintf(devid, sizeof(devid), "%04x:%02x:%02x.%d %04x:%04x", + iommu->segment, bus, PCI_SLOT(devfn), PCI_FUNC(devfn), + pdev->vendor, pdev->device); + pci_dev_put(pdev); + } else { + snprintf(devid, sizeof(devid), "%04x:%02x:%02x.%d", + iommu->segment, bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); + } + if (fault_type =3D=3D INTR_REMAP) { - pr_err("[INTR-REMAP] Request device [%02x:%02x.%d] fault index 0x%llx [f= ault reason 0x%02x] %s\n", - source_id >> 8, PCI_SLOT(source_id & 0xFF), - PCI_FUNC(source_id & 0xFF), addr >> 48, - fault_reason, reason); + pr_err("[INTR-REMAP] Request device [%s] fault index 0x%llx [fault reaso= n 0x%02x] %s\n", + devid, addr >> 48, fault_reason, reason); =20 return 0; } =20 if (pasid =3D=3D IOMMU_PASID_INVALID) - pr_err("[%s NO_PASID] Request device [%02x:%02x.%d] fault addr 0x%llx [f= ault reason 0x%02x] %s\n", + pr_err("[%s NO_PASID] Request device [%s] fault addr 0x%llx [fault reaso= n 0x%02x] %s\n", type ? "DMA Read" : "DMA Write", - source_id >> 8, PCI_SLOT(source_id & 0xFF), - PCI_FUNC(source_id & 0xFF), addr, - fault_reason, reason); + devid, addr, fault_reason, reason); else - pr_err("[%s PASID 0x%x] Request device [%02x:%02x.%d] fault addr 0x%llx = [fault reason 0x%02x] %s\n", + pr_err("[%s PASID 0x%x] Request device [%s] fault addr 0x%llx [fault rea= son 0x%02x] %s\n", type ? "DMA Read" : "DMA Write", pasid, - source_id >> 8, PCI_SLOT(source_id & 0xFF), - PCI_FUNC(source_id & 0xFF), addr, - fault_reason, reason); + devid, addr, fault_reason, reason); =20 dmar_fault_dump_ptes(iommu, source_id, addr, pasid); =20 --=20 2.47.3 Amazon Web Services Development Center Germany GmbH Tamara-Danz-Str. 13 10243 Berlin Geschaeftsfuehrung: Christof Hellmis, Andreas Stieger Eingetragen am Amtsgericht Charlottenburg unter HRB 257764 B Sitz: Berlin Ust-ID: DE 365 538 597 From nobody Sat Jun 13 16:18:56 2026 Received: from pdx-out-002.esa.us-west-2.outbound.mail-perimeter.amazon.com (pdx-out-002.esa.us-west-2.outbound.mail-perimeter.amazon.com [44.246.1.125]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1AF8480326 for ; Wed, 6 May 2026 15:07:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=44.246.1.125 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778080042; cv=none; b=qa4KFHTv/56lQTORGRbhX9HT8mU6vsZ3G3GMfV4tTOveuSuvl0udasoiApYxSD3h+TOLNxgif3Ke4rqYRtPuOWi0QnaVCX7HtjwdTi+owl3KVS8wO+VAkqwA6cVRNGUz9LF4UJd+j5xfvu1ikYQPBbZI2/nREeKGStx9cQq4VkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778080042; c=relaxed/simple; bh=5QSrG8uyFlqtqP6YUioyrpIsxIJXtCSxXPzrOlmhMLQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QBh2FWVO4um5MITAh9YZrS/TcE1Sde997I3D61QLICCWQTd6vNRkpexB031MqgLUvbieWdLsP34m7yYCrFOYZflkfZid5Vlmg9XVLgsAS4rta2oVmyCAMZvFd2s+kzgkzQZABtRhGIxPLXJaJnXkwhRrFUInYL0uZK+yfmrqDHw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.de; spf=pass smtp.mailfrom=amazon.de; dkim=pass (2048-bit key) header.d=amazon.de header.i=@amazon.de header.b=H8ulOjQg; arc=none smtp.client-ip=44.246.1.125 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=amazon.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=amazon.de header.i=@amazon.de header.b="H8ulOjQg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazoncorp2; t=1778080040; x=1809616040; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=THA4cidGFiIxVnQs3sUzA501TDzMqX6r3pw4Amnlb4E=; b=H8ulOjQg4AJ+j66Yp2/dytOuufOyRqw5jWIg57LKNj2DlXd5dfHCTzyZ hcgP4W9QeR3sFyV7ig4AXKQOAv4delM/HIaVfKeAsCa8SqxlPGrTyHFoV 88aIXpKaP8Y9fV6V68G1LVRaargD3Qn3dALrCsOW9jFNoi55nmabv8Sps aAwZGcgE76LVo6GQVBDLmhLNu/6R7TzIBl2lcUPbkC4FtciavclgD+kRa 6uM0e0WnLnsRR9rmHjo+X4MGbjDtDjn3uuC884dyVEGbP4Abl5qeM9Gkg 2V5yFJVLTaMJO73ZKegDXa/88eoKJTLbB/Q7LXP8VFxSVqjfaTwWbza89 g==; X-CSE-ConnectionGUID: 1aD+bz8tRSeOnHRS7jphcg== X-CSE-MsgGUID: LvsHZRMPQ/6b7BI5j8mj1A== X-IronPort-AV: E=Sophos;i="6.23,219,1770595200"; d="scan'208";a="19005100" Received: from ip-10-5-0-115.us-west-2.compute.internal (HELO smtpout.naws.us-west-2.prod.farcaster.email.amazon.dev) ([10.5.0.115]) by internal-pdx-out-002.esa.us-west-2.outbound.mail-perimeter.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2026 15:07:20 +0000 Received: from EX19MTAUWA002.ant.amazon.com [205.251.233.178:21127] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.58.92:2525] with esmtp (Farcaster) id a6f9a331-9067-463f-b4e5-231c90965ce5; Wed, 6 May 2026 15:07:20 +0000 (UTC) X-Farcaster-Flow-ID: a6f9a331-9067-463f-b4e5-231c90965ce5 Received: from EX19D001UWA001.ant.amazon.com (10.13.138.214) by EX19MTAUWA002.ant.amazon.com (10.250.64.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.37; Wed, 6 May 2026 15:07:19 +0000 Received: from dev-dsk-yigitogu-1a-d17f6574.eu-west-1.amazon.com (172.19.100.7) by EX19D001UWA001.ant.amazon.com (10.13.138.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.37; Wed, 6 May 2026 15:07:17 +0000 From: Yigit Oguz To: , , , , , CC: , , , , , "Yigit Oguz" , Lilit Janpoladyan Subject: [PATCH 3/3] iommu/amd: Add vendor:device ID to AMD IOMMU event logs Date: Wed, 6 May 2026 15:05:39 +0000 Message-ID: <20260506150541.60467-4-yigitogu@amazon.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260506150541.60467-1-yigitogu@amazon.de> References: <20260506150541.60467-1-yigitogu@amazon.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: EX19D037UWB004.ant.amazon.com (10.13.138.84) To EX19D001UWA001.ant.amazon.com (10.13.138.214) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add amd_iommu_devid_str() helper that formats PCI device identity as SSSS:BB:DD.F VVVV:DDDD by looking up the pci_dev via pci_get_domain_bus_and_slot. Falls back to SSSS:BB:DD.F when the device is not found. Before: AMD-Vi: Event logged [IO_PAGE_FAULT device=3D0000:41:00.0 domain=3D0x000a address=3D0xe0000000 flags=3D0x0020] After: AMD-Vi: Event logged [IO_PAGE_FAULT device=3D0000:41:00.0 8086:1533 domai= n=3D0x000a address=3D0xe0000000 flags=3D0x0020] Signed-off-by: Yigit Oguz Signed-off-by: Lilit Janpoladyan Assisted-by: Claude:claude-4.6-opus --- drivers/iommu/amd/iommu.c | 94 ++++++++++++++++++++++++--------------- 1 file changed, 58 insertions(+), 36 deletions(-) diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 01171361f9bc..441b4a7e85d5 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -779,11 +779,34 @@ static void dump_command(unsigned long phys_addr) pr_err("CMD[%d]: %08x\n", i, cmd->data[i]); } =20 +#define AMD_IOMMU_DEVID_SIZE 48 + +static void amd_iommu_devid_str(struct amd_iommu *iommu, u16 devid, char *= buf, + size_t size) +{ + struct pci_dev *pdev; + + pdev =3D pci_get_domain_bus_and_slot(iommu->pci_seg->id, + PCI_BUS_NUM(devid), devid & 0xff); + if (pdev) { + snprintf(buf, size, "%04x:%02x:%02x.%x %04x:%04x", + iommu->pci_seg->id, PCI_BUS_NUM(devid), + PCI_SLOT(devid), PCI_FUNC(devid), + pdev->vendor, pdev->device); + pci_dev_put(pdev); + } else { + snprintf(buf, size, "%04x:%02x:%02x.%x", + iommu->pci_seg->id, PCI_BUS_NUM(devid), + PCI_SLOT(devid), PCI_FUNC(devid)); + } +} + static void amd_iommu_report_rmp_hw_error(struct amd_iommu *iommu, volatil= e u32 *event) { struct iommu_dev_data *dev_data =3D NULL; int devid, vmg_tag, flags; struct pci_dev *pdev; + char devid_str[AMD_IOMMU_DEVID_SIZE]; u64 spa; =20 devid =3D (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK; @@ -796,15 +819,16 @@ static void amd_iommu_report_rmp_hw_error(struct amd_= iommu *iommu, volatile u32 if (pdev) dev_data =3D dev_iommu_priv_get(&pdev->dev); =20 + amd_iommu_devid_str(iommu, devid, devid_str, sizeof(devid_str)); + if (dev_data) { if (__ratelimit(&dev_data->rs)) { - pci_err(pdev, "Event logged [RMP_HW_ERROR vmg_tag=3D0x%04x, spa=3D0x%ll= x, flags=3D0x%04x]\n", - vmg_tag, spa, flags); + pci_err(pdev, "Event logged [RMP_HW_ERROR device=3D%s vmg_tag=3D0x%04x,= spa=3D0x%llx, flags=3D0x%04x]\n", + devid_str, vmg_tag, spa, flags); } } else { - pr_err_ratelimited("Event logged [RMP_HW_ERROR device=3D%04x:%02x:%02x.%= x, vmg_tag=3D0x%04x, spa=3D0x%llx, flags=3D0x%04x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - vmg_tag, spa, flags); + pr_err_ratelimited("Event logged [RMP_HW_ERROR device=3D%s vmg_tag=3D0x%= 04x, spa=3D0x%llx, flags=3D0x%04x]\n", + devid_str, vmg_tag, spa, flags); } =20 if (pdev) @@ -816,6 +840,7 @@ static void amd_iommu_report_rmp_fault(struct amd_iommu= *iommu, volatile u32 *ev struct iommu_dev_data *dev_data =3D NULL; int devid, flags_rmp, vmg_tag, flags; struct pci_dev *pdev; + char devid_str[AMD_IOMMU_DEVID_SIZE]; u64 gpa; =20 devid =3D (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK; @@ -831,13 +856,12 @@ static void amd_iommu_report_rmp_fault(struct amd_iom= mu *iommu, volatile u32 *ev =20 if (dev_data) { if (__ratelimit(&dev_data->rs)) { - pci_err(pdev, "Event logged [RMP_PAGE_FAULT vmg_tag=3D0x%04x, gpa=3D0x%= llx, flags_rmp=3D0x%04x, flags=3D0x%04x]\n", - vmg_tag, gpa, flags_rmp, flags); + pci_err(pdev, "Event logged [RMP_PAGE_FAULT device=3D%s vmg_tag=3D0x%04= x, gpa=3D0x%llx, flags_rmp=3D0x%04x, flags=3D0x%04x]\n", + devid_str, vmg_tag, gpa, flags_rmp, flags); } } else { - pr_err_ratelimited("Event logged [RMP_PAGE_FAULT device=3D%04x:%02x:%02x= .%x, vmg_tag=3D0x%04x, gpa=3D0x%llx, flags_rmp=3D0x%04x, flags=3D0x%04x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - vmg_tag, gpa, flags_rmp, flags); + pr_err_ratelimited("Event logged [RMP_PAGE_FAULT device=3D%s vmg_tag=3D0= x%04x, gpa=3D0x%llx, flags_rmp=3D0x%04x, flags=3D0x%04x]\n", + devid_str, vmg_tag, gpa, flags_rmp, flags); } =20 if (pdev) @@ -856,12 +880,15 @@ static void amd_iommu_report_page_fault(struct amd_io= mmu *iommu, { struct iommu_dev_data *dev_data =3D NULL; struct pci_dev *pdev; + char devid_str[AMD_IOMMU_DEVID_SIZE]; =20 pdev =3D pci_get_domain_bus_and_slot(iommu->pci_seg->id, PCI_BUS_NUM(devi= d), devid & 0xff); if (pdev) dev_data =3D dev_iommu_priv_get(&pdev->dev); =20 + amd_iommu_devid_str(iommu, devid, devid_str, sizeof(devid_str)); + if (dev_data) { /* * If this is a DMA fault (for which the I(nterrupt) @@ -872,9 +899,8 @@ static void amd_iommu_report_page_fault(struct amd_iomm= u *iommu, /* Device not attached to domain properly */ if (dev_data->domain =3D=3D NULL) { pr_err_ratelimited("Event logged [Device not attached to domain proper= ly]\n"); - pr_err_ratelimited(" device=3D%04x:%02x:%02x.%x domain=3D0x%04x\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), - PCI_FUNC(devid), domain_id); + pr_err_ratelimited(" device=3D%s domain=3D0x%04x\n", + devid_str, domain_id); goto out; } =20 @@ -887,13 +913,12 @@ static void amd_iommu_report_page_fault(struct amd_io= mmu *iommu, } =20 if (__ratelimit(&dev_data->rs)) { - pci_err(pdev, "Event logged [IO_PAGE_FAULT domain=3D0x%04x address=3D0x= %llx flags=3D0x%04x]\n", - domain_id, address, flags); + pci_err(pdev, "Event logged [IO_PAGE_FAULT device=3D%s domain=3D0x%04x = address=3D0x%llx flags=3D0x%04x]\n", + devid_str, domain_id, address, flags); } } else { - pr_err_ratelimited("Event logged [IO_PAGE_FAULT device=3D%04x:%02x:%02x.= %x domain=3D0x%04x address=3D0x%llx flags=3D0x%04x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - domain_id, address, flags); + pr_err_ratelimited("Event logged [IO_PAGE_FAULT device=3D%s domain=3D0x%= 04x address=3D0x%llx flags=3D0x%04x]\n", + devid_str, domain_id, address, flags); } =20 out: @@ -909,6 +934,7 @@ static void iommu_print_event(struct amd_iommu *iommu, = void *__evt) int count =3D 0; u64 address, ctrl; u32 pasid; + char devid_str[AMD_IOMMU_DEVID_SIZE]; =20 retry: type =3D (event[1] >> EVENT_TYPE_SHIFT) & EVENT_TYPE_MASK; @@ -934,24 +960,22 @@ static void iommu_print_event(struct amd_iommu *iommu= , void *__evt) return; } =20 + amd_iommu_devid_str(iommu, devid, devid_str, sizeof(devid_str)); + switch (type) { case EVENT_TYPE_ILL_DEV: - dev_err(dev, "Event logged [ILLEGAL_DEV_TABLE_ENTRY device=3D%04x:%02x:%= 02x.%x pasid=3D0x%05x address=3D0x%llx flags=3D0x%04x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - pasid, address, flags); + dev_err(dev, "Event logged [ILLEGAL_DEV_TABLE_ENTRY device=3D%s pasid=3D= 0x%05x address=3D0x%llx flags=3D0x%04x]\n", + devid_str, pasid, address, flags); dev_err(dev, "Control Reg : 0x%llx\n", ctrl); dump_dte_entry(iommu, devid); break; case EVENT_TYPE_DEV_TAB_ERR: - dev_err(dev, "Event logged [DEV_TAB_HARDWARE_ERROR device=3D%04x:%02x:%0= 2x.%x " - "address=3D0x%llx flags=3D0x%04x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - address, flags); + dev_err(dev, "Event logged [DEV_TAB_HARDWARE_ERROR device=3D%s address= =3D0x%llx flags=3D0x%04x]\n", + devid_str, address, flags); break; case EVENT_TYPE_PAGE_TAB_ERR: - dev_err(dev, "Event logged [PAGE_TAB_HARDWARE_ERROR device=3D%04x:%02x:%= 02x.%x pasid=3D0x%04x address=3D0x%llx flags=3D0x%04x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - pasid, address, flags); + dev_err(dev, "Event logged [PAGE_TAB_HARDWARE_ERROR device=3D%s pasid=3D= 0x%04x address=3D0x%llx flags=3D0x%04x]\n", + devid_str, pasid, address, flags); break; case EVENT_TYPE_ILL_CMD: dev_err(dev, "Event logged [ILLEGAL_COMMAND_ERROR address=3D0x%llx]\n", = address); @@ -962,14 +986,12 @@ static void iommu_print_event(struct amd_iommu *iommu= , void *__evt) address, flags); break; case EVENT_TYPE_IOTLB_INV_TO: - dev_err(dev, "Event logged [IOTLB_INV_TIMEOUT device=3D%04x:%02x:%02x.%x= address=3D0x%llx]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - address); + dev_err(dev, "Event logged [IOTLB_INV_TIMEOUT device=3D%s address=3D0x%l= lx]\n", + devid_str, address); break; case EVENT_TYPE_INV_DEV_REQ: - dev_err(dev, "Event logged [INVALID_DEVICE_REQUEST device=3D%04x:%02x:%0= 2x.%x pasid=3D0x%05x address=3D0x%llx flags=3D0x%04x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), - pasid, address, flags); + dev_err(dev, "Event logged [INVALID_DEVICE_REQUEST device=3D%s pasid=3D0= x%05x address=3D0x%llx flags=3D0x%04x]\n", + devid_str, pasid, address, flags); break; case EVENT_TYPE_RMP_FAULT: amd_iommu_report_rmp_fault(iommu, event); @@ -980,8 +1002,8 @@ static void iommu_print_event(struct amd_iommu *iommu,= void *__evt) case EVENT_TYPE_INV_PPR_REQ: pasid =3D PPR_PASID(*((u64 *)__evt)); tag =3D event[1] & 0x03FF; - dev_err(dev, "Event logged [INVALID_PPR_REQUEST device=3D%04x:%02x:%02x.= %x pasid=3D0x%05x address=3D0x%llx flags=3D0x%04x tag=3D0x%03x]\n", - iommu->pci_seg->id, PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid= ), + dev_err(dev, "Event logged [INVALID_PPR_REQUEST device=3D%s pasid=3D0x%0= 5x address=3D0x%llx flags=3D0x%04x tag=3D0x%03x]\n", + devid_str, pasid, address, flags, tag); break; default: --=20 2.47.3 Amazon Web Services Development Center Germany GmbH Tamara-Danz-Str. 13 10243 Berlin Geschaeftsfuehrung: Christof Hellmis, Andreas Stieger Eingetragen am Amtsgericht Charlottenburg unter HRB 257764 B Sitz: Berlin Ust-ID: DE 365 538 597