Skip to content

Commit 5478998

Browse files
himangi774davem330
authored andcommitted
net: ks8851-ml: Use devm_ioremap_resource
This patch introduces the use of devm_ioremap_resource, devm_kmalloc and does away with the functions to free the allocated memory in the probe and remove functions. Also, some labels are done away with. A bug is fixed as two regions are allocated in the probe function, but only one is freed in the remove function. Signed-off-by: Himangi Saraogi <himangi774@gmail.com> Acked-by: Julia Lawall <julia.lawall@lip6.fr> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 6751ede commit 5478998

File tree

1 file changed

+21
-38
lines changed

1 file changed

+21
-38
lines changed

drivers/net/ethernet/micrel/ks8851_mll.c

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,7 +1519,8 @@ static int ks_hw_init(struct ks_net *ks)
15191519
ks->all_mcast = 0;
15201520
ks->mcast_lst_size = 0;
15211521

1522-
ks->frame_head_info = kmalloc(MHEADER_SIZE, GFP_KERNEL);
1522+
ks->frame_head_info = devm_kmalloc(&ks->pdev->dev, MHEADER_SIZE,
1523+
GFP_KERNEL);
15231524
if (!ks->frame_head_info)
15241525
return false;
15251526

@@ -1537,44 +1538,41 @@ MODULE_DEVICE_TABLE(of, ks8851_ml_dt_ids);
15371538

15381539
static int ks8851_probe(struct platform_device *pdev)
15391540
{
1540-
int err = -ENOMEM;
1541+
int err;
15411542
struct resource *io_d, *io_c;
15421543
struct net_device *netdev;
15431544
struct ks_net *ks;
15441545
u16 id, data;
15451546
const char *mac;
15461547

1547-
io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1548-
io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1549-
1550-
if (!request_mem_region(io_d->start, resource_size(io_d), DRV_NAME))
1551-
goto err_mem_region;
1552-
1553-
if (!request_mem_region(io_c->start, resource_size(io_c), DRV_NAME))
1554-
goto err_mem_region1;
1555-
15561548
netdev = alloc_etherdev(sizeof(struct ks_net));
15571549
if (!netdev)
1558-
goto err_alloc_etherdev;
1550+
return -ENOMEM;
15591551

15601552
SET_NETDEV_DEV(netdev, &pdev->dev);
15611553

15621554
ks = netdev_priv(netdev);
15631555
ks->netdev = netdev;
1564-
ks->hw_addr = ioremap(io_d->start, resource_size(io_d));
15651556

1566-
if (!ks->hw_addr)
1567-
goto err_ioremap;
1557+
io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1558+
ks->hw_addr = devm_ioremap_resource(&pdev->dev, io_d);
1559+
if (IS_ERR(ks->hw_addr)) {
1560+
err = PTR_ERR(ks->hw_addr);
1561+
goto err_free;
1562+
}
15681563

1569-
ks->hw_addr_cmd = ioremap(io_c->start, resource_size(io_c));
1570-
if (!ks->hw_addr_cmd)
1571-
goto err_ioremap1;
1564+
io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1565+
ks->hw_addr_cmd = devm_ioremap_resource(&pdev->dev, io_c);
1566+
if (IS_ERR(ks->hw_addr_cmd)) {
1567+
err = PTR_ERR(ks->hw_addr_cmd);
1568+
goto err_free;
1569+
}
15721570

15731571
netdev->irq = platform_get_irq(pdev, 0);
15741572

15751573
if ((int)netdev->irq < 0) {
15761574
err = netdev->irq;
1577-
goto err_get_irq;
1575+
goto err_free;
15781576
}
15791577

15801578
ks->pdev = pdev;
@@ -1604,18 +1602,18 @@ static int ks8851_probe(struct platform_device *pdev)
16041602
if ((ks_rdreg16(ks, KS_CIDER) & ~CIDER_REV_MASK) != CIDER_ID) {
16051603
netdev_err(netdev, "failed to read device ID\n");
16061604
err = -ENODEV;
1607-
goto err_register;
1605+
goto err_free;
16081606
}
16091607

16101608
if (ks_read_selftest(ks)) {
16111609
netdev_err(netdev, "failed to read device ID\n");
16121610
err = -ENODEV;
1613-
goto err_register;
1611+
goto err_free;
16141612
}
16151613

16161614
err = register_netdev(netdev);
16171615
if (err)
1618-
goto err_register;
1616+
goto err_free;
16191617

16201618
platform_set_drvdata(pdev, netdev);
16211619

@@ -1663,32 +1661,17 @@ static int ks8851_probe(struct platform_device *pdev)
16631661

16641662
err_pdata:
16651663
unregister_netdev(netdev);
1666-
err_register:
1667-
err_get_irq:
1668-
iounmap(ks->hw_addr_cmd);
1669-
err_ioremap1:
1670-
iounmap(ks->hw_addr);
1671-
err_ioremap:
1664+
err_free:
16721665
free_netdev(netdev);
1673-
err_alloc_etherdev:
1674-
release_mem_region(io_c->start, resource_size(io_c));
1675-
err_mem_region1:
1676-
release_mem_region(io_d->start, resource_size(io_d));
1677-
err_mem_region:
16781666
return err;
16791667
}
16801668

16811669
static int ks8851_remove(struct platform_device *pdev)
16821670
{
16831671
struct net_device *netdev = platform_get_drvdata(pdev);
1684-
struct ks_net *ks = netdev_priv(netdev);
1685-
struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
16861672

1687-
kfree(ks->frame_head_info);
16881673
unregister_netdev(netdev);
1689-
iounmap(ks->hw_addr);
16901674
free_netdev(netdev);
1691-
release_mem_region(iomem->start, resource_size(iomem));
16921675
return 0;
16931676

16941677
}

0 commit comments

Comments
 (0)