Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp2274467pxb; Fri, 8 Oct 2021 04:43:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxAhfvKemid2gM3GKXpKcQbDJntFfy1jVpTFZNq0OFpjmHj8ekKStSu9hSDBkLz4ZKMaY/Q X-Received: by 2002:a63:ec45:: with SMTP id r5mr4232405pgj.440.1633693427219; Fri, 08 Oct 2021 04:43:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633693427; cv=none; d=google.com; s=arc-20160816; b=qcbnAw5LWJkxZLgTbVurVJbpOMJGaPsROfCcQSmepDctMQm4JGYZ3j6BEGIaOlg5eF B1mqFq/BzmXrPYafChiG/gOcilkddMiz01rfzm1FE7mdocTF5ZbxHcTbYHN3Md7Vx409 BSKZjWhkpIV04iPwaVel/OtqsoPrNiLl3gLN2oaxlCerNhZVSoZb3bTK8oIfhKTEhTIp /Wjj3fKW6L5ytAJFPWK2B5CxbOVzZz6dkqcTwz5gbuh3UuD5JGk47lQVDNZaGSDS/v9K az3xJPeTpVIx5YvK6MArugFa2Saa2BXqDmN0FpCQQJUfrlZJvj4J7IXo69tuW3WrA7I1 Xy/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=U2k5xuX1jReDsqX2J6WhBWip7XvF9DqGbZnIMO3n8po=; b=v+Iwm9yUInqyEBCd0PvqFp5RZ+tTJthjypG5dqTO8oB7ThF4frd7gDQL+ORSGv9xuy nYM5KaouotNGoKg9Fp1cOQxJXW9mPqXU3j8ExjCBqrVSc3+rMtdaRknrVY3p1wRZqwT8 CqYE4MftOPYMNckoXlNueF0RRcQg9g6HfcQsHslJAXTtCt40vWsOcXpnBcHneefWXNZt 4EVSM6aFPkJoGn3GPxZc7JsIPsY+/n6FAuHB1RH3nwY8M14bGkVcqPmxvpjHuCi8q6ql 9zgD9Cjnj8vIYpVAzt6gPAAGRUIXHr7aalynMtMJI5zho5W9RJNu3MttvSKhQUlWdkyM u3fA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=coCGQ80t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 30si2894408pgr.183.2021.10.08.04.43.34; Fri, 08 Oct 2021 04:43:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=coCGQ80t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241532AbhJHLmQ (ORCPT + 99 others); Fri, 8 Oct 2021 07:42:16 -0400 Received: from mail.kernel.org ([198.145.29.99]:39712 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242498AbhJHLiH (ORCPT ); Fri, 8 Oct 2021 07:38:07 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F377D61502; Fri, 8 Oct 2021 11:32:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633692771; bh=1Q9zkv9hvEGhiHeTzej8p7/NKlx/c2gGz6LQ7Bg1QQA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=coCGQ80tt5wW6Yq/gCv5/Xr9Y70J2d7AWvyQvV8c2++ZzjGy4jchuEOgA4r67qMWh EWBI2ZkFS1uH6xcRoazhBZhB6obOpMTZmZIDb/+kHTz0kP75rwcNZM7aGTXEgrGq2b VjAgdx865n2I/gOfD0kCoe9zzayX3jQUr7cnZ3PA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vladimir Oltean , Andrew Lunn , Florian Fainelli , "David S. Miller" , Sasha Levin Subject: [PATCH 5.14 08/48] net: mdio: introduce a shutdown method to mdio device drivers Date: Fri, 8 Oct 2021 13:27:44 +0200 Message-Id: <20211008112720.310232409@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211008112720.008415452@linuxfoundation.org> References: <20211008112720.008415452@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vladimir Oltean [ Upstream commit cf9579976f724ad517cc15b7caadea728c7e245c ] MDIO-attached devices might have interrupts and other things that might need quiesced when we kexec into a new kernel. Things are even more creepy when those interrupt lines are shared, and in that case it is absolutely mandatory to disable all interrupt sources. Moreover, MDIO devices might be DSA switches, and DSA needs its own shutdown method to unlink from the DSA master, which is a new requirement that appeared after commit 2f1e8ea726e9 ("net: dsa: link interfaces with the DSA master to get rid of lockdep warnings"). So introduce a ->shutdown method in the MDIO device driver structure. Signed-off-by: Vladimir Oltean Reviewed-by: Andrew Lunn Reviewed-by: Florian Fainelli Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/phy/mdio_device.c | 11 +++++++++++ include/linux/mdio.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c index c94cb5382dc9..250742ffdfd9 100644 --- a/drivers/net/phy/mdio_device.c +++ b/drivers/net/phy/mdio_device.c @@ -179,6 +179,16 @@ static int mdio_remove(struct device *dev) return 0; } +static void mdio_shutdown(struct device *dev) +{ + struct mdio_device *mdiodev = to_mdio_device(dev); + struct device_driver *drv = mdiodev->dev.driver; + struct mdio_driver *mdiodrv = to_mdio_driver(drv); + + if (mdiodrv->shutdown) + mdiodrv->shutdown(mdiodev); +} + /** * mdio_driver_register - register an mdio_driver with the MDIO layer * @drv: new mdio_driver to register @@ -193,6 +203,7 @@ int mdio_driver_register(struct mdio_driver *drv) mdiodrv->driver.bus = &mdio_bus_type; mdiodrv->driver.probe = mdio_probe; mdiodrv->driver.remove = mdio_remove; + mdiodrv->driver.shutdown = mdio_shutdown; retval = driver_register(&mdiodrv->driver); if (retval) { diff --git a/include/linux/mdio.h b/include/linux/mdio.h index ffb787d5ebde..5e6dc38f418e 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -80,6 +80,9 @@ struct mdio_driver { /* Clears up any memory if needed */ void (*remove)(struct mdio_device *mdiodev); + + /* Quiesces the device on system shutdown, turns off interrupts etc */ + void (*shutdown)(struct mdio_device *mdiodev); }; static inline struct mdio_driver * -- 2.33.0