Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'ibm-emac-cleanup-modules-to-use-devm'

Rosen Penev says:

====================
ibm: emac: cleanup modules to use devm

simplifies probe and removes remove functions. These drivers are small.
====================

Link: https://patch.msgid.link/20241030203727.6039-1-rosenp@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+69 -166
+30 -58
drivers/net/ethernet/ibm/emac/mal.c
··· 524 524 unsigned long irqflags; 525 525 irq_handler_t hdlr_serr, hdlr_txde, hdlr_rxde; 526 526 527 - mal = kzalloc(sizeof(struct mal_instance), GFP_KERNEL); 527 + mal = devm_kzalloc(&ofdev->dev, sizeof(struct mal_instance), 528 + GFP_KERNEL); 528 529 if (!mal) 529 530 return -ENOMEM; 530 531 ··· 540 539 printk(KERN_ERR 541 540 "mal%d: can't find MAL num-tx-chans property!\n", 542 541 index); 543 - err = -ENODEV; 544 - goto fail; 542 + return -ENODEV; 545 543 } 546 544 mal->num_tx_chans = prop[0]; 547 545 ··· 549 549 printk(KERN_ERR 550 550 "mal%d: can't find MAL num-rx-chans property!\n", 551 551 index); 552 - err = -ENODEV; 553 - goto fail; 552 + return -ENODEV; 554 553 } 555 554 mal->num_rx_chans = prop[0]; 556 555 ··· 557 558 if (dcr_base == 0) { 558 559 printk(KERN_ERR 559 560 "mal%d: can't find DCR resource!\n", index); 560 - err = -ENODEV; 561 - goto fail; 561 + return -ENODEV; 562 562 } 563 563 mal->dcr_host = dcr_map(ofdev->dev.of_node, dcr_base, 0x100); 564 564 if (!DCR_MAP_OK(mal->dcr_host)) { 565 565 printk(KERN_ERR 566 566 "mal%d: failed to map DCRs !\n", index); 567 - err = -ENODEV; 568 - goto fail; 567 + return -ENODEV; 569 568 } 570 569 571 570 if (of_device_is_compatible(ofdev->dev.of_node, "ibm,mcmal-405ez")) { ··· 577 580 err = -ENODEV; 578 581 goto fail_unmap; 579 582 #endif 580 - } 581 - 582 - mal->txeob_irq = irq_of_parse_and_map(ofdev->dev.of_node, 0); 583 - mal->rxeob_irq = irq_of_parse_and_map(ofdev->dev.of_node, 1); 584 - mal->serr_irq = irq_of_parse_and_map(ofdev->dev.of_node, 2); 585 - 586 - if (mal_has_feature(mal, MAL_FTR_COMMON_ERR_INT)) { 587 - mal->txde_irq = mal->rxde_irq = mal->serr_irq; 588 - } else { 589 - mal->txde_irq = irq_of_parse_and_map(ofdev->dev.of_node, 3); 590 - mal->rxde_irq = irq_of_parse_and_map(ofdev->dev.of_node, 4); 591 - } 592 - 593 - if (!mal->txeob_irq || !mal->rxeob_irq || !mal->serr_irq || 594 - !mal->txde_irq || !mal->rxde_irq) { 595 - printk(KERN_ERR 596 - "mal%d: failed to map interrupts !\n", index); 597 - err = -ENODEV; 598 - goto fail_unmap; 599 583 } 600 584 601 585 INIT_LIST_HEAD(&mal->poll_list); ··· 632 654 sizeof(struct mal_descriptor) * 633 655 mal_rx_bd_offset(mal, i)); 634 656 657 + mal->txeob_irq = platform_get_irq(ofdev, 0); 658 + mal->rxeob_irq = platform_get_irq(ofdev, 1); 659 + mal->serr_irq = platform_get_irq(ofdev, 2); 660 + 635 661 if (mal_has_feature(mal, MAL_FTR_COMMON_ERR_INT)) { 662 + mal->txde_irq = mal->rxde_irq = mal->serr_irq; 636 663 irqflags = IRQF_SHARED; 637 664 hdlr_serr = hdlr_txde = hdlr_rxde = mal_int; 638 665 } else { 666 + mal->txde_irq = platform_get_irq(ofdev, 3); 667 + mal->rxde_irq = platform_get_irq(ofdev, 4); 639 668 irqflags = 0; 640 669 hdlr_serr = mal_serr; 641 670 hdlr_txde = mal_txde; 642 671 hdlr_rxde = mal_rxde; 643 672 } 644 673 645 - err = request_irq(mal->serr_irq, hdlr_serr, irqflags, "MAL SERR", mal); 674 + err = devm_request_irq(&ofdev->dev, mal->serr_irq, hdlr_serr, irqflags, 675 + "MAL SERR", mal); 646 676 if (err) 647 677 goto fail2; 648 - err = request_irq(mal->txde_irq, hdlr_txde, irqflags, "MAL TX DE", mal); 678 + err = devm_request_irq(&ofdev->dev, mal->txde_irq, hdlr_txde, irqflags, 679 + "MAL TX DE", mal); 649 680 if (err) 650 - goto fail3; 651 - err = request_irq(mal->txeob_irq, mal_txeob, 0, "MAL TX EOB", mal); 681 + goto fail2; 682 + err = devm_request_irq(&ofdev->dev, mal->txeob_irq, mal_txeob, 0, 683 + "MAL TX EOB", mal); 652 684 if (err) 653 - goto fail4; 654 - err = request_irq(mal->rxde_irq, hdlr_rxde, irqflags, "MAL RX DE", mal); 685 + goto fail2; 686 + err = devm_request_irq(&ofdev->dev, mal->rxde_irq, hdlr_rxde, irqflags, 687 + "MAL RX DE", mal); 655 688 if (err) 656 - goto fail5; 657 - err = request_irq(mal->rxeob_irq, mal_rxeob, 0, "MAL RX EOB", mal); 689 + goto fail2; 690 + err = devm_request_irq(&ofdev->dev, mal->rxeob_irq, mal_rxeob, 0, 691 + "MAL RX EOB", mal); 658 692 if (err) 659 - goto fail6; 693 + goto fail2; 660 694 661 695 /* Enable all MAL SERR interrupt sources */ 662 696 set_mal_dcrn(mal, MAL_IER, MAL_IER_EVENTS); ··· 687 697 688 698 return 0; 689 699 690 - fail6: 691 - free_irq(mal->rxde_irq, mal); 692 - fail5: 693 - free_irq(mal->txeob_irq, mal); 694 - fail4: 695 - free_irq(mal->txde_irq, mal); 696 - fail3: 697 - free_irq(mal->serr_irq, mal); 698 700 fail2: 699 701 dma_free_coherent(&ofdev->dev, bd_size, mal->bd_virt, mal->bd_dma); 700 702 fail_dummy: 701 703 free_netdev(mal->dummy_dev); 702 704 fail_unmap: 703 705 dcr_unmap(mal->dcr_host, 0x100); 704 - fail: 705 - kfree(mal); 706 - 707 706 return err; 708 707 } 709 708 ··· 711 732 "mal%d: commac list is not empty on remove!\n", 712 733 mal->index); 713 734 714 - free_irq(mal->serr_irq, mal); 715 - free_irq(mal->txde_irq, mal); 716 - free_irq(mal->txeob_irq, mal); 717 - free_irq(mal->rxde_irq, mal); 718 - free_irq(mal->rxeob_irq, mal); 719 - 720 735 mal_reset(mal); 721 736 722 737 free_netdev(mal->dummy_dev); ··· 719 746 720 747 dma_free_coherent(&ofdev->dev, 721 748 sizeof(struct mal_descriptor) * 722 - (NUM_TX_BUFF * mal->num_tx_chans + 723 - NUM_RX_BUFF * mal->num_rx_chans), mal->bd_virt, 724 - mal->bd_dma); 725 - kfree(mal); 749 + (NUM_TX_BUFF * mal->num_tx_chans + 750 + NUM_RX_BUFF * mal->num_rx_chans), 751 + mal->bd_virt, mal->bd_dma); 726 752 } 727 753 728 754 static const struct of_device_id mal_platform_match[] =
+13 -36
drivers/net/ethernet/ibm/emac/rgmii.c
··· 216 216 217 217 static int rgmii_probe(struct platform_device *ofdev) 218 218 { 219 - struct device_node *np = ofdev->dev.of_node; 220 219 struct rgmii_instance *dev; 221 - struct resource regs; 222 - int rc; 220 + int err; 223 221 224 - rc = -ENOMEM; 225 - dev = kzalloc(sizeof(struct rgmii_instance), GFP_KERNEL); 226 - if (dev == NULL) 227 - goto err_gone; 222 + dev = devm_kzalloc(&ofdev->dev, sizeof(struct rgmii_instance), 223 + GFP_KERNEL); 224 + if (!dev) 225 + return -ENOMEM; 228 226 229 - mutex_init(&dev->lock); 227 + err = devm_mutex_init(&ofdev->dev, &dev->lock); 228 + if (err) 229 + return err; 230 + 230 231 dev->ofdev = ofdev; 231 232 232 - rc = -ENXIO; 233 - if (of_address_to_resource(np, 0, &regs)) { 234 - printk(KERN_ERR "%pOF: Can't get registers address\n", np); 235 - goto err_free; 236 - } 237 - 238 - rc = -ENOMEM; 239 - dev->base = (struct rgmii_regs __iomem *)ioremap(regs.start, 240 - sizeof(struct rgmii_regs)); 241 - if (dev->base == NULL) { 242 - printk(KERN_ERR "%pOF: Can't map device registers!\n", np); 243 - goto err_free; 233 + dev->base = devm_platform_ioremap_resource(ofdev, 0); 234 + if (IS_ERR(dev->base)) { 235 + dev_err(&ofdev->dev, "can't map device registers"); 236 + return PTR_ERR(dev->base); 244 237 } 245 238 246 239 /* Check for RGMII flags */ ··· 259 266 platform_set_drvdata(ofdev, dev); 260 267 261 268 return 0; 262 - 263 - err_free: 264 - kfree(dev); 265 - err_gone: 266 - return rc; 267 - } 268 - 269 - static void rgmii_remove(struct platform_device *ofdev) 270 - { 271 - struct rgmii_instance *dev = platform_get_drvdata(ofdev); 272 - 273 - WARN_ON(dev->users != 0); 274 - 275 - iounmap(dev->base); 276 - kfree(dev); 277 269 } 278 270 279 271 static const struct of_device_id rgmii_match[] = ··· 278 300 .of_match_table = rgmii_match, 279 301 }, 280 302 .probe = rgmii_probe, 281 - .remove = rgmii_remove, 282 303 }; 283 304 284 305 int __init rgmii_init(void)
+13 -36
drivers/net/ethernet/ibm/emac/tah.c
··· 87 87 88 88 static int tah_probe(struct platform_device *ofdev) 89 89 { 90 - struct device_node *np = ofdev->dev.of_node; 91 90 struct tah_instance *dev; 92 - struct resource regs; 93 - int rc; 91 + int err; 94 92 95 - rc = -ENOMEM; 96 - dev = kzalloc(sizeof(struct tah_instance), GFP_KERNEL); 97 - if (dev == NULL) 98 - goto err_gone; 93 + dev = devm_kzalloc(&ofdev->dev, sizeof(struct tah_instance), 94 + GFP_KERNEL); 95 + if (!dev) 96 + return -ENOMEM; 99 97 100 - mutex_init(&dev->lock); 98 + err = devm_mutex_init(&ofdev->dev, &dev->lock); 99 + if (err) 100 + return err; 101 + 101 102 dev->ofdev = ofdev; 102 103 103 - rc = -ENXIO; 104 - if (of_address_to_resource(np, 0, &regs)) { 105 - printk(KERN_ERR "%pOF: Can't get registers address\n", np); 106 - goto err_free; 107 - } 108 - 109 - rc = -ENOMEM; 110 - dev->base = (struct tah_regs __iomem *)ioremap(regs.start, 111 - sizeof(struct tah_regs)); 112 - if (dev->base == NULL) { 113 - printk(KERN_ERR "%pOF: Can't map device registers!\n", np); 114 - goto err_free; 104 + dev->base = devm_platform_ioremap_resource(ofdev, 0); 105 + if (IS_ERR(dev->base)) { 106 + dev_err(&ofdev->dev, "can't map device registers"); 107 + return PTR_ERR(dev->base); 115 108 } 116 109 117 110 platform_set_drvdata(ofdev, dev); ··· 116 123 wmb(); 117 124 118 125 return 0; 119 - 120 - err_free: 121 - kfree(dev); 122 - err_gone: 123 - return rc; 124 - } 125 - 126 - static void tah_remove(struct platform_device *ofdev) 127 - { 128 - struct tah_instance *dev = platform_get_drvdata(ofdev); 129 - 130 - WARN_ON(dev->users != 0); 131 - 132 - iounmap(dev->base); 133 - kfree(dev); 134 126 } 135 127 136 128 static const struct of_device_id tah_match[] = ··· 136 158 .of_match_table = tah_match, 137 159 }, 138 160 .probe = tah_probe, 139 - .remove = tah_remove, 140 161 }; 141 162 142 163 int __init tah_init(void)
+13 -36
drivers/net/ethernet/ibm/emac/zmii.c
··· 232 232 233 233 static int zmii_probe(struct platform_device *ofdev) 234 234 { 235 - struct device_node *np = ofdev->dev.of_node; 236 235 struct zmii_instance *dev; 237 - struct resource regs; 238 - int rc; 236 + int err; 239 237 240 - rc = -ENOMEM; 241 - dev = kzalloc(sizeof(struct zmii_instance), GFP_KERNEL); 242 - if (dev == NULL) 243 - goto err_gone; 238 + dev = devm_kzalloc(&ofdev->dev, sizeof(struct zmii_instance), 239 + GFP_KERNEL); 240 + if (!dev) 241 + return -ENOMEM; 244 242 245 - mutex_init(&dev->lock); 243 + err = devm_mutex_init(&ofdev->dev, &dev->lock); 244 + if (err) 245 + return err; 246 + 246 247 dev->ofdev = ofdev; 247 248 dev->mode = PHY_INTERFACE_MODE_NA; 248 249 249 - rc = -ENXIO; 250 - if (of_address_to_resource(np, 0, &regs)) { 251 - printk(KERN_ERR "%pOF: Can't get registers address\n", np); 252 - goto err_free; 253 - } 254 - 255 - rc = -ENOMEM; 256 - dev->base = (struct zmii_regs __iomem *)ioremap(regs.start, 257 - sizeof(struct zmii_regs)); 258 - if (dev->base == NULL) { 259 - printk(KERN_ERR "%pOF: Can't map device registers!\n", np); 260 - goto err_free; 250 + dev->base = devm_platform_ioremap_resource(ofdev, 0); 251 + if (IS_ERR(dev->base)) { 252 + dev_err(&ofdev->dev, "can't map device registers"); 253 + return PTR_ERR(dev->base); 261 254 } 262 255 263 256 /* We may need FER value for autodetection later */ ··· 264 271 platform_set_drvdata(ofdev, dev); 265 272 266 273 return 0; 267 - 268 - err_free: 269 - kfree(dev); 270 - err_gone: 271 - return rc; 272 - } 273 - 274 - static void zmii_remove(struct platform_device *ofdev) 275 - { 276 - struct zmii_instance *dev = platform_get_drvdata(ofdev); 277 - 278 - WARN_ON(dev->users != 0); 279 - 280 - iounmap(dev->base); 281 - kfree(dev); 282 274 } 283 275 284 276 static const struct of_device_id zmii_match[] = ··· 284 306 .of_match_table = zmii_match, 285 307 }, 286 308 .probe = zmii_probe, 287 - .remove = zmii_remove, 288 309 }; 289 310 290 311 int __init zmii_init(void)