From nobody Sun Feb 8 13:33:03 2026 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.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 A84D513A3F7 for ; Sun, 21 Dec 2025 00:17:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766276234; cv=none; b=oqKFwleUako4juuY/SCcllnI7kwcsze5y1KQP6kAfYbsuakGSgrK7pVpuuXY6wZStupI9SKaA0FalAbroV+dnJ5eGg0OthHhlnS7JhZJo+zoXISy0FMLa0GJhoEciI6sdupbeHoqEfKASnKhLeptLsF3lWUxAXLgoTFDdYNlwTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766276234; c=relaxed/simple; bh=zXE7ExR3jFutkunUuO/rZjPsY//fUF8LwQEkLzUTJTk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=eQsUp9+t7wXjoHUZCOLB4EPw83HBLr3vQweXosV7W/mhlDy/uAo/qgy8cqq//JGtl1kR/kMwMb1ailCuml0gW+df9qFUdhMRrm8szRJq7E/sQASWciRSAk2wNAErJJ5Zgt3LU6xSDPxC+QFxPtGM3cG5LB0FvYTmK+SIdr2QyxA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=j2rVC0fT; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="j2rVC0fT" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b7ffbf4284dso326328566b.3 for ; Sat, 20 Dec 2025 16:17:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1766276231; x=1766881031; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ju1r0eD783g5JEzeASvcYbt/dKDQzzQquJmGnwZ1sKc=; b=j2rVC0fT8BFnTHszoipo6X4U+CAhveptv9xHkuFFxeJ0+ONLoRo7lyWMCOvptgDVZ2 7tlFEGgzU+ZsUaPnfIhUzQ9xe1cyC0tIith2ZikpYAsDO1zYPoLCyduEyPKcy84f+wbk B6pbgKqHj4yHQa2gzGQTL/TSQlwOaQYtrGEtU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766276231; x=1766881031; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ju1r0eD783g5JEzeASvcYbt/dKDQzzQquJmGnwZ1sKc=; b=in1PVOnQRkCEvZUNPXjMP7+2ZgeVge0zsyI56BWz6cy6I9yOsfhN9uW1n5y0R2UX+w 75M2YJYkD8l6zkG0bAGPwYjxc7QZUx/As1mz7/9tFKKN3z9u2uIfbbwSFvKyQRSCsP6i 5nsx27tk5WON7Bx0X2b4So4WYuAZH9WZ2kA3/gPcFZb0TToEmasYtBbPBBKEIM/gM3x+ NnKx6Nz52ClffP1wZHdr7QFQt3AnZRAg59CdnpZuppikeedUJfGw8Q35W2kg9HVsULoJ /id49YBsPVB4bdYyySBfKPLXivGppCIVU4ndgr9v9KSc712hmKIXf159URBHWy/h55VE XLsw== X-Forwarded-Encrypted: i=1; AJvYcCUGqXNQpKcfm2s3oXo56M3r/MI9JWUdYqkhCeKZ/YsR78mA/4y4P6dV08XKFtSZWZd9wXkhQ5vmXhpJAO8=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1yfP2yH32GAvTzLTdi1qpzBHa/pbzHmnxIYshj8zWTJwfiv8M txYB1f9YPCtcQ6ilfkBctr2yqs0r0nQA6m16GZBNfzDM1u+kJka8Gbkapu94FveRiA== X-Gm-Gg: AY/fxX4IWYcmw2xbLf50xpSVdfn3qZHroztjcoQHqA5ncT1UwNsrGBhtDIHTM7/P14+ h3wjhmgcolxV7aSMQkTRJ1YR8AOzVqovADYZpTx2mio2B/zBYXc4n9h1cXhNIFPh4WDhYKJq1sw b9lFys/OkpqgIW5dlCi33i1Mje/n9Pw+CapcCIlg8wiKYZUrmSer4VyPflfdz4I3U3XuCvHazcQ fsjMpnH77qEV6hCDLUOmo+4B+plHSq+irxMB1h/1hFT2xzvvtL6qP/St7GcmoA5dUOEqZnfDbDn F4jNNwFHQ0+vaMXsC9pM2AW/IgwAHCFY927uHgOivz0nPzGh2ry2Z3av0S1y3lyGxZalhvNSP+t xUxy6GZVXSzxEuidZrUUArlCByEXqIJqQWX432nII7RGrd1E07UAtn2Mfb2uA3zVlA0BhJSgD7w yLUvrUfoTHmqo4i63sHlOcfBvuyD0rfw== X-Google-Smtp-Source: AGHT+IGXJqIQJJJwuEv6xZ2w2hVrsRqr1hd+Pfi6a9Atd1O2E5eFY8oFHbAaYTZD1A37I0gAV2SEFQ== X-Received: by 2002:a17:907:d8c:b0:b72:6143:60c2 with SMTP id a640c23a62f3a-b803722fd2dmr731511866b.51.1766276231024; Sat, 20 Dec 2025 16:17:11 -0800 (PST) Received: from localhost.localdomain ([2a02:a31b:20c3:6680:4cc9:1698:dce5:4976]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8037f512e3sm624321866b.67.2025.12.20.16.17.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Dec 2025 16:17:10 -0800 (PST) From: Dmytro Maluka To: David Woodhouse , Lu Baolu , iommu@lists.linux.dev Cc: Joerg Roedel , Will Deacon , Robin Murphy , linux-kernel@vger.kernel.org, "Vineeth Pillai (Google)" , Aashish Sharma , Grzegorz Jaszczyk , Chuanxiao Dong , Kevin Tian , Dmytro Maluka Subject: [PATCH] iommu/vt-d: Flush cache for PASID table before using it Date: Sun, 21 Dec 2025 01:17:01 +0100 Message-ID: <20251221001701.3626-1-dmaluka@chromium.org> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When writing the address of a freshly allocated zero-initialized PASID table to a PASID directory entry, do that after the CPU cache flush for this PASID table, not before it, to avoid the time window when this PASID table may be already used by non-coherent IOMMU hardware while its contents in RAM is still some random old data, not zero-initialized. Signed-off-by: Dmytro Maluka --- drivers/iommu/intel/pasid.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/intel/pasid.c b/drivers/iommu/intel/pasid.c index 3e2255057079..77b9b147ab50 100644 --- a/drivers/iommu/intel/pasid.c +++ b/drivers/iommu/intel/pasid.c @@ -153,6 +153,9 @@ static struct pasid_entry *intel_pasid_get_entry(struct= device *dev, u32 pasid) if (!entries) return NULL; =20 + if (!ecap_coherent(info->iommu->ecap)) + clflush_cache_range(entries, VTD_PAGE_SIZE); + /* * The pasid directory table entry won't be freed after * allocation. No worry about the race with free and @@ -165,10 +168,8 @@ static struct pasid_entry *intel_pasid_get_entry(struc= t device *dev, u32 pasid) iommu_free_pages(entries); goto retry; } - if (!ecap_coherent(info->iommu->ecap)) { - clflush_cache_range(entries, VTD_PAGE_SIZE); + if (!ecap_coherent(info->iommu->ecap)) clflush_cache_range(&dir[dir_index].val, sizeof(*dir)); - } } =20 return &entries[index]; --=20 2.47.2