From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) (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 AA0A13B7756 for ; Mon, 8 Jun 2026 09:59:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780912796; cv=none; b=fVI8XPKpW905Q+5SF2Me4Ht0o3Z0FZBH9wbYuxvNLNk7jQ4it8blgTfrrqjDvZ//uwXhdKY/QBpPUfoAWxkr4Ja4/12ywbkwQss5nMsf3HWPlz72FRuJ+cOlGa8ZTnp2ztQ8RpUgGCT6fMcwZrPa9nIw214r1+MRc/UgfKHLnVY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780912796; c=relaxed/simple; bh=3DMHlif6D4DfLvCePQxsIN4IqNVqfqYm9sKyNXeKoEk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KBQSbBb2v2d09pYLJoDlO0jC5lj1QQo1fz/lyQIPAV2WWe33aXGX0zgZxJumTAmMF6AFUi8mKAUitHQxcZpyIg0vR0rH4yxMgeNSOkQb3u3ffICh2rTw7R5yQTIbyHSrrkC9erWqsUlEtFlrGJyv3qXiVIVnDF3Jq8P79g5h4fU= 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=jxiERF3V; arc=none smtp.client-ip=209.85.214.196 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="jxiERF3V" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2c0c3546924so26169275ad.3 for ; Mon, 08 Jun 2026 02:59:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780912795; x=1781517595; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mVd2AaoJGqTRVKwD7P0aNxJISugeECwM8N4yUGguhWk=; b=jxiERF3VCseTQhwv5zMgTqQwTtLamXTc7GbXqXyKTMdV4PvNfZ7Teisr5K/T7m20YM y08ZTqeR+NxRUKcswU3njsfE7EdaU/snaqkOtlUe4sKQ5Kg4x04iJWqUEbOY1wk0KZGq ft5pXewM1svErYonsT+ogW3M05AWDKE8hM/xv7LoWyg78Wnx4jHdnaIKcc/Q0rolBdvH KdVDxp1LuNAHN/SD3SDQxzp87PwCFDWP33Q8ztslbtMrYxK4cvXwRThKY47kleln4ICG 3rzV4UbYbgi1lEf0mOVtRgQzkTVCzF1I9UKsiPCLq4oIQYwHWdfFT7KzykF+KUewTDXB Ymbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780912795; x=1781517595; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=mVd2AaoJGqTRVKwD7P0aNxJISugeECwM8N4yUGguhWk=; b=ApQFAdpqWf6N3tkXDe2xWmimuKl/I0dFH45KC1ZBIgswbN8wJ2LJ7cAin9YFhYmGuM i36289j0qgIz1teF88+3gnw8/zvrNK8WhPIP9i0Hl84zGwkKHAMooP4UPr3YAiByLqqa cjtZZ+LMLFquKM/nt/vC4G9zc7Y00nMegOckTB5207WRx0Pw6ssukwJcbS9gnpr7nBYp maeLaDwLMi+xw1xfJHzKUDdbZYs/l9ibQfZlIORo/rAbAZexe49Mbr1JXTSYQf3/eecX cTY2cEy1dfp/dKkM2tbYUqAJH5HJ8F6VSozLCbWo92JVHBuXYQ++S+x2h2GeeY6hG96v qZAg== X-Forwarded-Encrypted: i=1; AFNElJ9OjSbEld2nZ2gRUKwJi9yFQP1ZhWw6ncFpa+rdqtjDwxCWmhi+OpD2vSKwwTD24nhNUoPUwhpQXby465A=@vger.kernel.org X-Gm-Message-State: AOJu0YzvUXHZQF8meNk9Ln5y1jLqWQ1OlK9eQKQJX+3b1WPmt8R58p42 e6CncIS01hHMnywfMkqgEaunwkeY4wdSYYHU463m8kxRV1Fqb9sZmDeZ X-Gm-Gg: Acq92OE2KefeVxwK/NxwPF9ppiD7Pkd+RFhWND8bF4y5nd6sq07rn6DFOwKFrVMfOFF hpdHufU1+qkneZetvC0rQIGU6pJui31O2JHJlpgONlRRSgedtTafGO74GJ71KobVf/7k1R110n2 rXMen75W5zzYZ7vIjY9Aj8TOnNJnpD63DPxIa5tDMrbIulKhHPQgHlC70DiCak1FSHU+FKfSeiW jFbkkeSLZJMBipOe+kzN9RJKGRA1wnp0LfHHPzXv7VSn1gaTDpaBXDLAwjLv9i5L4BehU2uhW5z Iec0xDUK8IbaJH4LnBXMgCHDdsvwhOGAuIIweTODGtGtE05FO/k0mM67UejgoSnwNevA7tARSxo G9jzJDLQpwLsfdwOBCWXPm8LK95sv7+s7RHpy/5IAM8MPRe/OYtLGgr+CbdvohVfHgABcGdkn0X Rg8MMKFZWrhBDsWWjFZ3ZXSoGrm04= X-Received: by 2002:a17:903:4b50:b0:2bc:b80f:6782 with SMTP id d9443c01a7336-2c1e821dd0bmr148842095ad.11.1780912795021; Mon, 08 Jun 2026 02:59:55 -0700 (PDT) Received: from Dell-5540.. ([2001:926:3:e0:fcd:c60a:85be:2fba]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c164f87920sm178573055ad.24.2026.06.08.02.59.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jun 2026 02:59:54 -0700 (PDT) From: Peng Yang X-Google-Original-From: Peng Yang To: Mark Brown Cc: Serge Semin , Jonathan Chocron , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, pyangyyd@amazon.com, pyangyyd@gmail.com Subject: [PATCH v2] spi: dw: fix race between IRQ handler and error handler on SMP Date: Mon, 8 Jun 2026 17:58:49 +0800 Message-ID: <20260608095849.3446-1-pyangyyd@amazon.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522095727.18307-1-pyangyyd@amazon.com> References: <20260522095727.18307-1-pyangyyd@amazon.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit On SMP systems, dw_spi_handle_err() can be called from the SPI core kthread while the IRQ handler is still accessing the FIFO on another CPU. Resetting the chip via dw_spi_reset_chip() during an active FIFO read/write causes a bus error. Fix this by calling disable_irq() before the chip reset, which masks the IRQ and waits for any in-flight handler to complete via synchronize_irq(). This ensures no handler is accessing the FIFO when the reset occurs. Signed-off-by: Peng Yang Suggested-by: Jonathan Chocron --- v1 -> v2: - Replace spinlock with disable_irq()/enable_irq() as suggested by Jonathan Chocron. This avoids touching the IRQ handler hot path entirely. drivers/spi/spi-dw-core.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -486,10 +486,12 @@ static inline void dw_spi_abort(struct spi_controller *ctlr) { struct dw_spi *dws = spi_controller_get_devdata(ctlr); if (dws->dma_mapped) dws->dma_ops->dma_stop(dws); + disable_irq(dws->irq); dw_spi_reset_chip(dws); + enable_irq(dws->irq); } static void dw_spi_handle_err(struct spi_controller *ctlr, -- 2.40.1