diff mbox

[RFC,1/3] net: dsa: bcm_sf2: cleanup resources in remove callback

Message ID 562FA7E9.5080005@baylibre.com
State RFC, archived
Delegated to: David Miller
Headers show

Commit Message

Neil Armstrong Oct. 27, 2015, 4:35 p.m. UTC
Implement a remove callback allowing the switch driver to cleanup
resources it used: interrupts and remapped register ranges.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 drivers/net/dsa/bcm_sf2.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

Comments

kernel test robot Oct. 27, 2015, 5:22 p.m. UTC | #1
Hi Neil,

[auto build test ERROR on net/master -- if it's inappropriate base, please suggest rules for selecting the more suitable base]

url:    https://github.com/0day-ci/linux/commits/Neil-Armstrong/net-dsa-cleanup-dsa-driver/20151028-003842
config: x86_64-allmodconfig (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

>> drivers/net/dsa/bcm_sf2.c:1077:2: error: unknown field 'remove' specified in initializer
     .remove   = bcm_sf2_sw_remove,
     ^
>> drivers/net/dsa/bcm_sf2.c:1077:14: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     .remove   = bcm_sf2_sw_remove,
                 ^
   drivers/net/dsa/bcm_sf2.c:1077:14: note: (near initialization for 'bcm_sf2_switch_driver.setup')

vim +/remove +1077 drivers/net/dsa/bcm_sf2.c

  1071	}
  1072	
  1073	static struct dsa_switch_driver bcm_sf2_switch_driver = {
  1074		.tag_protocol		= DSA_TAG_PROTO_BRCM,
  1075		.priv_size		= sizeof(struct bcm_sf2_priv),
  1076		.probe			= bcm_sf2_sw_probe,
> 1077		.remove			= bcm_sf2_sw_remove,
  1078		.setup			= bcm_sf2_sw_setup,
  1079		.set_addr		= bcm_sf2_sw_set_addr,
  1080		.get_phy_flags		= bcm_sf2_sw_get_phy_flags,

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c
index 6f946fe..e0be318 100644
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
@@ -1054,6 +1054,25 @@  out_unmap:
 	return ret;
 }

+static void bcm_sf2_sw_remove(struct dsa_switch *ds)
+{
+	struct bcm_sf2_priv *priv = ds_to_priv(ds);
+	void __iomem **base;
+	unsigned int i;
+
+	/* Disable all interrupts and free them */
+	bcm_sf2_intr_disable(priv);
+
+	free_irq(priv->irq0, priv);
+	free_irq(priv->irq1, priv);
+
+	base = &priv->core;
+	for (i = 0; i < BCM_SF2_REGS_NUM; i++) {
+		iounmap(*base);
+		base++;
+	}
+}
+
 static int bcm_sf2_sw_set_addr(struct dsa_switch *ds, u8 *addr)
 {
 	return 0;
@@ -1367,6 +1386,7 @@  static struct dsa_switch_driver bcm_sf2_switch_driver = {
 	.tag_protocol		= DSA_TAG_PROTO_BRCM,
 	.priv_size		= sizeof(struct bcm_sf2_priv),
 	.probe			= bcm_sf2_sw_probe,
+	.remove			= bcm_sf2_sw_remove,
 	.setup			= bcm_sf2_sw_setup,
 	.set_addr		= bcm_sf2_sw_set_addr,
 	.get_phy_flags		= bcm_sf2_sw_get_phy_flags,