Skip to contentSkip to conversation

net: dsa: bcm_sf2: cleanup resources in remove callback

RFC PATCH Superseded Neil Armstrong 2 participants 2 messages Oct 27, 2015

Subsystems (4)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/3 net: dsa: bcm_sf2: cleanup resources in remove callback

Implement a remove callback allowing the switch driver to cleanup resources it used: interrupts and remapped register ranges.

---
 drivers/net/dsa/bcm_sf2.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
drivers/net/dsa/bcm_sf2.c +20 -0
index 6f946fe..e0be318 100644
@@ -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,
Signature · 1 line
1.9.1
#1 lore raw
reproduce:

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