From nobody Fri Jun 19 07:51:33 2026 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 7516D3644DC for ; Sun, 26 Apr 2026 14:10:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777212620; cv=none; b=c/yrXYcFIWRdFbbf+QCX+93CcUiFVwPqAayEKlIchBRdetSWrCxCY0hpOGzqCbJDevVTyKQWzfQloadLUelx3AdnohnI9hC9z/blZhosCytQItmb6swuQa24qHnZJHY3/7+gKVsQvcCzScF+DvBmUfytxrpmeLutBtMNXLD0Q5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777212620; c=relaxed/simple; bh=pZATHnnsi/PcoNlN/zQOIDomcBhLXK/ASAe01WsB91U=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=rX1auRYMsHrzizQVSvjkkc6v9bnz39yLou9RkotD2eKjt8ww0xGZ2IyISWS0SYF2pzaDFMaUJjU9ovQblfr6vCcoNQSE7NkhfWA8VHe8AQjEjQdPoKw/OaPYgfeBbxQUe4l/HWW+0uS/Swq9/NZ3R7IoYSvMc86ONB5IhntQGfQ= 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=B6YsqON7; arc=none smtp.client-ip=209.85.215.177 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="B6YsqON7" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-c7358a7a8d1so6081981a12.3 for ; Sun, 26 Apr 2026 07:10:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777212617; x=1777817417; 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=RaThGd+v2TGPi1+fMlzT08aS25ssAeSOk78kcucU7cM=; b=B6YsqON7BFyPBFv8ZJaSJD20S6Vip1/HQnLENR+tlqLz5vt0pS1lVVLjrMpPTpAve7 e+JP72uDamzLObo+FtZKz81jYvbUPSa2v3IuDvK6KxGmTApu3x707GSg654cQIAu9zLl NXBZWA/mljUeqUNql2CagZWqgOLj9z9i23QDj1cyJ+msfxyMSKlaNPXuMn1oEUk1K+H0 QSj5a+dNZX672KBpR/nr32k7yY1npP5fOQl3A2cFcVua7i/MoIuMB2lQzZbUCm8amc5k 7H3IJhyyFP4Ifzonh29lfx3sLLuoPC1qnW+5H1+e9ycw+k6crqFZW33cawugDrHWQWHo WijQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777212617; x=1777817417; 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=RaThGd+v2TGPi1+fMlzT08aS25ssAeSOk78kcucU7cM=; b=na/reyNanWiPTfRBP/393qhUlwut+xtQK6FExa/6TXCzOKAOztdEPlHSGFhSYJ7jV/ ICHlXiAxxfqs/3tmbi5bMjZpfeprOwFLDT8sKE29YcG+QwbSL8J1IxFjTmWxMw1TKvEV 3+/0emaneAPyNjgMwnZC3sQiHG4VssB/ZGaKqcpT6ALnZqs/cRYkakmrvO74Ephth/ZZ PhqUNu2515Vkz8+KOmdQ3tRqeYnA9gST5XK1rqgvSF55ANgZ7ZCY5rktZobPVO/GxFyV SG3TLG83dNUmC/okGBmYcFvWs4ujtDMJ1Tr5tHtrH2F2VVEDL8ShfNfJyv6uhL6VggI3 3aFg== X-Forwarded-Encrypted: i=1; AFNElJ/RePsPgSpoqznyvQF9UU55bQM6Sx4XFTv3t+sw1Yc4Vm6oANjccrha06aYbDRzme0LvKPftZztdKGO5pE=@vger.kernel.org X-Gm-Message-State: AOJu0YxKg14epifDeLAK/nPFMeG2RQvTCTh6CnL3hzB7zSRmEQkDG0d4 xyX0lSViV80P3ggT62Jmsj3vbMgIa1UbjgFXhlXy72U/FbTsMuh9P/c= X-Gm-Gg: AeBDievZMszW55+R5gYy/fYm5XnUmYW9QBGm2jozjARcW1bTGvsc4q/2sCmVqSGdBhm oF9WlQWC3tn1BFZA1+luQiOs+xu6RKGexZTXOTbyBye+g/tQpSr9AOza/DvtvFxm4FmLHjX181F Kq7mIGFYivsDNGm8rSpEpUN4QrawVPphaKvn9817NV2j2AwbmJfJAgvlCP9GYXpzBcEOyegMrao 1ImpXqyX2EuM52M76R636OJX0tX47CTwYsD7TRvbRKsWZ8khtILMN4KaE3egneEbs+Zm3WbdfVS AiPTL4VnutP4w08C/0gwymruPKAwMpD0tngiGjlg+vOHOyEJ7EgWE/DnSbeey6rgIDgLTDbFwvx UmVKzAtqxLs1dQldDuCHtdbjlF2+b3vCxnRM6hLitWR+zzWM7lUcB500Te66Pg0Cw6Y4uA1wbPp n6+USBf5z6jbZtb1JxR/5RIIb2eB7E2/ylZrpbfESuwBt6igph7oLIE+dYoqY+lJzu57PlguuIn MX4RWfZ17OU6T3Fwp2f7DArlt4SUD0sw7yhrgqzqyFJE6Y= X-Received: by 2002:a05:6a21:32a8:b0:39b:ba95:b127 with SMTP id adf61e73a8af0-3a3250ce2e9mr16902037637.4.1777212616718; Sun, 26 Apr 2026 07:10:16 -0700 (PDT) Received: from localhost.localdomain ([1.226.165.54]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f0811fsm21900810a12.0.2026.04.26.07.10.14 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 26 Apr 2026 07:10:16 -0700 (PDT) From: "=?UTF-8?q?=EB=B0=95=EB=AA=85=ED=9B=88?=" X-Google-Original-From: =?UTF-8?q?=EB=B0=95=EB=AA=85=ED=9B=88?= To: Hartley Sweeten , Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Ijae Kim Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Myeonghun Pak Subject: [PATCH DRAFT] net: cirrus: ep93xx: fix probe error unwind Date: Sun, 26 Apr 2026 23:10:06 +0900 Message-ID: <20260426141010.19049-1-pakmyeonghun@bagmyeonghun-ui-MacBookPro.local> X-Mailer: git-send-email 2.47.1 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" From: Myeonghun Pak ep93xx_eth_probe() uses ep93xx_eth_remove() as common error unwind after setting driver data. When register_netdev() fails, this calls unregister_netdev() for a net_device that was never registered. The net core treats that as a driver bug and emits WARN_ON(1). The shared remove path also fails to unmap the register mapping on earlier allocation and resource-reservation failures, because ep->base_addr is only assigned after request_mem_region() succeeds. Unwind probe failures directly and publish driver data only after the netdev is registered. This keeps .remove() for successful probes only, releases the memory region on late failures, frees the net_device, and unmaps the registers. Fixes: 1d22e05df818 ("[PATCH] Cirrus Logic ep93xx ethernet driver") Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak --- diff --git a/drivers/net/ethernet/cirrus/ep93xx_eth.c b/drivers/net/etherne= t/cirrus/ep93xx_eth.c index a4972457ed..4e98b76ec7 100644 --- a/drivers/net/ethernet/cirrus/ep93xx_eth.c +++ b/drivers/net/ethernet/cirrus/ep93xx_eth.c @@ -800,7 +800,7 @@ static int ep93xx_eth_probe(struct platform_device *pde= v) dev =3D alloc_etherdev(sizeof(struct ep93xx_priv)); if (dev =3D=3D NULL) { err =3D -ENOMEM; - goto err_out; + goto err_iounmap; } =20 memcpy_fromio(addr, base_addr + 0x50, ETH_ALEN); @@ -814,14 +814,12 @@ static int ep93xx_eth_probe(struct platform_device *p= dev) SET_NETDEV_DEV(dev, &pdev->dev); netif_napi_add(dev, &ep->napi, ep93xx_poll); =20 - platform_set_drvdata(pdev, dev); - ep->res =3D request_mem_region(mem->start, resource_size(mem), dev_name(&pdev->dev)); if (ep->res =3D=3D NULL) { dev_err(&pdev->dev, "Could not reserve memory region\n"); err =3D -ENOMEM; - goto err_out; + goto err_free_netdev; } =20 ep->base_addr =3D base_addr; @@ -841,16 +839,22 @@ static int ep93xx_eth_probe(struct platform_device *p= dev) err =3D register_netdev(dev); if (err) { dev_err(&pdev->dev, "Failed to register netdev\n"); - goto err_out; + goto err_release_mem; } =20 + platform_set_drvdata(pdev, dev); + printk(KERN_INFO "%s: ep93xx on-chip ethernet, IRQ %d, %pM\n", dev->name, ep->irq, dev->dev_addr); =20 return 0; =20 -err_out: - ep93xx_eth_remove(pdev); +err_release_mem: + release_mem_region(mem->start, resource_size(mem)); +err_free_netdev: + free_netdev(dev); +err_iounmap: + iounmap(base_addr); return err; }