From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 D239B388E42 for ; Thu, 2 Jul 2026 23:49:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783036167; cv=none; b=J4i0tPfSC/1JJcfk4GH0bO+RFjdoZOfzSzMyCtqIEEEWl8tNqZXoROSeJxwzyPft98yDKpXIik71xSgI7ZQ0HOBjgyw91ZfoCIVToNKTwCYfMU3v2/oZlMaIhmk6h+Ck0Sinfwiur8M/MpvO7/2PdChRWjADmPybVNh/1LmNN6E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783036167; c=relaxed/simple; bh=doX389n8K7+EKbtxiaaYl/YtDW572qKPo/iB6zo1yFI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=EwgFnpzeDH15X/0ywX8eid6F7hP3zMHDIqjYfg2Ll3T7l22HRc9MkNf4Bd5ZsWaE2O0TcJ6cvELjbmE6dfOJcroZUJrKsxZ8yOKbpaCwF4WQ0s6ApjJHhUX7yrqgaVtnaCMJ/LIyRAiFDvVpVswyUs1x7oCE/Sw7CPjuE7/+4I8= 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=T3W+L1OI; arc=none smtp.client-ip=209.85.210.170 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="T3W+L1OI" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-84536ecfc5bso2436937b3a.2 for ; Thu, 02 Jul 2026 16:49:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783036165; x=1783640965; 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:content-type; bh=NdBBLcrrIx3KkU6UD7Sbw0NALh7R1GJW/BFDUTsfhE8=; b=T3W+L1OIz/D5phUwzO7Ux8kRAWsQUtRk8hJnsgGxx0jcfgiCBsfrl72yMKSuoMiIOl zBxq4KoPk7+vWnhaB/Nb3yt9A6cSLZ1jL942FTwmkbZe29iJLxTyPfARUOQzexzxJStZ lG3zKMT16LTrDV6EXJdxCMkWQbdZ4Nsp/VXhhupnqGReRu/wRLW+z1C3P/fKOuTNmyQ3 9NlmtCGSscbtL1O3Y3wBI0MDvp5fclS+IrFJaL/LceeYBwWHyQZYh8aYXq7+Kg3/9Vcw NPVwAzXMqk3LLxNA4P1YryToPkwCqQrIvuo2MMsG7OX/QJj3Z9Lrlp8yHN+XuSt8ztlH EWYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783036165; x=1783640965; 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:content-type; bh=NdBBLcrrIx3KkU6UD7Sbw0NALh7R1GJW/BFDUTsfhE8=; b=rYPERnUM7KxWKl6ERf1byp1KBdPZSxdpmulNULjmq2t0fqPKBgG4kCs22RZuzHGJHp bevWrbgcCYbzTRzQS7nZBmIfrpmjkz52a3/zz4xedtm7nOoy1WqjrNYe3MAS27UTyzGU Pt9g0y0aszwljWOrAkpkyFJhJqB+rXBD2SWV8h9E9/MUp/BT6kb5jJrosp30TxVMEXAV y7f0e8muu2dsDOz88vRFl7smhymmW9Wn/c7JPIZ0IlPB0xCxvVOVNcI/gTdInYUDD5Xx 0YSVyTkRMioZD0U9eeoAa5pTbxpxJjugVbTbH1LIVT1dlnFrWqjCkxEeM9CW9COpPyWr XEUg== X-Forwarded-Encrypted: i=1; AFNElJ8OzFvwKI9rI4SjrzYEyFi8u/aoCsizGoBx/U+BARel//SMXDWDuy4FV1QpbKFPcA5Ty9qpZWve6IbbSPA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzk/SAZhmKqwvZBMY++s+PQ7tbVRmhOGuZCIr2o87n6AdvqvSVW evfEuz1sjj9Xwxbi93jlqM0UKT8lB2U3/p/TcDeUVSPywcOkgAVZgS8XAX1onA== X-Gm-Gg: AfdE7cm0es9EDCwLAqMnJs8A5LkdGPY+fdizekRKaXRXOvdzsXmks0HCnGJXIn9cT4s 4Zev+uqNXEbsaSP00eBHLMarObLwWxpqU0tenaIdzXqFgJo/UP6cXdCesZExRki386hZk+W16hG 28WZAUGudxNSUUMeOMQFnOdJY6AlMwRMzBtCVaKjWLr+Eie4vD4FVkMqqNDxreBkCiOjls2TX0F dlo0U5YwuZJS91pOJMlKtN6s6BiiSo4Moix2o7M/3BNxBJ//IVZpyZfJmu1zrINUoe97CNWTkb2 OWCw/UwiVKIJyF/88QdL7PQY+GAmQyrTbEt+uymvDQj+KiqArK7LRCv9bZNj679OSrVUDoukunp Uw5Z9UfWYrTz1GMgLyPGODgZDppCwXj0qYPkf+MsR4+Mmjye/mbcE9Kvpg5nDFgQfXQ+7hntrtW IaiD7O0B7M8zef6yhwpc/C6Q30qoGpgWm5ijBIWaRqlpx6fP0ZM9b67SLhtKTbzpw7LCLX0A34y +aU25whUw== X-Received: by 2002:a05:6a00:a383:b0:847:8203:f530 with SMTP id d2e1a72fcca58-847c0795447mr8846973b3a.14.1783036164974; Thu, 02 Jul 2026 16:49:24 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c9e8eb0ec6bsm1849384a12.7.2026.07.02.16.49.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 16:49:24 -0700 (PDT) From: Rosen Penev To: netdev@vger.kernel.org Cc: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jeff Garzik , David Gibson , linux-kernel@vger.kernel.org (open list) Subject: [PATCH net] net: emac: mal: fix W1C write race in ICINTSTAT clearing Date: Thu, 2 Jul 2026 16:49:23 -0700 Message-ID: <20260702234923.1320412-1-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The ICINTSTAT register is write-1-to-clear (W1C). The read-modify-write pattern in both mal_txeob() and mal_rxeob() can lose interrupts: if a bit that should not be cleared is already asserted when mfdcri() reads the register, it is included in the read value, retained by the bitwise OR, and then written back as 1 - inadvertently clearing a pending but unhandled interrupt. Fix by writing only the specific bit to clear (ICINTSTAT_ICTX for TXEOB, ICINTSTAT_ICRX for RXEOB). W1C semantics guarantee that writing 0 to the other bits has no effect. Fixes: 1d3bb996481e ("Device tree aware EMAC driver") Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/net/ethernet/ibm/emac/mal.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c index 4025bc36ae16..eab7a487bf08 100644 --- a/drivers/net/ethernet/ibm/emac/mal.c +++ b/drivers/net/ethernet/ibm/emac/mal.c @@ -282,8 +282,7 @@ static irqreturn_t mal_txeob(int irq, void *dev_instance) #ifdef CONFIG_PPC_DCR_NATIVE if (mal_has_feature(mal, MAL_FTR_CLEAR_ICINTSTAT)) - mtdcri(SDR0, DCRN_SDR_ICINTSTAT, - (mfdcri(SDR0, DCRN_SDR_ICINTSTAT) | ICINTSTAT_ICTX)); + mtdcri(SDR0, DCRN_SDR_ICINTSTAT, ICINTSTAT_ICTX); #endif return IRQ_HANDLED; @@ -302,8 +301,7 @@ static irqreturn_t mal_rxeob(int irq, void *dev_instance) #ifdef CONFIG_PPC_DCR_NATIVE if (mal_has_feature(mal, MAL_FTR_CLEAR_ICINTSTAT)) - mtdcri(SDR0, DCRN_SDR_ICINTSTAT, - (mfdcri(SDR0, DCRN_SDR_ICINTSTAT) | ICINTSTAT_ICRX)); + mtdcri(SDR0, DCRN_SDR_ICINTSTAT, ICINTSTAT_ICRX); #endif return IRQ_HANDLED; -- 2.55.0